Reverting datapacks stuff again, I am feeling like my original plan for a small dsl-like format was the correct way to go, but combining that with the datapack archive structure for embedded images and other resources. |
||
|---|---|---|
| sessionzero-client | ||
| .gitignore | ||
| license.txt | ||
| readme.md | ||
| sessionzero-design-doc-wip.md | ||
SessionZero Client
A free and open-source TTRPG companion app for managing tabletop role-playing games with complete flexibility and control over your data.
About
SessionZero is a cross-platform desktop application built with Godot that helps players and GMs organize their TTRPG sessions. It's designed to be system-agnostic, supporting any tabletop RPG through a modular datapack format.
Key Features
- System-Agnostic: Works with any TTRPG system through extensible JSON datapacks
- Full Offline Support: Play completely offline with local data storage
- Self-Hosted Multiplayer: Host sessions directly from your machine with P2P networking
- Decentralized Identity: No accounts required - your identity is a cryptographic key pair you control
- Flexible Networking: Choose between assisted connection (via optional signaling server) or direct IP connection
- Open Content Format: Import and create datapacks for characters, campaigns, items, and more
Getting Started
Prerequisites
- Godot 4.5.x (for development)
- Windows or Linux (macOS support planned)
Installation
From Release:
- Download the latest release for your platform
- Extract and run the executable
From Source:
- Clone this repository
- Open the project in Godot 4.5.x
- Run the project or export for your platform
How It Works
Datapacks
Content is organized into datapacks (.szp files) - portable archives containing:
- Character templates and sheets
- Campaign/session templates
- Datasets (items, NPCs, spells, etc.)
- Associated media assets
Hosting Sessions
SessionZero uses a Host Authority model where the GM's client acts as the server:
- GM starts a session using a session template
- GM chooses a connection method:
- Generate a Session Key for easy joining (requires signaling server)
- Share their IP/domain for direct connection
- Players join using the Session Key or IP address
- All session data is stored locally on the GM's machine
Player Identity
Instead of traditional accounts, SessionZero uses cryptographic key pairs:
- Your Private Key (Secret Token) stays on your device and signs all actions
- Your Public Key (Client ID) identifies you to session hosts
- Transfer your identity by copying your Private Key to another device
Development Roadmap
Phase 1: Core Platform (Current)
- Local session management
- Direct P2P networking
- Datapack system implementation
- Character and campaign management
Phase 2: Advanced Networking
- Minimal Signaling Server integration
- UDP hole punching with automatic fallbacks
- SessionZeroDB content discovery
Phase 3: Mobile & Extensions
- Web (WASM) application
- Mobile applications
- Plugin system and API extensions
Contributing
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
Related Projects
- SessionZero MSS: Minimal Signaling Server for assisted P2P connections (separate repository)
- SessionZeroDB: Federated content indexing service (planned)
License
- Source Code: AGPL-3.0 (Affero General Public License)
- User Content: Creative Commons BY-SA 4.0
Support
For issues, feature requests, or questions:
- Open an issue on GitHub
- Visit the website SessionZero.app
- Check the full design document Here
- Join the community on Discord
Note: SessionZero is in active development. Features and APIs may change as the project evolves.