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.
$ 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 -> mainFrom git push to live URL in one step.
No YAML pipelines. No ingress controllers to learn. No DNS dance.
- Step 1
Push over SSH
Add your SSH key once. Push to your production branch the same way you push to any git host.
- Step 2
Hamn builds and isolates
Each project lands in a runsc sandbox with envelope-encrypted secrets. No CI to wire up.
- Step 3
Live URL, every push
Production gets a stable URL. Every PR gets its own preview at a dedicated subdomain reviewers can click.
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
Push a branch
Any non-production push opens or updates a pull request automatically.
- 2
Checks run
Your hamn.toml check_command runs on every push, sandboxed on your own compute node.
- 3
Preview at a live URL
The branch builds and serves at its own subdomain — reviewers click, they don't git pull.
- 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.