Ekso ships releases multiple times a week. Updating an install is two commands. Your database, attachments, and backups are preserved automatically — there is no migration step you need to run.Documentation Index
Fetch the complete documentation index at: https://ekso.dev/llms.txt
Use this file to discover all available pages before exploring further.
The update flow
Run these from the folder that contains yourdocker-compose.yml (the directory you unzipped the bundle into):
What happens during an update
| Step | What changes | What stays |
|---|---|---|
1. docker compose pull | Latest eksoapp/app and eksoapp/worker images downloaded | Nothing on disk yet — just image cache populated |
2. docker compose up -d (stop) | Running containers stopped | ./data/, ./backups/, ekso.json untouched |
3. docker compose up -d (start) | Containers recreated from new images, attached to the same ./data/ and ./backups/ folders | Database files and attachments untouched |
| 4. API boot | Schema migrations apply automatically against the existing database | Your data — migrations evolve the schema in place |
| 5. API ready | New version serving on port 6050 | Sessions invalidated only if Auth.Jwt.Key rotated |
Schema migrations are forward-only and incremental. Skipping multiple releases — for example updating from 1.55 to 1.62 — runs all the migrations in between, in order, against your live data. There is no special procedure for catching up.
Release cadence
Ekso releases multiple times a week. Each release is published to Docker Hub as both a versioned tag (eksoapp/app:1.59) and updates the floating :latest tag. Customers running docker compose pull get whatever was tagged :latest at pull time.
This cadence is intentional — small, frequent releases land fixes and improvements quickly. It also means you should not be afraid to update; every release is the smallest possible step from the previous one, and ./backups/ keeps the last 14 days of your data on hand if anything ever needs reverting.
Pinning a specific version
If you’d rather control when a customer install moves between releases, pin the image tags in yourdocker-compose.yml:
docker compose pull only fetches the pinned version (a no-op if you already have it), and docker compose up -d doesn’t recreate the containers unless you change the tag. To upgrade, edit the version numbers and re-run the two-command flow.
Released version numbers are listed at the Ekso changelog.
Taking a pre-upgrade snapshot
The bundledbackup service writes a fresh snapshot when it starts. To get one immediately before upgrading, restart the backup container:
./backups/db/ and ./backups/storage/ (Quickstart) or ./backups/storage/ (BYOD). Use that snapshot if you ever need to roll back the upgrade you’re about to do.
See Data management for the full backup story.
Rolling back to a previous version
A rollback has two parts: you need to revert both the code (the container images) and the data (the database and storage). Reverting only the code against post-upgrade data risks the older code being unable to read the newer schema../backups/db/ is your fallback — find the timestamp closest to (but before) the upgrade.
BYOD — your external database
If you run BYOD (your own Postgres or SQL Server), the upgrade flow is identical:CREATE rights for migrations to land — same requirement as first install. If you revoked elevated permissions after first boot, restore them before upgrading.
The bundled backup service in BYOD only snapshots attachments (./data/storage/). Database backups are your responsibility — take one with your usual DB tooling before any upgrade you’re nervous about.
See also
- Data management — where data lives, automatic backups, and the restore commands referenced above
- Configuration reference — every field in
ekso.json