Realms Government Operating System - CLI and SDK for managing realms on the Internet Computer
Project description
Realms CLI
A powerful command-line tool for managing Realms project lifecycle on the Internet Computer.
Features
- 🏗️ Project Scaffolding: Initialize complete Realms projects with proper structure
- 🚀 Automated Deployment: Deploy backend + frontend + extensions with single command
- 📦 Extension Management: Phased rollouts (q1-q4) with dependency management
- ⚙️ Post-Deployment Actions: Automated setup and data population
- 🔧 Configuration Validation: Schema validation with helpful error messages
- 📊 Project Status: Check project health and deployment status
Prerequisites
Before installing realms-gos, ensure you have the following dependencies:
1. DFX (DFINITY Canister SDK)
sh -ci "$(curl -fsSL https://internetcomputer.org/install.sh)"
- Required for: Canister deployment, local replica management
- Used by:
realms realm deploycommand for backend/frontend deployment - Verify installation:
dfx --version
2. Node.js (v16 or later)
# Option 1: Download from https://nodejs.org
# Option 2: Via package manager (Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Option 3: Via nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 18
nvm use 18
- Required for: Frontend building, npm package management
- Used by: Frontend canister builds during deployment
- Verify installation:
node --version && npm --version
Installation
pip install realms-gos
From Source
git clone https://github.com/smartsocialcontracts/realms
cd realms/cli
pip install -e .
Prerequisites
- Python 3.8+
- dfx (Internet Computer SDK)
- Node.js 16+
- Git
Quick Start
1. Initialize a New Realm
realms init --name "My Government Realm" --id my_gov_realm
This creates a complete project structure with:
- Backend canister (Python/Kybra)
- Frontend canister (SvelteKit)
- Extension system
- Configuration files
- Deployment scripts
2. Deploy Your Realm
cd my_gov_realm
realms realm deploy --file realm_config.json
Your realm will be available at http://localhost:8000
Commands
realms init
Initialize a new Realms project with scaffolding.
realms init [OPTIONS]
Options:
-n, --name TEXT Realm name
--id TEXT Realm ID (lowercase, underscores)
--admin TEXT Admin principal ID
--network TEXT Target network [local|staging|ic]
--interactive/--no-interactive Interactive mode (default: true)
-o, --output TEXT Output directory (default: current)
Example:
realms init --name "City Services" --id city_services --admin "2vxsx-fae"
realms realm deploy
Deploy a Realms project based on configuration.
realms realm deploy [OPTIONS]
Options:
-f, --file TEXT Configuration file (default: realm_config.json)
-n, --network TEXT Override network from config
--skip-extensions Skip extension deployment
--skip-post-deployment Skip post-deployment actions
--phases TEXT Deploy specific phases only
--dry-run Show deployment plan without executing
--identity TEXT Identity file for authentication
Examples:
# Basic deployment
realms realm deploy
# Deploy to IC mainnet
realms realm deploy --network ic --identity ~/.config/dfx/identity/production/identity.pem
# Deploy only specific extension phases
realms realm deploy --phases q1,q2
# Dry run to see what would be deployed
realms realm deploy --dry-run
realms status
Show the current status of your Realms project.
realms status
realms validate
Validate a realm configuration file.
realms validate [--file realm_config.json]
Configuration
Realms projects are configured via realm_config.json:
{
"realm": {
"id": "my_government_realm",
"name": "My Government Realm",
"description": "A digital government platform",
"admin_principal": "2vxsx-fae",
"version": "1.0.0"
},
"deployment": {
"network": "local",
"clean_deploy": true
},
"extensions": {
"initial": [
{"name": "public_dashboard", "enabled": true},
{"name": "citizen_dashboard", "enabled": true}
],
"q1": [
{"name": "vault", "enabled": true}
]
},
"post_deployment": {
"actions": [
{
"type": "extension_call",
"name": "Load demo data",
"extension_name": "demo_loader",
"function_name": "load",
"args": {"step": "base_setup"}
}
]
}
}
Configuration Schema
- realm: Basic realm metadata (id, name, admin, etc.)
- deployment: Deployment settings (network, port, identity)
- extensions: Extensions organized by deployment phases
- post_deployment: Actions to run after deployment
Extension Phases
Extensions can be organized into deployment phases:
initial: Core extensions deployed firstq1,q2,q3,q4: Quarterly rollout phasesphase_1,phase_2, etc.: Custom phases
Post-Deployment Actions
Automate setup tasks after deployment:
- extension_call: Call extension functions
- script: Run shell scripts
- wait: Add delays between actions
Installation
Recommended: Using pipx (Isolated Environment)
The easiest way to install the Realms CLI is using pipx, which automatically manages isolated Python environments:
# Install pipx if you don't have it
pip install pipx
# Install realms-gos in an isolated environment
pipx install realms-gos
# Use the CLI tool (no venv activation needed)
realms --help
realms realm create --citizens 50
Alternative: Using pip with venv
If you prefer manual environment management:
python -m venv realms-env
source realms-env/bin/activate # On Windows: realms-env\Scripts\activate
pip install realms-gos
Development Setup
For contributing to the CLI tool:
git clone https://github.com/smartsocialcontracts/realms
cd realms/cli
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
Running Tests
pytest
Code Formatting
black realms_cli/
isort realms_cli/
Examples
Government Services Platform
realms init \
--name "Digital Government Services" \
--id gov_services \
--admin "rdmx6-jaaaa-aaaaa-aaadq-cai"
cd gov_services
realms realm deploy
Multi-Phase Deployment
{
"extensions": {
"initial": [
{"name": "public_dashboard", "enabled": true}
],
"q1": [
{"name": "citizen_dashboard", "enabled": true},
{"name": "notifications", "enabled": true}
],
"q2": [
{"name": "land_registry", "enabled": true},
{"name": "justice_litigation", "enabled": true}
]
}
}
Deploy phases incrementally:
realms realm deploy --phases initial
realms realm deploy --phases q1
realms realm deploy --phases q2
Troubleshooting
Common Issues
dfx not found
# Install dfx
sh -ci "$(curl -fsSL https://internetcomputer.org/install.sh)"
Port already in use
# Kill existing dfx processes
dfx stop
pkill dfx
Extension deployment fails
# Check extension directory exists
ls extensions/
# Reinstall extensions
./scripts/install_extensions.sh
Getting Help
- Check project status:
realms status - Validate configuration:
realms validate - Use dry-run mode:
realms realm deploy --dry-run
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
License
MIT License - see LICENSE file for details.
Support
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file realms_gos-0.2.7.tar.gz.
File metadata
- Download URL: realms_gos-0.2.7.tar.gz
- Upload date:
- Size: 123.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cfbd4c46b35d1cc2b4ffe2fe72bb1a1ea750e0784dfed46dba03eec1e6e39781
|
|
| MD5 |
472e9f0f18af556586a813f6a60d1837
|
|
| BLAKE2b-256 |
97070dab33bbdb6dd0eff9915835ebae5aa2215dd615fa85f4e3dd585ef46d22
|
File details
Details for the file realms_gos-0.2.7-py3-none-any.whl.
File metadata
- Download URL: realms_gos-0.2.7-py3-none-any.whl
- Upload date:
- Size: 136.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8509d9f749f0e8101e44fc0fe9a17555d09fb8abcfdcc4ce36daab389efadc0d
|
|
| MD5 |
fb05b15dacc421de2b0ec8127a1fb89e
|
|
| BLAKE2b-256 |
fd2764791f069f79e68a388febb8a976d51cb6ab9a448a49380f83bf0a66efe9
|