Skip to content

Changelog

What shipped, and when.

Anyport ships several times a week. These are the changes you would notice, newest first, with the release each one went out in.

Follow by RSS →System status

Latest release

v0.0.67

October 13, 2026

A build that has just started keeps running

October 2026

7 entries

v0.0.67

A build that has just started keeps running

Fixed

  • A build is no longer marked failed in its first second while the cluster is still creating its job, so it runs to the end and keeps its logs. Once a build finishes, the outcome the console shows is the one the cluster keeps.

v0.0.66

Volumes you can see, and grow

Every volume shows who owns it and how full it is, a managed service's disk can be raised while it runs, and a volume that never arrives says why.

Added

  • A managed service's disk can be raised from its Settings while it keeps running, now including Redis, RabbitMQ, NATS, Observability and the search and vector databases. It needs a storage class that allows expansion and an up-to-date agent, and a disk is never reduced.
  • A service's Overview has a Disk card with the size the cluster gave it, how full it is and its storage class. App Settings, Volumes shows the same under each volume, along with a resize that is pending or was refused.

Improved

  • A cluster's Settings, Storage lists each volume with the app or service that owns it and how full it is, warning from 90%. A volume on a node's own disk, such as local-path, says it can't be measured on its own rather than showing the node's figure, and a paused service's disk is never offered for deletion.
  • An app or service waiting for a volume the cluster will never provide says why: the storage driver's error, a missing storage class, or a driver that hasn't answered in two minutes. Postgres, MySQL, MariaDB, MongoDB, ClickHouse and Kafka are diagnosed the same way.
  • Storage classes are read from the cluster when they matter, so a storage driver installed after the agent started is used on the next try, with no restart.

Fixed

  • A volume growth the cluster refuses no longer holds back later deploys. The app keeps serving on its current disk, says what to change, and accepts its old size back.
  • A published volume's name is locked, and removing a volume asks first and keeps its data on the cluster until you delete it from Storage. Deleting an app lists the volumes whose data goes with it, and two apps can no longer end up on one disk.
  • A duplicate or template on another cluster swaps a storage class that cluster lacks for its default, and the review step lists each swap before anything is created. Saving a service's Settings no longer fails on its storage class when it was installed from the CLI, a template or the MCP server.
Read about managed services →

v0.0.66

Pico and Femto, and one row per push

Added

  • Two app sizes below Nano, for packing small services onto a modest server. Pico reserves 0.05 vCPU and 64 MiB and Femto 0.025 vCPU and 32 MiB; each can burst to 0.1 vCPU and twice its memory. They are offered in app settings, when creating an app, and for tasks.

Improved

  • Recent deploys on a project's overview shows one row per commit, naming each app it went to with a link to that app's build, so one push to a monorepo is one row rather than three.
  • Each app card shows its own CPU and memory, the repository and branch it builds from, and the last deploy's commit and age, with a copy button on every endpoint. The time beside an app is its last deploy, no longer the agent's last check-in.
  • The Previews tab names who pushed each preview's latest commit, and who opened the pull request when that is someone else.

Fixed

  • A cluster with two ingress controllers keeps its routes on the same one: the one Anyport installed, otherwise the cluster's default class. An ingress-nginx namespace left behind by an uninstall no longer stops Anyport installing Traefik.

v0.0.64

Previews, backups and Helm from the terminal

Added

  • anyport preview lists a project's pull request previews and requests, withdraws or approves one, and changes preview settings. --pr 42 points logs, shell and any other project command at that pull request's preview.
  • anyport service backup lists a database's backups, takes one now, restores to a new service at a point in time and pauses them. anyport backup manages destinations and the archives that deleted databases leave behind.
  • anyport helm searches for charts and installs, upgrades and uninstalls them in a project, keeping your values across an upgrade. Releases Anyport manages for its own services are listed only with --all and can't be changed there.
  • anyport cluster status shows one cluster's agent, nodes, build queue and anything wrong, worst first. anyport cluster agent restarts, upgrades, rolls back and tails the agent, and anyport cluster volume lists volumes and removes the ones nothing owns.
  • anyport member invites people and changes their roles, anyport registry stores the credential for a private image with the password read from standard input, and anyport github lists repositories and branches and connects an account.
  • anyport project delete shows everything it will remove and asks for the project's name. project, app, secret, domain and helm reapply put back what a cluster lost.

Improved

  • The MCP server can read previews, backups, Helm releases, registries, GitHub repositories and cluster health, and can request a preview, take a backup, resync a cluster and reapply what a cluster lost. It still deletes nothing.

Fixed

  • Deleting a project acts only on the project on its own cluster, never on one with the same name elsewhere.

v0.0.64

A services marketplace, and builds billed like apps

Added

  • A project's Services tab has two sides: Installed, with each service's health and the apps that use it, and Marketplace, the whole catalog by category with search. Any member can open a service to read what it runs; installing still needs the right role.

Improved

  • A service's Settings and its install form share their fields. Sizes take a number and a unit, a disk that can only grow is checked before Save, and a setting that can't be turned off asks first and then stays locked. Install asks for the disk size up front rather than tucking it under Advanced.
  • On Anyport Cloud, builds are billed for the CPU and memory they use at the rates apps pay, with no charge per build minute.
  • A preview's databases no longer take their own backups. One seeded from a backup can turn them back on from its service page.
  • When a preview ends because its pull request was merged or its base project was deleted, the pull request comment says so.

Fixed

  • A cancelled deploy shows grey on the project overview, not red as a failure.
  • Organization settings show Audits and Notifications to admins only, rather than offering other members a tab that can't load.
  • Builds verify the TLS certificate of every registry they push to.

v0.0.63

Five more services, from queues to speech

Added

  • An SQS-compatible queue, a headless browser, text embeddings, speech to text and an SFTP server join the catalog.
  • The SQS queue runs code written for Amazon SQS against your own cluster by changing one endpoint, with its variables under SQS_ so your real AWS credentials are left alone. The headless browser accepts Puppeteer, Playwright and chromedp by hostname.
  • Text embeddings and speech to text answer the OpenAI API behind a key generated for them, and the SFTP server gives partners a web client as well as SFTP.

Fixed

  • A preview's first deploy is credited to the person who opened the pull request, not to the repository.
Browse the catalog →

v0.0.62

Three clusters free, and Pro at $5

The free plan now covers three clusters of your own, and Pro is $5 a month with $5 back as credit every month.

Improved

  • The free plan includes three clusters of your own, up from one, and 10 GB of gateway traffic a month. Members, apps and projects stay unlimited.
  • Pro is $5 a month or $50 a year, and returns $5 of credit every month. Clusters of your own past three are $2 a month each, down from $4, and Anyport Cloud clusters are $5 a month each plus what their apps use. Every cluster is billed by the hour it exists.
  • Gateway traffic past the allowance is $0.02 per GB, down from $0.05, drawn from credit with no minimum charge. Pro includes 100 GB a month, and each Anyport Cloud cluster has 1 TB of its own.
  • Credit, auto-recharge and the spend limit live under Settings, Billing. Settings, Usage reports what was used.
  • Metric charts over six hours, a day or a week load a fraction of the data they did and still show short spikes. A console tab in the background stops refreshing until you come back to it.
  • anyport init and anyport cluster create suggest a free cluster name the way the console does, and the install one-liner says why when a download fails instead of exiting without a word.

Added

  • If Pro is cancelled or a balance goes unpaid, clusters past the free three are disconnected after 30 days, with an email when the clock starts and another a week before it ends. Nothing running is stopped, the three oldest clusters are never affected, and the console names the step that reconnects the rest.

Fixed

  • A project set to create previews when somebody asks keeps that setting after a reload.
See the price list →

September 2026

39 entries

v0.0.61

Anyport Cloud

No cluster yet? On Pro, Anyport runs one for you on its own hardware and bills only what your apps use.

Added

  • Choose Run it on Anyport Cloud under Connect a cluster, or run anyport cluster create --cloud. Anyport places the cluster, installs the agent and connects it, so there is nothing to install and no token to handle.
  • Usage is drawn from prepaid credit each day: CPU and memory your apps use rather than reserve, storage at the size it was provisioned, and builds by the minute. The cluster's own system is never billed, so a cluster with nothing deployed costs only its monthly fee.
  • Credit packs, optional auto-recharge, and a usage view with each day's spend, a projection for the month and a breakdown per cluster.
  • Logs and metrics come built in, with nothing to install. Every pod runs in a gVisor sandbox, and each cluster is kept apart from every other organization's.
  • Upgrades are announced on the cluster page a day ahead and keep your apps serving. A routine one can be deferred once, or started straight away with Upgrade now.
How Anyport Cloud works →

v0.0.61

Previews when somebody asks for one

Added

  • When to create a preview, in a project's preview settings: for every pull request, or when somebody asks. On request, the pull request comment becomes the switch: tick Create preview there, or use Create on the project's Previews tab. Only people with write access to the repository can tick it.
  • Choose what a preview contains. Each app is built for the preview or reused from the base project, and each service starts empty, starts from a copy of its latest backup, or is the base project's own. A pull request from a fork never gets more of your data than the project's default.

Improved

  • The comment shows what the selection will reserve on the cluster, and says why when the project's preview limit turns one down.

v0.0.60

Deploy from GitHub Actions, and usage with a price

Added

  • anyport-labs/deploy-action deploys an image to an app as a step in your own workflow, right after the step that pushes it, using a service token saved as a repository secret. Creating a service token now shows the step, ready to paste.
  • The cluster's Builds, Usage tab estimates what its usage would cost at Anyport Cloud rates, in total and per app, build and runner set. On a cluster of your own it is a guide only, and nothing is charged. It needs the Observability service.

Improved

  • Actions that spend money, take traffic offline, delete data or loosen security now ask first: buying credit, pausing a project or a service, turning off network isolation, disabling a cluster hostname, shortening backup retention and ending someone else's terminal. Only the risky direction asks.
  • The audit log names who acted and on what for billing and organization entries, and entries Anyport made on its own say so.

Fixed

  • Turning terminal access off ends open sessions within 90 seconds, and the setting now says so and asks before saving.
  • The CLI names a rejected service token rather than reporting an expired session, and a new cluster's page stays live while its agent connects.

v0.0.57

Every project builds its own image

Fixed

  • Builds are tagged per project, so a duplicate, a preview and the original never overwrite each other's images. A duplicated project rebuilds its apps from source, so values baked in at build time point at the copy rather than the original.
  • After a build, an app rolls out by the exact image digest the build produced, so redeploying the same commit restarts on the new image and a rollback pulls the image it names.

v0.0.55

Traefik by default, and a console for your phone

Improved

  • New clusters get an ingress controller as they connect: Traefik by default, or the one k3s already bundles. A cluster still on ingress-nginx, which is archived upstream, is told so.
  • A public cluster gets its hostname without a setup step, follows its address when it changes, and publishes IPv6 beside IPv4. On the Traefik Anyport installs, a public TCP port shares the cluster's load balancer instead of needing one of its own.
  • The console fits a phone: nothing scrolls sideways, menus that waited for a hover are visible, fields no longer zoom the page on iOS, and wide tables fold their columns.
  • anyport cluster detach removes what Anyport created in order, or with --keep-workloads lets go of the cluster and leaves your apps and databases running.

Fixed

  • One service stuck installing no longer holds up the others on the same cluster.

v0.0.54

A Builds tab for every cluster

Added

  • Each cluster has a Builds tab. Right now shows what builds and GitHub Actions runners reserve on the cluster, Queue and History list every run, and Usage charts CPU per hour or per day for builds, runners and apps over the last day, week, month or this month. Usage needs the Observability service for CPU; build time is shown without it.
  • Build args take references the way environment variables do, so VITE_API_URL can be https://${{ api.HOST }} and a key can come from a secret. A value a RUN step uses stays in the image's history, and the editor says so.
  • Preview builds report to the pull request's Checks: one check per app, linking to its build log, and one for the preview as a whole. It needs the GitHub App's Checks permission, which an installation accepts once.

Improved

  • A preview can expire after a number of hours as well as days.

Fixed

  • A build the cluster preempts is started again rather than failed, a build waiting for a node keeps its full time limit, and a failed clone or a build stopped at its deadline says which, with the clone's log.

v0.0.51

A preview on your own hostname

Added

  • Clients with a fixed API address, such as a mobile build or a frontend deployed elsewhere, can reach a pull request's preview with one header. Turn on Also serve previews on this project's hostnames, and a request carrying X-Anyport-Preview: pr-42 reaches pull request 42's preview on the base project's hostnames, custom domains included, while every other request reaches the base project.
  • The header is removed before the request reaches your app, and a key with no live preview is answered 418 rather than by the base project, so a tester whose preview has gone finds out. It needs Traefik, and is not offered to pull requests from forks.

v0.0.50

GitHub Actions runners on your own cluster

Added

  • GitHub Actions runners in the cluster's catalog. Point a runner set at an organization or a repository, and workflows that say runs-on: <its name> run on your cluster, one fresh pod per job, scaled to nothing between jobs if you like. Docker-in-Docker mode lets jobs run docker build, and the token is written to the cluster, never stored by Anyport.
  • Pause a preview from its settings to free what it reserves while nobody is reviewing it. The next push resumes it, and a paused preview still expires on schedule.
  • Node disk in the cluster's Capacity panel, beside CPU, memory and pods: the disk that fills with images and makes Kubernetes start evicting pods.

Fixed

  • A worker's page no longer offers it a domain, and its project card says it is a worker.
  • A variable built from an address, such as https://web.${{ cluster.DOMAIN }}, previews with the address filled in. Credentials are still masked.

v0.0.45

Public addresses in the variable picker

Added

  • ${{ api.PUBLIC_URL }} and ${{ api.PUBLIC_HOST }} give one app another's public address: its custom domain if it has one, otherwise its generated hostname. ${{ cluster.DOMAIN }} is the hostname the cluster's generated URLs sit under. In a duplicated project they resolve to the copy's own addresses, and attaching a domain redeploys the apps that reference it.
  • Search in the notification bell, across titles, projects, clusters and resource names, including events not yet scrolled into view.
  • The Previews tab can show previews deleted in the last seven days, each with why it ended.

Fixed

  • How a start command runs is read from the image, so a Dockerfile build from a repository runs its command as written. An app set up wrongly corrects itself on its next deploy.

v0.0.43

Workers, and start commands that start

Added

  • Workers. Switch off Serves web traffic when you create an app, or later in its Domains settings, and it gets no port, no readiness check and no URL, which is what a queue consumer or a scheduler wants. In an anyport.yaml it is kind: worker.
  • Secret variables can be unlocked for admins. Sealed stays the default and nobody reads a sealed value back, the owner included; the owner can unlock a project so its admins can reveal values, and anyone who can edit the project can seal it again. Both are in the audit log.

Improved

  • On an image not built by a buildpack, a start command replaces the image's entrypoint and runs without a shell unless it needs one, so /worker on a distroless image runs /worker.

Fixed

  • A project with variables can be duplicated and saved as a template again.
  • Add variable keeps the new row until you type in it, and a reference to a secret variable is highlighted like any other credential reference.

v0.0.42

Secrets stay out of the file

Improved

  • A secret variable in anyport.yaml is marked { secret: true } and never carries a value. A value on one is a parse error, so a committed file cannot carry a credential to the cluster, and generate: true mints one on the first apply. This replaces the secretVariables list from v0.0.32; re-export the file.
  • Plan lists each variable on its own row, and an unset secret stops apply before anything is created, naming the command that sets it: anyport project variable set NAME --secret. anyport project export warns about a plain variable named like a credential, and the console offers to lock it.

Fixed

  • Duplicating a project whose backup directory is already taken uses the next free one, and the review step names it before anything is created.

v0.0.41

Backups you can see, and names you can reuse

Improved

  • Organization settings, Backups, lists every database that backs up, with its project, cluster, directory in the bucket, and its last backup or failure, above the archives deleted databases left behind.

Fixed

  • Attaching a backup destination to a running Postgres waits until archiving is ready before the first backup, and the Backups card says Setting up until then.
  • Every new database backs up to a directory named after its project and itself, so two databases with the same name in different projects never share one. A destination path already in use is refused, naming what holds it.
  • Restoring a deleted database to a moment after its last backup is refused up front, with the latest point available.
  • A project created under a deleted project's name keeps all of its apps, secrets and routes.
  • An app that needs a Postgres extension waits until the extension exists, so a first migration no longer fails with permission denied to create extension.
  • Finished build runs are cleaned up after three hours, and earlier pre-deploy jobs once the current one has run.

v0.0.39

Apps start after what they depend on

Added

  • Start order, with nothing to declare: it comes from the references an app already has. An app that reads from a service waits for it to answer before it rolls out or runs its pre-deploy command, and an app that references another app waits for it for up to two minutes. A waiting app says what it is waiting for.

Improved

  • A duplicate, a preview, a one-click stack and a resumed project start in that order, so a migration no longer runs against a database that is still starting. A duplicate states the order before it begins.
  • In a preview, an app the pull request builds waits for that build instead of starting on the base project's image, and the comment says Waiting for api until it answers.

v0.0.38

Reuse in a duplicate, and variables every app gets

Added

  • Duplicate can reuse. Each service in the copy starts empty, starts with data, or is the source's own; each app is copied or reused. Reuse is offered on the same cluster, listed in the review step, and network isolation opens exactly that path. From the terminal: anyport project duplicate --reuse-service db --reuse-app api.
  • Every container is told where it runs: ANYPORT_PROJECT_NAME, ANYPORT_APP_NAME, ANYPORT_PRIVATE_DOMAIN and ANYPORT_REPLICA_ID, plus the commit, branch, repository, message and author as ANYPORT_GIT_* on apps built from a repository. A variable you set with the same name wins, and updating the agent restarts each app once to add them.

v0.0.37

Builds wait their turn

Added

  • A build pool per cluster. Builds use up to a quarter of the cluster's CPU and memory by default, and a build that does not fit waits with its place shown, Queued, 2 ahead, instead of crowding out the apps the cluster serves. A newer build of the same app replaces one still queued.
  • The share, the size of each build and how many run at once are in the cluster's Settings, Builds, and an app that needs a bigger build can override its size.

v0.0.35

Why it stopped, and what is serving

Added

  • When a container stops, the console says why: out of memory with the limit it passed, an exit code, an eviction, a pod that could not be scheduled, or an image that could not be pulled. It shows on each instance, on a failed build with a link to its memory setting, and on a task run.
  • A rollout reads by revision: which one is serving, which is arriving, and how many of each are ready. When the new one cannot start, the overview says why and offers to roll back to the one still serving.

v0.0.34

Tasks get pages

Added

  • Every task has a page with its overview, runs and settings, and every run has one too: when it started, how long it took, its exit code, why it failed, and its logs, live while it runs and kept afterwards when the Observability service is installed.
  • Tasks can be edited in full, paused, resumed, duplicated and deleted from the console, and one-off runs sit behind a toggle instead of among your tasks.

Fixed

  • Run now and History on a task row no longer open the edit dialog, and a task's status no longer flickers.

v0.0.32

Secret project variables

Added

  • A project variable can be secret. Click its lock and the value is sealed: stored encrypted, never returned by the API or written to anyport.yaml, and delivered to containers from a Kubernetes Secret rather than the pod spec. A secret variable can only be used as an environment value.

Fixed

  • Pre-deploy commands and task runs on a cluster with network isolation no longer fail to connect in their first second.
  • The pre-deploy command reads back after saving, and editing an app's source keeps its build resources.

v0.0.31

One app can reference another

Fixed

  • ${{ api.URL }}, ${{ api.HOST }} and ${{ api.PORT }} reach the container as the other app's address.

Improved

  • anyport cluster create --ssh shows the download, the upload to your server and the wait for k3s, instead of one long spinner.
  • Save on an edit form stays disabled until something changes, and a project card says what is healthy: All 2 apps and 1 service healthy.

v0.0.30

Teams, access levels, and one account per email

Decide who sees which cluster and project, grant access to a team once, and reach the same account however you sign in.

Added

  • Access levels on clusters and projects. Open is as before; Protected gives developers and viewers read-only access; Restricted hides it from them. A cluster's level applies to every project on it, and admins are unaffected.
  • Access grants give a member, a team or a service token developer or viewer on one cluster or project, whatever its level. Grants only ever add, so a viewer token with a developer grant on staging is a least-privilege deploy key.
  • Teams. Grant a cluster or project to a team once, and everyone in it holds that access, including whoever joins later. From the terminal: anyport team, and anyport access grant <scope> team:<name>.
  • One account per email address, however you sign in. Google and a password on the same address join once the address is verified, and Account settings lists every sign-in method.

Improved

  • Actions that take access away show what changes for whom and ask first; opening access up applies at once. The editor role is now called developer, with the same permissions.
  • The audit log and notification destinations are admin-only, and a project or cluster you cannot see shows one clear page with a way back.
Read about access control →

v0.0.27

Password protection from the domain row

Added

  • Password-protect an app's URL from its domain row menu, and a protected URL shows a lock on the project overview and in the app's URLs.

Improved

  • An app's status names a reference it cannot resolve and the reason its image cannot be pulled.

Fixed

  • Deleting a project finishes even when a deleted project with the same name exists.

v0.0.26

Fourteen more services and 38 more stacks

The service catalog more than doubled and the stack gallery grew sevenfold, each with a page to browse it.

Added

  • Kafka, MariaDB, Neo4j, InfluxDB, QuestDB and CouchDB for data; Weaviate and Chroma for vectors; Meilisearch and Typesense for search; Memcached for caching; an MQTT broker and Centrifugo for messaging; and Ollama for running open-weight models.
  • 38 one-click stacks, among them Gitea, Nextcloud, Mattermost, Keycloak, Plausible Analytics, Uptime Kuma, Vaultwarden, LibreChat and JupyterLab, in a gallery with search and categories.
  • PostgreSQL gains a connection pooler and extra databases on one instance, and the Observability service adds traces beside metrics and logs.
  • A managed service on a public cluster can take a public TCP or UDP port and a hostname, so a client outside the cluster can reach it.

Improved

  • An app running as a non-root user can write to its volume, and generated keys come in the format the software expects.
Browse the catalog →

v0.0.24

Search every list, and look inside a stack first

Added

  • Every resource list gains search once it holds more than six items, a filter for what needs attention, and smooth scrolling through long lists.
  • Explore a one-click stack before using it: what it will create and how the pieces connect.
  • With the Observability service, the cluster page charts the agent's own CPU and memory over the last day.

Improved

  • Updating the agent from the console upgrades its whole Helm release, so new resource types arrive with it.
  • Every anyport.yaml the console shows or takes is syntax highlighted, and the notification bell and delivery log load more as you scroll.

v0.0.22

Backups outlive the database, and a duplicate can carry data

Added

  • Backups belong to the organization rather than to the database that took them. Organization settings, Backups, lists the archive of every deleted database, its final backup included. A Postgres archive can be restored into any project in the organization or deleted with its data; MySQL archives can be listed and deleted.
  • Retention for those archives: forever by default, or 7, 30, 90 or 365 days. An archive that cannot be removed stays listed with the reason.
  • Duplicate a project with its data. Each database with a backup destination gets a With data option, and the copy is seeded from the source's latest backup.

Improved

  • A preview with several apps names each app's URL, with a Copy all URLs action.

Fixed

  • Applying an unchanged anyport.yaml reports no change, and a setting the file leaves out keeps its value, auto-deploy included.

v0.0.21

The port comes from the image

Added

  • An app takes the port its image declares: nginx on 80, Grafana on 3000, python -m http.server on 8000. Anyport reads it from the registry when you name an image and from the build when it finishes, and never overrides a port you set yourself.

Improved

  • The project overview is built around apps: one card per app with its URL, replicas, image, phase, the services it uses and its last deploy.
  • Settings for apps, projects, clusters and the organization share one layout, and app settings gain a Compute section for instance size, replicas and autoscaling.
  • Cluster rows say what runs on them, how big they are and how many nodes are ready, and the Previews tab states its policy and can create a preview, including approving one from a fork.

Fixed

  • Deploy app requires a source and names what is stopping a deploy next to the button. Growing an app's volume reaches the cluster, and deleting a Postgres or MySQL service completes.

v0.0.20

A bell in the console, and two more stacks

Added

  • A notification bell. Every event the organization produces is in one feed with an unread count and a link to the resource, with nothing to configure.
  • Ghost and n8n join the one-click stacks. n8n's encryption key is generated once, so a replaced disk does not lose its stored credentials.

Improved

  • The emails Anyport sends are redesigned, and their plain-text versions read as text.

Fixed

  • Connect a cluster starts from a name that is free, and the project overview loads live usage again.

v0.0.19

A project as a file

Export a running project as anyport.yaml, review the plan, apply it, and keep it on a branch that applies itself.

Added

  • Config as code. anyport project export writes a project as anyport.yaml: apps, managed services, secrets by name and key, tasks, variables and domains. anyport plan shows what applying a file would change, and anyport apply does it in dependency order. Secret values never enter the file, nothing is deleted by omission, and an unknown key is refused.
  • The same in the console: copy or download a project's file, paste one to plan and apply, or create a project from a file. Once the file is on the branch an app deploys from, a push that changes it is applied before the build it triggers.
  • Notifications to Slack, a signed webhook or an email address, each for the events and projects you choose, with a test send and a delivery log. Health events fire once a problem has lasted, an app degraded for five minutes or a cluster disconnected for two, and are followed by one recovery.
  • Public TCP and UDP ports for apps on public clusters, for a database client, a game server or a device that does not speak HTTP. Anyport never picks a load balancer your cloud bills for unless you choose it.
  • Service tokens, bound to one organization and one role with an optional expiry. ANYPORT_TOKEN runs any CLI command as the token, with no sign-in.
  • The GraphQL API is published, with its schema and a reference at /docs/api, and every release is checked against breaking it.
  • anyport domain bind and unbind, and anyport app create --repo, so push to deploy can start from the terminal.

Improved

  • The gateway keeps serving when the platform's message bus is unreachable. The agent re-checks namespace ownership on every read it serves, and the credential behind a cluster's wildcard certificate is encrypted at rest.
Read about config as code →

v0.0.18

The terminal catches up with the console

Added

  • The CLI can create a project, set and remove an app's variables, scale it, bind and unbind a service, pause and resume a service, and list, trigger, cancel and read the logs of builds. The MCP server gains the matching tools.

Improved

  • The repository picker shows each owner's avatar and scrolls inside the Deploy app drawer.

Fixed

  • A build sub-path with a leading slash is accepted, and duplicating an app deployed from a repository lists its build source.
  • A second security review, following where customer data can travel. Every finding was fixed, including tighter organization boundaries in the API and typed secret sections, such as a TLS key, hidden from viewers like other secret data.
  • Checkout returns you to where you were and shows when payment is done, and a second organization owned by the same account can subscribe.

v0.0.17

Registries by name, and a security review

Added

  • Pick a registry host from a list (Docker Hub, GitHub, GitLab, Quay, Amazon ECR, Google Artifact Registry, Azure Container Registry) or enter your own.

Improved

  • A second organization on the free plan is offered a plan in the console, rather than refused at the terminal when it attaches a cluster.

Fixed

  • A whole-product security review, with every finding fixed. Session tokens are now stored hashed, which signed everyone out once.
  • An invitation waits on the invitations page rather than joining you at first sign-in, and every account has a personal workspace. Linking a GitHub installation requires access to all of it.
  • Signing in from the console's root address no longer stalls on the redirect.

v0.0.16

Sign in with your own identity provider

Added

  • A console you run yourself signs in through any OpenID Connect provider, and the button reads Continue with whatever you named it. Keycloak is verified.
  • Switching between monthly and yearly billing confirms first, with what is charged today, the credit for the rest of the term, and the next invoice. Yearly to monthly takes effect at the next renewal.

Fixed

  • The size an app is given reaches its pod as resource requests, so it gets its CPU share and is not first in line for eviction.

Improved

  • The console and this site have health endpoints a monitor can watch.

v0.0.15

Variables as text

Added

  • Edit variables as text. Project variables, secret data and an app's environment have a Rows and Editor toggle that shows the values as .env, JSON or YAML, and a reference to a secret or a service survives the round trip. Import takes the same three formats everywhere.

Fixed

  • Saving a project's general settings keeps its namespace, and environment rows fit a phone.

v0.0.13

Logs served by your own cluster

Added

  • A cluster with a public address and a certificate can serve log tails and searches straight to your browser instead of relaying them through Anyport: one less hop, and less of your data passing through us. It is a choice per cluster in its advanced settings, and anything that cannot be served directly falls back on its own.

Fixed

  • Changing an unrelated cluster setting keeps the cluster's wildcard certificate, and closing a log view no longer reports an error.

v0.0.10

Yearly billing, and an allowance that matches your invoice

Added

  • Yearly billing, with two months off the plan. A monthly subscription can move to yearly from the console.
  • A published refund and cancellation policy: a refund is considered within 14 days of a first payment or of a renewal you did not mean to buy, and cancelling stops the next renewal while the period you paid for runs to its end.

Improved

  • The gateway traffic allowance is measured over the period you pay for, from the day of the month you pay on.

Fixed

  • A console you run yourself is not held to one cluster and one organization, and refunds and chargebacks appear in billing history.

v0.0.9

Anyport has a price list

Added

  • Paid plans beside a free plan that stays free, with members, apps and projects unlimited on every plan. Today's prices are on the pricing page.
  • On clusters you attach, compute, builds, storage, logs and seats are not metered on any plan, because they run on hardware you already pay for. Gateway traffic is the one counted resource.
  • On Pro, a cluster past the included ones is billed for the time it exists rather than refused, and never waits on the payment provider. The free plan stays a hard stop rather than becoming a bill.
  • A spend limit: how much traffic past the allowance you are willing to pay for. Past it, public routing pauses instead of the bill growing.

v0.0.8

A repository with no Dockerfile just builds

Added

  • Deploy a repository that has no Dockerfile: Anyport works out how to build it, with nothing to switch on. A repository with a Dockerfile still uses it.

Improved

  • A build is sized to the largest node it could run on, and an app can override the size.
  • The deployments timeline labels configuration changes and rollbacks correctly however far back you scroll.

v0.0.6

Builds run on BuildKit

Improved

  • Every Dockerfile build runs on BuildKit, replacing kaniko, which its authors archived in June. The same Dockerfile produces the same image.
  • Builds run in a namespace of their own, with a CPU, memory and disk envelope and a deadline.

Added

  • Build layers are cached in the app's own registry, so a rebuild that changes only application code reuses everything beneath it.

Fixed

  • A build the cluster refuses to admit is reported after a grace period instead of sitting at Queued, and a start command naming a process type rather than a program is flagged.

New addresses for the console and generated hostnames

Improved

  • The console is at console.anyport.dev. The old address no longer answers, and the CLI needs no change.
  • Generated app hostnames are issued under onanyport.com, a domain that carries customer hostnames and nothing else, so an app is never same-site with the console. Clusters connected earlier keep their hostnames.
  • The session cookie is scoped to the console's own hostname and is never offered to an app hostname, on any cluster.

v0.0.4

Projects are isolated from each other by default

A project's apps and services are reachable from inside the project, and nowhere else on the cluster unless you share them.

Added

  • A project's apps and services are no longer reachable from other projects on the same cluster. Isolation is on by default rather than a setting to find, and internet egress, DNS, the Kubernetes API and certificate issuance keep working.
  • An app another project needs to reach is shared per app, not by turning isolation off for the whole cluster.

Improved

  • Anyport applies isolation only on network plugins known to enforce it, and says so where it cannot, rather than reporting protection you do not have. Cluster settings carry an override and a kill switch.

Port forwarding from the dashboard, and tasks that save

Added

  • anyport dash can start a port forward for whatever is selected, so reaching a database no longer means leaving the dashboard.

Fixed

  • Tasks can be created, run and edited.
  • An app scaled to zero is no longer reported healthy, and a rollout that never completes is reported.
  • The deployments view stays still during a build, and the project overview no longer scrolls sideways on a phone.

August 2026

9 entries

Release numbers restarted at v0.0.1 on September 2, 2026. The entries below carry the earlier v0.2 line, so they show higher numbers than the newer ones above.

v0.2.19

A preview environment for every pull request

Every pull request gets its own copy of the project, on its own URL, deleted when the pull request closes.

Added

  • Preview environments. Turn them on for a project and each pull request gets a copy of it, with its apps, managed services, secrets, routes and tasks, on its own URL. Anyport posts the URL to the pull request, keeps the comment current, and deletes the environment when the pull request closes.
  • A preview gets its own database by default. Per service you can instead restore the base project's latest backup, share the base project's instance, or leave it out.
  • Previews expire after a week with no pushes and are capped per project. Pull requests from forks are refused unless you allow them, and the console shows what one preview will reserve before you switch them on.
  • Tasks. Run a container on a cron schedule or on demand with an app's image, variables and secrets, a timeout, retries and an overlap policy, and a history of recent runs.
  • A pre-deploy command 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.
  • anyport 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 like a shell.

Improved

  • anyport mcp gains opt-in tiers for creating and operating. It is read-only by default, no tier deletes anything, and no tool returns a secret's value.
Read about previews →

v0.2.18

RabbitMQ, and deploys that say what they changed

Added

  • RabbitMQ joins the catalog, speaking AMQP 0-9-1 so Celery, Bull, Sidekiq and Spring AMQP connect unchanged, with its management UI.

Improved

  • A deployment shows what it changed in the console's words, the image, the variables, the resources and the domains, rather than raw YAML to compare by eye.

Fixed

  • An app that pulls from a private registry keeps its pull credential when it is published, and deleting a project no longer stops partway.
  • Each database stores its own backup location, so two databases with the same name in different projects never share one.
  • Security fixes: the API no longer returns session tokens, viewers are no longer offered actions they cannot take, and organization boundaries in the API are tighter.

v0.2.17

MongoDB, and connecting a cluster from the terminal

Added

  • MongoDB joins the catalog, run as a replica set by the Percona operator. Bound apps get a MONGODB_URL.
  • anyport init connects a cluster and installs the agent without leaving the terminal. It signs in with a device code, so the machine running the CLI does not need a browser.

Improved

  • The clusters list leads with what needs attention, and a cluster's name is checked before anything is created for it.

Fixed

  • A MySQL service's disk can be grown.

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.
  • The CLI creates apps and installs services, and deletes and uninstalls them. deploy --wait blocks until the rollout finishes.
  • 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 verifies the agent's identity on connect, and a hostname can be taken down on its own.

Fixed

  • A cluster waiting to connect says what to check, and a ping keeps 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.
  • 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, resolved against the connection secret it points 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.
  • Attach a persistent disk to an app, so a stateful workload keeps its data across restarts and redeploys.
  • PostGIS is available from a Postgres service's own settings, beside the extensions already there.

v0.2.6

A terminal, a dashboard, and an MCP server

Added

  • anyport shell opens a terminal inside a running app or database from your own machine, and the console does the same in the browser. Terminal access is a permission of its own, and switching it off for the organization ends every open session.
  • anyport dash is a live project dashboard in your terminal, and anyport mcp hands the same read-only view to an AI agent.
  • Object storage, NATS with JetStream, and a mail catcher join the catalog.
  • Environment variables can reference a key in a secret or a managed service, so the name belongs to your app and the value to the thing that owns it.

Improved

  • The console has a light theme and follows your system setting, and viewer means read-only everywhere: values render as text rather than as disabled inputs.

MySQL, and capacity on the cluster overview

Added

  • MySQL, managed by the Percona operator and fronted by a connection proxy.
  • 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 checked 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 is not deleted until a final snapshot has been taken.
  • The agent updates 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. Live service status is on status.anyport.dev.