Changelog
What changed in aoox, release by release — the panel (API + dashboard), the CLI, and the docs. aoox is a release candidate: features are frozen and only fixes go in, but behavior may still change before 0.1.0. Found a bug? Report it on GitHub.
v0.1.0-rc.1
LatestrcChanged
- Migration log at startup: in production the API now logs which database migrations ran (and any migration failure), so
docker logsshows what an upgrade applied. Queries are still not logged. This release has no new migration. - One look for connection test results: the "Test" button and its result are the same on the DNS provider, secret manager, S3 destination, remote server, notification channel and external registry cards (green check, amber triangle for a caveat, red cross with the provider's message).
Fixed
- No more leftover helper containers: applying a panel domain, an instance update or instance environment changes no longer leaves a stopped
docker:29-clicontainer behind on every apply. Leftovers from older versions can be removed withdocker rm. - Domain-only database companion: a companion installed with a domain only (no host port) now reports
hostPortBind: nullinstead of aloopbackthat contradictedloopbackOnly: false.
- Migration log at startup: in production the API now logs which database migrations ran (and any migration failure), so
v0.1.0-beta.2
betaChanged
- A version-pinned install is told honestly what to do: "Apply update" on the Update aoox card is disabled and
aoox update panel --applyrefuses (exits non-zero), becausepullwould only fetch the same tag. The dashboard and the CLI explain how to change the pin (setAPI_IMAGE/WEB_IMAGEin.env.distor remove them, thensudo aoox reinstall). aoox reinstallalways writes a backup:.env.distand the compose files are copied to<dir>/backups/<time>/before anything changes, even when nothing needs rewriting.- Docs: 2 GB with swap is the tested minimum, how to upgrade a pinned install, and the CLI requirements for
aoox install. - One database migration: this release has one migration that runs automatically at startup and only adds two columns.
Fixed
- No more false "update available" after pinning or unpinning: the update check now keeps a separate digest baseline per image reference, so pinning or unpinning no longer shows an update that
pullcould never deliver. The first check after upgrading only sets a fresh baseline.
- A version-pinned install is told honestly what to do: "Apply update" on the Update aoox card is disabled and
v0.1.0-beta.1
betaAdded
PROXY_READ_TIMEOUTfor large or slow uploads: Traefik cut requests that took longer than 60 seconds to arrive, so a large upload over a slow connection failed. Set it through the env or the "Proxy read timeout" field in Infrastructure > Environment; the Reverse proxy card shows the running value, warns when it differs and offers "Reinstall proxy".- Swarm over a VPN:
swarm initaccepts a listen address and an overlay MTU (for example 1420 for WireGuard), and the swarm control port is no longer open on every interface by default when an advertise address is given. - Crashed tasks on other swarm nodes are reported: the container-down notification (and the inbox) now names the node for service tasks that fail on a node other than the manager.
Changed
- The MinIO template is replaced by RustFS:
minio/miniocan no longer be pulled from Docker Hub. Existing MinIO servers keep working as backup destinations; the template description explains how to use RustFS as one (give the stack a domain, then use the container name with port 9000). - Alerts with an action share one layout: icon, title and description on the left, the buttons on the right and vertically centred; on a phone they stack with full-width buttons.
- Leaving the swarm warns about a Docker bug: the confirmation dialog and the alert afterwards ask for
sudo systemctl restart dockeron the server, because Docker's DNS stops resolving container names (moby/moby#45144).
Fixed
- Applications in service (Swarm) mode are routed again: their routers referenced middlewares in the wrong namespace, so Traefik dropped them and the domain answered 404 (a beta.0 regression). The fix applies from each application's next deploy.
- Saving a panel domain now enables HTTPS on a proxy that was already running without Let's Encrypt: the proxy is recreated once with the saved ACME email (issued certificates survive), and routed apps are unreachable for a few seconds.
- Swarm init and leave no longer lose their response when the panel is opened through its domain, and the "restart Docker" alert after leaving now shows reliably.
- Docs: the Nixpacks cache wording is corrected (rebuilds still reuse unchanged Docker layers), plus new pages and sections on the proxy read timeout, Swarm nodes over a VPN and RustFS.
v0.1.0-beta.0
betaChanged
- This is the first aoox beta. The main features are in place; behavior may still change between releases, so please report the bugs you find.
- The "update available" badge shows up sooner: the published-version check now runs hourly instead of every 6 hours, and an owner loading the dashboard triggers a background check when the last one is older than 30 minutes.
aoox updateconsiders every npm dist-tag: a pre-release install is offered the newest version whatever its label (alpha to beta to rc), while a stable install only sees stable versions. Until a stable version exists, every pre-release is published underlatest.- Panel update steps are tidier: the three steps (downloading, restarting, back) are now separate rows with a status circle, a one-line detail and a Done / Running… label, and wrap cleanly at 375 px.
- Docs: a note that the first Railpack build is the most memory-hungry and can be killed with exit code 137 on a 2 GB server, and RAM requirements that now agree on every page (2 GB plus swap minimum, 4 GB or more recommended).
Fixed
- Blue/green redeploys no longer drop requests: the old container is stopped gracefully right after the new one is healthy, application routers carry a
retrymiddleware, and the proxy uses a 1 s dial timeout. Measured on a real VPS: 0 failed requests over 8 redeploys under a 0.3 s probe loop. - A compose stack is
runningonly once its containers are healthy, so there is no more 404 for about 20 seconds after a deploy; deleting a stack now also removes its mount volumes. - Changing a domain's middlewares no longer removes its uploaded certificate, and moving an application to another server no longer leaves its old container serving or breaks its HTTPS.
- Instance restore no longer fails with a foreign key error.
- Registry passwords are no longer returned by provisioning or reset; the dashboard and
aoox registry password --resetread it through the audited reveal route.
v0.1.0-alpha.13
alphaAdded
- The image update check names the tag and finds newer versions, with an optional auto-follow of version tags (never across a major version, and for
0.xnever a minor). A failed automatic deploy puts the previous tag back. - A Logs tab for live container logs, an Open ports tab on the Docker page, and a "Listens on" choice (public or
127.0.0.1only) next to every host port. Databases and database admin apps now default to this server only. - Show and reset the local registry password (dashboard and
aoox registry password --show/--reset), plus arm64 images for the panel so ARM VPSes (Ampere, Graviton) can run it, andTZso schedules run in the time zone you choose.
Changed
- The local registry port is now bound to 127.0.0.1 by default (it used to listen on every interface), and the API reaches it over the
aooxnetwork. The registry card shows the address and who can reach it. - aoox install --force no longer breaks an existing installation: the previous files are backed up first and the secrets are kept. A truly fresh install needs
--force --new-secrets --wipe-dataand a typed confirmation, and refuses when a leftover database volume exists. - A new "Fresh VPS" guide in the docs, from an empty VPS to the panel on a domain, covering architecture, firewall and recovery.
Fixed
- Project viewers no longer read sensitive data: database passwords and rows, env values and build args, webhook tokens, file mount contents, and backup exports and downloads are now refused. Deleting with
purgealso removes backup files, mount volumes and built images. - More robust databases: a new database is
runningonly once its engine answers, PostgreSQL 18 starts, a Retry provisioning button recovers a failed database, and failures no longer surface as a bare 500. - Failed deploys are more honest: health check messages explain the real cause, the previous version is restored after a failed replace, and a still-serving app is no longer marked
error. Secrets in logs and job output are masked more thoroughly.
- The image update check names the tag and finds newer versions, with an optional auto-follow of version tags (never across a major version, and for
v0.1.0-alpha.12
alphaAdded
- Remove the panel domain and domain-only access: Remove domain (or
aoox domain clear) takes the dashboard back toIP:3000, and the optional "Only allow access through the domain" switch (aoox domain set --domain-only) closes ports 3000/3001 to the outside. A lock-out warning and SSH recovery steps are included. aoox registry buildandpushwithout typingname:version: the name and version are read frompackage.json,pyproject.toml,Cargo.toml, aVERSIONfile, the git tag and so on, and confirmed with(Y/n/e)before running unless--yesis passed.
Changed
- Rate limits are now per user, and the API sees the real client IP behind Traefik (
TRUST_PROXY, which by default trusts private-network hops only). People behind the same NAT no longer share one quota, and one attacker can no longer lock everyone out of sign-in. - Variable values are laid out anew: each row has an eye and a copy button, plus Reveal all, Edit, and values hide again automatically after 60 seconds. The Integrations, Registry and Reverse proxy pages also get illustrated empty states and a tidier layout.
- Coloured CLI output in a terminal; warnings now print as
warn text, and Ctrl+C at a prompt exits with code 130.
Fixed
- The local registry no longer looks enabled just because a leftover
aoox-registrycontainer exists; the page explains it and offers Replace it. Enabling the registry over an existing container now answers 409. - The CLI works behind antivirus HTTPS scanning and corporate proxies by trusting the operating system certificate store (Node 22.19+ / 24.5+); certificate verification is never disabled.
aoox reinstallstops when Docker Compose is too old for the domain-only override.
- Remove the panel domain and domain-only access: Remove domain (or
v0.1.0-alpha.11
alphaAdded
- Notes on variables: the
#lines directly above a variable become its note. The dashboard shows a note icon in the masked list without revealing values, and notes travel with history, promote,aoox env pull/pushand export. Do not put secrets in notes: everyone who can see the set can read them. - Leftover containers on the Docker page: containers left over from projects or applications deleted on older versions (and still answering on their domains) now show in the disk Details and can be removed one by one or together. Volumes are not touched.
- A warning when another container already serves a domain: the Domain tab names the container that also routes the host, so requests split between two containers are no longer a mystery.
Changed
- The New database page picks the engine from cards (PostgreSQL, MySQL, MariaDB, Redis, Valkey, MongoDB), with the PostgreSQL variant as chips and the image tag in use shown under the Version field. The database overview is reordered too: metrics, connection, Admin UI, limits and alerts, then the danger zone.
- Clearer application and database headers: every fact is labelled (
Image,Container,Port), the container name can be copied, and an image without a tag is shown as:latest. - The round aoox.dev favicon is now used by the dashboard and the API too.
Fixed
- Deleting a project now takes down what runs in it: before, only the records were deleted, so containers kept running and domains still answered. Applications, databases and stacks are now removed first; the Also delete data option deletes volumes too (by default volumes are kept and show up as orphaned on the Docker page). Deleting an application also cleans up its blue/green container.
- The variable editor no longer deletes comments when saving from Rows view: notes, section-header comments and blank-line grouping are kept.
- Notes on variables: the
v0.1.0-alpha.10
alphaAdded
- Variables (variable sets): platform-level sets of variables with their own environments (
development,staging,production), shared with all projects or selected ones. Every set keeps history, restore, compare, promote and per-variable secret flags, and has a new Variables page in the dashboard. - Link several sets to one application or stack, in order: a later set overrides an earlier one, the application's own env always wins, and the dashboard marks the variable names that are overridden. Takes effect on the next deploy.
${{vars.KEY}}resolves from the merged linked sets (it replaces${{project.KEY}}).- API token scopes per set environment:
set/env,set/*or*/env, for example a CI token that may only readstaging. aoox env links,env linkandenv unlinkmanage the sets an application or stack uses from the terminal.- A Create token dialog for API tokens, with a one-line hint per field and a confirmation when revoking.
Changed
- Breaking: project environments are replaced by variable sets. The upgrade turns environments that have variables into one set per project and keeps links, history and secret flags;
${{project.KEY}}is rewritten to${{vars.KEY}}; the tokenenvironmentsscope becomesvariableScopes. Back up first, update the API, dashboard and CLI together, then review the links. - Protected environments are for instance owners and admins only (a project admin could before).
aoox envandaoox runwork on sets: choose with--setand--env;aoox runuses the linked sets in order and then the application's own env, as at deploy time. Update the CLI together with the panel.- Docker disk moved into the Docker page as a compact strip with Details and Clean now; the separate Infrastructure page is gone.
- The instance backup page, update card and panel domain card were tidied up, and the deploy stepper icons now line up.
- Variables (variable sets): platform-level sets of variables with their own environments (
v0.1.0-alpha.9
alphaAdded
- Project environments (development, staging, production): every project has environments with encrypted variables; applications and stacks are linked to one and
${{project.KEY}}resolves from it.productionis protected: only project admins can reveal, edit or link to it. - History, restore, compare and promote for variables: every change to an environment is stored as a version (who, when, which names changed) and can be restored; two environments can be compared variable by variable and variables copied from one into another.
- A Secret switch per variable: secret variables are always masked in deployment logs, job output and notifications; names such as password, token or key are marked automatically.
aoox envandaoox run:list,pull,push,set,unset,history,diffandpromotefrom the terminal, plusaoox run -- <command>to start a command with an environment's variables without writing them to disk.- API tokens can be limited to certain environments: for example a CI token that may only read
development. - Container port warning: when an image declares
EXPOSEports and the Container port is none of them, the deployment log and the Settings and Domains tabs warn about it (a common cause of "Bad Gateway"), with a one-click button to use the right port. aoox registry build --push: build and push an image in one step.
Changed
- The project's shared env moved into
production: the upgrade copies the old shared env into theproductionenvironment and links every application and stack to it, so deploys behave as before. A new application or stack created by a non-admin starts indevelopment. - Project export no longer always includes the shared env: environment variables are only exported together with database passwords (owner only).
- A clearer update screen: a full-screen overlay with steps and a timer while the panel updates, and it no longer hangs after "Apply update".
- The site's 404 page now uses the same illustration as the panel.
Fixed
- Changing the Container port of a running application now takes effect: it used to be saved only, so the proxy kept the old port ("Bad Gateway") until the next deploy; a stopped application uses the new port when started.
- Importing a project that contains a compose stack no longer fails with a 500, and CLI error lines use a ❌ that renders correctly in Windows Terminal.
- Project environments (development, staging, production): every project has environments with encrypted variables; applications and stacks are linked to one and
v0.1.0-alpha.8
alphaAdded
- Change your name and email: in Settings, Account, Edit profile changes your name and email; your current password is only asked for when the email changes. Owners can also edit other members' names and emails from the Team tab.
aoox registry buildandaoox registry push: build an image from./Dockerfilewith a name and version, then send it to aoox's local registry with one command. A version that already exists in the registry is refused with a clear message.- Plain
aooxshows the connection: the dashboard, API and registry the CLI is using, plus a one-line warning when the CLI is older than the panel.
Changed
- Breaking CLI change:
aoox updatenow updates the CLI itself. The panel update (aoox-api and aoox-web) moved toaoox update panel. aoox loginonly needs the dashboard address: the CLI finds the API address itself, and connection errors now say what is wrong. The new API token dialog shows a copy-ready login command.- Redesigned application, database, compose and project pages: a header card with the status and main actions, section headings on each tab, lists shown as tables with a "+ Add" button that opens a dialog, and delete moved to a Danger zone card.
- Integrations have their own sidebar group: Git credentials, Notifications, Backup destinations, Secret manager, DNS providers and SSL certificates now have a page each.
- A more consistent look: every tab strip uses icons and an underline, select menus open below their field, terminal text is in proportion, and the terminal SSH menu under Infrastructure is now called Terminal access.
- Opening the API address directly now shows JSON with the API name and running version instead of "Hello World!".
Fixed
- Coloured template logos are no longer inverted in dark mode; only black logos are.
v0.1.0-alpha.7
alphaAdded
- A two-language dashboard: the whole panel is now in English with an Indonesian translation. Switch language from the user menu in the sidebar; the choice is remembered in the browser, and inbox notifications follow the active language. This site and the documentation are English-first too, with the Indonesian translation under
/id. - Cloudflare DNS integration: connect a Cloudflare API token in Settings, Integrations, and aoox creates the A/AAAA record for an application domain, with a proxied (orange cloud) option. The proxy can also use ACME DNS-01 for wildcard certificates, including one wildcard for pull request previews. The token is stored encrypted and never shown again.
- Resource threshold alerts: optional CPU and memory rules per application and per database, each with its own threshold and duration. A notification is sent when it is exceeded, repeated as a reminder, and sent again when it is back to normal.
- Per-application maintenance mode: one switch shows an "under maintenance" page (HTTP 503) on every domain of the application, with a message you can write, while the container keeps running.
- A Docker page in the sidebar: browse containers, images, volumes and networks of the host or a remote server, read logs, and start/stop/restart/remove containers aoox does not own. aoox's own resources are protected from actions here.
- A dynamic Traefik configuration editor (Infrastructure, Reverse proxy) with presets (basic auth, security headers, rate limit, IP allowlist, www redirect) and per-domain middlewares. A file Traefik rejects is automatically restored to the previous version.
- An easier terminal setup: an "Authorize automatically" button installs the terminal's SSH key on the host in one click, and
aoox installnow prepares that key itself and defaults the SSH user to thesudouser. - Deploy progress, a notification inbox and a getting-started checklist: a deploy stepper with per-step durations, a notification bell with an unread badge, and a checklist for a new owner. A command palette (Ctrl+K) jumps to pages, projects and resources.
- New documentation for Cloudflare DNS, proxy configuration, the Docker page, resource alerts and maintenance mode, in English and Indonesian.
Changed
- Project viewers get read-only pages: project pages (domains, deploy, mounts, volume backups, jobs, webhooks, stacks) no longer show controls that the API would refuse with 403.
- A tidier look: a shared log viewer with ANSI colours and search, smooth metric charts with tooltips, status shown as a coloured dot, a status line under the tabs on application and database pages, and the user menu at the foot of the sidebar.
- Moving an application to another server now carries its custom SSL certificates along and drops middlewares that do not exist on the destination proxy. The terminal's SSH authentication error now names the account to use.
Fixed
- Saving settings in Infrastructure, Environment no longer shows "Cannot reach the server" when the change was applied.
- The compose stack environment hint shows its database reference list again, and the log connection error shows a sentence instead of a raw key.
- A two-language dashboard: the whole panel is now in English with an Indonesian translation. Switch language from the user menu in the sidebar; the choice is remembered in the browser, and inbox notifications follow the active language. This site and the documentation are English-first too, with the Indonesian translation under
v0.1.0-alpha.6
alphaAdded
- Custom SSL certificates for application domains: upload your own certificate (company CA, purchased wildcard, Cloudflare Origin CA) with its private key in Settings, Integrations, then pick it per domain on the Domain tab instead of Let's Encrypt. The key is stored encrypted and never shown again, renewing needs no restart, and a certificate that is close to or past its expiry triggers a notification.
- Database Admin UI in one click: install Adminer, phpMyAdmin, pgAdmin, Mongo Express, Redis Commander or DbGate next to a managed database, in its own container reachable through a domain and/or an IP and port.
- A Recent activity card on the dashboard (owner/admin) shows the 10 latest audit-log entries with readable action texts, and every route the API records now has its own text.
- Excalidraw template (the 15th one-click template): the open source whiteboard as a static client without a database, with the image pinned by digest.
- New documentation for custom SSL certificates and the database Admin UI, plus updates to the template, dashboard and mount pages, in Indonesian and English.
Changed
- One text scale across the panel: normal text is 12 px, card titles 13 px, and fields stay 16 px on touch screens so iOS does not zoom the page. The sidebar logo now fills its square.
- Every delete confirmation uses one shared dialog (no more browser pop-ups), and detaching a mount offers two clear choices: detach only, or detach and delete the volume.
- The Settings, Domain, Webhook and Environment tabs are now full width, and the settings form uses two columns on wide screens. Adding and dropping extra databases moved to the Overview tab.
Fixed
- Changing application settings while a deployment runs is no longer silently reverted when it finishes, and deleting an application now also removes its pull request preview containers.
- Creating a database with a host port that is already in use is now rejected up front with a clear message instead of ending in
error. - Replacing a custom certificate no longer causes a transient "private key does not match" error in the proxy.
v0.1.0-alpha.5
alphaAdded
- Root directory for monorepos: an application can build one subfolder of its repo (e.g.
apps/web) for Dockerfile, Nixpacks, Railpack and static sites, pull request previews included. The Dockerfile path and output folder are relative to that folder, and a wrong folder fails the deployment with a clear message without touching the running container. - A webhook option to deploy only when the folder changed: a push that only touches other folders is answered
ignored. When aoox cannot tell (no file lists, merge commits, 20 or more commits, force pushes), it deploys anyway. - Per-application HTTP monitor (Monitor tab): a path check with an interval and failure threshold, 24 h/7 d uptime, average and p95 latency, a 24 h chart, incident history, and notifications when it goes down and recovers. The host is always derived from the application, never from user input.
- Remote server monitoring: CPU, memory and network metrics for applications on remote servers (live and history), a notification when a container dies, a reachable/unreachable status in the server list, and notifications when a server becomes unreachable and when it recovers.
- One-click templates grow from 6 to 14: Vaultwarden, Umami, Grafana, Metabase, Directus, Mattermost, Nextcloud, and Odoo Community (Community edition, LGPLv3). All use pinned image tags, health checks and generated passwords.
- Application, stack and database cards on the project page show where to open them (domain or
host:port), and applications show their root directory in the header. - External secret source (Infisical) for application env: register a connection once in Settings, Integrations, then pick the project, environment and path on the application. Secrets are injected when the container is created, either all of them (sync) or through
${{secret.KEY}}references. Nothing is stored in aoox, values are masked in logs, and pull request previews do not use it. - The application page has its own Environment tab with the env editor and the secret source.
Changed
- Medium border radius across the panel and the site, icons replace the
→arrows in text, template catalog cards share one height, and the Create table dialog now lines up with its columns. Fields and buttons on one row have the same height. - The headers of the application, database, compose and project pages no longer overflow on a phone, and tab strips scroll when wider than the screen.
- Project metadata and links between the site, GitHub, npm and Docker Hub were tidied up for discoverability; no behavior change.
- The New application form and Settings are now split into cards per topic (Source, Build, Network and so on), so they are easier to scan.
Fixed
docker-compose.dist.ymlnow forwardsAPI_IMAGE,WEB_IMAGE,WEBHOOK_VERIFY_GITHUB_IPandPREVIEW_DOMAINto the api container. Existing installs get them throughaoox reinstall, notaoox update./favicon.icono longer returns 404 on the panel and the site, and the favicon fills the whole canvas so it looks right when search engines crop it to a circle.
- Root directory for monorepos: an application can build one subfolder of its repo (e.g.
v0.1.0-alpha.4
alphaAdded
- An Update available button at the bottom of the sidebar (owner only): the server periodically checks Docker Hub for the newest aoox version and the button opens the Update aoox page. It stays hidden for installs pinned to a tag, and stays silent without internet access.
aoox reinstallto repair or refresh an existing install without losing data, and a Node.js-free CLI installer (curl -fsSL https://aoox.dev/install-cli.sh | sh) for Linux and macOS.- A navigation progress bar at the top of the screen and page skeletons while switching pages, so the sidebar and navbar stay put.
- This site now has a Changelog page (ID and EN) and complete SEO: sitemap, canonical, hreflang, Open Graph, and the correct
<html lang>per language.
Changed
- The sidebar header uses the same aoox logo as the favicon and shows the running aoox version (e.g.
v0.1.0-alpha.4) instead of static text. - Static sites: the create form pre-fills Container port 80, and nginx serves the repo's own
404.htmlfor missing paths.
Fixed
- Changing an application's host port while it runs used to do nothing until the next deploy; it is now applied right away (container recreated without a build), and the previous port is restored if that fails.
- The Terminal failed with
TERMINAL_SSH_USER is not seton older installs — it now defaults toroot, and connection failures link to the relevant settings. - The Apply update button now asks for confirmation, shows progress while the panel restarts, and reloads the page by itself — without the misleading red error.
v0.1.0-alpha.3
alphaAdded
- Interactive Console for applications: a
docker exec -itshell into the app's container straight from the dashboard (also for Swarm tasks and remote servers). - New database engines Valkey and MongoDB, plus PostgreSQL variants (pgvector, PostGIS, TimescaleDB) — with backup, restore, and the data browser.
- Application error notifications detected from logs (opt-in), with a per-app "ignore error logs" switch.
- Resource usage per project (CPU, RAM, network) on the project cards.
- Delete image from the local registry completely, with a warning when an application still uses it.
- Creating an application, database, or compose stack now happens on its own page instead of a dialog.
Changed
- Look and feel: the Inter font and tightly tracked headings across the dashboard and this site.
Fixed
- Creating an application with a build type other than Dockerfile (Nixpacks, Railpack, static site) or an image source failed with a 400 — fixed.
- The "DNS domain issue" notification toggle now actually saves.
- The local registry failed (
Invalid URL) whenREGISTRY_INTERNAL_URLwas left blank in.env.
- Interactive Console for applications: a
v0.1.0-alpha.2
alphaAdded
- Environment page (owner): edit part of the panel's
.env.distfrom the dashboard, no SSH needed. - Panel and application domains now auto-provision the reverse proxy when it is missing, and show troubleshooting steps (DNS, firewall, ACME).
- Host port collision check when creating/updating an application — caught up front instead of failing silently at deploy time.
- Deployment history records what triggered it (manual, webhook, auto-update) with the commit, and the list updates in real time.
- Deploy started notification (opt-in) and a "deploy…" badge on project cards.
- An Access step (IP & port / Domain / Later) when creating an application, plus an image picker from the registry.
- CLI:
aoox installwritesTERMINAL_SSH_USER=root;aoox domain setprints troubleshooting steps.
Fixed
- Saving an application's settings was rejected (
imageRef must be an…) for non-image apps — fixed. - Webhook URLs in the dashboard showed
localhosteven after the API domain was set. - Panel update and panel domain no longer drop the compose override file the dashboard creates.
- Environment page (owner): edit part of the panel's
v0.1.0-alpha.1
alphaAdded
- Panel domain: put the dashboard and API on a custom domain (automatic HTTPS) from Settings or
aoox domain set. - Update aoox from the dashboard or
aoox update [--apply]: check for and apply a new panel version. - Custom domain for the local registry (
aoox registry domain) and an S3 storage option for registry contents. - One-line installer:
curl -fsSL https://aoox.dev/install.sh | sh. - The full documentation in English (
/en/docs/*) next to Indonesian. - CI (lint, build, test) in every repo on pull requests and pushes to
main.
Fixed
- API token prefix was stored as 11 characters instead of the documented 10.
- The compose copy bundled in the CLI lagged behind
aoox-api, soaoox installcould set up a stale configuration.
- Panel domain: put the dashboard and API on a custom domain (automatic HTTPS) from Settings or
v0.1.0-alpha.0
alphaAdded
- First public alpha: a self-hosted PaaS (NestJS API + Next.js dashboard + CLI) running on top of Docker.
- Deploy from Git (Dockerfile, Nixpacks, Railpack, static site) or from an image, with realtime logs, rollback, webhooks, and pull request previews.
- Managed databases (PostgreSQL, MySQL, MariaDB, Redis) with a data browser, scheduled backups, and S3 destinations.
- Docker Compose stacks, one-click templates (WordPress, Ghost, n8n, Uptime Kuma, MinIO, Gitea), and scheduled jobs.
- Traefik reverse proxy with automatic HTTPS, a self-hosted Docker registry, remote servers over SSH, and Docker Swarm.
- JWT auth, TOTP two-factor, role-based project members, scoped API tokens, and an audit log.
- Monitoring with metric history, notifications (Telegram, Slack, Discord, email, webhook), disk cleanup, and project export/import.
- The
aooxCLI (login,link,deploy,install,whoami) and this documentation site.