Introduction
canette is a lightweight internal PaaS that runs inside an existing Kubernetes cluster.
canette is under active development. Breaking changes may be introduced at any time. These docs are a work in progress and may be incomplete or contain information that is no longer correct or relevant.
canette (Kubernetes Push-to-deploy Platform) is a lightweight internal PaaS that runs inside an existing Kubernetes cluster. It gives developers a Vercel-like push-to-deploy experience without requiring external services or platform expertise.
Who is it for?
canette is designed for developers and designers who want to host a demo, Storybook, or small internal service. You should be able to go from a Git repository to a live URL in under 2 minutes — no Dockerfile required, no Kubernetes knowledge needed.
Why canette?
For developers
Most deploy platforms either require significant infrastructure knowledge or lock you into an external service. canette is different: you push code to a Git repository, and a live URL appears. There is no YAML to write, no container to build, and no Kubernetes concepts to learn.
It is particularly well suited for things that need a real URL quickly — client demos, internal tools, Storybooks, PR previews, or side projects. Every deploy gets its own URL the moment it goes live, and apps can be torn down just as easily when they are no longer needed.
For platform and infrastructure teams
canette runs entirely inside your own Kubernetes cluster, installed as a single Helm chart. This means:
- Full inventory. You always know what is deployed and where. There are no apps quietly running in someone else's infrastructure and no old demos forgotten on the public internet.
- Secure by default. Build jobs run as non-root with no Kubernetes API access, a hard 30-minute timeout, and encrypted secrets at rest. The attack surface is minimised without requiring any custom security configuration.
- No external dependencies. canette does not phone home, does not require an external registry, and does not depend on any third-party SaaS. Everything runs in the cluster you already operate.
- Standard Kubernetes primitives. canette generates ordinary
Deployment,Service, andHTTPRouteresources. There is no proprietary resource format — what canette creates, you can inspect, modify, or delete with standard tools.
How it works
- Connect a Git repository to a canette app
- Trigger a build — canette clones your repo, detects the framework with Railpack, and builds a container image
- Deploy — the image is pushed to your in-cluster registry and a
Deployment,Service, andHTTPRouteare applied to the cluster - Access your app at the URL canette assigns
Key features
- No Dockerfile needed — Railpack auto-detects Node, Python, Go, Ruby, and more
- GitHub OAuth — sign in with your GitHub account
- Private repositories — PAT and SSH deploy key support
- Encrypted secrets — environment secrets are AES-256-GCM encrypted at rest
- Real-time logs — build and deploy logs stream live in the UI
- Gateway API — HTTPRoute-based routing, no legacy Ingress
- MCP server — AI agents (Claude Code, Cursor) can deploy repos, check status, and diagnose failures via the Model Context Protocol
Architecture
canette consists of five services:
| Service | Language | Purpose |
|---|---|---|
api | TypeScript (Bun + Hono) | REST API, auth, webhooks |
ui | TypeScript (Next.js) | Web interface |
builder | Go | Creates Kubernetes build Jobs |
controller | Go | Reconciles desired state with the cluster |
logstreamer | Go | Streams live pod logs to the browser over SSE |