# SessionZero A free and open‑source, system‑agnostic TTRPG companion app. SessionZero helps you create, manage, and share tabletop content using an extensible JSON datapack format. It supports fully offline use, and is designed to be self‑hostable with future federation capabilities. ## At a glance - Cross‑platform desktop client (Avalonia, .NET 9) - Lightweight ASP.NET server for shared play and sync - JSON datapacks for datasets, character templates, and session templates - Offline‑first; self‑hostable; roadmap includes federation and mobile For a deep dive into goals, architecture, and data formats, see docs/design-doc.md. ## Repository layout - SessionZero.sln – Solution file - docs/ - design-doc.md – Full design overview and datapack specification - rambling.md – Notes and ideas - src/ - SessionZero.Client/ – Avalonia desktop application - SessionZero.Server/ – ASP.NET Core server (minimal API) - SessionZero.Shared/ – Shared models and schema abstractions used by both client and server - samples/ – Placeholder for sample datapacks (.szp) and source folders - tools/ – Project tooling stubs - license.txt – AGPL‑3.0 license text ## Technology stack - Language/Runtime: C# on .NET 9.0 - UI: Avalonia (cross‑platform desktop) - Web/Server: ASP.NET Core minimal API, WebSockets planned for real‑time - Data: JSON datapacks for content; PostgreSQL planned for shared online content ## Core concepts (from the design) - Datapack: Top‑level container (.szp) bundling datasets, templates, and media - Dataset: Structured records (e.g., items, NPCs). See src/SessionZero.Shared/Models/Dataset.cs - Template: Reusable structures for characters or sessions - CharacterTemplate: src/SessionZero.Shared/Models/CharacterTemplate.cs - SessionTemplate: src/SessionZero.Shared/Models/SessionTemplate.cs - Schema: Versioned JSON schema ideas captured in docs and src/SessionZero.Shared/Schema/Schema.cs Read the full specification and examples (including JSON snippets) in docs/design-doc.md, Section 5. ## Datapack basics A datapack directory typically looks like this: ```text pack-name/ ├── szpack.json # Pack metadata and manifest ├── media/ │ └── images/ # Image assets (referenced by objects) └── objects/ ├── datasets/ # User-defined structured data (e.g. items, NPCs) ├── character-templates/ # Templates defining character structures └── session-templates/ # Templates defining session/campaign structures ``` Examples of szpack.json, datasets, character templates, and session templates are provided in docs/design-doc.md (sections 5.2–5.7). The shared C# models in src/SessionZero.Shared mirror these structures. ## Getting started ### Prerequisites - .NET SDK 9.0 or later - A desktop OS supported by Avalonia (Windows, Linux). Mac may work but is not yet a target. ### Build the solution From the repository root: ```bash dotnet build SessionZero.sln ``` ### Run the desktop client ```bash dotnet run --project src/SessionZero.Client ``` This launches the Avalonia app. ### Run the server (optional for local/offline; required for shared play) ```bash dotnet run --project src/SessionZero.Server ``` The server uses ASP.NET Core default settings and appsettings files under src/SessionZero.Server. Future iterations will add persistence and WebSocket real‑time updates. ## Using datapacks - Place or import datapacks (.szp) through the client (UI flows under active development). - For development and testing, keep source folders that match the structure above, then pack/export to .szp. - Sample content: see samples/ (placeholder today). The design document shows complete JSON examples you can adapt. ## Roadmap (high level) - Phase 1: Core Platform (client UI, server scaffolding, datapack format) - Phase 2: Federation (cross‑server discovery and sharing) - Phase 3: Mobile and Plugins (broader platform support and extensibility) Details for each phase are in docs/design-doc.md, Section 9. ## Contributing Contributions are welcome! Suggested ways to help: - Try building/running the client and server; report issues and UX rough edges. - Create example datapacks that exercise datasets and templates. - Discuss schemas and validation approaches (see docs/design-doc.md, Section 5.8). Before submitting a PR, please ensure the solution builds with .NET 9.0. Tests and CI will be added as the project matures. ## License Source code is licensed under the GNU Affero General Public License v3.0 (AGPL‑3.0). See license.txt. User‑generated content is intended to be shareable under Creative Commons BY‑SA 4.0; see docs/design-doc.md, Section 8.2, for the rationale.