Git forge + IDP

Push code. Get a preview URL.

Hamn is the self-hosted platform you ship on. Push over SSH and every branch gets a pull request with checks and its own container at a live URL — no CI service, ingress, or DNS to wire. Review, merge, and it's in production.

~/checkout-api
$ git push hamn main
Enumerating objects: 14, done.
Writing objects: 100% (8/8), 2.1 KiB
remote: ✓ build · 23s
remote: ✓ image built · 312 MB
remote: ✓ deploy · namespace checkout-api
remote: → https://checkout-api.hamn.app
To hamn:alice/checkout-api.git
   a10811b..5ab5386  main -> main

From git push to live URL in one step.

No YAML pipelines. No ingress controllers to learn. No DNS dance.

  1. Step 1

    Push over SSH

    Add your SSH key once. Push to your production branch the same way you push to any git host.

  2. Step 2

    Hamn builds and isolates

    Each project lands in a runsc sandbox with envelope-encrypted secrets. No CI to wire up.

  3. Step 3

    Live URL, every push

    Production gets a stable URL. Every PR gets its own preview at a dedicated subdomain reviewers can click.

Pull request flow

Every branch becomes something you can click.

Whether you wrote the code yourself or your local coding agent pushed it, the flow is the same: pull request, checks, live preview, merge.

  1. 1

    Push a branch

    Any non-production push opens or updates a pull request automatically.

  2. 2

    Checks run

    Your hamn.toml check_command runs on every push, sandboxed on your own compute node.

  3. 3

    Preview at a live URL

    The branch builds and serves at its own subdomain — reviewers click, they don't git pull.

  4. 4

    Merge and ship

    Merging deploys to production. Failed checks soft-block the merge until you fix or override.

Same compute, same audit log, same live URLs — for every push, from anyone or anything.

Everything you need to ship — and nothing you don't.

Hamn is built around a single promise: push code, get a live URL, the platform stays out of your way.

SSH-native

Push like any git host. Hamn ships on every push to your production branch — no CI step in between.

Preview per PR

Open a PR, get its own container at a dedicated subdomain. Reviewers click; they don't git pull.

Public or private

Mark a project public and anyone can browse its code, tasks, and PRs without signing in.

Sandbox isolation

Debian compute nodes run containerd with runsc. One isolated network per project, envelope-encrypted credentials.

CI on every push

Declare a check_command in hamn.toml and it runs sandboxed on every push, gating merges — no runner fleet or pipeline YAML.

Hash-chained audit log

Every privileged action lands in a tamper-evident log. Operators verify history end-to-end.

Ready to push your first project?

Sign in, add an SSH key, and create a project. Your first deploy is one git push away.