Self-hosted git forge · Built in Malaysia
Your code, on your own machine.
Codr keeps your git repositories on a server you run, with SSH, HTTPS, issues, pull requests and CI. One binary, one data folder, an interface in Malay and English.
git clone https://git.codr.my/aiman/contoh.git
AGPL-3.0-or-later · Go · SQLite · git
Measured on this server, now
- One Go binary. Nothing else to install.
- 22MB
- Repositories served by git.codr.my.
- 138
- Memory in use by the whole server.
- 26MB
- Other services: no Postgres, Redis or queue.
- 0
An interface that leaves room for the code
The screenshots below are the real Codr, not mock-ups. One ink, one paper, one accent colour, in light and dark.
git.codr.my/aiman/contoh/pr/2
git.codr.my/aiman/contoh/blob/main/src/cuti.go
Rules are kept on the server
Protected branches, the push size limit and read-only mirrors are checked before git writes anything, whether you push over SSH or HTTPS. The messages below are Codr's real wording.
- One place for the rules
- Both doors call the same check, so there is no back way in.
- Messages in your language
- Refusals are explained in Malay or English, following the user's setting.
git push origin main
Enumerating objects: 7, done.
Writing objects: 100% (4/4), 412 bytes | 412.00 KiB/s, done.
To git.codr.my:aiman/contoh.git
7280938..c41e0a2 main -> main
git push --force origin main
remote: Codr: branch main is protected on aiman/contoh. Force push (non-fast-forward) rejected.
! [remote rejected] main -> main (pre-receive hook declined)
What already runs
Everything below is running at git.codr.my today.
Clone and push over SSH or HTTPS
SSH keys and tokens for every user. Protected branches refuse force pushes, and the push size limit is a setting.
Issues and pull requests
Labels, comments and reviews. A merge checks for conflicts first and never overwrites a push that lands at the same moment.
Mirrors from GitHub or any URL
Repositories refresh on a schedule. Source tokens are encrypted in the database and never appear in logs.
Backups restored every night
codr backup takes a consistent snapshot. On this server that snapshot is restored again every night as a drill.
Comfortable code reading
File tree, syntax highlighting, history, blame, in-repository search and READMEs with their images.
One command to check it all
codr doctor checks the config, database, git, hooks, keys and disk space. One line per check.
Your repositories stay plain git
Codr does not convert your repositories into a format of its own. Each one is a bare git repository inside the data folder. If the server stops, you can still clone straight from disk.
- One folder to back up
- The SQLite database and the repositories live together. Copy the folder, or use codr backup for a snapshot while the server runs.
- No other services
- No Postgres, Redis or queue to look after. The SSH and HTTPS servers and the mirror scheduler run in one process.
ls data
codr.db hooks repos ssh
git clone data/repos/12.git project
Cloning into 'project'...
Built since launch
Each item began on this list as a plan. All of them now run in the version on this server.
- Live
The everyday flow, complete
Issue and pull request assignees, fixes #12 closing issues, squash or rebase merges, and your own activity log.
- Live
CI on your own server
Every push runs the jobs in .codr/ci.toml in a container with no network. Results show on the commit and the pull request, and a protected branch can wait for all of them to pass.
- Live
Signed webhooks
Every push, issue, comment, review and status sent to your own URL, signed with HMAC, retried with backoff, and never to a private address unless you allow it.
- Live
Notifications and email
A bell and an optional email for the threads you opened, joined, were mentioned in or watch, and never about a repository you cannot read.
- Live
Two-step sign-in
TOTP with any authenticator app, one-time recovery codes, and a list of signed-in browsers you can end.
- Live
A REST API with OpenAPI
The same tokens as git, capped by their scope, with commit statuses for your CI runners and a machine-readable description.
- Live
Git LFS
Large files over HTTPS and SSH, checked by hash on upload and carried through forks, backups and restores.
- Live
A wiki in git
Markdown pages beside the code, each change a commit, two editors never overwriting each other, and the whole wiki one git clone away.
- Live
Organisations and teams
Shared owners, team permissions and forks between people.
- Live
Backups to your own cloud
An encrypted copy of every repository and the database in your S3, R2 or B2 bucket, under a key only you hold, checked by a restore test after each run.
- Live
An AI assistant on your terms
Pull request summaries and review notes in Malay or English, from a model endpoint you choose. Off until you turn it on, repository by repository.
- Live
Bring everything from GitHub
Issues, pull requests and their discussions, not only the code, so leaving GitHub does not mean leaving your history.
- Live
A data report you can hand over
Who can read what, where the data sits, every action in the audit trail, and a personal data export for each user.
Who it is for
A good fit
- Solo developers who want their code on their own machine.
- Small teams that need code review, CI and shared organisations without a subscription.
- Anyone who wants to read and understand the forge they run.
Not a fit yet
- Large organisations with thousands of users and compliance audits.
- Teams that need a package or container registry beside their code.
- Anyone looking for a hosted service. Codr runs on a server you look after.
Install on your server
You need Linux (amd64 or arm64) and git 2.40 or newer. Download the release binary, or build it with Go 1.27. The SSH and HTTPS servers start with one command.
- Download the binary
curl -fLO https://github.com/sasateguh/codr/releases/latest/download/codr-linux-amd64 && sudo install codr-linux-amd64 /usr/local/bin/codr - Set up a folder
codr init --dir /srv/codr - Create an admin
codr admin user add name --admin - Run it
codr serve
Licensed under AGPL-3.0-or-later. If you change the server code, share those changes with the people who use your server. Source code
Questions
Before you install
- Is Codr an alternative to Gitea or Forgejo?
- Yes, for one person or a small team who want a forge they can read end to end. Gitea and Forgejo do much more: package registries, Actions-compatible CI, federation work in Forgejo and large communities. Codr is smaller: one Go binary, one SQLite file, plain bare repositories, an English and Malay interface, and CI jobs that run with no network by default. If you need packages or a plugin ecosystem, choose Gitea or Forgejo.
- Does Codr need Postgres, Redis or a queue?
- No. Codr keeps its data in one SQLite file next to plain bare git repositories. Copy the data folder, or run codr backup while it is running for a consistent snapshot.
- What licence is Codr under?
- AGPL-3.0-or-later. You may use, change and host it, also at work. If you change the server and let other people use it over a network, share your changes with them under the same licence.
- What do I need to run it?
- Linux on amd64 or arm64 and git 2.40 or newer. Download the release binary and check it against SHA256SUMS, then run codr init and codr serve. Building from source needs Go 1.27. Docker is only needed for CI.
- Can I move my repositories from GitHub?
- Yes. Codr mirrors a GitHub repository and imports its issues and pull requests with their original numbers, so links like #12 keep working.
- Who makes Codr?
- Aiman Malib at Sasa Teguh, in Malaysia. Codr has hosted its author's own code since October 2026.
Open source, AGPL-3.0-or-later
See it for yourself
An example repository on the owner's forge is open without an account: files, history, issues and pull requests.