Projects
The unit of tenant isolation in Kisenon — naming, lifecycle, and cascade semantics.
A project is the top-level container in Kisenon. Every branch, endpoint, role, and database lives under exactly one project.
What a project owns
- A
mainbranch, auto-created at project creation time. - A logical pageserver tenant — copy-on-write storage scoped to this project. No other project can read its pages.
- The Postgres major version pinned at creation.
- A region. Today every project lives in the single home-cluster region (US, bare metal); multi-region is roadmap.
Tenant isolation
Each project maps to a distinct pageserver tenant_id. Storage,
WAL, and caches are partitioned by tenant; there is no shared write
path between projects. Endpoints from different projects cannot
reach each other's storage even if their compute pods are scheduled
on the same node — the per-tenant network policy and the
pageserver authentication token gate every page request.
This is the boundary you can rely on for compliance and noisy-neighbour isolation. Branch boundaries within a project are softer: branches share storage and inherit the parent's pages until they diverge.
Naming
Project names are user-visible labels. They:
- Must be 1–63 characters.
- Match
^[a-zA-Z][a-zA-Z0-9_-]*$. Letters, digits,_,-; must start with a letter. - Are not required to be globally unique; unique-per-tenant is enough.
The internal project id (prj_<24 hex>) is what every other resource
references. The label is for humans.
Postgres version
You pick the major version at creation time. The default is 17.
Once set, it cannot be changed in place — major-version upgrade
is an out-of-band migration that we will document when it lands.
For alpha, treat the version as immutable.
Create
From the web console, click New project, enter a name, pick the Postgres major version, click Create. From the CLI:
keon projects create --name my-app --pg-version 17The control plane provisions the pageserver tenant, creates the main
branch, and returns the project id. End-to-end this typically takes
under two seconds.
Delete
Deleting a project cascades through every resource it owns:
- All endpoints on every branch are stopped and removed.
- All branches are torn down.
- The pageserver tenant is unloaded and its data is queued for asynchronous compaction and eventual removal from object storage.
The cascade is irreversible. There is no undelete, and the storage
artefacts are not recoverable from the console after the cascade
starts. Take a logical dump (pg_dump) before deleting if the data
matters.
keon projects delete <project-id>The CLI prompts for confirmation; pass --yes to skip when scripting.
Related
- Branches — copy-on-write children of a project.
- Endpoints — Postgres frontends that attach to a branch.
- Connection strings — wire format.