This monorepo contains the complete Podnet ecosystem, including a desktop client application, publishing platform, and servers.
This monorepo is organized into several key components:
core/ # Shared libraries across all projects
├── models/ # POD data models & verification predicates
├── utils/ # Common utility functions
└── solver/ # Datalog query engine for POD requests
podnet/ # PodNet publishing platform
├── server/ # Content server (default port: 3000)
├── cli/ # Command-line publishing client
└── identity-strawman/ # Identity verification service (default port: 3001)
apps/client/ # Primary POD2 desktop application
├── src-tauri/ # Rust backend (Tauri)
└── src/ # React frontend
pod2-client/ # POD2 client tools
└── db/ # Client-specific database layer
packages/ # JavaScript/TypeScript ecosystem
└── pod2-node/ # Node.js native packages
docs/ # Documentation
├── API_DOCUMENTATION.md # PodNet API reference
└── DEPLOYMENT.md # Production deployment guide
- Core Libraries: Shared Rust libraries including the Datalog solver engine, POD data models, and common utilities
- Podnet Platform: Cryptographically-secured content publishing platform with server, CLI, and identity services
- Desktop Client: Tauri-based desktop application for managing personal POD collections and P2P communication
- Web Packages: TypeScript/JavaScript packages for web integration
- Rust and Cargo (latest stable version)
- Node.js (v18 or later)
- pnpm (for JavaScript/TypeScript package management)
- just (command runner - install with
cargo install just
)
-
Clone and setup:
git clone <repository-url> cd client-pod2 pnpm install
-
Start development (recommended):
just client-dev
This runs the desktop client with staging servers and a local database.
-
For full local development:
just dev-local
This starts local servers and the desktop client.
The repository uses just as a command runner. All available commands are defined in the justfile
.
Command | Description |
---|---|
just client-dev |
Main development command - runs client with staging servers (recommended) |
just dev-local |
Full local development environment (client + local servers) |
just dev-all |
All services using mprocs (requires pnpm install -g mprocs ) |
Command | Description |
---|---|
just client-dev |
Client with staging servers, release build (default) |
just client-dev-debug |
Client with debug build (slower, better for debugging) |
just client-dev-local |
Client with local servers (requires just servers-local ) |
just client-dev-prod |
Client with production servers (testing against prod) |
just client-build |
Build client for production distribution |
Command | Description |
---|---|
just servers-local |
Run both document and identity servers locally |
just podnet-server |
Run PodNet document server only (port 3000) |
just podnet-identity |
Run identity verification service only (port 3001) |
Command | Description |
---|---|
just podnet-cli [args] |
Run PodNet command-line interface |
just podnet-cli --help |
Show available CLI commands |
just podnet-cli publish document.md |
Example: publish a document |
just podnet-cli upvote <document-id> |
Example: upvote a document |
Command | Description |
---|---|
just dev-local |
Client + local servers (full local development) |
just dev-all |
All services using mprocs process manager |
just dev-services |
Just backend services (no desktop app) |
Command | Description |
---|---|
just js-build |
Build all JavaScript/TypeScript components |
just format |
Format all code (JavaScript + Rust) |
just build-all |
Build entire Rust workspace |
Command | Description |
---|---|
just ci-all |
Run all CI checks locally (same as GitHub workflows) |
just ci-rust |
Rust-specific checks (fmt, clippy, tests) |
just ci-js |
JavaScript/TypeScript checks (lint, format, test, build) |
just check-quick |
Fast development checks (fmt, clippy, lint) |
A trustless document publishing platform that uses zero-knowledge proofs to verify content authenticity and upvotes without revealing user identities.
Components:
- Podnet Server: REST API for content management with cryptographic verification
- Identity Server: Issues cryptographic identity pods after challenge-response flow
- CLI Client: Command-line interface for publishing, upvoting, and identity management
- Shared Models: POD predicates for publish/upvote verification and counting
Cryptographic Features:
- Publish verification using MainPODs to prove document authenticity
- Upvote verification using MainPODs to prove upvote authenticity
- Upvote counting using recursive MainPODs for accurate tallying
A Tauri-based desktop application providing user-friendly tools for managing personal POD collections, creating proofs, and participating in the POD2 ecosystem.
Features:
- POD Management: Import, export, and organize POD collections
- Proof Creation: User-friendly interface for creating MainPODs
- Identity Integration: Connect with PodNet identity services
- Development Tools: Code editor and debugging tools for POD development
Shared Rust libraries that power the entire ecosystem:
- Solver Engine: Semi-naive Datalog evaluation with proof reconstruction
- POD Models: Data structures and verification predicates
- Utilities: Common functions for cryptographic operations and data handling
-
Set up your environment:
# Install prerequisites curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust npm install -g pnpm # pnpm cargo install just # just # Clone and setup git clone <repository-url> cd client-pod2 pnpm install
-
Try the desktop client:
just client-dev
This starts the desktop app connected to staging servers with a local database.
-
Explore PodNet CLI:
just podnet-cli --help just servers-local # Start local servers in another terminal just podnet-cli publish README.md # Publish this README as a test
-
Development workflow:
- Use
just client-dev
for day-to-day client development - Use
just dev-local
when you need to test against local servers - Use
just format
before committing code - Use
just ci-all
to run the same checks as CI
- Use
-
Debugging:
- Use
just client-dev-debug
for debug builds with better error messages - Check logs in the desktop app's developer tools
- Server logs appear in the terminal when running local servers
- Use
The desktop client supports configuration through:
- Config files: TOML files in the app's config directory
- Environment variables:
POD2_CONFIG_FILE
to specify config file location - CLI overrides:
--set key.path=value
to override any config setting
Example:
just client-dev -- --set database.path=./custom.db --set network.document_server=http://localhost:3000
- Code style: Run
just format
before committing - Testing: Run
just ci-all
to ensure all checks pass - Documentation: Update relevant documentation when adding features
- Database changes: Add migrations in
pod2-client/db/migrations/
- API Documentation: See
docs/API_DOCUMENTATION.md
for PodNet REST API reference - Deployment Guide: See
docs/DEPLOYMENT.md
for production deployment instructions - Development Details: See
CLAUDE.md
for detailed technical documentation