Codr

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.

Clone the example git clone https://git.codr.my/aiman/contoh.git

AGPL-3.0-or-later · Go · SQLite · git

From the front, the letter C. Scroll and it turns into history: branches leave and merge back, and each pulse is a push arriving.

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

A Codr pull request page: discussion, reviews and the merge box A Codr pull request page: discussion, reviews and the merge box
Pull requests with reviews, and merges that check for conflicts first.

git.codr.my/aiman/contoh/blob/main/src/cuti.go

A Codr file page: Go code with syntax highlighting and line numbers A Codr file page: Go code with syntax highlighting and line numbers
Files with syntax highlighting, blame and history.

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.
A developer's terminal
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.

  1. 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.

  2. 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.

  3. Mirrors from GitHub or any URL

    Repositories refresh on a schedule. Source tokens are encrypted in the database and never appear in logs.

  4. Backups restored every night

    codr backup takes a consistent snapshot. On this server that snapshot is restored again every night as a drill.

  5. Comfortable code reading

    File tree, syntax highlighting, history, blame, in-repository search and READMEs with their images.

  6. 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.
The data folder on the server
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.

  1. Live

    The everyday flow, complete

    Issue and pull request assignees, fixes #12 closing issues, squash or rebase merges, and your own activity log.

  2. 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.

  3. 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.

  4. 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.

  5. Live

    Two-step sign-in

    TOTP with any authenticator app, one-time recovery codes, and a list of signed-in browsers you can end.

  6. 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.

  7. Live

    Git LFS

    Large files over HTTPS and SSH, checked by hash on upload and carried through forks, backups and restores.

  8. 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.

  9. Live

    Organisations and teams

    Shared owners, team permissions and forks between people.

  10. 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.

  11. 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.

  12. Live

    Bring everything from GitHub

    Issues, pull requests and their discussions, not only the code, so leaving GitHub does not mean leaving your history.

  13. 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.

  1. Download the binarycurl -fLO https://github.com/sasateguh/codr/releases/latest/download/codr-linux-amd64 && sudo install codr-linux-amd64 /usr/local/bin/codr
  2. Set up a foldercodr init --dir /srv/codr
  3. Create an admincodr admin user add name --admin
  4. Run itcodr 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.