KHUBKHUB

Stop paying six different
companies for your dev stack.

KHUB replaces GitHub, Gitea, Codeberg, and Forgejo for your code, Slack for your team chat, and Jira for your issues and boards. Real Git repos, pull requests, a visual CI/CD pipeline editor, wikis, releases, and WebRTC calls, all in one self-hosted platform running on hardware you actually control.

localhost:8080/khub/web/khub
KHUB code browser showing a repository file tree, commit history, and language breakdown
Needs only Docker Engine 24+ & Docker Compose v2
MIT licensed, own your data
One platform instead of five subscriptions
GitHub, Gitea, Codeberg, Forgejo
Git hosting, pull requests, code review
Slack
Team chat, voice and video calls
Jira
Issues, boards, milestones, releases
0+
CI/CD starter templates
0
Git transports — HTTP & SSH
0
Merge strategies, gated server-side
0
Command to deploy the whole stack
Features

Everything a dev team needs. Nothing you have to stitch together.

One platform, one deployment, one permission model — from your first commit to a production release.

CI/CD that actually runs your code

A visual, node-based pipeline editor that stays in sync with your YAML. Every job runs in an ephemeral, capability-dropped Docker container — real execution, not a simulation. Ships with 50+ starter templates across languages, frameworks, and infrastructure.

Node.jsPythonGoRustRubyJavaPHP.NETNext.jsVueSvelteTerraformKubernetesFlutterElixir

Chat, with real calls

Org and repo channels, categories, and DMs delivered over WebSocket — no polling. Voice channels support genuine peer-to-peer WebRTC audio, video, and screen share.

live

Real Git. Both transports.

Bare repositories on disk with real SHAs and parent chains — git fsck-able outside the app. Clone over HTTP smart protocol or a dedicated SSH daemon authenticated by key.

Pull requests, done right

Threaded inline review, approve / request-changes / comment states, CODEOWNERS auto-requests, and branch protection enforced server-side — not just hidden in the UI.

Issues & Kanban boards

Labels, milestones, priorities, and project-wide views across every repository, plus Kanban boards scoped to the project.

Wiki & releases

A Markdown wiki per project, plus tagged releases with draft/prerelease states and binary asset uploads.

Orgs, projects & teams

A three-level hierarchy with public/internal/private visibility, granular roles at every level, team-scoped grants, and an admin audit log.

Security-first accounts

Argon2 password hashing, TOTP two-factor auth, personal access tokens, SSH keys, and a session list you can revoke from anywhere.

Search, palette & webhooks

Global search across users, code, and commits; a keyboard-driven command palette; SSRF-hardened webhooks with delivery logs.

CI/CD

Build pipelines visually. Ship them the same way, from a YAML file.

The node editor and your .khub-ci.yml stay in sync — build the graph with your mouse, or hand-edit the config; either way the pipeline runs identically. Every job is scheduled into its own ephemeral, isolated container on your own hardware.

  • Matrix builds Fan one job across versions/platforms into real, independently-scheduled jobs.
  • Approval gates Tie a job to an environment with required reviewers; enforced server-side, can't be bypassed by retrying.
  • Secrets & environments Org- or repo-scoped, encrypted at rest, masked out of logs automatically.
  • Artifacts Produced by one job, consumed by the next, downloadable from the run.
  • Cron triggers Schedule pipelines alongside push-triggered runs.
Try it yourself
build
node:22
matrix ×3
test
node 18 · 20 · 22
approval
env: production
deploy
needs: test, approval
[build] Successfully tagged khub/api:8f2c1a
[test · node20] 148 passed, 0 failed (4.2s)
[approval] waiting for reviewer on production
Architecture

Lightweight enough for one box. Built to scale past it.

Five containers, one ./scripts/deploy.sh. Every push is real Git — no simulated model of a repository sitting behind it.

Caddy
reverse proxy · TLS
web
Next.js
api
NestJS · REST + Git smart-HTTP
ssh-git
dedicated SSH transport
PostgreSQL
app data
Redis
BullMQ queue
Git storage
bare repos, volume
CI storage
workspaces + logs
runner
BullMQ worker → ephemeral, isolated containers
Your Docker daemon
host socket, capability-dropped job containers

One authorization resolver

REST API, Git-over-HTTP, Git-over-SSH, and merge-time branch protection all go through the same permission resolver — no path enforces a different rule than the others.

Docker-outside-of-Docker CI

The runner is a separate process from the API. It never executes a CI script itself — it only ever schedules ephemeral containers on the host daemon and streams their output back.

Production-ready primitives

/healthz and /readyz endpoints plus structured logging are already in place for systemd, Nomad, or Kubernetes if you outgrow Compose.

Security & Governance

Built for teams who can't put source code in someone else's cloud.

Internal engineering orgs, regulated industries, and agencies running client work — self-hosting means your code, your CI secrets, and your audit trail never leave your network.

Isolated CI execution

Every pipeline job runs in its own ephemeral, capability-dropped container — one job never shares state with another.

Encrypted secrets

CI/CD secrets are encrypted at rest and automatically masked out of any persisted log output.

Argon2 + two-factor auth

Passwords are hashed with argon2, never logged in plaintext. TOTP two-factor auth locks out repeated failed codes.

Full audit log

Org owners and admins can review every administrative action — who did what, to which resource, and when.

SSRF-hardened webhooks

Outbound webhook targets are re-resolved and checked against internal/link-local ranges before every delivery.

Branch & tag protection

Required approvals, status checks, and CODEOWNERS review are enforced server-side at push and merge time — not just hidden in the UI.

Why self-host

No per-seat pricing. No third party holding your source code.

Hosted SaaS platforms

  • Per-seat billing that scales with headcount
  • Source code and CI secrets live on someone else's infrastructure
  • CI minutes metered and rate-limited
  • Data residency decided by the vendor
KHUB

Self-hosted

  • One Docker Compose stack — unlimited users, unlimited repos
  • Everything runs on hardware you control
  • CI capacity is whatever compute you give the runner
  • Your network, your retention policy, your backups
The founder

Why this actually exists

PG
Prepakis Georgios
kernelstub, Founder @ Skuntir

Hey, I'm Georgios. Most people just know me as kernelstub.

A while back I spent months reverse engineering Flock Safety's ALPR camera network. I mapped out where the cameras actually were, pulled apart the hardware, and wrote up everything I found wrong with it. I posted that research on GitHub. Not long after, GitHub banned my account for it. No real warning, and no appeal that went anywhere.

That sat wrong with me. My work, gone, because one company didn't like what I found. I didn't want to depend on a platform that could delete years of work over a complaint, so I decided to just build my own.

KHUB is the same workflow you already know, repos, pull requests, issues, CI, wikis, chat, running on a box you actually control. Nobody can ban you from your own server.

This project exists because I got tired of asking permission to keep my own work online. I hope it means you never have to either.

Self-hosting

Deploy in under two minutes.

If you have Docker, you have everything KHUB needs.

Requirements

  • Docker Engine 24+
  • Docker Compose v2
  • openssl (already on basically every box, used to generate your secrets)

Your own box, no domain needed. Just runs at localhost:8080.

bash
# 1. grab the release and unzip it
$unzip khub.zip && cd khub
# 2. deploy in self-hosted mode
$./scripts/deploy.sh --self

The script generates real random secrets on first run and never overwrites an existing .env. For a real domain, just add --domain=yourdomain.com and Caddy handles TLS on its own.