- Rust 1.83+ (avec
cargo) - Node.js 18+ (pour le frontend SDK)
- Python 3.10+ (optionnel, pour les apps Python)
./run.shCe script :
- Compile le frontend SDK (
sdks/frontend/) - Build le workspace Rust (
cargo build --workspace) - Crée les symlinks
bin/→target/debug/ - Lance le runtime sur
http://localhost:8090 - Login :
dev/dev
./scripts/build.sh # Build release (--release)
./scripts/dev.sh # Build dev + watch (si disponible)./scripts/test.sh # Tous les tests unitaires
./test_e2e.sh # Tests end-to-end (curl)
# Tests par composant
cargo test -p zro-protocol # 15 tests protocol
cargo test -p zro-sdk # Tests SDK Rust
cd sdks/nodejs && npm test # 29 tests Node.js
cd sdks/python && python -m pytest # 33 tests Python# Build release et installer les binaires
cargo build --release
sudo ./scripts/install.shLe script install.sh :
- Copie les binaires dans
/usr/bin/(zro,zro-runtime,zro-app-*) - Crée la configuration dans
/etc/zro/ - Installe le service systemd
zro-runtime.service - Crée les répertoires de données (
/var/lib/zro/)
# Démarrer / arrêter / redémarrer
sudo systemctl start zro-runtime
sudo systemctl stop zro-runtime
sudo systemctl restart zro-runtime
# Rechargement de la configuration (SIGHUP)
sudo systemctl reload zro-runtime
# Logs en temps réel
journalctl -u zro-runtime -f
# État du service
systemctl status zro-runtimeLa CLI zro permet d'administrer le runtime sans redémarrage :
# État du runtime
zro status
# Lister les applications
zro app list
# Détails d'une application
zro app info terminal
# Gestion du cycle de vie
zro app start echo
zro app stop echo
zro app restart echo
# Installation / mise à jour / suppression à chaud
zro app install ./mon-app/ # depuis un répertoire
zro app install ./mon-app.tar.gz # depuis une archive
zro app update echo ./echo-v2.tar.gz # mise à jour atomique
zro app remove echo # désinstallation
# Configuration
zro config show # configuration active
zro config edit # ouvrir dans $EDITOR
zro config reload # recharger users + permissions
# Gestion des utilisateurs
zro user list
zro user add alice --role user --groups dev,staff
zro user remove alice
zro user passwd alice
# Logs
zro logs -f # journalctl runtime -f
zro app logs terminal -f # logs d'une app
# Santé globale
zro doctorAstuce : Ajouter
--jsonpour une sortie machine-readable, ou-qpour un mode silencieux.
# Copier les binaires dans le projet
cp target/release/zro-runtime bin/
cp target/release/zro-app-* bin/
# Créer le service utilisateur
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/zro-runtime.service <<'EOF'
[Unit]
Description=ZRO Web Desktop Environment
[Service]
Type=notify
WorkingDirectory=/path/to/ZRO
ExecStart=bin/zro-runtime
ExecReload=/bin/kill -HUP $MAINPID
Environment=ZRO_MODE=production
Environment=RUST_LOG=info
WatchdogSec=30s
Restart=on-failure
RestartSec=5
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now zro-runtime- Secret de session : Changer
session.secretdansruntime.toml(chaîne longue et aléatoire) - Mode production :
ZRO_MODE=productionoumode.mode = "production"dans le TOML - Clés JWT : Conserver les mêmes fichiers
config/jwt_keys/entre les déploiements - Users : Configurer les vrais utilisateurs dans
users.toml(pas de userdev) - Permissions : Configurer
permissions.tomlselon les besoins - Reverse proxy : Mettre Nginx/Caddy devant avec TLS (important pour les cookies Secure)
server {
listen 443 ssl;
server_name zro.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# WebSocket
location /ws {
proxy_pass http://127.0.0.1:8090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
}/usr/bin/
├── zro # CLI
├── zro-runtime # Runtime
└── zro-app-* # Backends
/etc/zro/
├── runtime.toml
├── users.toml
├── permissions.toml
└── jwt_keys/
/var/lib/zro/
├── apps/ # Manifestes + frontends
├── data/ # Persistance
└── static/ # SDK frontend compilé
/run/zro/
├── control.sock # Socket CLI ↔ runtime
└── ipc/ # Sockets IPC runtime ↔ backends
[server]
host = "0.0.0.0"
port = 8090
[session]
secret = "votre-secret-aleatoire-de-64-caracteres-minimum"
ttl_seconds = 86400
[auth]
providers = ["local"]
jwt_ttl_seconds = 3600 # 1h pour les tokens d'accès
jwt_refresh_ttl_seconds = 604800
[mode]
mode = "production"
[logging]
level = "info"
[storage]
path = "/var/lib/zro/data/zro.db"
wal_mode = true
pool_size = 20
[control]
socket_path = "/run/zro/control.sock"
ipc_dir = "/run/zro/ipc"curl http://localhost:8090/health
# {"status":"ok","apps":{...},"uptime_seconds":...,"version":"0.1.0"}
# Ou via la CLI
zro doctor