Push a repo.
Share it with a circle.
kitshn deploys your GitHub repos to Cloudflare and to your own machines. One map decides who can open each app: drag its card into a circle, and Cloudflare Access does the rest.
Live right now
Asking kitshn for the public apps…
Deploys from git
A push to main deploys production. A pull request gets its own preview address, and the
preview goes away when the pull request closes.
One map for access
Circles hold people, email domains, devices and networks. A card inside a circle is shared with it. kitshn turns that into Cloudflare Access, so a check costs nothing.
Cloudflare and your machines
Static sites and Worker apps run on Cloudflare. Compose apps run on your own machines through a tunnel, with no open ports.
Circles say who
Each circle is a group: an email, a domain such as @qlik.com, a phone, a machine, an IP
range, or everyone. Circles overlap freely. A card counts for every circle that it sits in.
A circle can ask for a passkey after the login. The Owner circle always does, and it holds the kitshn admin card.
Drag to share, see it first
While you drag a card, every circle edge lights up and a label says what changes, such as
+ Her · view. The drop applies it. A toast offers Undo, and History keeps every change.
A card that enters a public circle asks first.
Three kinds of apps
A recipe, kitshn.config.ts, names one kind. A repo can hold up to 10 apps.
| Kind | Runs on | Good for |
|---|---|---|
| static | Workers static assets. Requests are free. | Sites, docs, a résumé, a trip plan |
| worker | A Cloudflare Worker with KV, Durable Objects and crons | Small APIs and apps with state |
| compose | Docker Compose on your machine, behind its tunnel | Anything in a container: bots, databases, big apps |
From a push to a live app
The repo needs no secret: GitHub signs each run with an OIDC token, and kitshn trusts only the GitHub accounts on its list. kitshn never runs the recipe. It reads it as data. Read how it works.
Every card says who can open it
Select a card to see each circle that holds it, the members, the level and the address. Change the level for one circle, or set an end date: a share for a guest can end after a week.
The map works on a phone too. One finger pans, a long press opens the menu, and two fingers zoom.
Your machines, on the map
A small daemon joins each machine with one command. It runs the tunnel, deploys Compose apps in rootless Docker, and shares local dev servers as live sites.
When a machine is off, visitors get this page instead of an error. It costs a Worker request only while the site is down.
Set it up in one command
You need a free Cloudflare account with a domain, and a GitHub account.
curl -fsSL https://kit.yarden-zamir.com/install | \
CLOUDFLARE_API_TOKEN=... \
KITSHN_HOST=kit.example.com \
KITSHN_OWNER_EMAILS=you@example.com \
KITSHN_DEPLOY_OWNERS=your-github-name sh
All install steps