Changelog

What shipped, and when.

Kaja ships several times a week. This page carries the changes you would notice, in the words the console uses for them. Agent versions are named where the work went out in one, because the console tells you which version your clusters are running.

v0.2.19

A preview environment for every pull request

  • Added Preview environments. Turn them on for a project and every pull request against it gets a copy of that project, with its apps, managed services, secrets, routes and tasks, on its own URL. Kaja posts the URL to the pull request, keeps that comment current as commits land, and deletes the environment when the pull request closes.
  • Added A preview gets its own database by default, with its own credentials. Per service you can instead restore the base project's most recent backup into it, share the base project's instance, or leave the service out, and whichever you picked is named in the pull request comment.
  • Added Previews expire after a week with no pushes and are capped per project, so pull requests nobody is reading stop costing anything. Fork pull requests are refused unless you allow them, and the console states what one preview will reserve on the cluster before you switch them on.
  • Added Tasks. Run a container on a cron schedule or on demand, inheriting an app's image, variables and secrets, with a timeout, a retry count and an overlap policy. Each task keeps a history of its recent runs, with the outcome, the trigger and the reason a failed run gave.
  • Added A pre-deploy command on an app runs with the incoming image before that version serves anything. A migration that exits non-zero stops the rollout and leaves the previous version running.
  • Added kaja port-forward points psql, DBeaver or any other local tool at an app or database inside a cluster with no public address. It listens on loopback only, and is audited and limited exactly like a shell.
  • Improved kaja mcp gains opt-in write tiers, one for creating things and one for operating running ones. It is still read-only by default, no tier deletes anything, and no tool returns a secret's value.
v0.2.18

RabbitMQ, and deploys that say what they changed

  • Added RabbitMQ joins the service catalog, speaking AMQP 0-9-1 so Celery, Bull, Sidekiq and Spring AMQP connect to it unchanged. The management UI ships with it.
  • Improved A deployment shows what it actually changed, in the words the console uses: the image, the variables, the resources, the domains. Not a raw YAML document to compare by eye.
  • Fixed An app that pulls from a private registry keeps its pull credential when it is published. The credential it was given could previously not be traced back, so the image stopped pulling.
  • Fixed Each database now stores its own backup location rather than deriving it from the instance name. Two projects with a database of the same name were writing to the same place in the bucket.
  • Fixed Deleting a project no longer gets stuck partway through.
  • Fixed The API no longer returns session tokens, and actions a viewer is not allowed to take are no longer offered to them. Several paths where a request could reach another organization's data were closed.
v0.2.17

MongoDB, and a terminal that can connect a cluster on its own

  • Added MongoDB joins the service catalog, managed by the Percona operator and run as a replica set. Bound apps get a MONGODB_URL.
  • Added kaja init connects a cluster and installs the agent without leaving the terminal, so there is no token to copy from the console. It signs in with a device code, which means the machine running the CLI no longer has to be the machine with the browser.
  • Improved The clusters list is built around what needs attention rather than listing everything equally, and a cluster's name is checked before anything is created for it.
  • Fixed A MySQL service's disk can now be grown. It was previously fixed at the size it was created with.
v0.2.12

Three more data services, and the CLI can create things

  • Added ClickHouse for analytics, Qdrant for embeddings and vector search, and OpenSearch for full-text search.
  • Added The CLI creates apps and installs services, and deletes and uninstalls them again. deploy --wait blocks until the rollout finishes.
  • Added A locked route shows its credentials on the domain row, so a stack published from a template can be handed over without a separate message.
  • Improved The gateway went through a security review: the agent's identity is verified on connect, and a hostname can be taken down individually.
  • Fixed A cluster waiting to connect now says what to check, instead of waiting silently. A ping no longer erases the time it last connected.
v0.2.8

One-click stacks, and HTTPS that stops asking

  • Added WordPress and OpenClaw join Metabase and Umami as stacks that arrive wired to the database, secrets and disk they need.
  • Added A stack published from a template stays locked until its owner completes setup, so nobody else reaches the installer first.
  • Improved Certificates are issued without a separate approval step, and every service and stack in the catalog has a logo.
  • Fixed Revealing an environment variable shows the value in its own input rather than below the row, and resolves references against the connection secret they point at.
v0.2.7

Start from something, and keep data between restarts

  • Added One-click stacks: pick one and it creates the app, the database it needs, and the configuration joining them.
  • Added Attach a persistent disk to an app, so a stateful workload keeps its data across restarts and redeploys.
  • Added PostGIS is available from a Postgres service's own settings, alongside the extensions already there.
v0.2.6

A terminal, a dashboard, and an MCP server

  • Added kaja shell opens a terminal inside a running app or database from your own machine, and the console does the same from the browser. Terminal access is a permission of its own, and switching it off for the organization cuts every open session.
  • Added kaja dash is a live project dashboard inside your terminal, and kaja mcp hands the same read-only view to an AI agent.
  • Added Object storage, NATS with JetStream, and a mail catcher join the catalog.
  • Added Environment variables can reference a key in a secret or a managed service, so the name belongs to your app and the value belongs to the thing that owns it.
  • Improved The console supports a light theme and follows your system setting, and the brand accent moved from blue to violet.
  • Improved Viewer really means read-only. Every mutating surface is gated, and values render as text rather than as disabled inputs.

MySQL, and an honest cluster overview

  • Added MySQL becomes installable, managed by the Percona operator and fronted by a connection proxy.
  • Added The cluster overview shows capacity and agent health, so a cluster that cannot schedule anything says so before you deploy into it.
  • Improved Protected routes are gated on the server rather than in the browser.

Backups that wait for the snapshot

  • Added Point a managed database at an S3-compatible bucket you own and it takes scheduled backups, keeps the history, and refuses to delete the database until a final snapshot has been taken.
  • Added The agent updates itself from the console, so a fleet of clusters does not drift onto different versions.

Want something that is not here? Request it, or tell us what broke. There is no status page yet, which is stated on the homepage alongside the rest of what Kaja does not have.