Ptah ecosystem
See which public Ptah repositories a workflow needs, how they work together, and how mature each one is.
To plan and apply a schema change you need one repository: ptah, which holds
the engine and the CLIs. The other public repositories install it, run it for
you on Kubernetes, add an engine it does not build in, or check it. Use the map
to find the ones your work needs, and leave the rest out.
Core
- CLI / automationYour shell, scripts or CI→ ptah: Runs directly→ Kubernetes API: Manages with kubectl
- ptahEngine, CLIs and Go API→ ptah-ydb-plugin: Starts the provider (experimental)→ ptah-duckdb-plugin: No services yet (not implemented)→ ptah-spanner-plugin: Starts the provider when installed (experimental)
Optional Kubernetes workflow
- Kubernetes APIOperator resources→ ptah-operator: Reconciled by
- ptah-operatorKubernetes reconciler→ ptah: Runs executor Jobs
- ptah-consoleOptionalOperator web console→ Kubernetes API: Reads and approves as you
Optional external providers
- ptah-ydb-pluginExperimentalYDB provider
- ptah-duckdb-pluginScaffoldDuckDB provider
- ptah-spanner-pluginOptionalSpanner provider
Distribution and CI
- homebrew-ptahHomebrew tap→ ptah: Installs release and edge builds
- ptah-actionGitHub Action→ ptah: Runs on pull requests
Discover and try
- ptah.runWebsite and installers→ ptah: Serves the installers→ ptah-sandbox: Links to the playground
- ptah-sandboxBrowser playground→ ptah: Runs it as WebAssembly
Verification and test helpers
- ptah-atlas-conformanceAtlas compatibility evidence→ ptah: Measures compatibility
- ptah-testkitTest helpers for Go projects→ ptah: Wraps the Go API
- ptah-action-e2eAction end-to-end checks→ ptah-action: Tests it end to end
Details
Select a component to read what it does, when you need it, its status and its links. Select a path to follow one way of using Ptah from start to finish.
Escape or Show all clears the selection.
Entry point, not a repository
CLI / automation
Your shell, scripts or CI
Where a person or a pipeline starts. It is an entry point, not a repository: a terminal, a script, or a CI job that runs ptah or, on Kubernetes, kubectl.
When you need it. Always. The direct path runs ptah from here, and the Kubernetes path manages the operator's resources from here.
Relationships
- CLI / automation →
ptah: Runs directly - CLI / automation → Kubernetes API: Manages with kubectl
Links
Back to the mapReleased
ptah
Engine, CLIs and Go API
The schema engine. It reads desired schemas, compares them with live databases, and plans, generates and applies changes. It ships the native ptah CLI and ptah-compat, the Atlas-compatible CLI, and holds the public Go packages and the provider SDK.
When you need it. Always. Every other component runs, installs, checks or links to it.
Status. Tagged releases with Sigstore-signed checksums. Ptah is pre-GA, so behavior can change between releases. The provider SDK in the same repository is experimental.
Relationships
- CLI / automation →
ptah: Runs directly ptah-operator→ptah: Runs executor Jobsptah→ptah-ydb-plugin: Starts the provider (experimental)ptah→ptah-duckdb-plugin: No services yet (not implemented)ptah→ptah-spanner-plugin: Starts the provider when installed (experimental)homebrew-ptah→ptah: Installs release and edge buildsptah.run→ptah: Serves the installersptah-action→ptah: Runs on pull requestsptah-sandbox→ptah: Runs it as WebAssemblyptah-atlas-conformance→ptah: Measures compatibilityptah-testkit→ptah: Wraps the Go API
Links
Back to the mapInfrastructure, not a repository
Kubernetes API
Operator resources
The Kubernetes API server and the operator's resources: schemas, migrations, plans and approvals. It is infrastructure, not a repository. People and tools change the workflow by writing these resources, and the operator acts on them.
When you need it. Only on the Kubernetes path.
Relationships
- CLI / automation → Kubernetes API: Manages with kubectl
ptah-console→ Kubernetes API: Reads and approves as you- Kubernetes API →
ptah-operator: Reconciled by
Links
Back to the mapReleased
ptah-operator
Kubernetes reconciler
A Kubernetes control plane. PtahSchema converges a database on a desired schema from an OCI artifact, and PtahMigration runs a versioned migration sequence from one. Database work runs in short-lived Jobs that run a Ptah release image.
When you need it. Your databases are managed from Kubernetes, and changes should be reconciled from published artifacts with approvals bound to the exact plan.
Status. Publishes releases. The API is v1alpha1, which carries no compatibility guarantee before v1. The operator publishes which Ptah build each release runs.
Relationships
- Kubernetes API →
ptah-operator: Reconciled by ptah-operator→ptah: Runs executor Jobs
Links
Back to the mapReleased · Optional
ptah-console
Operator web console
A web console for the operator. It shows schemas, migrations and plans, and lets a person approve an exact plan under their own Kubernetes identity. It reads and writes the same Kubernetes resources as kubectl; the operator and Ptah still do the work.
When you need it. People review or approve operator plans and want a browser view instead of kubectl. The operator runs the same without it, and removing it changes nothing the operator does.
Status. Publishes releases. Each release is built against one operator release, so pin the two together.
Relationships
ptah-console→ Kubernetes API: Reads and approves as you
Links
Back to the mapExperimental
ptah-ydb-plugin
YDB provider
The executable provider that gives Ptah its YDB support. Ptah has no YDB implementation of its own and runs YDB work only through this provider.
When you need it. You work with YDB. Install it with ptah providers install ydb; no Ptah installation channel includes it.
Status. Publishes releases and is under development. A release declares the provider contract it needs, and ptah providers install picks the newest release this Ptah can run.
Relationships
ptah→ptah-ydb-plugin: Starts the provider (experimental)
Links
Back to the mapScaffold
ptah-duckdb-plugin
DuckDB provider
A provider scaffold. It starts, negotiates with Ptah and declares the duckdb engine, but implements no service: it opens no connection and cannot inspect, plan or apply.
When you need it. Not for DuckDB work yet. Ptah has no built-in DuckDB support either.
Status. No release that Ptah can install: ptah providers install duckdb refuses with provider_no_release.
Relationships
ptah→ptah-duckdb-plugin: No services yet (not implemented)
Links
Back to the mapExperimental · Optional
ptah-spanner-plugin
Spanner provider
The optional executable provider that gives Ptah its Spanner support, through Spanner's PostgreSQL interface and PGAdapter. Ptah has no Spanner implementation of its own and runs Spanner work only through this provider.
When you need it. You work with Spanner's PostgreSQL interface. Install it with ptah providers install spanner; no Ptah installation channel includes it, and it installs no PGAdapter.
Status. Publishes releases and is under development. Support is best effort: its live tests run the Cloud Spanner emulator, not the managed service.
Relationships
ptah→ptah-spanner-plugin: Starts the provider when installed (experimental)
Links
Back to the mapReleased
homebrew-ptah
Homebrew tap
The Homebrew tap. The ptah formula installs the newest release; ptah-edge builds the current master from source.
When you need it. You install command-line tools on macOS or Linux with Homebrew.
Status. Follows Ptah releases. The edge formula is the development tip, not a release.
Relationships
homebrew-ptah→ptah: Installs release and edge builds
Links
Back to the mapReleased
ptah-action
GitHub Action
A GitHub Action that runs Ptah on a pull request: migration planning, safety checks, lint, a sticky comment and a destructive-change Check Run. Its source is in the ptah repository; this repository is the published copy that workflows use as stokaro/ptah-action@v1.
When you need it. You review schema changes in GitHub pull requests.
Status. Published under the v1 tag. It downloads a Ptah release, latest unless you pin one.
Relationships
ptah-action→ptah: Runs on pull requestsptah-action-e2e→ptah-action: Tests it end to end
Links
Back to the mapPublished site
ptah.run
Website and installers
The project website at ptah.run: the homepage, the install page and recorded sessions. It serves the install.sh and install.ps1 installers, taken from the ptah repository, and the ptah.run Go import path.
When you need it. You meet Ptah for the first time, or you want the one-line install command.
Relationships
ptah.run→ptah: Serves the installersptah.run→ptah-sandbox: Links to the playground
Links
Back to the mapPublished site
ptah-sandbox
Browser playground
The source of play.ptah.run. Ptah is compiled to WebAssembly and runs in the browser against SQLite or PostgreSQL, also compiled to WebAssembly. Nothing is installed and no output is recorded in advance.
When you need it. You want to try Ptah's commands before you install anything.
Status. Every deploy is built from one pinned Ptah commit, which can be older than the newest release. The playground shows the version it runs.
Relationships
ptah.run→ptah-sandbox: Links to the playgroundptah-sandbox→ptah: Runs it as WebAssembly
Links
Back to the mapEvidence
ptah-atlas-conformance
Atlas compatibility evidence
A harness that drives Atlas's own test fixtures through Ptah's public API and the ptah-compat binary, and compares selected behavior with the Atlas Community Edition. It depends on Ptah one way; Ptah never imports it.
When you need it. You want to know what Atlas expresses that Ptah does not cover yet, before you rely on ptah-compat.
Status. Not a release artifact and not a full parity test. Its reports are the evidence behind Ptah's compatibility claims.
Relationships
ptah-atlas-conformance→ptah: Measures compatibility
Links
Back to the mapReleased
ptah-testkit
Test helpers for Go projects
An opt-in Go module, ptah.run/testkit, for tests that need real databases. It starts PostgreSQL, MySQL, MariaDB or SQLite, applies migrations, seeds rows and takes a schema snapshot, and keeps container dependencies out of Ptah's own module.
When you need it. Your Go tests apply migrations to a real database.
Status. Tagged as a Go module. Each version requires a Ptah version through its go.mod.
Relationships
ptah-testkit→ptah: Wraps the Go API
Links
Back to the mapTest fixture
ptah-action-e2e
Action end-to-end checks
A fixture repository whose pull requests show that stokaro/ptah-action@v1 writes its sticky comment and its Check Run in a real GitHub workflow.
When you need it. You maintain the Action. Workflows that use the Action do not need it.
Relationships
ptah-action-e2e→ptah-action: Tests it end to end
Links
Back to the mapUsage path
CLI or CI
Run ptah from a shell, a script or a CI job, or through the GitHub Action. This path needs no operator and no console.
- CLI / automation →
ptah: Runs directly ptah-action→ptah: Runs on pull requests
Links
Back to the mapUsage path
Kubernetes
Install the operator and manage its resources with kubectl and the kubectl ptah plugin. The operator reconciles them and runs Ptah in short-lived executor Jobs.
- CLI / automation → Kubernetes API: Manages with kubectl
- Kubernetes API →
ptah-operator: Reconciled by ptah-operator→ptah: Runs executor Jobs
Links
Back to the mapUsage path
Kubernetes with the console
Add the console to the Kubernetes path when people want a browser view to inspect plans and approve them. It works through the same Kubernetes resources and replaces neither the operator nor Ptah.
ptah-console→ Kubernetes API: Reads and approves as you- Kubernetes API →
ptah-operator: Reconciled by ptah-operator→ptah: Runs executor Jobs
Links
Back to the mapLegend
- Runs or calls
- Installs
- Tests or measures
- Documents or links
- Hollow arrowhead: experimental
- Sparse dashes: not implemented
- Dashed outline: not a repository
The public Ptah repositories, grouped by role, with ptah at the center.
What to notice: the direct path from the CLI to ptah needs nothing else. The Kubernetes workflow and the console are optional. So are the external providers, which only an engine Ptah does not build in needs.
Choose a path
Section titled “Choose a path”Each path below is complete on its own, and the first one needs no other component. Start with the first unless your databases are managed from Kubernetes.
CLI or CI. Run ptah from a shell, a script or a CI job, or through the GitHub Action. This path needs no operator and no console.
- CLI / automation →
ptah: Runs directly ptah-action→ptah: Runs on pull requests
Read next: Get a first result, Run Ptah in CI, Embed Ptah in Go.
Kubernetes. Install the operator and manage its resources with kubectl and the kubectl ptah plugin. The operator reconciles them and runs Ptah in short-lived executor Jobs.
- CLI / automation → Kubernetes API: Manages with kubectl
- Kubernetes API →
ptah-operator: Reconciled by ptah-operator→ptah: Runs executor Jobs
Read next: Kubernetes operator, Operator documentation.
Kubernetes with the console. Add the console to the Kubernetes path when people want a browser view to inspect plans and approve them. It works through the same Kubernetes resources and replaces neither the operator nor Ptah.
ptah-console→ Kubernetes API: Reads and approves as you- Kubernetes API →
ptah-operator: Reconciled by ptah-operator→ptah: Runs executor Jobs
Read next: ptah-console, Console compatibility.
Providers are a separate choice, and they apply on any path. A provider is needed only for an engine Ptah does not build in. Supported databases lists what Ptah builds in, and executable providers explains how a provider is installed and selected.
What each repository does
Section titled “What each repository does”Every public repository is listed here, and each row names what its owner says about its maturity. A repository’s existence is not a support claim: a scaffold can be recognized by Ptah and still do nothing.
| Repository | Status | Use it when | Read next |
|---|---|---|---|
| Core | |||
ptahEngine, CLIs and Go API | Released | Always. Every other component runs, installs, checks or links to it. | Releases Install Ptah Embed Ptah in Go |
| Optional Kubernetes workflow | |||
ptah-operatorKubernetes reconciler | Released | Your databases are managed from Kubernetes, and changes should be reconciled from published artifacts with approvals bound to the exact plan. | Operator documentation Ptah compatibility Kubernetes operator |
ptah-consoleOperator web console | Released | People review or approve operator plans and want a browser view instead of kubectl. The operator runs the same without it, and removing it changes nothing the operator does. | Compatibility |
| Optional external providers | |||
ptah-ydb-pluginYDB provider | Experimental | You work with YDB. Install it with ptah providers install ydb; no Ptah installation channel includes it. | Configure the YDB provider Executable providers |
ptah-duckdb-pluginDuckDB provider | Scaffold | Not for DuckDB work yet. Ptah has no built-in DuckDB support either. | Configure the DuckDB provider |
ptah-spanner-pluginSpanner provider | Experimental | You work with Spanner's PostgreSQL interface. Install it with ptah providers install spanner; no Ptah installation channel includes it, and it installs no PGAdapter. | Configure the Spanner provider Executable providers |
| Distribution and CI | |||
homebrew-ptahHomebrew tap | Released | You install command-line tools on macOS or Linux with Homebrew. | Install with Homebrew |
ptah-actionGitHub Action | Released | You review schema changes in GitHub pull requests. | Run Ptah in CI |
| Discover and try | |||
ptah.runWebsite and installers | Published site | You meet Ptah for the first time, or you want the one-line install command. | Website |
ptah-sandboxBrowser playground | Published site | You want to try Ptah's commands before you install anything. | Playground |
| Verification and test helpers | |||
ptah-atlas-conformanceAtlas compatibility evidence | Evidence | You want to know what Atlas expresses that Ptah does not cover yet, before you rely on ptah-compat. | Conformance |
ptah-testkitTest helpers for Go projects | Released | Your Go tests apply migrations to a real database. | Embed Ptah in Go |
ptah-action-e2eAction end-to-end checks | Test fixture | You maintain the Action. Workflows that use the Action do not need it. | Nothing further |
The status column uses these labels:
- Released. Publishes versioned releases.
- Experimental. Publishes releases and is still under development.
- Scaffold. Exists with no working features yet.
- Published site. A website, deployed from the repository.
- Evidence. Produces reports; not something you install.
- Test fixture. Exists to test another repository.
How the pieces connect
Section titled “How the pieces connect”An arrow follows the flow of work, from the component that starts it to the one that carries it on. Not every connection is a runtime dependency: installing, testing and linking are different relationships, and the table names each one.
| Relationship | Kind |
|---|---|
CLI / automation → ptah: Runs directly | Runs or calls |
| CLI / automation → Kubernetes API: Manages with kubectl | Runs or calls |
ptah-console → Kubernetes API: Reads and approves as you | Runs or calls |
Kubernetes API → ptah-operator: Reconciled by | Runs or calls |
ptah-operator → ptah: Runs executor Jobs | Runs or calls |
ptah → ptah-ydb-plugin: Starts the provider (experimental) | Runs or calls |
ptah → ptah-duckdb-plugin: No services yet (not implemented) | Runs or calls |
ptah → ptah-spanner-plugin: Starts the provider when installed (experimental) | Runs or calls |
homebrew-ptah → ptah: Installs release and edge builds | Installs |
ptah.run → ptah: Serves the installers | Installs |
ptah-action → ptah: Runs on pull requests | Runs or calls |
ptah.run → ptah-sandbox: Links to the playground | Documents or links |
ptah-sandbox → ptah: Runs it as WebAssembly | Runs or calls |
ptah-atlas-conformance → ptah: Measures compatibility | Tests or measures |
ptah-testkit → ptah: Wraps the Go API | Tests or measures |
ptah-action-e2e → ptah-action: Tests it end to end | Tests or measures |
Releases and compatibility
Section titled “Releases and compatibility”Ptah, the operator, the console and the providers have separate releases, and a new version of one does not imply a matching version of another. Each project publishes its own compatibility statement, so this page lists no version numbers:
- Ptah publishes its releases, and the support matrix lists the database release lines it covers.
- The operator runs a Ptah release image in its Jobs and publishes which Ptah build each operator release runs.
- The console is built against one operator release and publishes which console release goes with which operator release.
- A provider declares the provider contract it needs, and executable providers explains how Ptah picks a release it can run.
- Atlas compatibility is measured in
ptah-atlas-conformance, and conformance reports what those runs show.
Next steps
Section titled “Next steps”- To run your first schema change from a terminal, follow Get a first result.
- To check changes on pull requests, read CI integration.
- To manage databases from Kubernetes, read Kubernetes operator.