Contributing to Arcane
Set up the Arcane development environment and submit a pull request.
This page covers running Arcane locally for development and getting a 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
- Vite+ for the Node toolchain, formatting, linting, and pre-commit hooks when working 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 the frontend and backend with hot reload, installs dependencies inside Docker, and creates persistent storage for development 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 folder (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 it focused: one feature or fix per PR.
- Test that both frontend and backend work.
- Update the documentation if you change APIs or add features.
- Link issues with
Closes #123orFixes #456. - Respond to review feedback.
Before you submit, check that:
- The code builds in the development environment
- Hot reload works for frontend and backend
- There are no lint errors
- Commit messages follow the conventional format
- The PR description explains the change and why it’s needed
Reference
Section titled “Reference”Dev script
Section titled “Dev script”./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
Section titled “Justfile”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 |
Checks inside the Docker dev environment
Section titled “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