- Update all references from Debian 12 (Bookworm) to Debian 13 (Trixie) - Enable SystemCallArchitectures, RestrictAddressFamilies, RestrictRealtime in archipelago.service (safe on systemd 256+ which respects NoNewPrivileges=no) - Update GLIBC compatibility checks from 2.36 to 2.40 - ISO filename, build container, and docs updated throughout Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.3 KiB
Contributing to Archipelago
Thank you for your interest in contributing to Archipelago! This document covers the process for contributing code, reporting bugs, and submitting apps.
Code of Conduct
Be respectful. We follow the Contributor Covenant.
Getting Started
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/archy.git - Set up the dev environment (see
docs/development-setup.md) - Create a feature branch:
git checkout -b feature/your-feature
Development Setup
Frontend (Vue.js)
cd neode-ui
npm install
npm start # Dev server on :8100
npm run type-check # TypeScript validation
npm run build # Production build
npm test # Run tests
Backend (Rust)
Build on a Linux server (Debian 13), not macOS:
cargo clippy --all-targets --all-features
cargo fmt --all
cargo test --all-features
Deploy to dev server
./scripts/deploy-to-target.sh --live
Code Style
Frontend (TypeScript + Vue)
<script setup lang="ts">— always Composition API- TypeScript strict mode — no
any, useunknownor proper types - Global CSS classes in
src/style.css— never inline Tailwind in components - Pinia for state management — focused single-purpose stores
- Use
@/api/rpc-client.tsfor RPC calls
Backend (Rust)
- No
unwrap()orexpect()in production code — use?operator thiserrorfor library errors,anyhowfor application errorstracingfor structured logging — neverprintln!- Run
cargo clippyandcargo fmtbefore commits
General
- Functions under 50 lines, single responsibility
- Comment WHY not WHAT
- Remove dead code — never comment it out
- No
TODO/FIXMEin commits
Commit Format
type: description
Types: feat:, fix:, docs:, refactor:, test:, chore:, perf:
Examples:
feat: add backup scheduling to settings pagefix: handle WiFi connection timeout gracefullytest: add unit tests for RPC client retry logic
Pull Request Process
- Ensure your branch is up to date with
main - All checks must pass: TypeScript, build, tests, clippy
- Include a clear description of what changed and why
- Link any related issues
- Request review from a maintainer
PR Checklist
- TypeScript type-check passes (
npm run type-check) - Frontend builds (
npm run build) - Tests pass (
npm test) - Rust clippy clean (
cargo clippy --all-targets --all-features) - No new compiler warnings
- Follows code style guidelines above
Testing Requirements
- New features need tests
- Bug fixes need a regression test
- Frontend: Vitest + Vue Test Utils
- Backend:
#[test]and#[tokio::test] - Target: maintain or improve existing coverage
Reporting Bugs
Use the Bug Report issue template. Include:
- Steps to reproduce
- Expected behavior
- Actual behavior
- System info (hardware, OS version, Archipelago version)
- Screenshots if applicable
- Relevant logs (
journalctl -u archipelago)
Feature Requests
Use the Feature Request issue template. Include:
- Problem description
- Proposed solution
- Alternatives considered
- Impact on existing users
App Submissions
To submit an app for the Archipelago marketplace:
- Create a manifest following
docs/app-manifest-spec.md - Ensure the container image is published to a public registry
- Test on Archipelago hardware (x86_64 and ARM64 if possible)
- Open a PR adding the app to the curated list
- Include: app description, icon, resource requirements, dependencies
App Requirements
- Container must run as non-root (UID > 1000)
readonly_root: trueunless explicitly justified- Drop all capabilities except those required
no-new-privileges: true- Pin specific image versions (no
latesttag) - No hardcoded secrets
Security Disclosure
Do NOT open public issues for security vulnerabilities.
Email security concerns to the maintainers directly. Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
We will acknowledge receipt within 48 hours and provide a timeline for a fix.
License
By contributing, you agree that your contributions will be licensed under the same license as the project.