Official self-hosted server for Chronexus, providing secure campaign sharing, selective synchronization, user management, and cross-device access
Find a file
Joël Jon Moix 09dfc99f64
Some checks failed
Server CI / check (push) Has been cancelled
Server CI / audit (push) Has been cancelled
docs(status): CI image, GitHub mirror and the VTT plan
Records the CI image in the registry, the releases mirrored to GitHub and the planned M42–M47 server work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:11:46 +01:00
.forgejo/workflows ci: Forgejo workflow for the server checks (M30) 2026-10-27 11:58:56 +01:00
.github/workflows feat(ops): add S7 security tests, verified backups, restore and upgrade recovery 2026-10-26 19:23:41 +01:00
api chore(release): prepare Chronexus Server 0.1.1 2026-10-27 11:48:29 +01:00
assets/brand docs(readme): align server presentation with Chronexus 2026-10-26 13:20:17 +01:00
deploy feat(deploy): license under Apache-2.0 and make deployment environment-driven 2026-10-26 19:29:08 +01:00
docs docs(status): CI image, GitHub mirror and the VTT plan 2026-10-27 14:11:46 +01:00
migrations feat(lifecycle): add S6 deletion, erasure and recovery boundaries 2026-10-26 18:26:37 +01:00
scripts build(release): push OCI image archives to the Forgejo registry in chunks 2026-10-27 13:44:50 +01:00
src fix(backup): never share the reference file between concurrent verifications 2026-10-27 11:48:19 +01:00
tests docs(roadmap): number server milestones M25.0–M25.11 instead of S0–S11 2026-10-27 09:49:43 +01:00
.dockerignore feat(auth): implement persistent server accounts and sessions 2026-10-26 14:06:26 +01:00
.env.example chore(release): prepare Chronexus Server 0.1.1 2026-10-27 11:48:29 +01:00
.gitignore feat(auth): implement persistent server accounts and sessions 2026-10-26 14:06:26 +01:00
AGENTS.md docs(roadmap): number server milestones M25.0–M25.11 instead of S0–S11 2026-10-27 09:49:43 +01:00
Cargo.lock chore(release): prepare Chronexus Server 0.1.1 2026-10-27 11:48:29 +01:00
Cargo.toml chore(release): prepare Chronexus Server 0.1.1 2026-10-27 11:48:29 +01:00
compose.yaml fix(compose): keep dynamic addresses off the proxy's fixed IP 2026-10-27 10:25:43 +01:00
Dockerfile feat(auth): implement persistent server accounts and sessions 2026-10-26 14:06:26 +01:00
LICENSE feat(deploy): license under Apache-2.0 and make deployment environment-driven 2026-10-26 19:29:08 +01:00
README.md docs: server 0.1.1 is published with registry images 2026-10-27 13:46:46 +01:00
ROADMAP.md docs(roadmap): plan the Chronexus Table server work (application M42–M47) 2026-10-27 13:49:29 +01:00

Chronexus

Chronexus Server

Your campaign, on your device and your server. Connected on your terms.

Keep a local and private online copy of your campaign, choose what other players can see, and decide whether AI runs on your computer or your own server.

Status Deployment Hosting

Chronexus · Features and roadmap · Wiki · Roadmap · Status

Note

Release 0.1.1 is published, with container images for Linux amd64 and arm64 in the Forgejo registry (git.moix.me/acelith/chronexus-server:0.1.1). Accounts, membership, selective sharing, continuous synchronization, deletion and recovery are implemented (M25.1–M25.7); server AI and web management remain planned. See the wiki.

What is Chronexus Server

Chronexus Server is the self-hosted companion under development for Chronexus, the offline-first desktop journal and campaign manager for tabletop RPG players. It adds optional accounts, continuous campaign synchronization and selective sharing on infrastructure you control. The original desktop app remains usable without a server or account.

The projects have separate repositories and releases: this repository owns the server and its versioned API; the original Chronexus repository owns the desktop app and planned Android client. Synchronization belongs to the M24 client contract; the server is application M25 and Android follows in M27.

Why Chronexus Server

The delivery goal:

  • Two durable copies. Once you enable campaign synchronization, edits save locally and automatically reach your server while connected. Offline changes wait safely and resume synchronization when the connection returns.
  • Private before shared. Your online copy belongs to your account. Choose individual content or sheet sections to share with campaign members.
  • Your resources, your choice. Keep AI on your device or explicitly use the CPU/GPU resources of your self-hosted server.
  • The player's point of view. Shared claims retain their author, source and certainty. Mentions do not become factual relationships or reveal GM secrets.
  • Simple to operate. A Docker Compose setup with safe defaults, configurable ports and only essential security settings required from the operator.

Features and roadmap

Feature In short Milestone Status
Accounts and devices Authentication, revocable sessions and account recovery under the selected registration policy M25.2 Implemented
Campaign membership Invitations, owner/player/read-only roles and authorization on every item M25.3 Implemented
Selective sharing Private owner copies, explicit member access, selected sheet sections and managed images M25.4 Server implemented; client extensions pending
Continuous saving Local autosave, automatic online replication, durable pending changes and visible save status M25.5 Implemented (server and desktop client); Windows tested
Conflict handling Both versions remain visible when concurrent edits need your decision M25.5 Implemented (server and desktop client); Windows tested
Revocation Remove member access and clear shared copies on their next synchronization M25.6 Implemented (server and desktop client); Windows tested
Backup and recovery Consistent server backups, integrity checks and documented restoration M25.7 Planned
Desktop integration Tested synchronization with the original Chronexus app M25.8 Planned
Android access Same account and shared content, with read-only access first M25.9 / app M27 Planned
Local or server AI Explicit execution choice, scoped sources and citations, bounded server resource use M25.10 Planned
Web management Authenticated campaign, membership, storage and service management M25.11 Planned

Deployment and configuration

The source build uses Docker Compose, persistent volumes and a Rust service. Copy .env.example to .env, set the public HTTPS origin and configure your host reverse proxy, then run:

docker compose up -d --build
docker compose exec -T server chronexus-server invite

The second command prints a private, one-use registration invitation. See the installation guide for the complete proxy setup, optional ports, account policy and recovery. This build supports accounts, campaign roles, explicit sharing and managed image APIs.

  • Host bind address, published port and internal API port are configurable.
  • The API uses one HTTPS origin; future web management will use the same origin. Only the application port is published.
  • Public access requires a valid HTTPS origin and explicitly trusted TLS proxy. Credentials are generated securely; no default password.
  • AI/GPU services remain M25.10 work; no model is downloaded or runtime started.
  • Images git.moix.me/acelith/chronexus-server:0.1.1 (and :latest) for linux/amd64 and linux/arm64 are in the Forgejo registry; set CHRONEXUS_IMAGE and run docker compose pull. Tests pass on macOS and Linux amd64; a public deployment with real DNS/TLS is still unverified.

Confirmed protocol decisions and remaining hosting work are tracked in roadmap M25.0 and docs/DECISIONS.md.

Synchronization and backups

M25.4 implements explicit per-item sharing and private-content APIs. The original app can share pages, sessions, relationships and party members; new image/selected-sheet selection UI and continuous local/server saving remain M25.5/M25.8 client work.

For an activated campaign, every autosave will persist locally before its change is sent to the server. The interface will distinguish local success from confirmed online success, offline pending changes, failures and conflicts. A server outage must not stop local writing or discard pending edits.

The two synchronized copies do not replace independent backups: deletions can propagate. Server recovery and the desktop's existing .nodex backups have separate roles. Sharing revocation will remove access immediately on the server and reach offline recipients when they reconnect; it cannot erase exported copies.

Local or server assistant

Planned in M25.10.

AI will remain optional, with an explicit per-campaign choice of disabled, local device or the selected self-hosted server. Server mode will use your server's runtime and resources through an authenticated connection, with authorized campaign context and source citations. Local mode keeps its loopback-only adapter.

No third-party cloud AI, automatic provider switch or implicit training is planned. Server AI needs access to the submitted prompt and approved context; the encryption policy must make that disclosure explicit. Runtime installation, model download and campaign AI activation will remain separate actions. See roadmap M25.10.

Privacy and data

  • Synchronization is optional; unselected campaigns stay on the device.
  • A private server copy does not make a campaign visible to other players.
  • Campaign notes and images are data, never instructions to execute.
  • No telemetry, campaign content in logs or automatic upload of local AI weights, training datasets, adapters or complete desktop backups.
  • Authentication, session isolation, HTTPS proxy checks and bounded auth resources are implemented. Campaign and per-item permissions are enforced. V1 uses server-readable storage without end-to-end encryption, as confirmed for the application.

Roadmap

ROADMAP.md defines M25.0–M25.11, dependencies and acceptance criteria. docs/STATUS.md records what exists, checks actually performed and the next step: M25.8 desktop integration acceptance and the first release (M25.7 is implemented on Windows). Production hosting and full campaign acceptance remain open.

Development and contributing

The wiki has an operator guide (installation, accounts, roles, sharing, backups, security, CLI) and a developer section; its sources are in docs/wiki.

The stack is Rust with axum, SQLite WAL and Docker Compose. The implemented OpenAPI contract and TypeScript schemas are generated from Rust; the full campaign contract is still pending.

See development and checks, API compatibility, dependency licenses and project rules. Formatting, Clippy, Rust tests, release build, contract generation and the original desktop sharing HTTP client are checked locally. The Linux arm64 Compose test also verifies private/shared content and unchanged images after container recreation.

Report ideas and issues in Chronexus Server; report desktop issues in Chronexus.

  • Chronexus: original desktop application, campaign model, player knowledge principles and project identity.
  • Chronexus roadmap: application milestones, including M24 client, M25 server and M27 Android.
  • Logo and herald artwork: original Chronexus project assets, copied unchanged; see asset provenance.
  • Chronexus and this server are licensed under the Apache License 2.0 (LICENSE), the same license as the desktop application.

People, places, ideas. Everything is connected.