Changelog

What's new in klickops

Every release, newest first. Each opens with what changed and what may need you to act; the detail is one click further. Security fixes follow our disclosure policy.

October 2026 · 1 release

2026.10.1

SSH repositories connect again, bucket files need editor access

Repositories with a deploy key work again and explain why when they cannot connect, viewers can no longer read bucket files, and backup schedules run when they should.

2 changes may need you to act

  • If your install values set backend.adminUI, remove it; the install now stops with a message while it is set.
  • If a viewer should not have seen a database backed up to a bucket, change the passwords stored in that database.
Security 1

Databases & backups

  • medium Viewers could read the files in a bucket.

    Browsing and downloading a bucket's files now needs editor access, like its access keys. A bucket that keeps a database's backups holds a full copy of that database, so viewers could read its data.

    At risk: Project viewers could browse and download a bucket's files, including database backups, which hold a full copy of the database.

    Misuse: not yet checked

    You: If a viewer should not have seen a database backed up to a bucket, change the passwords stored in that database.

Improved 3

Apps & projects

  • Blocked calls to your own app suggest its direct address.

    When something in a project calls one of its apps by the public domain and is blocked, the Network view shows the app's in-project address to use instead of allowing the detour.

Databases & backups

  • Database backups warn before their bucket fills up.

    A full backup bucket stops backups and, later, the database. Data & backups now warns once a bucket with a size limit is 70% full, and backup destinations set up from now on store compressed snapshots.

Web app & notifications

  • The unused admin-path allow list is gone from the install.

    It guarded an address nothing serves any more. Platform administration stays in the operator console, behind a superuser check.

Fixed 14

Apps & projects

  • Invalid autoscaling limits are refused up front.

    A minimum of 0, a maximum below the minimum or a CPU target outside 1-100 now fails with a message naming the field instead of leaving a half-saved setting.

  • A migration command set when creating an app is kept.

    It used to be dropped without a warning. It now runs before every later version change, and before the first build of an app deployed from a repository.

  • Apps mounting configuration as files start on first deploy.

    A secret or config file mounted when the app is deployed no longer leaves it waiting for storage that never arrives, and storage marked for file backups is backed up from the first deploy.

Builds & deploys

  • Repos with only a Containerfile build.

    A repository whose build file is named Containerfile or dockerfile was offered as buildable, then failed with "no Dockerfile". It now builds.

  • Previews never touch apps or certificates that aren't theirs.

    An app named like a preview keeps its branch, an uploaded certificate named like one is kept, and deploying from a repository never reuses a connection to a different URL.

  • Pull request previews no longer run your database migrations.

    A preview skips the app's release command, so an unreviewed pull request never changes your live data. The command runs once the change is merged and deployed.

  • A push builds apps that follow any branch.

    An app set to build from a branch other than the repository's default now builds and deploys on every push to that branch, not only after "Build now".

  • Repositories connected with an SSH key work again.

    Loading branches and commits failed for every repository using a deploy key. When a repository cannot be reached, the message now says why: a rejected key or token, a wrong URL or branch, or an unreachable server.

  • Static sites deployed from a repository start again.

    The deploy screen shows the detected build and start commands as suggestions and only uses the ones you type, so a Vite or React site is served from its built files instead of a guessed command.

Databases & backups

  • Backup schedules set outside the web app run as asked.

    A daily database backup set from klops or an AI assistant ran every hour instead. Existing schedules are corrected automatically, and a custom schedule in the web app now takes the usual five fields.

  • A restored database keeps backing up.

    It archives to the same bucket as the database it came from, counts toward your plan's database limit, and a restore to a taken name or a future time is refused with a clear message.

Account & organization

  • Error messages say organization, not team.

    Permission, "already exists" and "not found" messages for organizations and their channels now use the same word as the rest of the product.

Web app & notifications

  • App lists show the address of apps routed through Domains.

    The project overview and the Apps list left the address blank for any app whose domain was added under Domains. They now show its first domain, and "+N" when it has more.

  • A new app's address is called live once HTTPS works.

    The deploy screen used to offer the https link as soon as the app was healthy, while its certificate was still being issued. It now says it is securing the address and shows the link when the certificate is ready.

September 2026 · 13 releases

2026.9.13

CPU alerts for every app, plan limits in the bucket dialog

CPU alerts now fire for apps without a CPU limit, bucket sizes keep to your plan everywhere, and AI tools can set every app setting the web app can.

1 change may need you to act

  • If you run klickops yourself, check each organization's default project quota.
Security 1

Account & organization

  • medium Only a platform admin sets an organization's quota.

    An organization admin could raise their own organization's default quota on installations run by an operator.

    At risk: On an installation you run yourself, an organization admin could raise the default resource quota the platform admin set for their organization, and apply it to its projects. The hosted platform was not affected.

    Misuse: not yet checked on self-hosted installations; the hosted platform never runs this code path

    You: If you run klickops yourself, check each organization's default project quota.

Improved 1

Command line & AI tools

  • AI tools set ports, volumes and health checks on apps.

    When an AI assistant deploys or changes an app through the klickops tools, it can now also set project secrets and configuration, env from domains, and image updates, as the web app can.

Fixed 6

Apps & projects

  • CPU alerts fire for apps without a CPU limit.

    Apps on paid plans have no CPU limit, so the CPU alert could never fire for them. It now compares usage with the app's CPU request when there is no limit.

Command line & AI tools

  • AI tools can keep a certificate's CA chain.

    Replacing an uploaded certificate through the klickops tools removed its CA chain, because the tools could not send one. They can now.

Billing & plans

  • Changing a bucket's size keeps to your plan's limit.

    Creating a bucket already capped its size at your plan's limit; changing the size afterwards did not.

Account & organization

  • Account settings stay reachable without an organization.

    After deleting your last organization, the setup screen links to your account settings, so you can delete your account instead of creating a new organization.

Web app & notifications

  • The bucket size dialog offers only what your plan allows.

    On a plan that caps a bucket, it no longer offers "No limit" or sizes past the cap, and it says what the cap is.

  • Notification filters refuse event names that never arrive.

    A channel's event filter matches exact names, so a typo or a wildcard stored fine and silenced the channel. Such a name is now refused, with the list of valid ones.

2026.9.12

Release notes you can skim, and a reply when your fix ships

Release notes open with a summary and what needs you, you hear back when something you asked for ships, you can delete your own account, and API tokens stay with your organization.

  • Release notes open with a summary. Each release shows what may need you to act and its highlights first, and folds every other change away by area: in the app, on the changelog page and in the weekly email.
  • Hear back when what you asked for ships. Once a fix for your support request is live, klickops replies in the thread and marks it resolved; your feature requests show what was decided, and what's new lists your own shipped asks first.
New 1

Account & organization

  • You can delete your own account.

    Settings, Account lists what goes (sign-in methods, tokens, memberships) and what your organizations keep, then signs you out everywhere. An organization's only owner is told which one to delete or hand over first.

Improved 3

Command line & AI tools

  • Scheduled jobs work fully from the command line.

    klops scheduled-jobs runs lists each run with its status and duration, logs shows the newest run unless you name one, and jobs can read project secrets and keep their image updated, from klops and your AI tools.

Account & organization

  • API tokens stay with your organization.

    A token keeps working after the person who created it leaves or deletes their account. The token list shows who created each one, so you can review them when someone leaves.

Web app & notifications

  • Security fixes say what was at risk.

    Release notes list each closed hole under Security with its severity, what was at risk, what was checked for misuse and what, if anything, you need to do.

Fixed 1

Web app & notifications

  • Alerts on a scheduled job's run open that job.

    When a run kept crashing, whether started by hand or on schedule, the project overview linked its alert to an app named after the run, which showed "App not found".

2026.9.11

Safer restores, builds that stay in their project, and a sturdier platform

Builds, previews and restores stay inside their own project, a restore refuses what it cannot bring back, and the command line catches up with the web app.

3 changes may need you to act

  • Build registries on plain HTTP or with a self-signed certificate need "Allow plain-HTTP / self-signed certificates" turned on in their settings.
  • Scripts that use --team or the AI tools klickops_patch_scaling, klickops_list_builds, klickops_get_build or klickops_trigger_build need the new names listed under Improved.
  • klickops_create_restore, klops recovery object and klops apps networking set are gone; Improved and Fixed name what replaces them.
  • More of the web app is now in the command line. klops adds and removes an app's sidecar and init containers, applies a recommendation's automatic fix, turns backups of a standalone volume on or off, follows or stops a database import, reads and replaces your organization's join allowlist, and shows the bill, past statements, metered usage and wallet. A scheduled job's run logs now open only under the job that ran them.
  • Report an error from the error page. When a page fails to load, a Report this button opens a support request that already names the page and the error, so you only have to add what you were doing.
  • A restore no longer deletes a volume it cannot bring back. Restoring an app, a volume or the project now first checks that the recovery point finished, belongs to this project, saved volume data and holds every volume it would replace, and says why when it does not. A volume created after the point stays untouched by a whole-project restore, an app restore brings back only that app's volumes, and a second restore of the same app or volume is refused while the first one still runs.
Security 7

Builds & deploys

  • medium Builds did not check the build registry's certificate.

    Builds now check the build registry's certificate before pushing. If your build registry runs on plain HTTP or uses a self-signed certificate, turn on "Allow plain-HTTP / self-signed certificates" in its settings.

    At risk: An image push could be read or changed by anyone able to intercept traffic between a build and your build registry.

    Misuse: not yet checked

    You: If your build registry uses plain HTTP or a self-signed certificate, turn on "Allow plain-HTTP / self-signed certificates" in its settings.

  • medium A finished build could roll out to the wrong app.

    A finished build is now rolled out only to the app it was built for.

    At risk: A finished build could be rolled out to an app other than the one it was built for.

    Misuse: not yet checked

    You: Nothing.

  • high Same-named projects could see each other's builds.

    Build history and logs, previews, restore history and the concurrent build count only ever show your own project, even when another organization has a project with the same name. Disconnecting a repository now also unlinks the apps built from it; they keep running their last version.

    At risk: Build history and logs, previews and restore history could appear in another organization's project with the same name.

    Misuse: not yet checked

    You: Nothing.

  • high A pull request preview could change the app it was copied from.

    A pull request's preview never builds or updates the app it was copied from, and an app deployed from a repository without a chosen branch builds only from the repository's default branch.

    At risk: Opening a pull request could build and update the running app the preview was copied from.

    Misuse: not yet checked

    You: Nothing.

Databases & backups

  • medium A restore could reopen network access you had closed.

    A restore no longer puts back the firewall rules, network isolation or resource limits a recovery point held: they stay as they are now, and the project is brought in line with the platform's current settings once the restore finishes. klops recovery object and its two AI tools are gone: they rolled back every configuration entry of a kind in the project, not only the one named.

    At risk: Restoring an older recovery point put back the firewall rules, network isolation and resource limits it held, undoing later changes.

    Misuse: not yet checked

    You: Nothing.

Account & organization

  • high API tokens could change how you sign in.

    Sign-in methods, passkeys, email preferences, terms and project roles can only be changed from a signed-in session, never with an API token.

    At risk: Someone holding one of your API tokens could change your sign-in methods, passkeys, email preferences, terms or project roles.

    Misuse: not yet checked

    You: Nothing.

  • low Organization API tokens could change the plan.

    Changing the plan and requesting a top-up or a bigger plan now need a person signed in, like managing members does. A token for the whole organization can still read the bill.

    At risk: A token for the whole organization could change the plan or request a top-up without a person signing in.

    Misuse: not yet checked

    You: Nothing.

New 2

Command line & AI tools

  • Manage scheduled jobs from the command line, and read past logs.

    klops scheduled-jobs now creates, changes and deletes scheduled jobs, sets and removes their config values and secrets, and shows the logs of a single run. klops logs <app> --since 6h reads an app's earlier logs, including those of pods that no longer exist. The AI tools (MCP) gained the same log reads and a single call that gathers a project's recent events with an app's settings, pods and recommendations.

  • Read your support requests from the terminal and your AI assistant.

    klops support list shows the requests you filed and klops support get prints one with its whole conversation; your AI assistant can read them through the MCP server too. Asking for help and replying still happen in the web interface, where your screenshots and the page you were on come along.

Improved 12

Command line & AI tools

  • Retired names are gone from the command line and the AI tools.

    klops no longer accepts --team; use --org. The AI tools klickops_patch_scaling, klickops_list_builds, klickops_get_build and klickops_trigger_build are removed; klickops_set_scaling, klickops_list_app_builds, klickops_get_app_build and klickops_trigger_app_build do the same. klops config set-team, klops use-team and klops quota apply-team-defaults still work but now warn that they will be removed: use the org names instead.

  • Two calls that never did what they said are gone from klops and the AI tools.

    klops apps networking set and klickops_set_app_networking could not change a domain and stored settings nothing used: change a domain under Domains or with klops domains apply. klickops_create_restore skipped everything the project still had, so a restore over a running project brought nothing back: klickops_restore_project_recovery restores the project the way the Backups page does, optionally only named apps and volumes. klops apps networking get now reports the class and certificate issuer of the app's actual domain.

Billing & plans

  • Clearer billing charts.

    Every meter on the Billing page has its own colour, tuned for light and dark mode and easier to tell apart with colour blindness. Build usage no longer shares the grey of backups and the month-end forecast.

  • Your billing timeline shows corrections made on your behalf.

    When usage is taken off your bill or your included credit is changed for you, the Statements timeline now says what changed and by how much, instead of your figures moving with no explanation.

Web app & notifications

  • Cleaner buttons, borders and loading spinners.

    Icon and text buttons no longer draw a grey box around themselves, warnings and highlighted cards show their intended border colour, and loading spinners visibly turn.

  • Every form field has a working label.

    Clicking a field's label now focuses the field, and screen readers announce what each field is for, in every form from deploying an app and creating a database to domains, scheduled jobs, certificates and organization settings. Choice buttons such as the builder, backup frequency or weekday pickers announce which option is selected.

  • Icon buttons are announced by screen readers.

    Buttons that show only an icon, such as removing a secret, resetting the terminal or jumping to the newest log line, now say what they do and to what. Copy buttons that show a value, like a domain or a certificate fingerprint, now say they copy it.

  • The same words everywhere.

    Database cards, status bars, restart messages and firewall policies now talk about copies and projects, the way app cards already did, instead of switching to infrastructure terms from one screen to the next.

  • Log views and terminals have a fair-use limit.

    Each person can keep up to 20 log, live view or terminal sessions open at once, and a log view starts from at most the last 5,000 lines.

  • Support answers show up in your notification channels.

    When your platform administrator replies to one of your organization's support requests, your Slack, Teams, webhook and email channels now say so, next to deploys and alerts; the answer itself stays in the conversation for the person who asked. Feature requests from the Roadmap page now reach the platform team the moment you send them.

  • Release notes arrive once a week.

    Instead of a mail for every release, you get one summary of the previous week's releases.

  • What's new waits for you instead of popping up.

    A new release is announced by the What's new button at the top: it names what shipped for a few seconds, then shows how many releases you have not read until you open them. The notes now open on everything since your last visit, not only the newest release, with a timeline of every release beside them. A tab left open through an update says "Update ready", and one click reloads it straight into what changed.

Fixed 33

Apps & projects

  • An app's internal address now works when you copy it.

    The address other apps use to reach an app, shown on its Overview and Networking tabs, pointed at a location that does not exist. Both tabs now show the address the app actually answers on.

  • A cloned project's apps use the clone's own domain addresses.

    An app setting bound to a domain's address kept the original project's address after a clone, and later changes to the clone's domain never reached it. It now names the clone's domain and follows it; a setting bound to a domain the clone does not copy is removed.

  • Apps in a cloned project keep their settings.

    A cloned app lost its volumes, configuration keys, database connections, Git repository, update checks and icon, and its next edit could remove environment variables it still used. The copy now keeps all of it; only the results of past update checks start fresh. An app cloned into another organization leaves its Git repository behind, because the repository belongs to the original organization, and the clone says so.

  • Saving the same setting twice at once no longer fails one of the saves.

    Two saves of an app's configuration, a volume, a firewall rule or a project's capacity that arrived together could answer one of them with an error; both now succeed and the later one wins. Cloning a project now also lists what could not be copied apart from what it leaves out on purpose, and klops projects clone fails when the clone is incomplete.

  • Apps and scheduled jobs can use spare CPU again.

    Automatic sizing could cap a mostly idle app at a fraction of a core, so a long import or export crawled. On paid plans CPU is no longer capped; memory still is. An existing app picks this up the next time you restart it or save a change.

  • "Open in Grafana" is back on the Metrics tab.

    Where your platform administrator connected Grafana, the Metrics tab of an app, a database and a bucket had lost its button. It opens the matching dashboard again, for the same time range.

Builds & deploys

  • Builds deploy only the app they were started for.

    Build now, an app's first build and a watched repository's new commit now build just that app, where they also rebuilt every other app on the same repository and branch. Two projects with an app of the same name each get their own build, a build that finishes late never replaces a newer version that is already running, and an app set to only record new commits is no longer deployed by a push.

  • A build that cannot start says so.

    Build now answers with an error instead of reporting a build that never began, a push is retried by your Git host, and a watched repository tries the commit again on its next check. Your plan's limit on builds running at once now holds for every build, and a build is stopped after 45 minutes or about 20 GB of disk, so a stuck build no longer holds your organization's build slot.

  • Connecting GitLab works again.

    Signing in with GitLab to pick projects always came back with an "invalid state" error, so no GitLab project could be connected that way.

  • Detecting a very large repository fails fast with a clear message.

    The deploy wizard now says the repository is too large to inspect and suggests setting the subpath to the app's directory, which inspects only that directory. Before, one large repository could slow detection, branch and commit listing down for everyone. Apps that watch their repository for changes also no longer wait behind one unreachable repository.

  • Webhooks you set up by hand now work.

    When a repository's webhook could not be registered automatically (an SSH key, or a token without webhook permission), the secret the webhook needs was never shown, so every push was refused and the repository said no events had arrived. Connecting now shows the secret once, next to the webhook URL, with a copy button, and klops repos add prints it. For a repository connected earlier, open it and rotate the webhook secret to get a new one. The AI tools never see it.

  • Rotating a webhook secret keeps pushes building.

    When klickops set up the webhook on GitHub or GitLab itself, rotating its secret now updates that webhook too, so there is nothing to paste. Before, the provider kept the old secret and every push after the rotation was refused. If the provider does not accept the change, the new secret is shown once to paste by hand.

  • Pushes build what they should, even across an update.

    Pushing or deleting a tag, or deleting a branch, no longer starts a build. A push that arrived while the platform was restarting is now built once it is back, a preview whose pull request was closed in that window is removed within the hour, and a preview that could not be removed is retried when the delivery is sent again.

Databases & backups

  • Volumes in a cloned project come up.

    Cloning a project with its volumes created volumes that never became ready, so the apps using them stayed stuck starting. A cloned volume is now created fresh and empty, as the clone promises, and its apps start.

  • Changing a database's version always runs the upgrade checks.

    Setting a version while editing a database from the CLI or an AI assistant now refuses an older version, and a new major PostgreSQL version waits for a completed backup from the last 24 hours, exactly like the Upgrade action. Asking the Upgrade action for an older version now says it was refused instead of reporting an upgrade that never happened.

  • Installing a database extension and applying a recommended fix report the right result.

    Installing an extension through the API or the MCP server without naming a database answered with an error although the extension was installed, and applying a recommended fix that was already in place showed an error instead of the app's current recommendations. Error messages from connected repositories and bucket storage were also hardened.

  • Deleting a project removes its backups.

    The backup schedule kept running after a project was deleted, and its recovery points stayed in storage. Both now go with the project. Backup schedules set through the CLI or the API run at most once an hour, and recovery points are kept for at most 365 days.

  • Backups pages no longer offer Restore on a recovery point without data.

    Recovery points that appeared while the page was open were always shown as holding volume data, even when they held none. A restore now also stops the apps and scheduled jobs that are not running at that moment, so none of them starts using a volume while it is being restored.

Command line & AI tools

  • The AI tools say what a call will do.

    Deleting an app, a database or a volume now spells out what goes with it, calls that replace a whole list or cannot be undone are flagged so your editor can ask you first, database queries are marked as read-only, and tools only your platform administrator may use are no longer offered. Changing a project's quota without that permission now tells you who can reset it, instead of pointing at a request form that no longer exists.

  • Adding a sidecar or init container through the AI tools works.

    The tool (MCP) never passed the container's name on, so every call failed; it now takes the app and the container name separately, and a command and arguments too. The usage tool can also report a period other than the current month.

  • Fewer AI tool calls fail on a field klickops does not accept.

    Through the AI tools (MCP), adding a pull credential always failed, and so did setting an organization's SSO groups, rotating a repository's webhook secret, marking a build registry as insecure, queueing a rebuild with new build settings, replacing a bucket's lifecycle rules, skipping database updates, editing a database's access rules, and scaling an app or cloning a project with options klickops never had. The tools now offer only what klickops accepts, in the shape it expects.

  • The klops command line asks before it destroys something.

    Commands that delete, revoke, restore over or roll back something now ask for a yes on a terminal, and name what they are about to remove and in which project. Scripts and CI have no one to answer, so they need --yes (or -y) and otherwise stop with exit code 2 before anything changes. Applying a domain from a file also reports why an update was refused, instead of claiming the domain already exists.

  • Switching contexts with klops works.

    klops config use-context, current-context, list-contexts, set-org and set-project could not be reached, because the commands for configuration values had the same name. Those are now klops configmaps list, set and delete; the old klops config list, set and delete keep working for two more releases and print a note naming the new command.

Billing & plans

  • Bigger apps deploy after you leave the free plan.

    Projects created on the free plan kept its limit of 1 vCPU and 1 GB per container after an upgrade or a promo code, so a larger app was refused. Upgrading now lifts that limit on existing projects too, and a promo code redeemed after your projects exist raises their capacity right away.

  • Running out of project room now says what actually helps.

    A database that could not start, or a disk that would not fit, told you to raise the project quota or request more room, which you could not do yourself. It now points at a bigger plan, or, on a self-hosted install, at your platform administrator. The API token dialog also no longer claims an admin token can manage members: no token can manage members or other tokens.

  • Projects get the full memory their plan includes.

    A project could run out of memory capacity at about half of what its plan includes. Your plan's CPU and memory now count only what your apps reserve.

  • The plan page no longer says a promo raised your limits when it didn't.

    If your plan already includes higher limits than your promo code, the page used to claim the code had raised them to its lower tier. It now only mentions the promo when it actually gives you more room.

  • Signing up with a promo code is clearer.

    A valid code on the website now takes you straight to sign-in, and error messages there follow the page language. When a code can't be used, you're told why: it expired, it's used up, it isn't valid, or it only covers another email domain. If the code is for a different address than the one your GitHub or Microsoft account shares, you're asked for that address and sent a sign-in code. After you create your organization, the credit is only reported as added once it has actually landed.

  • Running out of project room no longer offers plans on a self-hosted install.

    The dialog said your plan was at its limit and pointed at plans that do not exist there. It now says the project is out of room, leaves raising it to your platform administrator, and only closes.

Account & organization

  • Removing someone from your organization takes effect right away.

    A removed member could keep opening the organization's projects for up to half a minute. Their access now ends on their next click.

  • Your new organization shows up right away.

    After naming your organization on first sign-up, the organization switcher showed a bare address with nothing to pick until you reloaded the page. It now shows your organization's name immediately.

  • You can edit and delete a project you created outside any organization again.

    On a self-hosted install, whoever created a project with no organization was refused as if they were not its creator when they tried to rename or delete it.

Web app & notifications

  • The status page reports a platform outage while it happens.

    When the platform's infrastructure stopped answering, project pages failed while the status page still said everything was operational. It now shows the platform as degraded until the outage ends.

2026.9.10 Sandboxed builds work 1 fix
  • Builds from your repository work again in the isolated sandbox, and each build step is faster.

    Building an image in the sandbox could fail on a COPY --chown step and ran every step slowly; both are fixed.

2026.9.9

Security hardening: invitations, verified domains, sandboxed builds

Sign in with a passkey or an emailed code, verify a domain once for your whole organization, and builds run in their own sandbox.

3 changes may need you to act

  • Connecting a new domain of your own to an app first needs it verified under Organization, Domains; domains that already work keep working.
  • Self-hosted installs: remove the chart option that publishes platform metrics before upgrading.
  • Self-hosted installs: production now needs a strong administrator password.
  • Sign in with an emailed code, and use any GitHub or Microsoft account. Your account is now the email address you signed up with. Enter it on the sign-in page and klickops emails you a 6-digit code, no password needed. If you joined with a work address but your GitHub uses another one, sign in with GitHub, confirm your work address once, and GitHub signs you in to that account from then on. Connect or disconnect sign-in methods under Settings.
  • Sign in with a passkey. Add one under Settings, then sign in with Touch ID, Windows Hello, your phone or a security key: no email, no code, nothing to type. Your account keeps its email code as the way back in, so removing a passkey never locks you out.
  • Verified domains. Prove once that your organization owns a domain by adding one DNS record under Organization, Domains, and every project in the organization can use it and all of its subdomains. Connecting your own domain to an app now needs that proof first; domains that already work keep working.
Security 28

Apps & projects

  • high A project could get certificates for addresses not its own.

    Domains and certificates only use the certificate authorities and routing options the platform offers, and a requested certificate can only cover addresses that belong to your own project. Wildcard certificates can no longer be requested there; list each address instead, or upload a certificate you already have.

    At risk: Domains and certificates accepted addresses outside the project, wildcards, and certificate authorities the platform does not offer.

    Misuse: not yet checked

    You: Nothing.

  • high A domain rule also reached the provider's metadata service.

    Firewall rules for a domain name are tightened. An app allowed to reach a domain can no longer use that rule to reach the hosting provider's metadata service. Existing rules get the change automatically, with nothing to re-save.

    At risk: An app allowed to reach a domain name could use that rule to reach the hosting provider's metadata service.

    Misuse: not yet checked

    You: Nothing: existing rules were updated automatically.

  • medium Older internet rules still reached private addresses.

    Firewall rules to the internet now mean the public internet, including older ones. A "Public internet" rule saved before the last update is brought in line automatically, with nothing to re-save. A domain-name rule has to name a public website or service: addresses and internal names are refused, so use an address range for a public address and an app rule for apps in your project. "Create from observed traffic" no longer suggests a rule for a private address it could not reach.

    At risk: Firewall rules for the public internet saved before the previous update still allowed private and internal addresses.

    Misuse: not yet checked

    You: Nothing: existing rules were updated automatically.

  • high Apps and builds could reach private networks.

    Internet access now means the public internet. Apps and builds keep reaching the internet as before, but can no longer reach private networks outside your project or the hosting provider's internal addresses. Existing projects get the change automatically.

    At risk: Internet access included private networks outside your project and the hosting provider's internal addresses.

    Misuse: not yet checked

    You: Nothing: existing projects were updated automatically.

  • high A cloned project could skip the security baseline.

    Cloning a project follows the same rules as creating one. A clone needs an admin of the organization it lands in, by default the one it was cloned from, counts toward that organization's project limit, and starts with the same security, network and capacity defaults as a new project.

    At risk: A clone could land in another organization, bypass its project limit, and start without the platform's security and network defaults.

    Misuse: not yet checked

    You: Nothing.

  • medium A same-named project could reach yours on some clusters.

    Apps inside a project keep reaching each other as before. Existing projects get the change automatically.

    At risk: Where the main network policy engine was missing, a project accepted traffic from a project with the same name in another organization.

    Misuse: not yet checked

    You: Nothing: existing projects were updated automatically.

  • medium A domain could claim an address the platform serves.

    A Domain or certificate can no longer use an address the platform itself answers on, or one that something else on the platform already serves. The three baseline switches on the Network page are now changed only there: a firewall rule can no longer be named like one of them or remove one. Where your platform administrator has turned internet access off, "Reach the internet" stays off and firewall rules can only reach apps in the project and name lookups; ask your platform administrator if a project needs an exception.

    At risk: A Domain or certificate could use an address the platform or another customer already serves, and a firewall rule could remove the project's baseline.

    Misuse: not yet checked

    You: Nothing.

  • high Apps behind single sign-on received your klickops session.

    Signing in to an app behind single sign-on no longer shares your klickops session with that app. Each protected app gets its own sign-in that works only for that app, and the app stops receiving the sign-in cookies at all, including on domains protected before this update.

    At risk: An app behind single sign-on received its visitors' klickops sign-in, which the app's owner could reuse.

    Misuse: not yet checked

    You: Sign out everywhere once if you opened an app behind single sign-on that another organization runs.

  • high Part of an app behind single sign-on answered without sign-in.

    Apps behind single sign-on stay private under the certificate-validation path. Such an app no longer answers unauthenticated requests there beyond the one certificate check it needs to renew, and signing in to it only returns you over a secure connection.

    At risk: Requests under the certificate-validation path reached an app behind single sign-on without signing in.

    Misuse: not yet checked

    You: Nothing.

  • high Custom security settings switched off an app's isolation.

    Every app now runs isolated, whatever its security settings. Apps keep the security settings you give them, but those settings no longer switch off the isolation every workload runs with. Scheduled jobs, release commands, and init and sidecar containers are isolated the same way, and sidecar images go through the same checks as your main image. Saving the Advanced tab now sends only the settings you changed, so editing a command no longer loosens an app's security. On the hosted platform an app may only add the permission to listen on ports below 1024, and may run as root only while isolated.

    At risk: An app with custom security settings ran without the isolation every workload should have, with more access to its machine than intended.

    Misuse: not yet checked

    You: Nothing.

  • medium Workloads carried platform access they never used.

    Apps, scheduled jobs and release commands no longer carry platform access they never used, and reach object storage only through its storage endpoint. Databases, buckets and backups work as before. Existing apps pick up the change the next time you save them.

    At risk: Apps, scheduled jobs and release commands carried platform credentials and storage access they never needed.

    Misuse: not yet checked

    You: Save each app once to pick up the change.

Builds & deploys

  • medium Update checks could be pointed at internal addresses.

    Update checks and repository access only reach public addresses, a Git push delivered twice starts one build, and a failed update check says in one plain sentence why. klickops no longer follows a Git host's redirect: if you renamed or moved a repository at your Git host, update its address under Repositories.

    At risk: Image update checks and repository access could reach internal addresses, directly or through a redirect.

    Misuse: not yet checked

    You: Nothing.

  • high A fork's pull request could get your app's settings.

    A pull request from a fork never gets a preview with your app's settings unless you allow forks.

    At risk: A pull request from a fork could start a preview with your app's settings and secrets.

    Misuse: not yet checked

    You: Nothing.

  • medium Git could misread a repository password.

    Repository passwords and tokens are now handed to Git in a way that never interprets their content, whatever characters they contain.

    At risk: A repository password or token with certain characters could be interpreted by Git instead of passed as-is.

    Misuse: not yet checked

    You: Nothing.

Databases & backups

  • medium A database access rule could skip the password.

    Database access rules and imports from another server are now checked more strictly. Access rules accept only password and reject rules and name the line they refuse. An import from another server accepts only the common connection settings and always connects to the address it checked.

    At risk: Database access rules accepted methods without a password, and an import could connect to an address other than the one checked.

    Misuse: not yet checked

    You: Nothing.

  • medium Viewers could read a database's live password.

    Database credentials are now shown to editors only, and the query console runs one statement at a time. A database's connection details include its live password, so viewers no longer see them; only editors do. The query console also runs a single statement per request, so an admin command can no longer carry a second one along with it.

    At risk: Project viewers could read a database's connection details, live password included.

    Misuse: not yet checked

    You: Change a database's password if a viewer should not have seen it.

Command line & AI tools

  • medium The command line could send your sign-in to another server.

    A name containing a slash, a question mark or a hash always reaches the resource it names. The CLI no longer sends a saved sign-in to a different server you point it at; it tells you so and asks for a token or a fresh sign-in for that server, and the AI tools do the same. AI tools now tell your editor which of them only read and which delete or overwrite, so it can ask before the risky ones. Device sign-in links always point at your klickops address.

    At risk: The command line and AI tools sent a saved sign-in to a different server they were pointed at.

    Misuse: not yet checked

    You: Nothing.

  • high An API token could become its creator's full session.

    Signing in the CLI from another device now needs your browser. The short code that klops auth login --device prints can only be approved from a browser where you are signed in, not with an API token.

    At risk: An API token could approve a command-line sign-in and get the full session of the person who created it.

    Misuse: not yet checked

    You: Nothing.

  • low The installer could point the CLI at another address.

    The install command always downloads from, and points the CLI at, your own klickops address.

    At risk: The install command could download from, and configure, an address other than your own klickops.

    Misuse: not yet checked

    You: Nothing.

Account & organization

  • high An organization could take in another company's people.

    Automatic joining only works for your own company's email domain. The "Allowed to join" list of an organization now accepts only addresses and domains on the email domain you sign in with, and never a public email provider such as Gmail. Invite anyone else by email instead.

    At risk: An organization could list another company's email domain for automatic joining, so people signing up with it joined that organization.

    Misuse: not yet checked

    You: Check your organization's members for anyone you do not know.

  • medium Read-only projects and scoped tokens reached too far.

    GitOps-managed projects now stay read-only for every change except export, database queries, backups and cancelling a running operation. An API token made for one organization is refused for projects in your other organizations. A project deleted and recreated under the same name now opens the new project right away, not the one still being removed.

    At risk: GitOps-managed projects could still be changed through a few actions, and an organization API token worked on projects in its creator's other organizations.

    Misuse: not yet checked

    You: Nothing.

  • medium API tokens could invite people to an organization.

    An invitation now goes to exactly one email address, and so does the billing email of your organization; a pasted "Name <address>" is trimmed to the address. Only a signed-in owner or admin can invite people, not an API token, and each organization can send a limited number of invitations per day. Organization names and support request summaries must fit on one line.

    At risk: An API token could send invitations, and one invitation could go to several addresses.

    Misuse: not yet checked

    You: Nothing.

  • high Signing out did not end a session.

    Signing out now ends the session, and a sign-in lasts at most a week. Signing out in the browser or with klops auth logout now ends that session on the server too, and after seven days you sign in again, however often you used klickops in between.

    At risk: A session stayed valid after signing out and could be renewed indefinitely.

    Misuse: not yet checked

    You: Nothing.

  • medium Terminals reconnected after you signed out.

    Signing out now also covers terminals and port-forwards. After you sign out, or an administrator signs you out everywhere, a terminal or port-forward session can no longer reconnect with the old sign-in, and opening a new one asks you to sign in again.

    At risk: A terminal or port-forward session could reconnect with a sign-in that had been ended.

    Misuse: not yet checked

    You: Nothing.

  • medium The administrator password could be guessed without limit.

    The administrator password sign-in is harder to guess. After several wrong passwords for the same email, further attempts are paused for a while. Production installations now require a strong administrator password, and can switch password sign-in off entirely and rely on single sign-on alone.

    At risk: Password sign-in for the platform administrator allowed unlimited attempts.

    Misuse: not yet checked

    You: Self-hosted installs: set a strong administrator password.

  • medium Roles could apply to an unverified email address.

    Roles and administrator access given to an email address now apply only when your identity provider has verified that address. Signing in with GitHub uses your primary address when GitHub has verified it, and otherwise another verified address on your account.

    At risk: Roles and administrator access given to an email address applied even when the identity provider had not verified it.

    Misuse: not yet checked

    You: Nothing.

Web app & notifications

  • low Platform metrics could be public on some self-hosted installs.

    Platform metrics stay private. The monitoring endpoint now answers only the in-cluster scraper and is never reachable from the internet. Self-hosted installs that had turned on the chart option publishing it must remove that option before upgrading.

    At risk: The monitoring endpoint was reachable from the internet where a self-hosted install published it.

    Misuse: not yet checked

    You: Self-hosted installs: remove the chart option that publishes platform metrics before upgrading.

  • high A support attachment could run script for the platform team.

    Screenshots on support requests must be PNG, JPEG, WebP or GIF. Other file types are refused with a clear message. Screenshots attached from the support form are converted automatically, so nothing changes for you there.

    At risk: A file attached to a support request could run script in the session of the platform team member who opened it.

    Misuse: not yet checked

    You: Nothing.

New 6

Account & organization

  • Choose which emails you get.

    Settings now lists getting-started tips, release notes and incident mail with a switch each, and names the mails that always arrive because you have to act on them or should know: invitations, security notices, billing and support. Every optional mail also carries a one-click link to turn that kind off.

  • Nobody joins an organization without accepting.

    Adding a member now always sends an invitation, and the person joins only after they accept it under Invitations in the sidebar, or on the page they land on when they belong to no organization yet. Signing in never adds you anywhere by itself, and someone on an organization's "Allowed to join" list now gets an invitation too instead of being added. Inviting answers the same way for every address, so it no longer tells you who already has an account.

  • Leave an organization yourself.

    Members now have Leave organization under Your membership on the Members page. You lose access to its projects right away and need a new invitation to come back. An organization's only owner can't leave until someone else is an owner too.

Web app & notifications

  • Getting-started emails after you sign up.

    A welcome with the three steps to a running app, a reminder two days later if nothing is deployed yet, the next things most teams set up once your first app is live, and a note in the first week about deploying from Git, the CLI and your editor. Four mails at most, each sent once, and only while they still apply.

  • You hear about a broken app even without a notification channel.

    The owners and admins of an organization are emailed when an app keeps crashing or cannot start, when a domain still has no certificate an hour after you added it, or when a backup fails. At most one mail per incident per day, with a link to the app, domain or backup. Turn it off for the whole organization under Settings, or just for yourself.

  • A short email when a new version of klickops is out.

    It carries the same release notes the what's-new dialog shows, once per release, and never a digest of things you already saw.

Improved 6

Apps & projects

  • On the hosted platform, projects leave through Export.

    GitOps mode (externally managed) is no longer offered here, and deleting a project always removes everything in it. To take a project elsewhere, export its manifests from project settings. A project already in GitOps mode can still be switched back to normal editing.

Builds & deploys

  • Builds from your repository run in an isolated sandbox.

    Every build now runs in its own sandbox, walled off from other customers' builds and apps.

Command line & AI tools

  • Approving a CLI sign-in shows who is asking.

    After you type the code from your terminal, the approval page shows the IP address, the device and when the sign-in started, and lets you deny it. The code is no longer filled in from the link, and a denied sign-in stops the CLI right away with a clear message.

Account & organization

  • Deleting an organization now asks you to remove its projects first.

    An organization that still has projects can't be deleted; delete or move them, then delete the organization. The message tells you how many are left.

Web app & notifications

  • Emails read like letters, not like alerts.

    Every mail addressed to a person, from an invitation to the monthly statement, now arrives with a plain subject, a short message and one button that takes you where the mail is about. The machine-readable prefix and the trailer of internal details are gone from these, and stay only on the mails your organization routes to a channel. Replies reach a person instead of bouncing.

  • The interface uses its own typeface everywhere.

    Resource names, codes, logs and the terminal no longer fall back to a typewriter-style font on computers that don't have the klickops fonts installed.

Fixed 8

Apps & projects

  • A cloned project gets its own addresses.

    Your own domains are not copied and can be added to the clone again.

  • Firewall rules for a domain name can only allow traffic.

    A deny rule for a domain could end up blocking every destination on its ports instead of just that domain. The firewall editor no longer offers a domain on a deny rule and saving one is refused. To block a domain, leave it out of your allow rules.

  • Platform integrations in the Networking tab now only show the ones your platform administrator made available.

    An app that had one switched on that is no longer offered has it switched off automatically, which restarts that app once.

  • A project always stays in an organization.

    Removing a project from its organization is no longer possible on the hosted platform; to change who owns a project, move it to another organization instead.

  • Existing sign-in protected domains pick up the latest hardening automatically.

    A domain protected by single sign-on used to keep its old protection settings until someone saved it again. It now gets the current ones when the platform is updated, and nothing else about the domain changes.

Billing & plans

  • A suspended or restricted organization can no longer create projects.

    Creating or copying a project into an organization that is on hold for billing now stops with the same message as every other change, until the hold is lifted.

Account & organization

  • Only the owner finishes setting up an organization.

    Naming a new organization on first sign-in is now the owner's step and happens once; an invited admin or member goes straight to the dashboard. After that, the owner renames the organization in its settings, as before.

Web app & notifications

  • Support requests have fair-use limits.

    You can have up to ten open requests at once, send up to twenty messages a day on each, and attach up to 20 MB of screenshots a day. Over a limit, the message says which one and when it frees up. Messages without screenshots are never held back by the screenshot limit.

2026.9.8

Security hardening and bucket fixes

Buckets can be created again, and GitHub connections, pull credentials and protected apps only reach what belongs to you.

Security 3

Apps & projects

  • critical An app could use another organization's pull credentials.

    An app can only use pull credentials that belong to its own organization or project, or that your platform administrator shared with everyone.

    At risk: An app could name pull credentials that belonged to another organization or project and read them from its own project.

    Misuse: not yet checked

    You: Rotate pull credentials added before 24 September unless you can rule out that they were read.

  • critical Signing in to a protected app could hand your session elsewhere.

    Signing in to an app behind single sign-on now only continues to apps you can actually open, and a sign-in you cannot use lands you back in klickops instead of bouncing between pages.

    At risk: Signing in through single sign-on could pass your klickops session to an address that was not the app you opened.

    Misuse: not yet checked

    You: Nothing.

Builds & deploys

  • critical An organization could reach another GitHub installation's repositories.

    Connecting a GitHub account now always confirms with GitHub that you can reach the installation you are adding, so an organization only ever sees repositories its members were given access to.

    At risk: Connecting GitHub could give an organization repositories of a GitHub installation none of its members had been given.

    Misuse: not yet checked

    You: Nothing.

Fixed 3

Databases & backups

  • Creating a bucket works again.

    The Add a bucket form refused every attempt with a technical message, so buckets, and database backups that need one, could not be set up.

  • New buckets start within your plan.

    On plans with a per-bucket size limit, Add a bucket opened with a size above that limit, so it showed a limit warning and a disabled Create button before you had changed anything. The size now starts at your plan's limit.

Account & organization

  • Links into an organization use that organization.

    Opening a page by its address, reloading it, or following a bookmark could load details, such as plan limits, from the organization you had open before.

2026.9.7 Connecting a Git repository works again 1 fix
  • Connecting a Git repository works again.

    The Connect repository dialog refused every attempt with a technical message about an unknown field, so no repository could be added and nothing could be deployed from source. It was sending one field under a name the server stopped accepting.

2026.9.6 Preview links load, and sign-in protected sites keep their certificates 2 fixes
  • Sites protected by sign-in keep their certificates.

    Certificates renew themselves shortly before they expire, and on a protected site that renewal was being sent to the sign-in page instead of completing. Left alone, those sites would have started showing certificate warnings as each one came up for renewal.

  • Preview links for pull requests load.

    Opening one gave a certificate warning and then a "not found" page, on every app and every language. The preview address was never published to the web server, which also blocked it from getting a certificate of its own. Open a pull request and its preview link works; existing previews recover on the next push.

2026.9.5

Migrations that stalled, silently or at the last step, now finish

Database imports finish, images that name their user start, and klops exec copies files into an app.

  • Importing a database no longer stalls halfway with nothing to show for it. A dump that took a while to apply its structure had its upload cut short by the network in front of klickops. The restore was lost, the database looked empty, and the command never came back or said why. klickops now takes the whole upload first and restores from that, so how long the restore takes no longer matters. An upload that really is interrupted now fails immediately and says so. Dumps above 2 GB should be copied straight from the old server with --from-url.
  • Copy files into an app. klops exec accepts piped input, so existing data can be moved into a volume when migrating an app onto klickops: tar cz -C ./seed . | klops exec myapp -- tar xz -C /data Previously there was no supported way in, which blocked migrating any app that carries data.
Improved 2

Command line & AI tools

  • klops apps get tells you when a release command is holding a deploy back, and how to retry or clear it.
  • YAML output spells fields the way the API does, so a value read with -o yaml matches one read with -o json.
Fixed 5

Apps & projects

  • Images that name their user now start.

    Ending a Dockerfile with USER app is the recommended way to build a container, but klickops added a rule Kubernetes cannot check against a name, and every such image sat in Pending forever. Those images now run as the user they declare, and keep the rest of their hardening. klops apps deploy|update --run-as-user sets the user ID explicitly when you want to.

  • Shared file storage works again.

    An app with a volume on a shared (RWX) storage class crashed the moment it started, with a kernel error nobody could act on: that storage cannot be combined with the extra process isolation klickops applies. klickops now notices the combination and drops the isolation instead of shipping an app that cannot start.

  • Giving an app a hostname through the wrong door no longer looks like it worked.

    Setting a hostname under an app's networking settings reported success, kept the value, and created nothing. It now points you at Domains, and reading the setting back reports the app's real hostname.

Builds & deploys

  • Rebuilding at a shortened commit works.

    The build list shows commits shortened, and pasting one back in queued a build that failed minutes later deep in the build log. It is now resolved for you, or refused immediately with a clear reason.

Command line & AI tools

  • The MCP server stops asking you to sign in again.

    It refreshed its session without saving the result, so it eventually failed with "unauthorized" while the command line kept working. It now saves what it refreshes, and says the session expired instead of looking like a permissions problem.

2026.9.4

Healthy apps stop looking broken, and a failed release command lets go

Apps that run fine no longer look broken, and a failed release command no longer blocks the screen.

Fixed 3

Apps & projects

  • Leftover evicted copies no longer make a healthy app look broken.

    When a copy is moved off an overloaded machine, the old one can linger in the cluster for weeks. klickops counted every one of them as a live problem, so an app that was running fine showed "Needs attention", a row of red copy badges, and inflated restart counts. Those leftovers are now treated as history: they no longer affect status, restarts, or the copies list. The eviction itself stays visible under Events.

  • A failed release command no longer blocks the screen for good.

    The "Deploy blocked" banner stayed up after you removed the release command, and after the version it complained about had gone live anyway. In that state Retry deploy did nothing. The banner now clears itself as soon as there is nothing left to retry, and Retry deploy starts a fresh run when there is.

  • View log opens the failed release run.

    The button used to switch tabs and stop there. It now jumps to the release command card and opens the output of the failed run without a second click.

2026.9.3

Protected apps keep you signed in, and repository access stays yours

Apps behind sign-in keep you signed in, and connected repositories and their credentials stay inside your organization.

  • Apps protected by sign-in keep you signed in. Every app with sign-in required sent people back to the sign-in page two minutes after they had signed in. A session on a protected app now lasts as long as your klickops sign-in does.
Security 2

Builds & deploys

  • critical Apps could build from another organization's repositories.

    Repository access is limited to your organization. Hardened how connected repositories and their credentials are scoped: an app can only build from a repository connected in its own organization, and repository credentials are no longer placed where project members could read them. GitLab connections are tied to the organization that started them.

    At risk: A project could build from a repository connected in another organization, and repository credentials sat where members of the project could read them.

    Misuse: not yet checked

    You: Nothing.

Web app & notifications

  • medium A crafted request could exhaust the platform's memory.

    Updated a networking library to close a memory-exhaustion weakness reported upstream.

    At risk: A weakness in a networking library, reported upstream, let a crafted request use up memory and interrupt the service.

    Misuse: not yet checked

    You: Nothing.

Fixed 5

Apps & projects

  • Domains with guest links can be edited again.

    Saving such a domain failed with a message about a setting that is not allowed, and would have removed its guest links. Saving works and the links stay.

  • Sign-in protection holds up under load.

    The check behind protected apps could slowly run out of memory, and a burst of sign-ins could be mistaken for "not signed in".

  • Setup:

    the public address of the sign-in gateway now defaults to the platform address when it is not set separately, as documented.

Builds & deploys

  • Deploying from a repository links the repository you just connected

    , even when klickops had to adjust its name.

Billing & plans

  • Promo codes land where they belong.

    A code typed on the landing page is applied once you own an organization, never to one you were merely invited to, and codes cannot be redeemed through API tokens. Campaign figures for your platform administrator no longer count expired credit as spent.

2026.9.2 The Marketplace waits until it has something to show 2 fixes
  • The Marketplace only appears once a catalog is published.

    On installations where your platform administrator has not published one, it sat in the menu and then failed to open with an unreadable error. It now stays out of the way until there is something to install.

  • Messages during an update read like sentences.

    While klickops is restarting, an action that could not go through now says so plainly instead of failing with a technical error.

2026.9.1

A marketplace of ready-made apps

The Marketplace installs a reviewed app with its database, domain and configuration in a few clicks.

  • Marketplace. Install a reviewed blueprint into a new or an existing project in a few clicks: the app, its database, its domain and its configuration arrive together, already wired up. Vaultwarden, Uptime Kuma and Pocket ID are in the catalog to start with. A blueprint is a starting point, not a link, so everything it creates is yours to edit afterwards.
New 2

Apps & projects

  • A public page for every blueprint.

    Each one has a shareable page listing what it installs, so you can send a colleague the link before they have an account.

  • Projects wear their blueprint's logo.

    A project started from a blueprint shows that app's mark in the project switcher, its header and the project list.

Fixed 2

Databases & backups

  • The overview shows your data again.

    In a project holding a database and a bucket with the same name, the data section on the overview stayed empty.

  • Instances and activity now attach to the right service.

    Two services sharing a name in one project could show each other's instances and recent activity.

August 2026 · 11 releases

2026.8.12 Pointing an app at a pull credential now works on its own 1 fix
  • Giving an existing app a pull credential no longer needs a redeploy.

    Naming a credential on an app whose image was not changing was accepted and then quietly ignored, so an app deployed before its credential existed could only be fixed by deleting it or by passing the image it already had. It now takes effect on its own.

2026.8.11

Private images pull, and a CLI that fails when it should

Improved 5
  • Adding a pull credential now asks who it is for.

    klops registries create requires either --org <organization> or an explicit --global. Leaving the scope out used to share the credential with every organization on the cluster without saying so, and the confirmation it printed did not mention the scope at all, so the mistake was invisible. Scripts that relied on the old default need the flag added.

  • A command that does not exist now fails.

    Mistyping a command used to print the help text and report success, so a typo in a script did nothing at all and the script carried on as if it had worked. Unknown commands now exit with an error. Anything in your automation that was quietly doing nothing will start failing, which is the point, but it is worth a look before you upgrade.

  • You can see which settings a database type accepts.

    klops databases available lists the tuning options for each type, with an example for each, so asking for more storage than the size tier gives you no longer means guessing. The size tiers are deliberately conservative; --param storage=20Gi is how you go bigger.

  • Login users on a database can be listed.

    They could be created and deleted but not listed, so a script had no way to check its own work.

  • Importing from a database that is not on the internet has an answer.

    Most databases worth moving sit on a private network, and the import refused them for good security reasons without saying what to do instead. It now shows you the one-line command that streams the data in.

Fixed 8
  • Apps that use a private image now start.

    A pull credential could be added and listed correctly while every app using it failed to start, because nothing connected the credential to the app. klickops now picks the credential that matches the image's registry automatically, and klops apps deploy --registry names one explicitly when you have several.

  • Database usernames can contain underscores again.

    Names like orders_app were rejected, and so was every other separator, so a database user carried over from another system had to be renamed to make it in.

  • The AI tools stopped rejecting valid requests.

    Creating a database, updating an app or running a query through the AI tools could fail with "request body is malformed" on input that was completely correct. Requests that are genuinely wrong now say which field is the problem.

  • The AI tools notice when you sign in.

    Signing in after the tools were already running left them unauthorized for the rest of the session, with no hint that reconnecting would fix it. They now pick up a new sign-in on their own.

  • A missing detail in an AI tool call says what is missing.

    Leaving out something the tool needed produced an internal error that read like the tool itself was broken.

  • Creating a database confirms what it accepted.

    It used to print nothing at all, which was indistinguishable from having done nothing.

  • Queries can reach any database on the server.

    klops db query and klops db shell take --database, so a database created alongside a user is reachable without going around klickops.

  • The help for choosing a database type points at a command that exists.

    It named one that was renamed some time ago, and the suggestion was garbled on the way out.

2026.8.10

Ask for help without leaving klickops

New 1
  • You can ask for help from inside the product.

    "Get help" opens a composer that stays out of your way: it tucks into the corner while you go and fetch the error text or take a screenshot, and your draft is still there when you come back. A request remembers what you were looking at, so you don't have to describe it. The same menu lists every request you have made and the replies on it, and points you at the handbook page for what you were doing.

Fixed 4
  • Creating a project works when you belong to more than one organization.

    Being invited into someone else's organization was enough to make every project creation fail outright. The organization you pick is now the one the project is created in.

  • Credit from a promo code lands in your own organization.

    If you were a member of someone else's organization as well as your own, parked credit could be redeemed into theirs. It now goes to an organization you own, and the organization shown by default stops reshuffling between page loads.

  • A small database now fits alongside an app on the free plan.

    The plan advertises room for both, but a small PostgreSQL claimed the project's entire allowance on its own, so the database was accepted and then never started. A small database now takes half the allowance, leaving the other half for an app. Medium and large are unchanged.

  • A database or bucket held back by the project's limits says so.

    When there was not enough room left in a project, a new managed service sat at "Provisioning" forever with no explanation anywhere. It now tells you the limit was reached and what to do about it.

2026.8.8

Type the coupon, connect the repo

New 1
  • A coupon code can be typed in on the sign-in screen.

    Scanning the printed link still works, but the code is no longer the only way in: there is now a field for it above the sign-in options, and it shows what the code grants before you sign in. Checking a code never uses it up.

Fixed 2
  • Connecting a repository no longer traps you on someone else's account.

    If a colleague had already set up access on a shared account, that was the only account offered. You can now install on your own account or a different organization from anywhere in the connect flow, and the "Manage on GitHub" link points at the right place for organization-owned setups.

  • Repository names containing dots can be connected.

    A name like example.info silently left the Connect button disabled. Dots and other unsupported characters are now folded to hyphens as you type, and the rule is spelled out inline when the result still isn't usable.

2026.8.7 Coupons you can print 1 improved
  • Promo codes can be handed out on paper.

    Credit codes can now be minted in a batch and downloaded as a print-ready document — one coupon per page, each with the code and a scannable link that claims it. Codes are still redeemed exactly as before, on the sign-in screen.

2026.8.6

A new look, and a bill you can read per workload

New 9
  • klickops has a new face.

    The gondola replaces the old mark and runs through the whole product: the logo, the sign-in screen, the loading state and the browser tab. The interface moved to a lighter, paper-like surface at the same time.

  • Usage is now broken down per workload.

    Every metered hour is attributed to the app, database, bucket or scheduled job that caused it, so you can see what each thing costs instead of one number for the whole project. Anything that cannot be placed under a workload is still shown, rather than quietly folded into the total.

  • One usage explorer instead of six cards.

    Usage has its own page, separate from Billing, where you pick a period and drill from your organization down to a project and then to a single workload, charting any level.

  • Asking to spend more goes to a person.

    Upgrading to a paid plan or adding credit is now a request that a platform administrator confirms once the payment has arrived. You can see your pending requests and withdraw one you no longer want.

  • Configuration is one surface with two lenses.

    Plain values and sensitive values live on one page instead of two, with a clear separation between them, and the page no longer asks the same question twice.

  • Rows answer the question you opened the page for.

    An app row shows whether it is actually doing any work, a domain shows which of its three stages it has reached, a database offers its connection string, and a disk can be resized without leaving the list.

  • Backups separate what is protected from whether it ran

    , so a schedule that exists but has not run yet no longer reads like a successful backup.

  • API tokens were rewritten.

    Creating, reviewing and revoking tokens is clearer, and a newly created token can be copied straight from the screen.

  • The roadmap has a home in the navigation

    , with a tidier board.

Improved 6
  • Navigation follows one rule: the sidebar owns where you are, the top bar owns what you are looking at.

    One scope control replaces the two stacked switchers, and every destination now appears in exactly one place. Quotas moved out of Settings, and the three separate registry screens became a single Registries page.

  • A project opens on its workloads

    rather than a wall of cards.

  • The network view shows the whole conversation at once

    instead of one side at a time.

  • Scheduled jobs show when they run

    in plain language.

  • Empty states teach instead of apologising

    , and pages got their short introductions back.

  • Capacity is now part of your plan.

    Asking for a quota increase separately is gone: if you need more, the answer is a larger plan, which makes the limit you get predictable from the plan you chose.

Fixed 6
  • An hour of usage could be counted twice.

    While the per-workload breakdown was being rolled out, the hour in progress could be recorded in both the old and the new shape, so that hour's reserved capacity and cost were doubled. It was visible as an unattributed line carrying almost the same figures as the workloads beside it. Affected hours have been corrected, and an hour is now written once no matter how often it is measured. The same fix stops a project being billed for a workload that has since been deleted.

  • Promo credit that went missing during signup now arrives on its own.

    A code accepted while your organization was being created could end up not applied; it is now picked up on the next page load rather than needing support.

  • Statements showed the entire billing page

    instead of just your statements, and spending details sometimes disappeared from the usage page.

  • Hardened how klickops determines a caller's network address

    , which is used for rate limiting and recorded against promo redemptions and terms acceptances. Self-hosted operators behind more than one proxy can set KLICKOPS_TRUSTED_PROXY_HOPS; the default suits the shipped setup.

  • Build containers can be pinned to a sandboxed runtime

    with KLICKOPS_BUILDS_RUNTIME_CLASS, for operators who want builds further isolated from the rest of the cluster.

  • A long tail of interface corrections: the active tab is no longer clipped by its own scroller, breadcrumbs size and compress consistently, dropdowns share one spacing scale, the organization switcher stays put on account pages, and status now appears once rather than twice on an empty overview.
2026.8.5 The operator console becomes a deliberate destination 2 fixes
  • Signing in always lands you in your own organization.

    Platform operators used to open straight onto the console showing every customer; they now start where everyone else does and step into the console on purpose, from the user menu, the organization switcher, or the Organizations page.

  • Organization and project lists only show what belongs to you.

    The switchers, the command palette, the activity feed in the top bar, and the page you land on after signing in all build their lists from your own memberships.

2026.8.4

One-step onboarding and a calmer billing page

New 1
  • Getting started is one step.

    Name your organization, tick the terms, done — the multi-step wizard and the separate terms popup are gone. A promo code from our website is applied automatically and shows as a credit badge, so you never have to type it twice. Inviting your team moved to where it belongs: the Members page, once there is something to show them.

Improved 5
  • Billing opens with two numbers.

    This month's spend against your included credit, and your balance — with promo credit folded in and its expiry date right next to it. The charts and the per-meter, per-project, and per-workload breakdowns are one click away under "Spending details", and the Plan tab is now purely about choosing a plan.

  • One billing message at a time.

    The most urgent thing about your account shows as a single banner instead of a stack of warnings.

  • "Upgrade your plan" now takes you to the plans.

    Every upgrade link in the product lands directly on the plan ladder instead of the cost overview.

  • Small amounts show exact figures.

    Costs under one franc display with four decimals on the billing page, matching your PDF invoices instead of rounding to 0.00.

  • Quota decisions come with a reason.

    When your quota request is approved or denied, the email now includes the reviewer's note.

Fixed 4
  • Late-settled statements bill the right plan.

    A month that was settled after you changed plans could be priced at the new plan instead of the one you were on. Statements now freeze with the plan that was actually in effect.

  • Promo codes behave at the edges.

    Entering the same code twice no longer shows an error after the credit was already granted, a code scoped to your company address now tells you to sign in with that address instead of a generic message, and an organization suspended for billing can redeem a code to get its workloads running again.

  • Resuming a suspended organization is reliable.

    A sequence of suspend-and-restrict actions could leave apps stopped even after access was restored; they now come back up as expected.

  • Hardened the closed-beta signup gate and month-close billing.
2026.8.3 Promo codes, and a smoother GitHub connect 1 new · 1 fix
  • Promo codes.

    Got a code? Enter it at sign-up or later under Billing to unlock free credit for a limited time. Your billing page shows the remaining promo balance and when it expires, and promo credit is always spent before your own. A code can also raise your plan limits for its duration, and during the closed beta a valid code gets you straight in.

  • Connecting GitHub for the first time works now.

    If the klickops GitHub App was not installed on any of your accounts yet, connecting ended in "Connect failed, please try again". You are now taken to GitHub's install page instead, and land back in the repository picker after installing.

2026.8.2

Safer by default, and a big honesty pass on the UI

New 3
  • Apps are hardened automatically.

    klickops now reads your container image and applies the right protection on its own: images that run as a normal user are fully locked down, and images that need root are isolated so root inside the container has no power on the platform (on clusters that support it). The deploy wizard no longer asks security questions — it simply shows what will apply, and overrides live on the app's Advanced tab.

  • Health checks are on by default.

    New apps get a connection check on their port with zero setup, so a crashed app is restarted automatically. Switch to an HTTP path check in the same control if you have a health endpoint.

  • Scaling has its own tab

    on the app page — it was previously tucked away at the bottom of Metrics.

Improved 5
  • The Network page is now the one place for connectivity.

    Rules, live traffic, and creating new rules all live together; allowing a blocked connection drafts the rule right there, and old Firewall links redirect. Creating and editing a rule now use the same editor at the same size.

  • One name per thing.

    Buckets are "Buckets" everywhere (previously also "Object Storage"), running app instances are "copies" throughout, Secrets and plain config appear as one "Configuration" concept, and the Alerts page is titled Alerts.

  • Tidier app pages.

    Tabs for features your cluster doesn't offer (backups without a backup engine, firewall without a network layer) no longer render as dead ends, and crowded tab strips now show when there's more to scroll.

  • Roadmap and What's new moved into your user menu

    , freeing sidebar space. A dot on your avatar tells you when release notes are waiting.

  • Empty pages now point you to the next step instead of dead-ending, and each secret key has a page showing where it's used, one click from Configuration.
Fixed 7
  • Scaling an app to 0 now actually stops it.

    Previously the value silently became 1 while the UI confirmed success. Stopping all copies now asks first, and the save button says what it will do.

  • Deleting a database or bucket requires typing its name

    , matching app and volume deletion — it destroys data and deserved the same guard.

  • Removing a firewall rule now asks for confirmation and reports errors instead of failing silently.
  • Database tuning that requires a restart now says so and asks — no more silent restarts after applying tuning values.
  • Many pages no longer show up blank or claim "nothing here yet" when loading actually failed; they now say what went wrong and offer a retry.
  • Revoking a guest link or a pending invitation asks first — both cut off access irreversibly.
  • The "view all events" button on the app overview works again.
2026.8.1 Preview links stay on the preview 1 fix
  • Preview links for apps whose domain has a "redirect from" alias no longer bounce to the live site. The alias redirect was being copied into each preview, so opening a preview sent you straight back to your production domain.

July 2026 · 5 releases

2026.7.28

Previews your app can detect

New 2
  • Preview environments announce themselves to your app.

    Every preview now runs with KLICKOPS_ENVIRONMENT=preview and KLICKOPS_PREVIEW_PR set, so your app can skip schedulers, outgoing email, and other side effects when it's running as a pull-request preview instead of production.

  • A built-in API reference.

    The full REST API is now documented on its own reference page, generated from the same definitions the product runs on.

Fixed 3
  • Switching between organizations or projects no longer briefly shows data from the one you just left.
  • The command palette's jump-to-tab entries now always match the tabs the page actually has.
  • Quota request emails pointed reviewers at a page that no longer exists.
2026.7.27

The roadmap moves in with you

Improved 3
  • The roadmap is easier to find.

    It now sits in the sidebar right next to What's new, in the command palette, and as a link from the release-notes dialog.

  • Invitation and access emails now name the sign-in provider and make clear that the invited address must be the email on that account.
  • Emails consistently say "organization" (a few footers still said "team").
Fixed 1
  • The what's-new dialog opened far too narrow; it now has room to breathe.
2026.7.26

Release notes in the app, and a roadmap you can vote on

New 3
  • See what's new after every update.

    klickops now tells you what changed: a short summary pops up once after each platform update, and the full release history is always one click away in the sidebar.

  • A roadmap you can steer.

    The new Roadmap page shows what we're considering, planning, and building. Vote for what matters to you, request features you're missing, and watch shipped items close the loop.

  • Email notifications can now be delivered through Resend as an alternative to an SMTP relay.
Fixed 1
  • Images built from source in the built-in registry are now stored per organization, so two organizations can build same-named apps without conflicts.
2026.7.25

Pick your organization's name

New 2
  • Name your organization at signup.

    Onboarding now asks for your organization's name instead of auto-creating one for you.

  • Platform administrators can remove an organization together with everything in it.
Fixed 3
  • Membership changes (new role, new org) apply immediately, no sign-out and back in needed.
  • The members list role dropdown works reliably again, and access refreshes when you return to the tab.
  • Single sign-on in front of your own apps now resolves access by the app's hostname, fixing false "access denied" responses for some projects.
2026.7.24

Safer Git connections

Fixed 3
  • Hardened the GitHub connection flow: authorization redirects can no longer be influenced by request headers, and every OAuth callback is strictly validated.
  • Connecting a repository when the GitHub App was already installed now lands you back in the right place.
  • A clear warning is shown when a GitHub App is configured without OAuth credentials.