GitArena
GitArena is a software development platform with built-in vcs, issue tracking and code review. It is meant as a lightweight and performant alternative to the likes of GitLab and Gitea, built with self-hosting and cross-platform/cross-architecture support in mind.
To see a demo, you may browse the source code of GitArena itself on my hosted GitArena instance: https://git.mari.zip/mellowagain/gitarena
Features progress
Basics
- [x] Git protocol support
- [x] Repository management
.zip and .tar.gz
- [x] Web-based code browser
- [x] User auth
- [ ] Merge requests
- [x] Issue tracker
- [ ] Webhooks
- [x] REST API
- [ ] Protected branches
main
Nice to haves
- [ ] Woodpecker CI
- [ ] Package registry
- [ ] Wiki per repository
- [x] Search
- [x] OAuth/SSO
- [ ] CLI
- [ ] MCP
- [ ] Email notifications
- [ ] Dependency/vulnerability scanning hooks
- [ ] Commit/MR cross-linking
Stretch goals
- [ ] Federation via ForgeFed/AT Proto
- [ ] VS Code / JetBrains IDE integration
- [ ] Review iteration tracking: show what changed between force-pushed versions of a MR (like Gerrit's patchset model)
- [ ] Merge queue
- [ ] Commit signing + verification
- [ ] Mirror/sync: bi-directional
Building
Backend
Requirements:
- Latest Rust stable toolchain
$ cd gitarena
$ cargo build --release
Frontend
Requirements:
- Node.js 24
- pnpm 10
$ cd gitarena-frontend
$ pnpm run build
Running
You can either spin up everything via a Docker Compose or the backend and frontend separately.
Docker
A docker-compose.yml is provided to spin up all GitArena components:
- Rust backend
- Next.js frontend
- Postgresql
$ docker compose up -d
Backend
In order to run the GitArena backend, the following environment variable needs to be set:
BIND_ADDRESS: Socket address to bind to, for examplelocalhost:8080or127.0.0.1:80(Port is required)DATABASE_URL: Raw [Postgres connection string][postgres]
MAX_POOL_CONNECTIONS: Max amount of connections the Postgres connection pool should keep open and ready to use.NO_STDOUT_LOG: Set to any value to only write logs to the log file (and Otel, if configured)OTEL_SERVICE_NAME: Service name to be used for metrics, traces and logs
OTEL_EXPORTER_OTLP_ENDPOINT: URL to a otlp endpoint
GitArena gets compiled as a normal binary so you can just run it.
After start GitArena will automatically create the required tables. Please edit the settings table to configure your
GitArena instance and restart GitArena. In the future this will be do-able in the web ui.
Afterwards, your GitArena instance will be fully set up and you can register
your account. In order to access the admin panel (/admin), please set
admin on your user account in the users table to true.
The frontend will now be reachable at https://localhost:8080/api or your configured hostname and port.
Frontend
In order to run the GitArena frontend, the following environment variables need to be set:
NODE_ENV: set toproductionNEXT_PUBLIC_API_URL: URL to the GitArena backend, defaults tohttp://localhost:8080
HOSTNAME: address to bind to, default0.0.0.0PORT: port to bind to, default3030
$ cd gitarena-frontend
$ pnpm run start
The frontend will now be reachable at https://localhost:3030 or your configured hostname and port.
Screenshots
Repository:
Repository commits:
File view:
!File
Issues overview:
Issue detail:
Create repository:
Import repository:
Login:
Sign up:
Explore:
Search:
Releases:
Thank you
GitArena is part of the Mintlify OSS Program, meaning we receive gracious support from them in the form of a free Mintlify Pro plan (normally $300/month) to host our documentation.
[postgres]: https://www.postgresql.org/docs/12/libpq-connect.html#id-1.7.3.8.3.6