dankhostself-host anything

Pick self-hosted apps, get one working docker-compose file

Tick the apps, type your domain, and this page writes a docker-compose.yml with Caddy or Traefik in front for automatic HTTPS (plus the Caddyfile, or Traefik's labels inside the file), a .env with fresh passwords, and the settings each app needs behind a proxy. The files are built in this page and nothing is uploaded.

Will it run on my machine? See whether the RAM and disk figures the apps publish fit a Raspberry Pi 4 or 5, a mini PC, an old laptop or a small VPS, and whether every image has a build for its CPU.

Check a compose file you already have. Paste your own docker-compose.yml and see what will break or is risky: a database open to the internet, :latest tags, secrets in plain text, port clashes, and for these 100 apps the data folders you forgot to mount. It runs in your browser; the file is never uploaded.

What the file does, and why a chat answer often gets it wrong

  • One proxy, no port clashes. Only the proxy (Caddy, or Traefik if you pick it) publishes web ports (80, 443 and 443/udp for HTTP/3). The only other ports in any file are the two that are not web traffic: 53 TCP and UDP for AdGuard Home's DNS and 51820/udp for wg-easy's WireGuard, each labelled with a # PORT OUTSIDE THE PROXY comment. The web apps publish nothing, so Jellyfin, Vaultwarden and Audiobookshelf can all listen on their own port 80 inside their containers without fighting over the host, and so can Forgejo and Grafana on 3000 or Miniflux and Stirling-PDF on 8080.
  • Names that never collide. Nextcloud and Paperless-ngx both call their database db; Immich and Nextcloud both call their cache redis. Every service, container, volume, folder and variable is prefixed with the app's name, and each database keeps its documented name as an alias on its app's private network, so the documented settings still find it.
  • An exact trusted-proxy address. The proxy network's subnet is pinned and Caddy has the fixed address 172.30.0.2, so the value written into TRUSTED_PROXIES (Nextcloud), IMMICH_TRUSTED_PROXIES, PAPERLESS_TRUSTED_PROXIES, FreshRSS's TRUSTED_PROXY, PHOTOPRISM_TRUSTED_PROXY, Jellyfin's Known proxies, Kavita's KnownProxies and Home Assistant's Trusted proxies is right, not a guess.
  • Host networking where the docs demand it. Home Assistant runs with network_mode: host as its install page shows; the proxy (Caddy or Traefik) reaches it through host.docker.internal and the notes give both the current Settings path and the older configuration.yaml lines.
  • One login in front of everything. Tick Authelia and every other app in the file gets a login check first: a forward_auth block in its Caddyfile site, or the authelia@docker ForwardAuth middleware on its Traefik router, both exactly as Authelia's own proxy guides write them. Authelia's configuration.yml and users file come with the rest, their secrets generated in your browser. What it adds.
  • Elevated access is labelled. Where an app's own docs ask for more than a plain container (Portainer's Docker socket, wg-easy's NET_ADMIN and SYS_MODULE, Frigate's privileged and shared memory) the file keeps it and says what it gives away in an # ELEVATED ACCESS comment.
  • No shared default passwords. Every database password and app key is generated in your browser with crypto.getRandomValues: 32 letters and digits for database passwords, 64 for the Paperless secret key.
  • Sourced line by line. Each app block starts with a # Source: comment for every official page it came from and the date it was checked, followed by a # Changed: list of every difference from the documented file beyond the name prefix.

What it does not do

  • Backups are a plan, not a service. BACKUP.md names every folder and volume the file mounts and gives each project's documented dump command for this file's service names, but nothing runs on a schedule: put the commands in cron or your backup tool yourself. The commands were read from each project's docs, not run against a live install, and where a project publishes no backup procedure (Actual Budget's server folder, Kavita, Syncthing, n8n, Ghost's Docker install, ntfy, changedetection.io) the plan says so and falls back to Docker's generic volume copy.
  • Home-only and VPN set-ups, but not the DNS for them. “Who can reach it” binds every published port to the server's LAN address (LAN_IP) or its Tailscale address (VPN_IP) instead of all interfaces, and Caddy then signs each name with its own local certificate authority, whose root you trust once per device (the notes give the steps for Windows, macOS, Linux, iPhone and Android; many Android apps still ignore a root you install yourself). Not covered: the DNS that makes a name like photos.home.arpa point at the server (no split-horizon DNS server is configured for you: use your router, AdGuard Home's rewrites or hosts files), installing Tailscale itself, a firewall for Home Assistant (with network_mode: host it listens on port 8123 on every interface whichever mode you pick), and publicly trusted certificates in Caddy, which would need a Caddy build with a DNS-provider module.
  • Checked for structure, not by running Docker. Automated tests build every app alone, all one hundred together and several pairs, and check that the YAML parses, only the proxy publishes web ports and the only other published ports are 53/tcp and 53/udp (DNS), 51820/udp (WireGuard), 1883/tcp (MQTT), 52000/udp and 52000/tcp (Neko's WebRTC), 1935/tcp (Owncast's RTMP) and 3334/tcp and 3334/udp (bitmagnet's BitTorrent), no host port is published twice (when Pi-hole and AdGuard Home are both picked, the one picked first keeps port 53 and the file says so), no names clash, every web app is on the proxy network, every Caddy site or Traefik router points at a real service and its documented port, and every variable is defined. Caddy mode is also checked to stay byte for byte what it was before Traefik mode existed. Nobody starts the containers in those tests.
  • Image tags follow the docs. Most apps are documented with latest, stable or a major tag, so a later docker compose pull can bring a new major version. Read each app's release notes before updating.
  • Two extra host ports, no more. AdGuard Home publishes 53 (TCP and UDP) for DNS and wg-easy 51820/udp for WireGuard, because neither is web traffic. Everything else that needs a port of its own is left out: Forgejo clones over HTTPS only (no SSH), Syncthing syncs through its outgoing connections and public relays (its port 22000 is not opened), and Frigate's RTSP and WebRTC ports are not published (its page says how to add them).
  • Single sign-on is a login wall, not OIDC. Authelia puts a password check in front of each app through the proxy, with users in a file and no e-mail server. It does not log you in to the apps themselves, and phone or desktop clients that talk to their server without a browser cannot pass it.
  • Hardware transcoding, GPU machine learning and SMTP mail are left out; each app's docs cover them.

Traefik mode: the labels written for you

Already run Traefik, or prefer labels to a Caddyfile? Choose Traefik next to the domain field. The apps, addresses, passwords and trusted-proxy address stay the same; only the proxy changes.

What Traefik mode does not do

Every Traefik setting above comes from Traefik's official documentation, fetched on the date shown:

The one hundred apps and where each definition comes from

Every page below was fetched on the date shown and the compose definition was copied from it, not written from memory. Each app also has its own page with the RAM, CPU and disk figures its project publishes and the compose file for that app alone.

  1. Nextcloud

    File sync and sharing with calendar, contacts and office add-ons; replaces Google Drive or Dropbox.

    Images: mariadb:lts, redis:alpine, nextcloud. Web port 80 inside the container; its other containers (db, redis) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: cloud.your domain.

  2. Immich

    Photo and video library with phone backup, face search and maps; replaces Google Photos or iCloud Photos.

    Images: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}, ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}, docker.io/valkey/valkey:9 (pinned by digest), ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 (pinned by digest). Web port 2283 inside the container; its other containers (immich-machine-learning, redis, database) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: photos.your domain.

  3. Jellyfin

    Media server that streams your films, series and music to any screen; replaces Plex or Emby without an account.

    Images: jellyfin/jellyfin. Web port 8096 inside the container; a single container. Default address: media.your domain.

  4. Vaultwarden

    Lightweight Bitwarden-compatible password manager server that works with the official Bitwarden apps; replaces 1Password or LastPass.

    Images: vaultwarden/server:latest. Web port 80 inside the container; a single container. Default address: vault.your domain.

  5. Home Assistant

    Smart-home hub that runs your lights, sensors and automations locally; replaces Google Home, Alexa or SmartThings routines.

    Images: ghcr.io/home-assistant/home-assistant:stable. Runs with host networking as its docs require; Caddy reaches it on port 8123 of the host. Default address: home.your domain.

  6. Paperless-ngx

    Scans, OCRs, tags and indexes your paper documents so you can search them; replaces a filing cabinet and Evernote-style scan folders.

    Images: docker.io/valkey/valkey:9-alpine, docker.io/library/postgres:18, ghcr.io/paperless-ngx/paperless-ngx:latest. Web port 8000 inside the container; its other containers (broker, db) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: docs.your domain.

  7. Uptime Kuma

    Checks your websites, ports and services every minute and alerts you when one goes down; replaces UptimeRobot or Pingdom.

    Images: louislam/uptime-kuma:2. Web port 3001 inside the container; a single container. Default address: status.your domain.

  8. Audiobookshelf

    Audiobook and podcast server with progress sync across its phone apps; replaces Audible's library app or a podcast service.

    Images: ghcr.io/advplyr/audiobookshelf:latest. Web port 80 inside the container; a single container. Default address: books.your domain.

  9. Navidrome

    Music streaming server for your own files, playable in the browser and in any Subsonic app; replaces Spotify for music you own.

    Images: deluan/navidrome:latest. Web port 4533 inside the container; a single container. Default address: music.your domain.

  10. FreshRSS

    RSS and Atom feed reader that refreshes on your server and syncs to mobile readers; replaces Feedly or Inoreader.

    Images: freshrss/freshrss:latest. Web port 80 inside the container; a single container. Default address: rss.your domain.

  11. Forgejo

    Git hosting with issues, pull requests, wikis, a package registry and CI (Forgejo Actions); replaces GitHub or GitLab for your own repositories.

    Images: codeberg.org/forgejo/forgejo:16. Web port 3000 inside the container; a single container. Default address: git.your domain.

  12. Mealie

    Recipe manager that imports a recipe from its web address, plans meals and builds shopping lists; replaces recipe apps and a folder of bookmarked recipes.

    Images: ghcr.io/mealie-recipes/mealie:v3.27.0. Web port 9000 inside the container; a single container. Default address: recipes.your domain.

  13. Actual Budget

    Envelope-budgeting app that syncs one budget between your devices and keeps the data on your server; replaces YNAB or a budgeting spreadsheet.

    Images: actualbudget/actual-server:latest. Web port 5006 inside the container; a single container. Default address: budget.your domain.

  14. Stirling-PDF

    PDF toolbox in the browser: merge, split, compress, convert, OCR, sign and redact; replaces uploading private documents to online PDF sites.

    Images: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest. Web port 8080 inside the container; a single container. Default address: pdf.your domain.

  15. linkding

    Bookmark manager with tags, notes, read-later, archiving and browser extensions; replaces Raindrop.io or bookmarks locked inside one browser.

    Images: sissbruecker/linkding:latest. Web port 9090 inside the container; a single container. Default address: bookmarks.your domain.

  16. Miniflux

    Minimalist feed reader that removes tracking pixels and can fetch full articles; replaces Feedly or Inoreader with one small Go server and Postgres.

    Images: miniflux/miniflux:latest, postgres:18. Web port 8080 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: feeds.your domain.

  17. Grafana

    Dashboards and alerts for metrics, logs and traces from Prometheus, InfluxDB, Loki, Postgres and more; replaces hosted dashboards such as Datadog's.

    Images: grafana/grafana-enterprise. Web port 3000 inside the container; a single container. Default address: grafana.your domain.

  18. PhotoPrism

    Photo library that indexes, tags, maps and recognises faces in your pictures without changing the originals; replaces Google Photos or Apple Photos browsing.

    Images: photoprism/photoprism:latest, mariadb:12.3. Web port 2342 inside the container; its other container (mariadb) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: gallery.your domain.

  19. Kavita

    Reading server for comics, manga and ebooks with a web reader, OPDS and reading progress; replaces Kindle or comic-shop libraries for files you own.

    Images: jvmilazz0/kavita:latest. Web port 5000 inside the container; a single container. Default address: library.your domain.

  20. Syncthing

    Continuous peer-to-peer file sync between your devices, with this server as an always-on peer; replaces Dropbox-style sync without a copy on someone's cloud.

    Images: syncthing/syncthing. Web port 8384 inside the container; a single container. Default address: sync.your domain.

  21. n8n

    Workflow automation with a visual editor, 400+ integrations, webhooks and AI nodes; replaces Zapier or Make with workflows that run on your own server.

    Images: n8nio/n8n. Web port 5678 inside the container; a single container. Default address: n8n.your domain.

  22. Open WebUI

    A chat interface for language models that run on your own machine through Ollama, with users, chat history and document upload; replaces ChatGPT for private chats.

    Images: ollama/ollama:${OLLAMA_DOCKER_TAG-latest}, ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main}. Web port 8080 inside the container; its other container (ollama) sits on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: chat.your domain.

  23. Ghost

    Publishing platform for a blog or newsletter with members and paid subscriptions built in; replaces Substack or a hosted WordPress blog on your own domain.

    Images: ghost:6-alpine, mysql:8.0.44 (pinned by digest). Web port 2368 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: blog.your domain.

  24. BookStack

    Wiki organised as shelves, books, chapters and pages, with a WYSIWYG editor, search and permissions; replaces Confluence or a shared-drive of Word documents.

    Images: lscr.io/linuxserver/bookstack:version-v26.03.3, lscr.io/linuxserver/mariadb:11.4.9. Web port 80 inside the container; its other container (mariadb) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: bookstack.your domain.

  25. Wiki.js

    Wiki with a Markdown, visual or raw-HTML editor, page history, search and fine-grained access rules; replaces Confluence, Notion wikis or a hosted MediaWiki.

    Images: postgres:15-alpine, ghcr.io/requarks/wiki:2. Web port 3000 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: wiki.your domain.

  26. Memos

    Quick notes in a Markdown timeline with tags, links and attachments, private or shared; replaces Google Keep, Apple Notes or a notes-to-self chat.

    Images: neosmemo/memos:stable. Web port 5230 inside the container; a single container. Default address: memos.your domain.

  27. ntfy

    Push notifications to your phone or desktop from any script with one curl command, with Android, iOS and web apps; replaces Pushover or Pushbullet.

    Images: binwiederhier/ntfy. Web port 80 inside the container; a single container. Default address: ntfy.your domain.

  28. Vikunja

    To-do lists and projects as list, Kanban, Gantt or table views, with sharing, reminders and CalDAV; replaces Todoist, Trello or Microsoft To Do.

    Images: vikunja/vikunja, postgres:18. Web port 3456 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: tasks.your domain.

  29. Gotify

    Small server that receives messages over a REST API and pushes them to its Android app and web UI over WebSocket; replaces Pushover for alerts from your own scripts.

    Images: gotify/server. Web port 80 inside the container; a single container. Default address: gotify.your domain.

  30. changedetection.io

    Watches web pages for changes, price drops or restocks and alerts you by e-mail, Discord, ntfy, Gotify and more; replaces Visualping or Distill.io.

    Images: ghcr.io/dgtlmoon/changedetection.io. Web port 5000 inside the container; a single container. Default address: watch.your domain.

  31. Authelia

    One login page, with optional two-factor, in front of every other app in the file through the proxy's forward auth; replaces a separate password prompt per app with single sign-on.

    Images: docker.io/authelia/authelia:latest. Web port 9091 inside the container; a single container. Default address: auth.your domain.

  32. AdGuard Home

    Network-wide ad and tracker blocking: a DNS server for every device in the house, with a web UI for filter lists and query logs; replaces per-device ad blockers.

    Images: adguard/adguardhome. Web port 3000 inside the container; a single container. Default address: adguard.your domain.

  33. wg-easy

    WireGuard VPN with a web UI to add devices and show their QR codes, so your phone and laptop reach home from anywhere; replaces a paid VPN app or forwarding a port per app.

    Images: ghcr.io/wg-easy/wg-easy:15. Web port 51821 inside the container; a single container. Default address: vpn.your domain.

  34. Frigate

    Network video recorder for IP cameras that detects people, cars and animals locally with AI and ties into Home Assistant; replaces cloud camera subscriptions.

    Images: ghcr.io/blakeblackshear/frigate:stable. Web port 8971 inside the container; a single container. Default address: nvr.your domain.

  35. Firefly III

    Personal finance manager: accounts, budgets, categories, rules, recurring transactions and reports, on your own server; replaces Mint, YNAB or a spreadsheet.

    Images: fireflyiii/core:latest, mariadb:lts, alpine. Web port 8080 inside the container; its other containers (db, cron) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: money.your domain.

  36. Tandoor Recipes

    Recipe manager with meal plans and shopping lists that imports recipes from websites and shares them with your household; replaces Paprika or a folder of bookmarked recipes.

    Images: postgres:16-alpine, vabene1111/recipes. Web port 80 inside the container; its other container (db_recipes) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: tandoor.your domain.

  37. Grocy

    Groceries and household management: stock with best-before dates, shopping lists, recipes, chores and batteries, with barcode scanning; replaces the note on the fridge.

    Images: lscr.io/linuxserver/grocy:latest. Web port 80 inside the container; a single container. Default address: grocy.your domain.

  38. Homepage

    A start page for everything you host, with live status widgets for over 100 services, set up in YAML files; replaces a bookmark folder of server addresses.

    Images: ghcr.io/gethomepage/homepage:latest. Web port 3000 inside the container; a single container. Default address: dash.your domain.

  39. Kopia

    Encrypted, deduplicated backups of your server's folders as snapshots to a local disk, S3, B2, SFTP or WebDAV, run from a web UI; replaces ad-hoc tar scripts and a paid backup service.

    Images: kopia/kopia:latest. Web port 51515 inside the container; a single container. Default address: backup.your domain.

  40. Portainer CE

    A web UI for the Docker on this server: containers, images, volumes, networks and compose stacks, with logs and a console; replaces typing docker commands over SSH.

    Images: portainer/portainer-ce:lts. Web port 9000 inside the container; a single container. Default address: portainer.your domain.

  41. Pi-hole

    Network-wide ad and tracker blocking: a DNS server for every device in the house, with a dashboard of every query and what it blocked; replaces per-device ad blockers.

    Images: pihole/pihole:latest. Web port 80 inside the container; a single container. Default address: pihole.your domain.

  42. Plex Media Server

    Media server that streams your own films, series, music and photos to the Plex apps on TVs, phones and consoles; replaces copying files to each device or a NAS's own media app.

    Images: plexinc/pms-docker. Web port 32400 inside the container; a single container. Default address: plex.your domain.

  43. Node-RED

    Flow-based automation in a browser editor: wire devices, MQTT topics, APIs and online services together with drag-and-drop nodes; replaces IFTTT or Zapier-style cloud automations.

    Images: nodered/node-red:latest. Web port 1880 inside the container; a single container. Default address: nodered.your domain.

  44. Mosquitto

    MQTT message broker that sensors, ESP boards, Zigbee2MQTT and Home Assistant publish to and subscribe from on your own network; replaces a vendor cloud relaying your devices' messages.

    Images: eclipse-mosquitto:2.1-alpine. Web port 9001 inside the container; a single container. Default address: mqtt.your domain.

  45. Zigbee2MQTT

    Bridge from a USB Zigbee adapter to MQTT, so Zigbee lights, plugs and sensors of many brands work together without each maker's hub; replaces the Hue, IKEA or Aqara bridges.

    Images: ghcr.io/koenkk/zigbee2mqtt. Web port 8080 inside the container; a single container. Default address: zigbee.your domain.

  46. Umami

    Privacy-focused website analytics: page views, referrers, countries, devices and events from a small script, without cookies; replaces Google Analytics on your own sites.

    Images: ghcr.io/umami-software/umami:latest, postgres:15-alpine. Web port 3000 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: umami.your domain.

  47. Calibre-Web

    Web library for your Calibre e-books: browse, search, read in the browser, download, send to an e-reader and serve an OPDS feed; replaces keeping the library on one computer running Calibre.

    Images: lscr.io/linuxserver/calibre-web:latest. Web port 8083 inside the container; a single container. Default address: ebooks.your domain.

  48. Gitea

    Git hosting with issues, pull requests, code review, a package registry and CI (Gitea Actions); replaces GitHub or GitLab for your own repositories.

    Images: docker.gitea.com/gitea:1.27.3. Web port 3000 inside the container; a single container. Default address: gitea.your domain.

  49. Dozzle

    Live log viewer for every container on this server, in the browser, with search and per-container filters; replaces running docker logs over SSH.

    Images: amir20/dozzle:latest. Web port 8080 inside the container; a single container. Default address: logs.your domain.

  50. Homarr

    Start page for your self-hosted apps with drag-and-drop boards, app status and widgets from their APIs, and its own logins; replaces a bookmarks folder of server addresses.

    Images: ghcr.io/homarr-labs/homarr:latest. Web port 7575 inside the container; a single container. Default address: homarr.your domain.

  51. SearXNG

    Private metasearch engine: one search box that asks Google, Bing, DuckDuckGo, Wikipedia and other engines for you and merges their results, without an account, ads or a search history kept about you; replaces searching on Google directly.

    Images: docker.io/searxng/searxng:latest, docker.io/valkey/valkey:9-alpine. Web port 8080 inside the container; its other container (valkey) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: search.your domain.

  52. code-server

    VS Code in the browser, running on your server: edit files, use the terminal and install extensions from any device, including a tablet; replaces a laptop with a local editor for work on the server.

    Images: codercom/code-server:latest. Web port 8080 inside the container; a single container. Default address: code.your domain.

  53. PrivateBin

    Pastebin that encrypts every paste in the browser before it is sent, so the server stores only ciphertext; pastes can expire or burn after reading; replaces Pastebin and pasting passwords or logs into a chat.

    Images: privatebin/nginx-fpm-alpine:stable. Web port 8080 inside the container; a single container. Default address: paste.your domain.

  54. authentik

    Identity provider for your self-hosted apps: one login with two-factor for everything, through OAuth2/OpenID Connect, SAML, LDAP or a proxy in front of apps without logins; replaces a separate password for every app, or Okta and Auth0.

    Images: docker.io/library/postgres:16-alpine, ghcr.io/goauthentik/server:2026.8.3, ghcr.io/goauthentik/server:2026.8.3. Web port 9000 inside the container; its other containers (postgresql, worker) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: sso.your domain.

  55. Radicale

    Small CalDAV and CardDAV server for calendars, to-do lists and contacts, synced to phones (DAVx5 on Android, the built-in accounts on iPhone) and Thunderbird, stored as plain files; replaces Google Calendar and Contacts or iCloud sync.

    Images: ghcr.io/kozea/radicale:stable. Web port 5232 inside the container; a single container. Default address: dav.your domain.

  56. Karakeep

    Bookmark-everything app (formerly Hoarder): save links, notes, images and PDFs, with a headless Chrome that archives each page, full-text search and optional AI tagging; replaces Pocket, Raindrop.io and a notes app full of links.

    Images: ghcr.io/karakeep-app/karakeep:release, ghcr.io/karakeep-app/karakeep-chrome:release, getmeili/meilisearch:v1.41.0. Web port 3000 inside the container; its other containers (chrome, meilisearch) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: karakeep.your domain.

  57. wallabag

    Read-it-later app: save articles from the browser or phone, and wallabag fetches the text without the ads and clutter for reading later, also offline in its apps and on e-readers; replaces Pocket and Instapaper.

    Images: wallabag/wallabag, mariadb, redis:alpine. Web port 80 inside the container; its other containers (db, redis) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: read.your domain.

  58. IT-Tools

    One page of small developer tools that run in your browser: UUID, token and password generators, hash and bcrypt, JWT parser, base64, cron and chmod calculators, JSON, YAML and TOML converters, subnet calculator; replaces pasting data into ad-funded converter sites.

    Images: corentinth/it-tools:latest. Web port 80 inside the container; a single container. Default address: tools.your domain.

  59. HedgeDoc

    Collaborative Markdown editor in the browser: several people edit one note at once and see the rendered page live, with diagrams, math and slide mode, shared by link; replaces Google Docs and HackMD for meeting notes and docs.

    Images: postgres:18.6-alpine, quay.io/hedgedoc/hedgedoc:1.12.0. Web port 3000 inside the container; its other container (database) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: pad.your domain.

  60. Seerr

    Request manager for a Jellyfin, Plex or Emby library (Seerr is the merged successor of Jellyseerr and Overseerr): family and friends browse and request films and series, you approve, and Sonarr or Radarr fetch them; replaces requests by text message.

    Images: ghcr.io/seerr-team/seerr:latest. Web port 5055 inside the container; a single container. Default address: requests.your domain.

  61. SiYuan

    Block-based note-taking and personal knowledge base in the browser: Markdown-style editing, links and backlinks between blocks, databases, flashcards and PDF annotation, all kept in one workspace folder on your server; replaces Notion and Obsidian Sync for one person.

    Images: b3log/siyuan. Web port 6806 inside the container; a single container. Default address: siyuan.your domain.

  62. Reactive Resume

    Resume builder in the browser: fill in your experience once, pick a template, rearrange sections and download a PDF made on your own device, with accounts for several people; replaces paid online CV builders that keep your data.

    Images: postgres:17, amruthpillai/reactive-resume:latest. Web port 3000 inside the container; its other container (postgres) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: resume.your domain.

  63. ToolJet

    Low-code builder for internal tools: drag tables, forms and charts onto a page, wire them to your databases and APIs with queries, and share the app with your team; replaces Retool and hand-written admin panels.

    Images: tooljet/tooljet:ee-lts-latest, postgres:16. Web port 80 inside the container; its other container (postgres) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: tooljet.your domain.

  64. Appsmith

    Low-code platform for admin panels and internal tools: build pages from tables, forms and charts, connect them to PostgreSQL, MongoDB, REST and 25-plus other sources, and add logic in JavaScript; replaces Retool and one-off admin dashboards.

    Images: index.docker.io/appsmith/appsmith-ce:v2.4.3. Web port 80 inside the container; a single container. Default address: appsmith.your domain.

  65. Trilium Notes

    Hierarchical note-taking for a large personal knowledge base: a tree of rich-text, code, canvas and mind-map notes with cloning, attributes, scripting and per-note encryption, synced to the desktop app; replaces Evernote and OneNote.

    Images: triliumnext/trilium:latest. Web port 8080 inside the container; a single container. Default address: trilium.your domain.

  66. Khoj

    AI assistant over your own documents and the web: chat with the language model you connect, ask questions about notes and files you add, run web searches through its own SearXNG and code in a sandbox; replaces ChatGPT with file uploads and Perplexity.

    Images: docker.io/pgvector/pgvector:pg15, ghcr.io/khoj-ai/terrarium:latest, docker.io/searxng/searxng:latest, ghcr.io/khoj-ai/khoj:latest. Web port 42110 inside the container; its other containers (database, sandbox, search) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: khoj.your domain.

  67. Glance

    One-page dashboard for your feeds: RSS, Reddit, Hacker News, YouTube channels, weather, calendar, stock prices, release notes and status checks of your own services, laid out in columns from one YAML file; replaces a browser start page and a pile of open tabs.

    Images: glanceapp/glance. Web port 8080 inside the container; a single container. Default address: glance.your domain.

  68. QwenPaw

    Personal AI agent with a web console: connect a model provider or a local model, give it skills, memory and scheduled jobs, and talk to it from the browser or from chat apps such as Telegram and Discord; replaces hosted assistant subscriptions that keep your history.

    Images: agentscope/qwenpaw:latest. Web port 8088 inside the container; a single container. Default address: qwenpaw.your domain.

  69. Langfuse

    Tracing and evaluation for applications built on language models: your code sends each prompt, response, cost and latency through its SDK, and the web UI shows the traces, manages prompt versions and scores outputs; replaces LangSmith and hosted LLM observability services.

    Images: docker.langfuse.com/langfuse/langfuse-worker:4, docker.langfuse.com/langfuse/langfuse:4, docker.io/clickhouse/clickhouse-server:25.12, cgr.dev/chainguard/minio, docker.io/redis:7, docker.io/postgres:17. Web port 3000 inside the container; its other containers (langfuse-worker, clickhouse, minio, redis, postgres) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: langfuse.your domain.

  70. Plausible CE

    Privacy-friendly web analytics on your own server: a small script on your pages counts visits, sources, pages, countries and goals without cookies, shown on one dashboard per site; replaces Google Analytics.

    Images: postgres:16-alpine, clickhouse/clickhouse-server:24.12-alpine, ghcr.io/plausible/community-edition:v3.2.1. Web port 8000 inside the container; its other containers (plausible_db, plausible_events_db) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: plausible.your domain.

  71. ArchiveBox

    Saves web pages you give it as lasting copies on your own disk: HTML, a single-file page, a PDF, a screenshot, the media and the text for full-text search, all browsable from one index; replaces trusting the Wayback Machine or bookmarks that rot.

    Images: archivebox/archivebox:dev. Web port 5797 inside the container; a single container. Default address: archive.your domain.

  72. Dashy

    Start page for a home server from one conf.yml: tiles and sections linking your services, live status checks, widgets for weather, system stats and feeds, themes and search; edited in the browser or in the file; replaces a browser start page full of server addresses.

    Images: lissy93/dashy:latest. Web port 8080 inside the container; a single container. Default address: dashy.your domain.

  73. Beszel

    Server monitoring with history: a small agent on each machine reports CPU, memory, disk, network, temperatures and per-container Docker stats to this hub, which keeps the charts and sends alerts when a value crosses a threshold; replaces logging in to each machine to run top and docker stats.

    Images: henrygd/beszel. Web port 8090 inside the container; a single container. Default address: beszel.your domain.

  74. NocoBase

    No-code builder for internal business apps: define your own data tables and relations, then click together lists, forms, kanban boards, charts, workflows and per-role permissions on top of a PostgreSQL database; replaces spreadsheets passed around by e-mail and hosted tools like Airtable.

    Images: nocobase/nocobase:latest-full, postgres:16. Web port 80 inside the container; its other container (postgres) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: nocobase.your domain.

  75. listmonk

    Newsletter and mailing-list manager: subscriber lists with double opt-in, segments by SQL query, templated campaigns with open and click counts, sent through your own SMTP server or mail provider; replaces hosted newsletter services such as Mailchimp.

    Images: listmonk/listmonk:latest, postgres:17-alpine. Web port 9000 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: lists.your domain.

  76. Neko

    A Firefox running on your server that you use from any browser tab: the screen streams to you over WebRTC, several people can watch together and pass the keyboard around, and logins, downloads and history stay on the server, not on the device you use; replaces screen sharing when several people want to browse together.

    Images: ghcr.io/m1k1o/neko/firefox:latest. Web port 8080 inside the container; a single container. Default address: neko.your domain.

  77. Linkwarden

    Bookmark manager that keeps a copy of every page you save, as a screenshot, a PDF and a readable HTML archive, so links still open after the site changes or goes away; collections shared with other users, tags and full-text search; replaces read-later services and browser bookmarks.

    Images: postgres:16-alpine, ghcr.io/linkwarden/linkwarden:latest, getmeili/meilisearch:v1.13.3. Web port 3000 inside the container; its other containers (postgres, meilisearch) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: links.your domain.

  78. ConvertX

    File converter in the browser for over a thousand formats: images, documents, e-books, audio, video and 3D files go through FFmpeg, LibreOffice, Pandoc, ImageMagick, Calibre and a dozen other tools on your own server, several files at once; replaces upload-to-convert websites.

    Images: ghcr.io/c4illin/convertx. Web port 3000 inside the container; a single container. Default address: convert.your domain.

  79. DocuSeal

    Document signing on your own server: upload a PDF, drag signature, date and text fields onto it, send the link by e-mail, and get the signed PDF with an audit log back; signers need no account; replaces DocuSign.

    Images: docuseal/docuseal. Web port 3000 inside the container; a single container. Default address: sign.your domain.

  80. BentoPDF

    PDF toolbox that works inside your browser: merge, split, compress, rotate, sign, fill forms, OCR and convert to and from Office and image formats, with the files processed on your own device; replaces online PDF sites that upload your documents.

    Images: ghcr.io/alam00000/bentopdf-simple:latest. Web port 8080 inside the container; a single container. Default address: bentopdf.your domain.

  81. Termix

    SSH terminals, remote desktops (RDP, VNC, Telnet), SFTP file transfers and SSH tunnels for all your servers in one browser tab: hosts and keys saved once, split screen up to six panels, live CPU, memory and disk per session; replaces a desktop SSH client such as Termius and its synced host list.

    Images: ghcr.io/lukegus/termix:latest, guacamole/guacd:1.6.0. Web port 8080 inside the container; its other container (guacd) sits on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: termix.your domain.

  82. Documenso

    Document signing on your own server: upload a PDF, place signature, date and text fields, send it to recipients by email and get back a PDF sealed with your own signing certificate plus an audit log; templates, teams and an API; replaces DocuSign and similar e-signature services.

    Images: postgres:15, documenso/documenso:latest. Web port 3000 inside the container; its other container (database) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: documenso.your domain.

  83. MeTube

    Web page for yt-dlp: paste a link from YouTube or any of the other sites yt-dlp supports and the server downloads the video or just the audio, at the quality and format you pick, into a folder you can play or sync from; playlists, channel subscriptions and a download queue; replaces running yt-dlp by hand and download websites full of ads.

    Images: ghcr.io/alexta69/metube. Web port 8081 inside the container; a single container. Default address: metube.your domain.

  84. TREK

    Trip planner for one person or a group: days with places on a map, routes, bookings and flights, a shared budget with currency conversion, packing lists, to-dos, documents and a chat per trip, all updated live for everyone on it; read-only share links and PDF export; replaces planning a trip across spreadsheets, notes and a shared map.

    Images: mauriceboe/trek:latest. Web port 3000 inside the container; a single container. Default address: trek.your domain.

  85. RomM

    Library for retro game ROMs: scans your folders, matches each game to cover art and details from IGDB, ScreenScraper and other providers, groups them by platform and plays many in the browser through EmulatorJS and Ruffle, keeping saves and states in sync across your devices; replaces a folder of ROM files and hand-made playlists.

    Images: rommapp/romm:latest, mariadb:latest. Web port 8080 inside the container; its other container (romm-db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: romm.your domain.

  86. PLANKA

    Kanban boards for a team in the browser: projects with boards, lists and cards that update live for everyone, with Markdown, due dates, a stopwatch, attachments, comments and custom fields on each card, notifications through more than 100 providers and import from Trello; replaces Trello and similar hosted kanban services.

    Images: ghcr.io/plankanban/planka:latest, postgres:16-alpine. Web port 1337 inside the container; its other container (postgres) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: planka.your domain.

  87. Gatus

    Status page that checks your services from one YAML file: each endpoint is polled over HTTP, TCP, DNS, ICMP or other protocols and judged on conditions such as status code, response time, body content or days until the certificate expires; alerts to Slack, Discord, email, ntfy and more; replaces a hosted uptime-monitor subscription.

    Images: twinproduction/gatus:latest. Web port 8080 inside the container; a single container. Default address: gatus.your domain.

  88. Homer

    Static start page for a home server, built from one config.yml: groups of tiles with icons linking your services, fuzzy search, keyboard shortcuts, theme customisation, several pages, and smart cards that show live data from some services; installable as an app (PWA); no server-side code and no database; replaces a browser bookmark folder of server addresses.

    Images: b4bz/homer. Web port 8080 inside the container; a single container. Default address: homer.your domain.

  89. Owncast

    Your own live-streaming server: stream from OBS or any RTMP software and viewers watch in the browser at several qualities, with built-in chat, moderation, custom branding and Fediverse notifications when you go live; replaces streaming on Twitch or YouTube Live under their rules.

    Images: owncast/owncast:latest. Web port 8080 inside the container; a single container. Default address: owncast.your domain.

  90. Dawarich

    Your location history on your own server: phones send their position through OwnTracks, Overland, the Dawarich apps or Home Assistant, or you import a Google Takeout, and it draws your routes and visits on a map, with trips and statistics such as the countries and cities you visited and the distance you travelled; replaces Google Timeline (Google Maps Location History).

    Images: redis:7.4-alpine, postgis/postgis:17-3.5-alpine, freikin/dawarich:latest, freikin/dawarich:latest. Web port 3000 inside the container; its other containers (dawarich_redis, dawarich_db, dawarich_sidekiq) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: dawarich.your domain.

  91. OmniTools

    Browser toolbox for everyday file and data jobs: resize, convert and edit images, trim or reverse video, split, merge and edit PDFs, reformat text and lists, work out dates and time zones, and convert JSON, CSV and XML, all done in the visitor's browser so the files never reach the server; replaces ad-funded single-purpose converter sites.

    Images: iib0011/omni-tools:latest. Web port 80 inside the container; a single container. Default address: omni-tools.your domain.

  92. LibrePhotos

    Photo and video library for a household: indexes the folders you give it (or takes uploads), finds and groups faces, captions and tags scenes, turns GPS into place names for a map and for search, and builds albums, memories and a timeline, with several users each confined to a folder of their own; replaces Google Photos.

    Images: reallibrephotos/librephotos-proxy:latest, pgautoupgrade/pgautoupgrade:latest, reallibrephotos/librephotos-frontend:latest, reallibrephotos/librephotos:latest. Web port 80 inside the container; its other containers (db, frontend, backend) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: librephotos.your domain.

  93. Homebox

    Home inventory in the browser: record what you own with photos, serial numbers, purchase and warranty details and fields of your own, sort it by location and label, find it with search, print QR codes to stick on boxes and get maintenance reminders, with several people sharing one inventory; replaces a spreadsheet of belongings for insurance claims and moves.

    Images: ghcr.io/sysadminsmedia/homebox:latest. Web port 7745 inside the container; a single container. Default address: homebox.your domain.

  94. Photoview

    Photo gallery for the pictures already on your server: it maps your folders to albums, makes thumbnails, groups photos by the faces in them, plays videos optimised for the web, reads RAW files and EXIF data, and shares albums or single photos by public link with an optional password, each user limited to a folder of their own; replaces Google Photos for browsing and sharing.

    Images: photoview/photoview:2, photoview/photoview:2, mariadb:lts. Web port 80 inside the container; its other containers (photoview-prepare, mariadb) sit on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: photoview.your domain.

  95. SparkyFitness

    Food, exercise and health tracker for a family: log meals from food databases or your own foods, workouts, water, weight and body measurements, track cycles and symptoms, set goals and read reports, share with family members, and sync from the phone app; replaces MyFitnessPal and similar subscription trackers.

    Images: postgres:18.3-alpine, codewithcj/sparkyfitness_server:latest, codewithcj/sparkyfitness:latest. Web port 80 inside the container; its other containers (sparkyfitness-db, sparkyfitness-server) sit on the app's own back-end network, which the proxy does not join; that network keeps outbound internet access, which the app needs. Default address: sparkyfitness.your domain.

  96. bitmagnet

    BitTorrent search engine of your own: its crawler walks the public DHT network and records the torrents it finds, classifies them (movies and TV shows among other types, with language and resolution) using data from The Movie Database, and lets you search the index in a web page, over GraphQL or through a Torznab endpoint for Sonarr, Radarr and the rest of the Servarr stack; it stores metadata and magnet links, never the files; replaces public torrent index sites.

    Images: ghcr.io/bitmagnet-io/bitmagnet:latest, postgres:16-alpine. Web port 3333 inside the container; its other container (postgres) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: bitmagnet.your domain.

  97. 13ft

    Article reader that gets past paywalls and ads: paste a link, or put it after the address, and it fetches the page posing as Google's crawler, which many sites show the full text to, then displays it clean; replaces 12ft.io, the hosted service it copies.

    Images: ghcr.io/wasi-master/13ft:latest. Web port 5000 inside the container; a single container. Default address: 13ft.your domain.

  98. Moodist

    Ambient-sound mixer for focus and sleep: layer any of 84 sounds into your own mix, save it as a preset or share it as a link, fade out on a sleep timer, and use the built-in binaural beats, Pomodoro timer, breathing exercise and notepad; installable as an app that works offline; replaces paid ambient-noise apps.

    Images: ghcr.io/remvze/moodist. Web port 8080 inside the container; a single container. Default address: moodist.your domain.

  99. OliveTin

    Web page of buttons for shell commands you define in one config.yaml, such as restarting a service, waking a PC or running a backup script with a dropdown for its argument, so family members or junior admins can run them from a phone or a wall tablet; replaces handing out SSH access for routine jobs.

    Images: jamesread/olivetin. Web port 1337 inside the container; a single container. Default address: olivetin.your domain.

  100. AdventureLog

    Travel log and trip planner: pin the places you have been or plan to go on a 2D or 3D map with dates, notes, photos and visit history, build multi-day trips with flights, lodging and checklists, track the countries, regions and cities you have seen, attach GPX hiking tracks, and share trips by link or with other users; replaces a travel spreadsheet and saved places in Google Maps.

    Images: ghcr.io/seanmorley15/adventurelog:latest, postgis/postgis:16-3.5. Web port 80 inside the container; its other container (db) sits on the app's own internal back-end network, with no internet access, which the proxy does not join. Default address: adventurelog.your domain.

Made with AI tools.