A self-hosted worldbuilding platform for tabletop RPG campaigns.
Chronicle gives game masters and players a shared space to build worlds, track lore, and run campaigns — all on your own server, with no paywall, no forced public content, and full control over your data.
Calendar is being rebuilt. Chronicle's calendar and real-time date sync are offline for a ground-up rewrite (#741) and unavailable in this version. Timeline still works for calendar-free (standalone) events.
Chronicle is purpose-built for tabletop RPGs, open source, and designed to be self-hosted from day one. No paywalls, no forced public content, no vendor lock-in — your world, your server, your data.
DB_TLS_MODE)Screenshots coming soon — see the feature list above for what Chronicle offers today.
For production deployment, backups, upgrades, and rollback procedures, see
docs/deployment.md.
# Clone the repository
git clone https://github.com/keyxmakerx/chronicle.git
cd chronicle
# Set required secrets
export SECRET_KEY=$(openssl rand -base64 32)
export DB_PASSWORD=your-secure-password
export MYSQL_ROOT_PASSWORD=your-root-password
# Start the full stack
docker compose up -d
# Chronicle is now running at http://localhost:8080
# The first user to register becomes the site admin.
Prerequisites: Go 1.27+, Node.js (for Tailwind), MariaDB 10.11+, Redis 7+
# Clone and setup
git clone https://github.com/keyxmakerx/chronicle.git
cd chronicle
cp .env.example .env # Edit with your database credentials
# Start dependencies
make docker-up # MariaDB + Redis via Docker
# Generate templates and CSS
make generate # Runs templ generate + tailwindcss
# Run the server
make dev # Hot reload with air
# or
make run # Direct run
Database migrations run automatically on startup. The first user to register becomes the site admin.
make help # Show all available commands
make dev # Start dev server with hot reload (air)
make build # Production binary build
make test # Run all tests
make test-unit # Unit tests only
make lint # Run golangci-lint
make generate # Regenerate Templ + Tailwind
make docker-up # Start MariaDB + Redis
make docker-down # Stop containers
cmd/server/ # Application entrypoint
internal/
plugins/ # Feature apps (auth, campaigns, entities, calendar, ...)
systems/ # Game system content packs (installed via package manager)
widgets/ # Reusable UI components (editor, tags, relations, notes, ...)
templates/ # Templ layouts and shared components
middleware/ # HTTP middleware (auth, CSRF, logging, recovery)
apperror/ # Domain error types
config/ # Environment configuration
database/ # Database connection and helpers
static/
js/ # Client-side JavaScript (boot.js, widgets, search, shortcuts)
css/ # Tailwind input + compiled output
img/ # Static assets
db/migrations/ # Sequential SQL migration files
Chronicle uses a three-tier extension architecture:
| Tier | Purpose | Example |
|---|---|---|
| Plugin | Feature app with handler/service/repo/templates | auth, campaigns, entities, calendar, maps |
| System | Game system content pack (installed via package manager) | drawsteel, dnd5e, pathfinder2e |
| Widget | Reusable UI component (self-contained JS + API) | editor, tags, relations, notes |
Request flow: Router → Middleware → Handler → Service → Repository → MariaDB
See .ai/architecture.md for the full architecture document.
| Layer | Technology |
|---|---|
| Backend | Go 1.27, Echo v4 |
| Templates | Templ (type-safe Go templates) |
| Frontend | HTMX, Alpine.js |
| Editor | TipTap (ProseMirror-based) |
| CSS | Tailwind CSS |
| Timeline | D3.js |
| Maps | Leaflet.js |
| Database | MariaDB 10.11 |
| Cache/Sessions | Redis 7 |
| Deployment | Docker, multi-stage builds |
Chronicle was developed with reference to several existing worldbuilding and note-taking platforms in the TTRPG space. We're grateful to the broader community for establishing patterns and conventions that inform what users expect from tools like these.
Notable platforms we studied during development include World Anvil, Kanka, LegendKeeper, and Obsidian. All design and code in Chronicle is original work.
Chronicle is in active early development (pre-alpha). Contribution guidelines will be established as the project matures. In the meantime, feel free to open issues for bug reports or feature suggestions.
This project is licensed under the GNU Affero General Public License v3.0.
Go
67.9%
JavaScript
18.8%
templ
9.7%
CSS
2.5%
A self-hosted worldbuilding platform for tabletop RPG campaigns.
Chronicle gives game masters and players a shared space to build worlds, track lore, and run campaigns — all on your own server, with no paywall, no forced public content, and full control over your data.
Calendar is being rebuilt. Chronicle's calendar and real-time date sync are offline for a ground-up rewrite (#741) and unavailable in this version. Timeline still works for calendar-free (standalone) events.
Chronicle is purpose-built for tabletop RPGs, open source, and designed to be self-hosted from day one. No paywalls, no forced public content, no vendor lock-in — your world, your server, your data.
DB_TLS_MODE)Screenshots coming soon — see the feature list above for what Chronicle offers today.
For production deployment, backups, upgrades, and rollback procedures, see
docs/deployment.md.
# Clone the repository
git clone https://github.com/keyxmakerx/chronicle.git
cd chronicle
# Set required secrets
export SECRET_KEY=$(openssl rand -base64 32)
export DB_PASSWORD=your-secure-password
export MYSQL_ROOT_PASSWORD=your-root-password
# Start the full stack
docker compose up -d
# Chronicle is now running at http://localhost:8080
# The first user to register becomes the site admin.
Prerequisites: Go 1.27+, Node.js (for Tailwind), MariaDB 10.11+, Redis 7+
# Clone and setup
git clone https://github.com/keyxmakerx/chronicle.git
cd chronicle
cp .env.example .env # Edit with your database credentials
# Start dependencies
make docker-up # MariaDB + Redis via Docker
# Generate templates and CSS
make generate # Runs templ generate + tailwindcss
# Run the server
make dev # Hot reload with air
# or
make run # Direct run
Database migrations run automatically on startup. The first user to register becomes the site admin.
make help # Show all available commands
make dev # Start dev server with hot reload (air)
make build # Production binary build
make test # Run all tests
make test-unit # Unit tests only
make lint # Run golangci-lint
make generate # Regenerate Templ + Tailwind
make docker-up # Start MariaDB + Redis
make docker-down # Stop containers
cmd/server/ # Application entrypoint
internal/
plugins/ # Feature apps (auth, campaigns, entities, calendar, ...)
systems/ # Game system content packs (installed via package manager)
widgets/ # Reusable UI components (editor, tags, relations, notes, ...)
templates/ # Templ layouts and shared components
middleware/ # HTTP middleware (auth, CSRF, logging, recovery)
apperror/ # Domain error types
config/ # Environment configuration
database/ # Database connection and helpers
static/
js/ # Client-side JavaScript (boot.js, widgets, search, shortcuts)
css/ # Tailwind input + compiled output
img/ # Static assets
db/migrations/ # Sequential SQL migration files
Chronicle uses a three-tier extension architecture:
| Tier | Purpose | Example |
|---|---|---|
| Plugin | Feature app with handler/service/repo/templates | auth, campaigns, entities, calendar, maps |
| System | Game system content pack (installed via package manager) | drawsteel, dnd5e, pathfinder2e |
| Widget | Reusable UI component (self-contained JS + API) | editor, tags, relations, notes |
Request flow: Router → Middleware → Handler → Service → Repository → MariaDB
See .ai/architecture.md for the full architecture document.
| Layer | Technology |
|---|---|
| Backend | Go 1.27, Echo v4 |
| Templates | Templ (type-safe Go templates) |
| Frontend | HTMX, Alpine.js |
| Editor | TipTap (ProseMirror-based) |
| CSS | Tailwind CSS |
| Timeline | D3.js |
| Maps | Leaflet.js |
| Database | MariaDB 10.11 |
| Cache/Sessions | Redis 7 |
| Deployment | Docker, multi-stage builds |
Chronicle was developed with reference to several existing worldbuilding and note-taking platforms in the TTRPG space. We're grateful to the broader community for establishing patterns and conventions that inform what users expect from tools like these.
Notable platforms we studied during development include World Anvil, Kanka, LegendKeeper, and Obsidian. All design and code in Chronicle is original work.
Chronicle is in active early development (pre-alpha). Contribution guidelines will be established as the project matures. In the meantime, feel free to open issues for bug reports or feature suggestions.
This project is licensed under the GNU Affero General Public License v3.0.
Go
67.9%
JavaScript
18.8%
templ
9.7%
CSS
2.5%