# 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 install npm start npm run type-check npm test ``` ### Backend ```bash cd core cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test --all-features ``` Linux is required for host integration work involving Podman, systemd, networking, or image builds. Frontend development works locally with the mock backend. ## 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 `