Contributing to Arcane
Set up the Arcane development environment and submit a pull request.
Run Arcane locally and get your change merged. The dev environment runs the frontend and backend in Docker with hot reload.
Ways to contribute
Section titled “Ways to contribute”- Report bugs using the issue template.
- Suggest features in Discussions. Proposals and voting happen there; maintainers open linked implementation issues when work is ready.
- Ask development questions in Discussions.
- Contribute code (frontend, backend, DevOps), documentation, or testing.
- Translate via Crowdin. See Translating Arcane.
Set up the development environment
Section titled “Set up the development environment”You need Docker and Docker Compose, plus Vite+ for the Node toolchain, formatting, linting, and pre-commit hooks outside Docker:
curl -fsSL https://vite.plus | bashRun every command from the project root (arcane/) unless stated otherwise.
- Fork and clone the repository, then enter it:
git clone https://github.com/getarcaneapp/arcane.gitgit clone git@github.com:getarcaneapp/arcane.gitgh repo clone getarcaneapp/arcanecd arcane- Check Docker and the Compose config:
docker infodocker compose versiondocker compose -f docker/compose.dev.yaml -p arcane-dev config- Start the development environment:
./scripts/development/dev.sh startThis starts both services with hot reload, installs dependencies inside Docker, and creates persistent storage for dev data.
- Confirm the stack is up:
./scripts/development/dev.sh statuscurl -f http://localhost:3000curl -f http://localhost:3552/api/health- Frontend: http://localhost:3000 (SvelteKit with HMR)
- Backend: http://localhost:3552 (Go with Air hot reload)
- Enable the pre-commit hooks once, so format checks run on staged files:
vp hooks enableUse VS Code (optional)
Section titled “Use VS Code (optional)”Open the project root (arcane/) and install the recommended Docker, Go, and Svelte/TypeScript extensions. Use Ctrl/Cmd+Shift+P → Tasks: Run Task for Start, Stop, Restart, Rebuild, Logs, and Open Frontend. Ctrl/Cmd+Shift+B starts the environment. The Clean task removes the development containers and volumes, including their data.
Make a change
Section titled “Make a change”-
Create a branch:
Terminal window git switch -c feat/project-labelsgit switch -c fix/issue-123 -
Edit code. Vite reloads the frontend and Air rebuilds and restarts the backend. Watch logs with
./scripts/development/dev.sh logs, orlogs frontend/logs backendfor one service. -
Run the checks before you commit:
vp fmt --checkvp checkdocker compose -f docker/compose.dev.yaml exec backend go fmt ./...docker compose -f docker/compose.dev.yaml exec backend go vet ./...Frontend formatting and lint rules live in the root vite.config.ts. The backend also runs Go fmt and Go vet as part of Air hot reload.
- Commit using Conventional Commits. Types are
feat,fix,docs,style,refactor,test, andchore:
git commit -m "feat: add user authentication"git commit -m "fix: resolve Docker volume mounting issue"Open a pull request
Section titled “Open a pull request”Keep each PR to one feature or fix, link issues with Closes #123 or Fixes #456, and respond to review feedback. Update the documentation if you change APIs or add features. Before you submit, check that:
- The code builds in the development environment
- Hot reload works for frontend and backend, and both work
- There are no lint errors
- Commit messages follow the conventional format
- The PR description explains the change and why it’s needed
Dev script reference
Section titled “Dev script reference”./scripts/development/dev.sh start./scripts/development/dev.sh status./scripts/development/dev.sh stop./scripts/development/dev.sh restart./scripts/development/dev.sh rebuild./scripts/development/dev.sh logs [frontend|backend]./scripts/development/dev.sh shell frontend./scripts/development/dev.sh shell backendUse restart after config changes and rebuild after dependency changes.
Justfile reference
Section titled “Justfile reference”just --list shows every target. Common ones:
| Task | Command |
|---|---|
| Start the Docker dev environment | just dev docker |
| Follow logs | just dev logs |
| Build the frontend or backend | just build single frontend, just build single backend |
| Run tests | just test all, just test backend |
| Lint and format | just lint frontend, just lint js, just format frontend, just format all --check |
| Install dependencies | just deps install all |
Run checks inside the Docker dev environment
Section titled “Run checks inside the Docker dev environment”docker compose -f docker/compose.dev.yaml exec frontend pnpm checkdocker compose -f docker/compose.dev.yaml exec frontend pnpm format