# Contributing to Archipelago This project is preparing for public developer contribution. The highest-value contributions are focused fixes, tests, app manifests, documentation improvements, and clear bug reports with reproducible evidence. ## Development setup ### Frontend ```bash cd neode-ui npm ci npm start npm run type-check npm test ``` ### Backend ```bash cd core cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cd .. scripts/test-backend-isolated.sh ``` Linux is required for host integration work involving Podman, systemd, networking, or image builds. Frontend development works locally with the mock backend. On machines with installed apps, backend tests must use the isolated runner above; an unrestricted `cargo test` is not a safe substitute. ## App manifests App packages live under `apps//manifest.yml` and use the schema documented in [docs/app-manifest-spec.md](docs/app-manifest-spec.md). Validate before submitting: ```bash ./scripts/validate-app-manifest.sh apps//manifest.yml python3 scripts/generate-app-catalog.py python3 scripts/check-app-catalog-drift.py --release --strict ``` App submissions must: - pin container image versions; - avoid hardcoded secrets; - use `security.no_new_privileges: true`; - use `security.readonly_root: true` unless the manifest explains why writable root is required; - request only necessary Linux capabilities; - store durable data under `/var/lib/archipelago//`; - define truthful health checks and launch interfaces for user-facing UIs. ## Code style - Rust: prefer `?` over `unwrap()`/`expect()` in production paths. - Rust: use `tracing` for structured logs. - TypeScript: avoid `any`; use explicit types or `unknown`. - Vue: prefer `