Umbrel App Store Packages

repository·master·Indexed 20 days ago

https://github.com/getumbrel/umbrel-apps

Official app packages for the Umbrel App Store consumed by umbrelOS. This repository defines the App Store Standard, requiring apps to be manageable via a web browser to eliminate the need for SSH or CLI access. It includes configuration details, environment variables, and volume mappings for various integrated applications such as Activepieces, AdGuard Home, Adventurelog, Affine, Agent Zero, and Agora.

Tokens
213.2K
Snippets
620
Records
776
Agent score
73%

What's inside umbrel-apps

  1. App Store Standard for Umbrel Packages

    master

    To be compatible with the Umbrel App Store, every app package must be manageable via a web browser. The primary goal is to ensure users can complete setup and usage without needing SSH, CLI access, log scraping, or manual file edits.

    Key Requirements:

    • Web-based Interface: Apps should open to a web UI, setup flow, login page, or status page upon installation.
    • Clear Next Steps: The UI must provide a clear path for the user to proceed.
    • UmbrelOS Integration: Apps should utilize sensible defaults, browser-based setup, and predictable updates.
    • Data Handling: Apps must handle user data carefully and provide a clear default path, even if advanced controls are available.
  2. Use Umbrel App Store badges

    master

    Developers can display Umbrel App Store badges on their own websites, READMEs, or release notes to link users to their app on the Umbrel store.

    App-specific Badges

    To link directly to your specific app, use the following URL pattern:

    • Dark Mode: https://apps.umbrel.com/api/app/<app-id>/badge-dark.svg
    • Light Mode: https://apps.umbrel.com/api/app/<app-id>/badge-light.svg

    Generic Badges

    To link to the general Umbrel App Store, use:

    • Dark Mode: https://apps.umbrel.com/badge-dark.svg
    • Light Mode: https://apps.umbrel.com/badge-light.svg
    <!-- Example for an app with ID 'immich' -->
    [![Get Immich on umbrelOS](https://apps.umbrel.com/api/app/immich/badge-dark.svg)](https://apps.umbrel.com/app/immich)
    [![Get Immich on umbrelOS](https://apps.umbrel.com/api/app/immich/badge-light.svg)](https://apps.umbrel.com/app/immich)
  3. Configure Librephotos Data Volumes

    master

    Librephotos requires specific directory mappings to persist photos, media, database files, and logs. These paths are relative to the ${APP_DATA_DIR} environment variable.

    Backend Volumes

    • ${APP_DATA_DIR}/data/photos $\rightarrow$ /data: Stores photo files.
    • ${APP_DATA_DIR}/data/protected_media $\rightarrow$ /protected_media: Stores protected media files.
    • ${APP_DATA_DIR}/data/logs $\rightarrow$ /logs: Stores application logs.
    • ${APP_DATA_DIR}/data/cache $\rightarrow$ /root/.cache: Stores application cache.

    Database Volumes

    • ${APP_DATA_DIR}/data/db $\rightarrow$ /var/lib/postgresql/data: Persists the PostgreSQL database files.
  4. DCRPulse Service Architecture and Dependencies

    master

    The DCRPulse application is composed of three main services that must be started in a specific order to ensure health and connectivity:

    1. dcrd: The core daemon. It must be healthy before other services start. It uses a healthcheck that performs a JSON-RPC getinfo call via curl.
    2. dcrwallet: Depends on dcrd being service_healthy. It manages the wallet and connects to dcrd via RPC. Its health is verified by checking connectivity to ports 9110 and 9111 using nc.
    3. dashboard: The user interface. It depends on both dcrd and dcrwallet being service_healthy. It provides access to the data via the app_proxy.

    Data Persistence: All services share the same volume mapping: ${APP_DATA_DIR}/data mapped to /app-data. The dashboard service mounts this volume as read-only (ro).

  5. EE Gateway Architecture and IPC

    master

    The EE Gateway is composed of two primary services that share a common data volume located at ${APP_DATA_DIR}/data (mounted as /data inside containers). They use file-based Inter-Process Communication (IPC) rather than network communication:

    • UI Service: Writes config.json to the shared volume.
    • Worker Service: Reads config.json and writes state.json and packets.db to the shared volume.

    Credentials Management: Credentials are not passed via environment variables. Users enter an encryptedenergy.com API token during the UI setup wizard. This token is written to config.json in the shared volume, which the worker reads during every scan cycle.

  6. Understand Plane service architecture

    master

    The Plane deployment is composed of several specialized Docker services that work together to provide the full application experience:

    • api: The core backend service handling requests.
    • web: The frontend user interface.
    • worker: A Celery worker for background task processing.
    • beat-worker: A Celery beat service for scheduled tasks.
    • migrator: A one-time service that runs database migrations (python manage.py migrate).
    • live: Handles real-time communication/updates.
    • space: A service (likely for file/asset management) that includes a healthcheck via HTTP.
    • admin: An administrative interface.
    • db: PostgreSQL database.
    • redis: Valkey/Redis for caching and message brokering.
    • rabbitmq: Message broker for Celery.
    • minio: S3-compatible object storage for file uploads.
    • nginx: Reverse proxy for the application.
  7. Bassin service architecture and volumes

    master

    Bassin is composed of several services that share data via volumes. The primary data directory is controlled by the ${APP_DATA_DIR} environment variable.

    Service Overview

    • init: An ephemeral service that uses envsubst to generate /config/ckpool.conf from a template using Bitcoin node credentials.
    • ckpool: The core pool service (ghcr.io/getumbrel/docker-ckpool-solo). It listens on port 3456 (mapped to internal 3333) and requires the generated config.
    • ui: A service that copies UI assets to the shared /www directory.
    • www: A static file server (halverneus/static-file-server) that serves the contents of /www on port 80.
    • widget-server: Provides API data for Umbrel widgets.

    Volume Mapping

    All services rely on the following volume structure under ${APP_DATA_DIR}:

    • ${APP_DATA_DIR}/data/config: Used for configuration files (e.g., ckpool.conf).
    • ${APP_DATA_DIR}/data/www: Used for serving static UI assets.
  8. Disable Tailscale accept-routes to prevent LAN unreachability

    master

    To prevent overlapping subnet routes from routing local LAN replies through the tailscale0 interface (which can make the Umbrel unreachable on its local LAN IP), the service explicitly disables accept-routes during startup.

    The startup command executes tailscale web --listen 0.0.0.0:8240 in the background and runs a retry loop (up to 30 attempts) to execute tailscale set --accept-routes=false before finally executing tailscaled.

    tailscale set --accept-routes=false
  9. Hardware Requirements for EE Gateway Worker

    master

    To enable full functionality for the worker service, specific host hardware access is required:

    Bluetooth Access

    • Network Mode: Must use network_mode: host to access the host's Bluetooth stack.
    • Capabilities: Requires NET_ADMIN and NET_RAW to manage and read from the radio.
    • D-Bus: Requires a read-only bind-mount of /var/run/dbus to communicate with the host's bluetoothd.

    GPS Access (Optional)

    To use a USB GPS dongle, the following configuration is used to allow access to character devices with major numbers 188 (USB serial) and 166 (CDC ACM):

    • Cgroup Rules: device_cgroup_rules must permit access to these majors.
    • Device Passthrough: The host's /dev must be bind-mounted into the container's /dev to make the device nodes visible.
  10. Configure the Bitcoin Regtest Dashboard via Docker Compose

    master

    The bitcoin-regtest-dashboard application is a multi-service stack composed of Bitcoin Core (running in regtest mode), electrs (an Electrum server implementation), and the dashboard UI itself.

    To deploy this stack, ensure the ${APP_DATA_DIR} environment variable is set, as it defines the base path for all persistent data volumes. The services rely on specific volume mappings to share Bitcoin data and RPC cookies.

    Service Components

    • bitcoin: Runs Bitcoin Core in regtest mode. It automatically creates a wallet named regtest_wallet and generates an initial block.
    • electrs: Provides an Electrum-compatible interface. It requires read-only access to the Bitcoin data directory.
    • dashboard: The web interface that connects to both the Bitcoin RPC and the Electrs server.

    Data Persistence

    All services use the following volume structure under ${APP_DATA_DIR}:

    • Bitcoin data: ${APP_DATA_DIR}/data/bitcoin
    • Electrs data: ${APP_DATA_DIR}/data/electrs
    version: "3.7"
    
    services:
      app_proxy:
        environment:
          APP_HOST: bitcoin-regtest-dashboard_dashboard_1
          APP_PORT: 3000
    
      bitcoin:
        image: ghcr.io/getumbrel/docker-bitcoind:v31.0@sha256:89185fc2792a9824cbe18f7ad4ead02a3a9a14adf5b34eb42f60ebec36201fa0
        volumes:
          - ${APP_DATA_DIR}/data/bitcoin:/data/.bitcoin
    
      electrs:
        image: getumbrel/electrs:v0.11.0@sha256:0a2c6f573abfd8d724651c6ba1c1f3a9c740219c1cf0f4468043c3342170d8a5
        volumes:
          - ${APP_DATA_DIR}/data/electrs:/data
          - ${APP_DATA_DIR}/data/bitcoin:/data/.bitcoin:ro
    
      dashboard:
        image: coreylphillips/bitcoin-regtest-dashboard:v1.0.4@sha256:d71e099ec53426cecd05899a7f8efe2b73bfc1d0c21750ac53dc2b2dad107820
        volumes:
          - ${APP_DATA_DIR}/data/bitcoin:/bitcoin/.bitcoin:ro
  11. Configure Bisq 2 Node deployment

    master

    The Bisq 2 Node deployment consists of three components: a server (the headless Bisq 2 API node), a web sidecar (an Nginx UI for status and QR code pairing), and an app_proxy for authenticated ingress.

    Network Architecture

    • server: Binds its API to 127.0.0.1:8090 for security. This is only accessible via the loopback interface.
    • web: Uses network_mode: "service:server" to share the server container's network namespace. This allows the web UI to read the local API on :8090 and serve its own UI on :8091.
    • app_proxy: Acts as the single ingress point. It targets the server container to expose the web UI on port 8091 via Umbrel's authenticated proxy.

    Security Note

    PROXY_AUTH_ADD is intentionally left unset to ensure Umbrel's authenticated app_proxy remains active. The node is accessed via a pairing code, so the interface must never be exposed unauthenticated.

    version: "3.7"
    
    services:
      app_proxy:
        environment:
          APP_HOST: bisq2-node_server_1
          APP_PORT: 8091
    
      server:
        image: ghcr.io/bisq-network/bisq2-api:2.1.11.1@sha256:af77443abc90114b0282d44a1fa5b5f3beeb608b6df76d8674f4366236856154
        restart: on-failure
        stop_grace_period: 1m
        mem_limit: 2g
        volumes:
          - ${APP_DATA_DIR}/data:/data
    
      web:
        image: ghcr.io/bisq-network/bisq2-api-web-ui:2.1.11.1@sha256:0295d45b6da3d9bf0d2e6ba74caeb42222e00eb30d9fa847a136a0f358aa23
        restart: on-failure
        network_mode: "service:server"
        volumes:
          - ${APP_DATA_DIR}/data:/data:ro
  12. Optimize Frigate performance and hardware access

    master

    When deploying Frigate, consider the following settings for hardware access and memory management:

    • Privileged Mode: The web service uses privileged: true, which may be necessary for certain hardware acceleration setups.
    • Shared Memory (shm_size): The shm_size is set to "128mb". This value should be updated based on the number and resolution of your cameras.
    • Cache Optimization: To reduce SSD/SD Card wear, you can enable a tmpfs mount for /tmp/cache.
        shm_size: "128mb" # update for your cameras based on calculation above
        # - type: tmpfs
        #   target: /tmp/cache
        #   tmpfs:
        #     size: 1000000000