Custom apps for Umbrel.
On your Umbrel, go to App Store → Community App Stores → Add and enter:
https://github.com/zot24/umbrel-apps
Each app folder has a README with its setup, its limits and how it works.
| App | App ID | Port | What it does |
|---|---|---|---|
| nworth | zot24-nworth |
8484 | Self-hosted personal net-worth and portfolio tracker. |
| Playwright Renderer | zot24-playwright-renderer |
3030 | Headless-browser renderer with residential-IP egress. |
| Herdr | zot24-herdr |
7681 | Terminal multiplexer for AI coding agents: a persistent server on your Umbrel, with a browser TUI, phone or laptop attach over Tailscale, and a machine for the Herdr desktop app. |
| Proton Bridge | zot24-proton-bridge |
7685 | Proton Mail IMAP/SMTP bridge for sibling apps (Hermes, Himalaya). The console is behind the Umbrel login. IMAP 143 and SMTP 25 stay on the container network. |
| Apprise | zot24-apprise |
8000 | Notification gateway for Telegram, Discord and 100+ other services. The notify API stays on the container network. |
| Cursor Sandboxes | zot24-cursor-sandboxes |
7690 | Machines for Cursor Cloud Agents. Each sandbox is a Cursor "My Machines" worker in its own container, inside a Docker daemon private to the app. Workers connect out only. |
| GitHub Runner | zot24-github-runner |
3500 | Self-hosted GitHub Actions runners for your private repositories. Jobs with runs-on: [self-hosted, umbrel] run on the Umbrel, one fresh container per job, inside a Docker daemon private to the app. GitHub does not bill self-hosted minutes. |
| Cloudflare Tunnel | zot24-cloudflared |
4500 | Cloudflare Tunnel for other Umbrel apps. Separate from the official cloudflared app on port 4499. The connector installs a new cloudflared by itself. |
| Dockyard | zot24-dockyard |
8120 | An isolated Docker host on your Umbrel: a full Docker daemon in its own network namespace, apart from Umbrel's own Docker, to deploy and run your own containers. |
| Openship | zot24-openship |
3001 | The Openship deploy control plane (dashboard and API). It manages remote servers over SSH, and does not build or run apps on the Umbrel. |
| Lifeboat | zot24-lifeboat |
7746 | Nightly encrypted backups of a Supabase project (database and Storage files), on the Umbrel and in Cloudflare R2, with one-button restore and restore drills. |
nworth and Openship have their own login. The other web UIs are behind the Umbrel login.
Your Umbrel offers an update for an app only when version: in that app's
umbrel-app.yml changes on main. A merge that changes code or an image pin,
but not the version, reaches new installs only. An installed app keeps its old
files and images until you update it.
How a change gets a new version depends on where the app's image comes from:
| Apps | Image | What happens after a merge to main |
|---|---|---|
| GitHub Runner, Cursor Sandboxes, Herdr, Playwright Renderer, Cloudflare Tunnel, Lifeboat | Built in this repository (ghcr.io/zot24/…) |
Build: <app> builds the images for amd64 and arm64, tags them with the version in umbrel-app.yml, and the bot commits the new digests to docker-compose.yml (chore: pin … or chore: update … image). The build starts only for changes to the image sources. |
| nworth | Built in zot24/nworth |
Pin nworth image runs every day. It pins the newest published image and changes the version itself, so no pull request is needed. |
| Apprise, Dockyard, Openship, Proton Bridge | Upstream images | Change the image in docker-compose.yml and the version in the same pull request. |
Two weekly workflows open their own pull requests with a new version:
Update: GitHub Actions runner (the actions/runner base of the runner image)
and Update: Herdr deps (herdr and ttyd). Merge the pull request, and the build
on main makes and pins the new image.
Update: cloudflared runs every hour. When cloudflare/cloudflared publishes
a newer multi-arch image, that job bumps the app version, builds both images,
and commits the digests in the same commit. A box that is already running
does not wait for that commit: the connector installs the new binary and
restarts the tunnel within a few minutes. Integrate: cloudflared upstreams
runs daily and opens a pull request only when Radiokot's UI or connector, or
the official Umbrel listing, changes something other than that cloudflared
release. If ANTHROPIC_API_KEY is set, a Flue agent then ports the
interesting part of that pull request onto the same branch and does not
merge it.
- Merge the pull request with the change. For GitHub Runner, the pull
request build first runs the tests and builds the images without pushing
them. The other apps build on
mainonly. - Wait for the bot commit that pins the new digests on
main. - Change the version in
<app>/umbrel-app.ymland in<app>/VERSION, and writereleaseNotesfor the people who update. Merge that pull request. It changes no image source, so it does not start a new build. - On the Umbrel, open the app in the App Store and select Update. The update restarts the app.
A pull request can also change the version and the code together (as in
#132). Then the build on main tags the images with the new version, and the
update is offered as soon as the bot pin commit lands.
Most apps have a docker-compose.local.yml: the same stack without Umbrel.
Start it from the app folder. Some files explain more options in a comment at
the top (GitHub Runner, for example, can run against a fake GitHub API):
cd zot24-github-runner
docker compose -f docker-compose.local.yml up -d- zot24-hermes (Hermes Agent): removed 2026-07-20. The official Hermes Agent app in Umbrel's official store replaces it.
- zot24-openclaw (OpenClaw): removed. Its
openclaw-dockerimage is no longer available.
This repository uses a separate gallery repository for icons and screenshots: zot24/umbrel-apps-gallery.
Umbrel community app stores have a limitation: icons and gallery images in the
app folder do not show. Umbrel fetches them from the official gallery endpoint
instead of the local store. The workaround is to host them in a separate
repository and use full URLs in umbrel-app.yml:
icon: https://raw.githubusercontent.com/zot24/umbrel-apps-gallery/main/zot24-nworth/icon.png
gallery:
- https://raw.githubusercontent.com/zot24/umbrel-apps-gallery/main/zot24-nworth/1.jpgUmbrel issue #1998 documents this.
| Repository | Purpose |
|---|---|
| zot24/umbrel-apps | This repo: app definitions |
| zot24/umbrel-apps-gallery | Icons and gallery images |
| zot24/nworth | nworth source and image |