Package first, deployment second
Akua starts from an explicit Package, not from automatic framework detection. Before a Product, Offer, or direct installation can run, the Package must describe what gets rendered, which inputs customers can set, and which cluster capabilities the install needs. This model keeps customer installs repeatable. Each Package version becomes a stable deployment contract that can be installed, audited, and reused across marketplace listings, private Offers, and internal installs. Installations created from that version can roll back through their repository history. If you’re bringing an existing application to Akua, choose the authoring path that matches the source you already have:
Akua does not infer production settings from
package.json, a Dockerfile, or a Git branch. Put those choices into the Package, then wrap the Package in a Product or Offer when you’re ready to sell it.
What a Package owns
Packages do not own pricing, customer targeting, payment collection, or marketplace visibility. Those belong to Products and Offers.
Package, Product, Offer
- Create or import a Package when you need a reusable install definition.
- Create a Product when that Package should become a sellable catalog item.
- Create an Offer when you want to send a customer a short URL with selected inputs, access rules, and commercial terms.
- Use a Direct install when the Package should run internally without Product or Offer wrapping.
Input schemas
Akua exports each Package version’sInput schema to drive generated forms. Docstrings become help text. @ui(...) annotations control grouping, ordering, widget hints, placeholders, and numeric bounds.
For authoring details, see Package format. For the customer-facing generated form, see Offers.
The namespace and release_name inputs
namespace and release_name are reserved. A Package whose Input declares either as a string field receives the installation’s own value there, whatever the field’s default says: its Kubernetes namespace, and a Helm release name unique to that installation. Pass both to every Helm dependency you template.
namespace puts the rendered resources where the installation deploys them. release_name keeps them apart from another installation of the same Package: a chart labels its pods app.kubernetes.io/instance: {{ .Release.Name }} and selects on that label from its Service, NetworkPolicy and PodDisruptionBudget. Two installations sharing a release name share those selectors, so each Service resolves to both installations’ pods. Distinct resource names do not separate them, because the selector never mentions the name.
Because the installation supplies both values, the generated form offers neither as an editable field, and an Offer cannot pin them. A Package that declares neither input receives its inputs unchanged.
Expose an HTTP service on managed KaaS
Managed KaaS clusters expose Package Services through Akua-managed routing. Don’t setspec.ingressClassName or the kubernetes.io/ingress.class annotation: managed clusters don’t install an in-cluster Ingress controller for Package traffic.
Render an HTTPRoute with a hostname, a Service backend, and the routing.akua.dev/output-name annotation instead:
spec.hostnames defines its public hostname, and backendRefs selects the Service and numeric port that receive traffic.
The example uses an Akua-managed preview hostname. Preview domains provide flat *.akua.run hostnames with managed DNS and TLS. To use a domain you control, configure custom-domain routing with Cloudflare Tunnel, then render that hostname in spec.hostnames.
API workflows
Use the Packages API when your automation needs to create or maintain Package records outside the dashboard.POST /packages:import and POST /packages/{id}/versions are for Packages that have already been published to an OCI registry. Your workspace must have published Package import access to use either endpoint. The API still requires you to send the version, immutable content reference, and input schema. Akua inspects the published artifact and rejects the request if the artifact metadata doesn’t match the values you send.
Public registries work without a saved credential. For private registries, add an active workspace registry credential that matches the registry or repository prefix before you import the Package.
Import a published Package
To import a published Package, your workspace must have published Package import access. UseAkua-Context when your token can access more than one workspace, and send an Idempotency-Key so the request is safe to retry.
id; you need it to add future versions, create Products, create Offers, or install the Package directly.
If you retry with the same Idempotency-Key and the same body, Akua returns the same imported Package. If you reuse the key with different Package or version data, Akua returns a conflict so your automation doesn’t accidentally point one retry key at two different artifacts.
Add versions to an imported Package
After an OCI-backed Package exists, add later published versions withPOST /packages/{id}/versions. This endpoint uses the same published Package import access as the initial import.
input_schema for each version, and Akua verifies both values against the published artifact before registering the version. Hosted Packages created through POST /packages publish versions through their Package creation flow.
API
Manage Packages programmatically from the generated API reference. To run a Package without wrapping it in a Product, create a direct installation from the Installs API.Packages API
Create Packages, import published Packages, add versions, and fetch input schemas.
Import a published Package
Register an OCI-backed Package and its first immutable version.
Create a Package version
Add another immutable version to an existing OCI-backed Package.
Products API
Wrap a Package into a sellable product.
Offers API
Create private or reusable sales paths for a Product or Package version.
Installs API
Run a Package version as a direct installation.
Related topics
Products
Turn a Package into a sellable catalog item.
Package format
Author
package.k, Input, and @ui annotations.Package repositories
Follow authored source into an immutable Package version.
Installation repositories
See how a Package version materializes for each install.