Compare commits

..

3 Commits

Author SHA1 Message Date
Felipe Knorr Kuhn
509edb1c01
Use proposed metadata 2025-04-08 15:34:29 -07:00
Felipe Knorr Kuhn
dd6f3eb503
Add the app metadata updates 2025-04-08 15:30:28 -07:00
Felipe Knorr Kuhn
e5649538b2
Update the mempool app to v3.2.0 2025-04-07 16:58:41 -07:00
754 changed files with 2061 additions and 13862 deletions

View File

@ -10,4 +10,4 @@ jobs:
name: Lint apps
runs-on: ubuntu-latest
steps:
- uses: sharknoon/umbrel-app-linter-action@d0b39f9ec5867fd001b05d5ddd6037dcc35f41bd
- uses: sharknoon/umbrel-app-linter-action@d392151f207ab882efc7ddd4a299b6290b6356eb

View File

@ -1,12 +1,14 @@
# Umbrel App Framework
If you can code in any language, you already know how to develop an app for Umbrel. There is no restriction on the kinds of programming languages, frameworks, or databases that you can use. Apps run inside isolated [Docker](https://docs.docker.com/) containers, and the only requirement is that they should serve a web-based UI.
🚨 This is the current workflow for developing and testing an app on umbrelOS 1.x. The app framework is under active development and this workflow will change in the future. For testing on umbrelOS 0.5.4, please refer to the [previous version of this document](https://github.com/getumbrel/umbrel-apps/blob/9eae789b8512ef2a213805524e17f33d2128e33e/README.md).
If you can code in any language, you already know how to develop an app for Umbrel. There is no restriction on the kinds of programming languages, frameworks, or databases that you can use. Apps run inside isolated [Docker](https://docs.docker.com/) containers, and the only requirement (for now) is that they should have a web-based UI.
> Some server apps might not have a UI at all. In that case, the app should serve a simple web page listing the connection details, QR codes, setup instructions, and anything else needed for the user to connect. The user is never expected to have CLI access on Umbrel.
To keep this document short and easy, we won't go into the app development itself, and will instead focus on packaging and testing an existing app.
Let's jump into action by packaging [BTC RPC Explorer](https://github.com/janoside/btc-rpc-explorer), a Node.js based app, for Umbrel.
Let's jump into action by packaging [BTC RPC Explorer](https://github.com/janoside/btc-rpc-explorer), a Node.js based blockchain explorer, for Umbrel.
There are 4 steps:
@ -203,13 +205,6 @@ submitter: Umbrel
submission: https://github.com/getumbrel/umbrel/pull/334
```
When submitting a new app, leave the `gallery` and `releaseNotes` fields empty. Use the following values:
```yml
gallery: []
releaseNotes: ""
```
The `dependencies` section within the app manifest gives Umbrel a list of app IDs that must be already installed in order for the user to install BTC RPC Explorer and also function.
The `exports.sh` shell script is a simple script to export environmental variables that your `docker-compose.yml` can read. These environment variables are also accessible when other apps start through their `docker-compose.yml` files. Most applications will not require this feature.
@ -370,7 +365,7 @@ You can get up and running with umbrelOS in a few different ways:
1. [Install umbrelOS on a Raspberry Pi 5](https://github.com/getumbrel/umbrel/wiki/Install-umbrelOS-on-a-Raspberry-Pi-5)
2. [Install umbrelOS on any x86 system](https://github.com/getumbrel/umbrel/wiki/Install-umbrelOS-on-x86-Systems)
3. [Install umbrelOS in a VM](https://github.com/getumbrel/umbrel/wiki/Install-umbrelOS-on-a-Linux-VM)
4. [Purchase an Umbrel Home](https://umbrel.com/umbrel-home)
4. [Purchase an Umbrel Home device](https://umbrel.com/umbrel-home)
Regardless of the method you choose, once you have umbrelOS up and running and have visited http://umbrel.local and created an account, you can follow the steps below to test your app.
@ -422,7 +417,7 @@ We're now ready to open a pull request on the main [getumbrel/umbrel-apps](https
...
### 256x256 SVG icon
_(Upload an icon with no rounded corners as it will be dynamically rounded with CSS.)_
_(Submit an icon with no rounded corners as it will be dynamically rounded with CSS. GitHub doesn't allow uploading SVGs directly, so please upload your icon to an alternate service, like https://svgur.com, and paste the link below.)_
_We will help finalize this icon before the app goes live in the Umbrel App Store._
...
@ -461,12 +456,12 @@ PROXY_AUTH_ADD: "false"
```
##### Whitelist/blacklist
Some apps host a user-facing UI at the root of their web application and then an API at e.g. `/api`. And in this case we would like `/` to be protected by Umbrel and `/api` protected by the apps existing/inbuilt API token system. This can be achieved by adding this env. var. to the `app_proxy` Docker Compose service:
Some apps host a user facing at the root of their web application and then an API at e.g. `/api`. And in this case we would like `/` to be protected by Umbrel and `/api` protected by the apps existing/inbuilt API token system. This can be achieved by adding this env. var. to the `app_proxy` Docker Compose service:
```
PROXY_AUTH_WHITELIST: "/api/*"
```
Another example could be that the root of the web application (`/`) should be publicly accessible but the admin section be protected by Umbrel. This can be achieved by adding these env. vars. to the `app_proxy` Docker Compose service:
Another example could be that the root of the web application (`/`) should be publically accessible but the admin section be protected by Umbrel. This can be achieved by adding these env. vars. to the `app_proxy` Docker Compose service:
```
PROXY_AUTH_WHITELIST: "*"
PROXY_AUTH_BLACKLIST: "/admin/*"
@ -482,4 +477,4 @@ PROXY_AUTH_BLACKLIST: "/admin/*"
1. **I need help with something else**
Feel free to open an [issue](https://github.com/getumbrel/umbrel-apps/issues) on this GitHub repository.
You can open an [issue](https://github.com/getumbrel/umbrel-apps/issues) on GitHub or get in touch with [@mayankchhabra](https://t.me/mayankchhabra), [@lukechilds](https://t.me/lukechilds), or [@nmfretz](https://t.me/nmfretz) on Telegram.

View File

@ -1,63 +0,0 @@
version: '3.0'
services:
app_proxy:
environment:
APP_HOST: activepieces_app_1
APP_PORT: 80
PROXY_AUTH_ADD: "false"
app:
## does not work rootless as of yet
#user: "1000:1000"
image: ghcr.io/activepieces/activepieces:0.81.4@sha256:08229ab5e6374ace2ef9471eab0f519d9af1e7eed6dbaa989a5863387591544d
restart: on-failure
environment:
AP_ENGINE_EXECUTABLE_PATH: dist/packages/engine/main.js
AP_API_KEY: ${APP_PASSWORD}
AP_ENCRYPTION_KEY: ${APP_AP_ENCRYPTION_KEY}
AP_JWT_SECRET: ${APP_PASSWORD}
AP_ENVIRONMENT: prod
AP_FRONTEND_URL: http://${DEVICE_DOMAIN_NAME}:8146
AP_WEBHOOK_TIMEOUT_SECONDS: 30
AP_TRIGGER_DEFAULT_POLL_INTERVAL: 5
AP_POSTGRES_DATABASE: activepieces
AP_POSTGRES_HOST: activepieces_db_1
AP_POSTGRES_PORT: 5432
AP_POSTGRES_USERNAME: activepieces
AP_POSTGRES_PASSWORD: activepieces
AP_EXECUTION_MODE: UNSANDBOXED
AP_REDIS_HOST: activepieces_redis_1
AP_REDIS_PORT: 6379
AP_FLOW_TIMEOUT_SECONDS: 600
AP_TELEMETRY_ENABLED: "true"
AP_TEMPLATES_SOURCE_URL: "https://cloud.activepieces.com/api/v1/flow-templates"
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
volumes:
- ${APP_DATA_DIR}/data/app/cache:/usr/src/app/cache
db:
user: "1000:1000"
image: postgres:17.4@sha256:4aed4b0525233308fc5de1b8d47f92326460d598dc5f004d14b41f183360b4e9
restart: on-failure
environment:
POSTGRES_DB: activepieces
POSTGRES_PASSWORD: activepieces
POSTGRES_USER: activepieces
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U activepieces"]
interval: 5s
timeout: 5s
retries: 5
redis:
user: "1000:1000"
image: redis:7.4.3@sha256:ee8ec723c831b815c3e2f2c6fbd1c145c68d1c04ba284f044ec1434fbca0fee8
restart: on-failure
volumes:
- ${APP_DATA_DIR}/data/redis:/data

View File

@ -1 +0,0 @@
export APP_AP_ENCRYPTION_KEY=$(derive_entropy "${app_entropy_identifier}-AP_ENCRYPTION_KEY" | head -c32)

View File

@ -1,58 +0,0 @@
manifestVersion: 1
id: activepieces
category: automation
name: Activepieces
version: "0.81.4"
releaseNotes: >-
This release includes bug fixes and minor improvements:
- Fixed project filter so admins no longer see other users' personal projects
- Added a database migration rollback system for safer upgrades
- Fixed retrying flows from a failed step that was getting stuck in queued status
- Fixed audit logs missing the retried case
- Fixed MCP OAuth registration returning incorrect numeric values
Full release notes are found at https://github.com/activepieces/activepieces/releases
tagline: Your friendliest open source AI automation tool
description: >-
🤯 Welcome to Activepieces
Your friendliest open source all-in-one automation tool, designed to be extensible through a type-safe pieces framework written in Typescript.
🔥 Why Activepieces is Different:
- 💖 Loved by Everyone: Intuitive interface and great experience for both technical and non-technical users with a quick learning curve.
- 🌐 Open Ecosystem: All pieces are open source and available on npmjs.com, 60% of the pieces are contributed by the community.
- 🛠️ Pieces are written in Typescript: Pieces are npm packages in TypeScript, offering full customization with the best developer experience, including hot reloading for local piece development on your machine. 😎
- 🤖 AI-Ready: Native AI pieces let you experiment with various providers, or create your own agents using our AI SDK, and there is Copilot to help you build flows inside the builder.
- 🏢 Enterprise-Ready: Developers set up the tools, and anyone in the organization can use the no-code builder. Full customization from branding to control.
- 🔒 Secure by Design: Self-hosted and network-gapped for maximum security and control over your data.
- 🧠 Human in the Loop: Delay execution for a period of time or require approval. These are just pieces built on top of the piece framework, and you can build many pieces like that. 🎨
- 💻 Human Input Interfaces: Built-in support for human input triggers like "Chat Interface" 💬 and "Form Interface" 📝
developer: Activepieces
website: https://www.activepieces.com/
dependencies: []
repo: https://github.com/activepieces/activepieces/
support: https://community.activepieces.com/
port: 8146
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
path: ""
defaultUsername: ""
defaultPassword: ""
backupIgnore:
- data/app/cache/*
- data/redis/*
submitter: al-lac
submission: https://github.com/getumbrel/umbrel-apps/pull/2481

View File

@ -2,7 +2,7 @@ version: "3.7"
services:
server:
image: adguard/adguardhome:v0.107.73@sha256:7fbf01d73ecb7a32d2d9e6cef8bf88e64bd787889ca80a1e8bce30cd4c084442
image: adguard/adguardhome:v0.107.59@sha256:5d5e3aef39a8c8906a324f0c2da0a6123929e459b57c1e3f05e401dca5c7bf02
# override the default command to set the web address to port 8095 to avoid conflict with Thunderhub
# command from Dockerfile: https://github.com/AdguardTeam/AdGuardHome/blob/master/docker/Dockerfile
command: ["--no-check-update", "-c", "/opt/adguardhome/conf/AdGuardHome.yaml", "-w", "/opt/adguardhome/work", "--web-addr", "0.0.0.0:8095"]

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: adguard-home
category: networking
name: AdGuard Home
version: "0.107.73"
version: "0.107.59"
tagline: Network-wide software for blocking ads and tracking
description: >-
⚠️ See below for important set-up instructions.
@ -19,11 +19,10 @@ description: >-
This ensures that the app will not conflict with other apps from the Umbrel App Store, and that the app will be accessible
when clicking on the app icon in the umbrelOS homescreen.
releaseNotes: >-
🚨 Critical Security Update: This hotfix addresses a critical vulnerability that could allow users to bypass authentication and gain full access to AdGuard Home without valid credentials. Updating immediately is strongly recommended.
This release includes bug fixes:
Security Fix:
- Authentication is now enforced for requests upgraded from HTTP/2 Cleartext (H2C) to public resources
- Fixed an issue with rules using the client modifier
- Resolved a problem with the search form in the query log
Full release notes can be found at https://github.com/AdguardTeam/AdGuardHome/releases

View File

@ -1,50 +0,0 @@
version: '3.7'
services:
app_proxy:
environment:
APP_HOST: adventurelog_web_1
APP_PORT: 3000
PROXY_AUTH_ADD: "false"
web:
image: ghcr.io/seanmorley15/adventurelog-frontend:v0.12.0@sha256:9aa653603eb1305f3c34c61bc99b40a394295aed3fecd8c9777a9e5c04c7155e
restart: on-failure
environment:
PUBLIC_SERVER_URL: "http://adventurelogserver1:8000"
ORIGIN: "http://${DEVICE_DOMAIN_NAME}:8015"
BODY_SIZE_LIMIT: "Infinity"
depends_on:
- server
db:
image: ghcr.io/baosystems/postgis:15-3.5@sha256:ac619116c8ee81a386eb878956950d798b57c502985c12eb6e7be1598aa8d02f
restart: on-failure
environment:
POSTGRES_DB: database
POSTGRES_USER: adventure
POSTGRES_PASSWORD: adventure
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data/
server:
image: ghcr.io/seanmorley15/adventurelog-backend:v0.12.0@sha256:68725d6a3692333e0049607f32078e865e95ebdb8a13e0c5512a01ef766770ae
container_name: adventurelogserver1 # needs to be set for the frontend to be able to connect (underline not supported)
restart: on-failure
environment:
- PGHOST=adventurelog_db_1
- PGDATABASE=database
- PGUSER=adventure
- PGPASSWORD=adventure
- SECRET_KEY=adventure
- DJANGO_ADMIN_USERNAME=admin
- DJANGO_ADMIN_PASSWORD=admin
- DJANGO_ADMIN_EMAIL=admin@example.com
- PUBLIC_URL=http://${DEVICE_DOMAIN_NAME}:8016
- CSRF_TRUSTED_ORIGINS=http://${DEVICE_DOMAIN_NAME}:8015
- DEBUG=False
- FRONTEND_URL=http://${DEVICE_DOMAIN_NAME}:8015
ports:
- '8016:80'
depends_on:
- db
volumes:
- ${APP_DATA_DIR}/data/app:/code/media/

View File

@ -1,9 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
APP_DATA_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
# Remove .gitignore file from data directories if they exist
[ -f "${APP_DATA_DIR}/data/app/.gitignore" ] && rm -f "${APP_DATA_DIR}/data/app/.gitignore"
[ -f "${APP_DATA_DIR}/data/db/.gitignore" ] && rm -f "${APP_DATA_DIR}/data/db/.gitignore"

View File

@ -1,43 +0,0 @@
manifestVersion: 1.1
id: adventurelog
category: files
name: AdventureLog
version: "v0.12.0"
tagline: Self-hostable travel tracker and trip planner
description: >-
🗺️ Starting from a simple idea of tracking travel locations (called adventures), AdventureLog has grown into a full-fledged travel companion. With AdventureLog, you can log your adventures, keep track of where you've been on the world map, plan your next trip collaboratively, and share your experiences with friends and family.
AdventureLog was created to solve a problem: the lack of a modern, open-source, user-friendly travel companion. Many existing travel apps are either too complex, too expensive, or too closed-off to be useful for the average traveler. AdventureLog aims to be the opposite: simple, beautiful, and open to everyone.
releaseNotes: >-
AdventureLog v0.12.0 is a major update focused on trip planning, itineraries, and smarter travel tools. Key highlights include:
- Completely redesigned itinerary system with drag & drop, reordering, and map-pin-based planning
- Day-aware planning with day of week shown throughout collection and itinerary views
- Notes and checklists for trip-wide items, viewable and tickable from the itinerary
- New budgeting tools with cost fields for locations, transportations, and lodgings, plus currency settings
- GPX file upload support for transportation entries
- Improved OIDC authentication with auto-redirect, email-based account linking, and smoother flows
- Collection UI redesign with statuses, primary photo selection, and improved sharing
- New recommendation toggles and smarter city/location detection
- Itinerary items now included in backup and restore
- Various bug fixes for timezones, calendars, location editing, and UI rendering
Full release notes can be found at https://github.com/seanmorley15/AdventureLog/releases/
developer: Sean Morley
website: https://adventurelog.app/
repo: https://github.com/seanmorley15/AdventureLog
support: https://github.com/seanmorley15/AdventureLog/issues
port: 8015
submitter: Mateo Silguero
submission: https://github.com/getumbrel/umbrel-apps/pull/2222
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
dependencies: []
path: ""
defaultUsername: ""
defaultPassword: ""

View File

@ -6,30 +6,13 @@ services:
APP_PORT: 3010
web:
image: ghcr.io/toeverything/affine:0.26.3@sha256:725aaceb0ed94d4b832ae6ef9414503291c9b2b4f60bd6f3c7eef571b6149add
restart: on-failure
environment:
- AFFINE_CONFIG_PATH=/root/.affine/config
- REDIS_SERVER_HOST=affine_redis_1
- DATABASE_URL=postgres://affine:affine@affine_db_1:5432/affine
- NODE_ENV=production
volumes:
- ${APP_DATA_DIR}/data/config:/root/.affine/config
- ${APP_DATA_DIR}/data/storage/blob:/root/.affine/storage
depends_on:
redis:
condition: service_healthy
db:
condition: service_healthy
migration:
condition: service_completed_successfully
migration:
image: ghcr.io/toeverything/affine:0.26.3@sha256:725aaceb0ed94d4b832ae6ef9414503291c9b2b4f60bd6f3c7eef571b6149add
image: ghcr.io/toeverything/affine-graphql:stable-b427a89@sha256:5a9c147ff6faa562a4aaaec0af16f43d39c58d2404c1c69b3eae3b3a112f509f
restart: on-failure
init: true
command:
['sh', '-c', 'node ./scripts/self-host-predeploy']
['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/index.js']
environment:
- NODE_OPTIONS="--import=./scripts/register.js"
- AFFINE_CONFIG_PATH=/root/.affine/config
- REDIS_SERVER_HOST=affine_redis_1
- DATABASE_URL=postgres://affine:affine@affine_db_1:5432/affine
@ -68,4 +51,4 @@ services:
test: ['CMD-SHELL', 'pg_isready -U affine']
interval: 10s
timeout: 5s
retries: 5
retries: 5

View File

@ -3,7 +3,7 @@ id: affine
name: Affine
tagline: Open source alternative to Notion, Miro, and Airtable
category: files
version: "0.26.3"
version: "0.20.5"
port: 3013
description: >-
A privacy-focused, local-first, open-source, and ready-to-use alternative for Notion & Miro.
@ -36,16 +36,14 @@ gallery:
- 2.jpg
- 3.jpg
releaseNotes: >-
Key highlights include:
- Improved edgeless performance during dragging and zooming
- Improved key mapping for non-U.S. keyboard layouts
- Improved database filter, callout default style, and dark mode visibility
- Improved S3 provider compatibility for self-hosted setups
- Improved admin panel with a better dashboard and settings interface
- Fixed an issue where history could be created repeatedly during concurrent operations
This update includes several improvements and bug fixes:
- Fixed message sending issue and table collaboration
- Improved document merging and server error handling
- Enhanced AI chat panel and table block support
- Added workspace avatar support and turbo renderer improvements
- Optimized editor performance and fixed compatibility issues
Full release notes are found at https://github.com/toeverything/AFFiNE/releases
For full release notes, visit https://github.com/toeverything/AFFiNE/releases
dependencies: []
path: ""
defaultUsername: ""
defaultUsername: ""

View File

@ -1 +0,0 @@

View File

@ -1,41 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: akaunting_app_1
APP_PORT: 80
app:
image: akaunting/akaunting:3.1.21@sha256:918bbc77981e5b96ab6aa6838491cfa7c98cb4ee7bbf9532ee083e7e66d04255
# does not work rootless
#user: "1000:1000"
restart: on-failure
environment:
AKAUNTING_SETUP: "true"
LOCALE: en-US
DB_HOST: akaunting_db_1
DB_PORT: 3306
DB_NAME: akaunting
DB_USERNAME: admin
DB_PASSWORD: akaunting_password
DB_PREFIX: asd_
COMPANY_NAME: "My Company"
COMPANY_EMAIL: my@company.com
ADMIN_EMAIL: umbrel@umbrel.local
ADMIN_PASSWORD: ${APP_PASSWORD}
depends_on:
- db
db:
image: mariadb:11.8.2@sha256:2bcbaec92bd9d4f6591bc8103d3a8e6d0512ee2235506e47a2e129d190444405
user: "1000:1000"
restart: on-failure
environment:
MYSQL_DATABASE: akaunting
MYSQL_USER: admin
MYSQL_PASSWORD: akaunting_password
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- ${APP_DATA_DIR}/db:/var/lib/mysql

View File

@ -1,67 +0,0 @@
manifestVersion: 1
id: akaunting
name: Akaunting
tagline: An intuitive accounting solution for small businesses and freelancers
category: finance
version: "3.1.21"
port: 8773
description: >-
📊 Akaunting is a powerful open-source accounting software that simplifies financial management for small businesses, freelancers, and entrepreneurs. It offers an all-in-one solution to manage income, expenses, invoices, and financial reports, making it easier to maintain an organized and transparent overview of your finances. With its intuitive design and flexible features, Akaunting helps you save time on administrative tasks while improving accuracy and efficiency.
From creating professional invoices to managing customers, vendors, and recurring payments, Akaunting is built to streamline your day-to-day accounting operations. It also includes robust features like multi-currency support for international transactions, online payment integration for faster cash flow, and inventory tracking to keep stock and sales aligned. For those needing even more functionality, its built-in App Store offers a wide range of add-ons to extend the software according to your needs.
To access most features of the app, you'll need an API key. You can create one on the developer's website: https://akaunting.com
Key Features:
💰 Invoicing - Create, customize, and send professional invoices with ease.
📥 Expense Tracking - Record, categorize, and monitor expenses to maintain full control over your budget.
📊 Financial Reports - Generate detailed profit & loss statements, balance sheets, and other insights to understand your financial status.
👥 Customer & Vendor Management - Keep all contacts and their transaction history organized and easily accessible.
💳 Online Payments - Accept client payments via PayPal, Stripe, and other popular gateways.
🌍 Multi-Currency Support - Handle transactions in multiple currencies with automatic exchange rate updates.
🧾 Recurring Billing - Automate recurring invoices and payments for subscriptions or long-term contracts.
📦 Inventory Management - Track product stock, sales, and purchases in real time.
🔧 App Store Extensions - Expand functionality with add-ons like payroll, advanced reports, or project management.
developer: Akaunting Inc.
website: https://akaunting.com/
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/3290
repo: https://github.com/akaunting/akaunting
support: https://github.com/akaunting/akaunting/issues
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
- 5.jpg
releaseNotes: >-
This update includes an important fix:
- Fixed cache module version issue
Full release notes can be found at https://github.com/akaunting/akaunting/releases
dependencies: []
path: ""
defaultUsername: umbrel@umbrel.local
deterministicPassword: true

View File

@ -1,15 +1,11 @@
manifestVersion: 1.2
manifestVersion: 1
id: alby-nostr-wallet-connect
name: Nostr Wallet Connect
tagline: The power of the zaps at the tip of your fingers
category: bitcoin
category: finance
version: "0.4.2"
port: 58000
description: >-
⚠️ Deprecation notice: This app has been deprecated by the project developers and therefore will no longer receive any app updates.
The Alby Hub app on the app store is the evolution of this app from the same developers and should be used instead.
Connect your LND node over Nostr to zap directly from within supported apps like Damus & Amethyst.
@ -37,4 +33,3 @@ dependencies:
path: ""
defaultUsername: ""
defaultPassword: ""
disabled: true

View File

@ -4,17 +4,18 @@ services:
environment:
APP_HOST: albyhub_server_1
APP_PORT: 8080
PROXY_AUTH_ADD: "false"
server:
image: ghcr.io/getalby/hub:v1.21.6@sha256:dc05806a3384f57ded8aca2ba58d47ec93a0aeb213539b5faf32e7a3c71b5c32
image: ghcr.io/getalby/hub:v1.16.0@sha256:dc0e9319a89c94a673324fdd587c18e766220ebd571643149a08c7a9769726ec
user: 1000:1000
volumes:
- ${APP_DATA_DIR}/data:/data
- ${UMBREL_ROOT}/app-data/lightning/data/lnd:/lnd:ro
- ${APP_LIGHTNING_NODE_DATA_DIR}:/lnd:ro
environment:
LN_BACKEND_TYPE: ${APP_ALBYHUB_LN_BACKEND:-LDK}
LND_ADDRESS: ${APP_ALBYHUB_LND_ADDRESS}
LND_CERT_FILE: ${APP_ALBYHUB_LND_CERT_FILE}
LND_MACAROON_FILE: ${APP_ALBYHUB_LND_MACAROON_FILE}
LN_BACKEND_TYPE: "LND"
LND_ADDRESS: $APP_LIGHTNING_NODE_IP:$APP_LIGHTNING_NODE_GRPC_PORT
LND_CERT_FILE: "/lnd/tls.cert"
LND_MACAROON_FILE: "/lnd/data/chain/bitcoin/$APP_BITCOIN_NETWORK/admin.macaroon"
WORK_DIR: "/data/albyhub"
COOKIE_SECRET: ${APP_SEED}
LOG_EVENTS: "true"

View File

@ -1,14 +0,0 @@
#!/bin/bash
# Check if Lightning Node app is installed and export required variables if so
installed_apps=$("${UMBREL_ROOT}/scripts/app" ls-installed)
if echo "$installed_apps" | grep --quiet -x 'lightning'; then
export APP_ALBYHUB_LN_BACKEND="LND"
export APP_ALBYHUB_LND_ADDRESS="10.21.21.9:10009"
export APP_ALBYHUB_LND_CERT_FILE="/lnd/tls.cert"
# Without `lightning` as a dependency, we need to hardcode the LND macaroon file path
# This means Alby Hub currently only works with mainnet
# When optional dependencies are supported in umbrelOS we can revisit this
export APP_ALBYHUB_LND_MACAROON_FILE="/lnd/data/chain/bitcoin/mainnet/admin.macaroon"
fi

View File

@ -3,7 +3,7 @@ id: albyhub
name: Alby Hub ✨
tagline: Self-custodial Lightning wallet with integrated node and app connections
category: bitcoin
version: "1.21.6"
version: "1.16.0"
port: 59000
description: >-
Alby Hub is an open-source, self-custodial Bitcoin Lightning wallet, with the easiest-to-use Lightning Network node for everyone.
@ -13,20 +13,11 @@ description: >-
Effortlessly connect to a variety of apps like the Alby Browser Extension or Alby Go mobile app, create sub-wallets for family and friends, and take full control of your funds—all within an intuitive interface and developer-ready APIs.
🛠️ SET-UP INSTRUCTIONS
Alby Hub can be set up in two ways:
1) As a standalone app without Lightning Node (LND) installed: On install, choose to "Get Started (LDK)" to start using the embedded LDK based Lightning node.
2) Connected to the Lightning Node app (LND) running on your Umbrel: Make sure to first install and set up Lightning Node on your Umbrel. Then install Alby Hub, which will automatically configure itself to connect to the Lightning Node app running on your Umbrel.
USEFUL LINKS
- Feature requests, bug reports, feedback board - https://feedback.getalby.com/-alby-hub-request-a-feature
- Community of users and developers - https://discord.getalby.com/
- List of apps and projects that use NWC protocol - https://github.com/getAlby/awesome-nwc
developer: Alby
website: https://albyhub.com
submitter: Alby
@ -39,19 +30,22 @@ gallery:
- 3.jpg
- 4.jpg
releaseNotes: >-
Key changes in this release:
- Updated Boltz dependency for improved swap functionality
- Swap-outs (Lightning to on-chain) now only require 1 on-chain confirmation instead of 2
- Added Alby's referral program to the earn page
- Added Castamatic to the app store
- Increased default Alby Account budget from 150k to 250k sats
- Removed Bitcoin Maxi Mode
- Added a 404 page
- Various bugfixes and minor improvements
This release introduces Alby Pro, offering premium features for self-hosted Alby Hub users.
Key highlights include:
- Buy gift cards directly in the App Store using Bitrefill
- New apps added to the App Store
- Improved channel opening flow with more helpful information
- UI refresh for sidebar and settings page
- Added healthcheck alert
- Various minor improvements and bug fixes
Full release notes are found at https://github.com/getAlby/hub/releases
dependencies: []
dependencies:
- lightning
path: ""
defaultUsername: ""
defaultPassword: ""

View File

@ -1,16 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: appsmith_app_1
APP_PORT: 80
PROXY_AUTH_ADD: "false"
app:
image: appsmith/appsmith-ce:v1.98@sha256:533d5bcb7a1715b967e9cfa4bd2eccfc081349261a44453d03d775d86cc6df27
environment:
APPSMITH_ENCRYPTION_PASSWORD: ${APP_PASSWORD}
APPSMITH_ENCRYPTION_SALT: ${APP_PASSWORD}
volumes:
- ${APP_DATA_DIR}/data/app:/appsmith-stacks

View File

@ -1,49 +0,0 @@
manifestVersion: 1
id: appsmith
name: Appsmith
tagline: Platform to build admin panels, internal tools, and dashboards
category: developer
version: "v1.98"
port: 8654
description: >-
Appsmith is an open-source, low-code development platform designed to help developers and teams build internal tools and business applications quickly and efficiently. Whether you need dashboards, admin panels, database GUIs, or approval workflows, Appsmith provides a powerful yet flexible environment to create robust applications without the overhead of traditional software development.
At its core, Appsmith offers a drag-and-drop interface featuring over 45 customizable widgets, seamless integration with more than 18 data sources—including PostgreSQL, MongoDB, REST APIs, and GraphQL—and a built-in JavaScript editor for advanced logic and interactivity. This combination empowers both developers and non-technical users to build dynamic, data-driven applications with ease.
Appsmith supports Git-based version control, allowing teams to manage application changes effectively. Its architecture embraces a model-view-controller (MVC) pattern, promoting clean code organization and scalability. Additionally, Appsmith offers both cloud-hosted and self-hosted deployment options, providing flexibility and control over your applications.
Trusted by over 10,000 teams across 150 countries—including organizations like Dropbox, Twilio, and GSK—Appsmith is a proven solution for building internal tools that enhance productivity and streamline operations.
Whether you're a startup looking to accelerate development or an enterprise seeking customizable internal solutions, Appsmith offers the tools and flexibility to meet your needs.
developer: Appsmith
website: https://www.appsmith.com/
submitter: al-lac
submission: https://github.com/getumbrel/umbrel-apps/pull/2634
repo: https://github.com/appsmithorg/appsmith
support: https://discord.com/invite/rBTTVJp
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
defaultUsername: ""
defaultPassword: ""
dependencies: []
releaseNotes: >-
This release introduces new features and security fixes:
- Added TLS (SSL mode) support for the Redis datasource
- Fixed a security issue allowing unauthorized deletion of application snapshots
- Fixed unauthenticated disclosure of instance metadata
- Fixed SQL injection vulnerabilities in filter and sort operations
- Restricted draft action execution to editors only
- Required fields now display a red asterisk for clarity
- Increased API timeout for consolidated API calls from 20 seconds to 60 seconds
- Various other bug fixes and stability improvements
Full release notes are found at https://github.com/appsmithorg/appsmith/releases
path: ""

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1,43 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: arcane_arcane_1
APP_PORT: 3552
docker:
image: docker:27.2.0-dind@sha256:f9f72ad901a78f27be922b2d320bbc263174f12919c1b37e6a01f828fa904565
privileged: true
network_mode: host
stop_grace_period: 1m
restart: on-failure
environment:
DOCKER_ENSURE_BRIDGE: "dind0:10.32.0.1/16"
entrypoint: /entrypoint.sh
command: >
dockerd
--bridge dind0
--data-root /data/data
--exec-root /data/exec
--host unix:///data/docker.sock
--pidfile /data/docker.pid
volumes:
- ${APP_DATA_DIR}/entrypoint.sh:/entrypoint.sh
- ${APP_DATA_DIR}/data/docker:/data
arcane:
image: ghcr.io/getarcaneapp/arcane:v1.17.4@sha256:97492274e59c9f822a9c49d67981912b81919c0edad6094e496fa3507348082e
depends_on:
- docker
restart: on-failure
environment:
APP_URL: http://${DEVICE_DOMAIN_NAME}:3552
PUID: 1000
PGID: 1000
ENCRYPTION_KEY: ${APP_PASSWORD}
JWT_SECRET: ${APP_PASSWORD}
volumes:
- ${APP_DATA_DIR}/data/app_data:/app/data
- ${APP_DATA_DIR}/data/projects:/app/data/projects
- ${APP_DATA_DIR}/data/docker:/var/run

View File

@ -1,38 +0,0 @@
#!/bin/sh
pidfile="/var/run/docker.pid"
if [[ -f "${pidfile}" ]]
then
rm -f "${pidfile}"
fi
for command in iptables iptables-restore iptables-restore-translate iptables-save iptables-translate
do
ln -sf /sbin/xtables-nft-multi /sbin/$command
done
ensure_bridge_exists() {
local name="${1}"
local ip_range="${2}"
if ip link show "${name}" &>/dev/null
then
echo "Bridge '${name}' already exists. Skipping creation."
ip addr show "${name}"
return
fi
echo "Bridge '${name}' does not exist. Creating..."
ip link add "${name}" type bridge
ip addr add "${ip_range}" dev "${name}"
ip link set "${name}" up
echo "Bridge '${name}' is now up with IP range '${ip_range}'."
ip addr show "${name}"
}
if [[ "${DOCKER_ENSURE_BRIDGE}" != "" ]]
then
bridge="${DOCKER_ENSURE_BRIDGE%%:*}"
ip_range="${DOCKER_ENSURE_BRIDGE#*:}"
ensure_bridge_exists "${bridge}" "${ip_range}"
fi
exec dockerd-entrypoint.sh $@

View File

@ -1,7 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
APP_DATA_DIR="$(readlink -f $(dirname "${BASH_SOURCE[0]}")/..)/data"
# Remove stale docker.pid file that can cause issues after power outages or crashes
rm -f "${APP_DATA_DIR}/docker/docker.pid"

View File

@ -1,84 +0,0 @@
manifestVersion: 1.1
id: arcane
category: developer
name: Arcane
version: "1.17.4"
tagline: An easy and modern Docker management platform
description: >-
⚠️ Make sure to only use named Docker volumes for your containers and projects. Data in bind-mounted volumes will be lost when the Arcane app is restarted or updated.
⚠️ Watch out for port conflicts between your custom Docker containers and your umbrelOS apps.
Arcane is a powerful and modern container management platform designed to simplify the way developers interact with Docker environments. It provides a seamless and visually appealing interface that brings all aspects of container management together in one place. Users can create, start, stop, and inspect containers, explore networks, manage images, and handle volumes with precision and control.
Beyond basic management, Arcane enhances productivity by offering integrated tools that developers typically rely on during their daily workflows. Its built-in terminal allows direct interaction with running containers, while the embedded code editor enables quick configuration or script adjustments without switching to external applications. Real-time system insights and detailed logging give users a clear view of their infrastructure's performance and resource usage.
The platform is designed to bridge the gap between simplicity and advanced control. It combines a clean, modern design with powerful backend capabilities, making it equally suitable for developers experimenting locally and professionals managing larger setups. With Arcane, managing containers feels more like using a well-crafted development environment than an administrative dashboard, allowing users to focus on building and running applications instead of dealing with complex Docker commands.
🧩 Arcane on Umbrel is designed for advanced users who want complete control over their containers. Follow these recommendations to ensure a reliable and stable experience.
1. Persistent data: Always use named Docker volumes for your containers and projects. Any data stored in bind mounts will be lost when the Arcane app is updated or restarted.
2. Port usage: Be mindful of port conflicts between your containers, Umbrel system services, and other installed or future apps. Assign unique port numbers to prevent conflicts.
3. Restart behavior: Configure your containers with the restart policy set to unless stopped or always. This ensures they automatically restart after Arcane restarts or updates.
4. Web access: You can access any container that exposes a web interface at `umbrel.local:PORT_NUMBER`. For example, if your app runs on port 5050, open `http://umbrel.local:5050` in your browser.
website: https://getarcane.app/
dependencies: []
repo: https://github.com/getarcaneapp/arcane
support: https://github.com/getarcaneapp/arcane/issues
port: 3552
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
- 5.jpg
path: ""
defaultUsername: "arcane"
defaultPassword: "arcane-admin"
releaseNotes: >-
New features in this release:
- Added ECR (Amazon Elastic Container Registry) support
- Added a per-container redeploy button
- Added support for symlinked project directories
- Added static admin API key support
- Added additional theme variants
- Added an updated log viewer with improved streaming
- Added Docker Swarm support
- Added network ports and topology views
- Added per-container auto-update toggle
- Added inbound webhook support
- Added Git Sync folder support for GitOps workflows
- Added compose-aware update logic for projects
Bug fixes in this release:
- Fixed truncation of long image references in the container table
- Fixed project icons not loading when using YAML or env aliases
- Fixed project max depth not working for filesystem discovery
- Fixed the "Update Projects" button to only update project containers
- Fixed per-container redeploy to use the compose-aware path
- Fixed webhook URL query parameters being lost in generic notifications
- Fixed unnecessary container recreation when the image is already up to date
- Fixed various Svelte reactivity issues in project editors
- Fixed notifications not being sent on single container updates
- Fixed light mode contrast for CPU and memory monitor stats
Full release notes are found at https://github.com/getarcaneapp/arcane/releases
permissions:
- GPU
developer: Arcane
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/4017

View File

@ -8,7 +8,7 @@ services:
PROXY_AUTH_ADD: "false"
web:
image: ghcr.io/advplyr/audiobookshelf:2.33.1@sha256:a4a5841bba093d81e5f4ad1eaedb4da3fda6dbb2528c552349da50ad1f7ae708
image: ghcr.io/advplyr/audiobookshelf:2.20.0@sha256:106531342a5f150e0e3dcbb348f126a5c452ecc4274f162d31545194dbe4352a
user: 1000:1000
init: true
restart: on-failure

View File

@ -3,7 +3,7 @@ id: audiobookshelf
name: Audiobookshelf
tagline: Audiobook and podcast server
category: media
version: "2.33.1"
version: "2.20.0"
port: 13378
description: >-
Features:
@ -26,7 +26,7 @@ description: >-
- Backup your metadata + automated daily backups
- Progressive Web App (PWA)
- Chromecast support on the web app and android app
- Fetch metadata and cover art from several sources
@ -43,8 +43,8 @@ description: >-
Android App (beta)
- Try it out on the Google Play Store
iOS App (early beta)
- Available using Test Flight: https://testflight.apple.com/join/wiic7QIW
@ -61,10 +61,23 @@ path: ""
defaultUsername: ""
defaultPassword: ""
releaseNotes: >-
Bug fixes:
- Fixed API keys not respecting user enabled/disabled flag
- Fixed podcast episode updates to sanitize HTML in subtitles
- Fixed playlist and collection endpoints to strip HTML tags from names
New features and improvements:
- Added podcast episode table sorting option for filename
- Improved book and podcast library page performance
- Enhanced podcast page play button functionality
- Updated OPF file parser to support OPF v3 refines meta elements
Fixed issues:
- Resolved issue with queuing multiple of the same episode for download
- Fixed scanning epub not using first image for cover in some cases
- Corrected publish year not saving when matching with OpenLibrary
UI/UX enhancements:
- Improved RTL support on podcast episodes table rows
- Updated various settings and UI elements for clarity
- Enhanced podcast page accessibility for screen readers
Full release notes can be found at https://github.com/advplyr/audiobookshelf/releases

View File

@ -8,7 +8,7 @@ services:
PROXY_AUTH_ADD: "false"
web:
image: ghcr.io/autobrr/autobrr:v1.76.0@sha256:f0f4d73fcd77700b1c98233562cd94a78b9bf685a7594a0aac4f8a9436b5044d
image: ghcr.io/autobrr/autobrr:v1.60.0@sha256:5f95def0aa664e653c5de820f27661357a5c77a8eef0dd7fa204efedfb7d0e45
restart: on-failure
stop_grace_period: 1m
user: "1000:1000"

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: autobrr
category: media
name: autobrr
version: "1.76.0"
version: "1.60.0"
tagline: Modern, easy to use download automation for torrents and usenet
description: >-
autobrr is the modern download automation tool for torrents and usenet.
@ -17,21 +17,11 @@ description: >-
It then sends that torrent file to a download client of your choice. A download client can be anything from qBittorrent, Deluge, Radarr, Sonarr, watch folder, and more.
releaseNotes: >-
This release includes new features and improvements:
- Added PKCE support to OIDC authentication
- Added NZB download type support for RSS feeds
- Added InfinityHD indexer support
- Added Retro Movies Club indexer support
- Added Samaritano indexer support
- Added SeedPool (Music) indexer support
- Added support for `/sleep` in IRC connect commands
- Added French, German, Russian, and Spanish language support
- Added internationalization (i18n) support with English and Simplified Chinese locales
Bug fixes:
- Fixed releases being incorrectly deleted when PUSH_APPROVED is not in the cleanup list
- Fixed indexer proxy button overflow in the web UI
New features and improvements:
- Added DarkPeers indexer
- Added PhoenixProject indexer
- Added RocketHD indexer
- Show current download count in filter list
Full release notes are available at https://autobrr.com/release-notes

View File

@ -1,16 +0,0 @@
{
"btcd" : [
{
"url": "${APP_BITCOIN_NODE_IP}:${APP_BITCOIN_RPC_PORT}",
"auth": "${APP_BITCOIN_RPC_USER}",
"pass": "${APP_BITCOIN_RPC_PASS}",
"notify" : true
}
],
"btcsig" : "/mined by Bassin on Umbrel/",
"mindiff": 1,
"startdiff": 42,
"maxdiff" : 0,
"logdir" : "/www",
"zmqblock" : "tcp://${APP_BITCOIN_NODE_IP}:${APP_BITCOIN_ZMQ_HASHBLOCK_PORT}"
}

View File

@ -1,69 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: bassin_www_1
APP_PORT: 80
PROXY_AUTH_ADD: "false"
init:
image: alpine:3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
entrypoint: >-
/bin/sh -c '
apk add --no-cache envsubst &&
if [ ! -f /config/ckpool.conf ]; then
envsubst < /config/ckpool.conf.template > /config/ckpool.conf &&
chown 1000:1000 /config/ckpool.conf
fi
'
volumes:
- ${APP_DATA_DIR}/data/config:/config
environment:
- APP_BITCOIN_NODE_IP=${APP_BITCOIN_NODE_IP}
- APP_BITCOIN_RPC_PORT=${APP_BITCOIN_RPC_PORT}
- APP_BITCOIN_RPC_USER=${APP_BITCOIN_RPC_USER}
- APP_BITCOIN_RPC_PASS=${APP_BITCOIN_RPC_PASS}
- APP_BITCOIN_ZMQ_HASHBLOCK_PORT=${APP_BITCOIN_ZMQ_HASHBLOCK_PORT}
ckpool:
image: ghcr.io/getumbrel/docker-ckpool-solo:590fb2a@sha256:4e6b8f4f9c7d74c2111a6e082a2bbdc936fa510989a81e7cef714d1da944336b
command: '-k -B -c /config/ckpool.conf'
user: "1000:1000"
depends_on:
init:
condition: service_completed_successfully
restart: on-failure
stop_grace_period: 30s
ports:
- "3456:3333/tcp"
volumes:
- ${APP_DATA_DIR}/data/config:/config:ro
- ${APP_DATA_DIR}/data/www:/www
ui:
image: ghcr.io/duckaxe/bassin-ui:580689d@sha256:ece16d859295c01f3c7bdaf78679f5b3477073af93937c367ae6174191c0de19
entrypoint: /bin/sh -c "cp -r /ui/* /www/"
user: "1000:1000"
volumes:
- ${APP_DATA_DIR}/data/www:/www
restart: on-failure
www:
image: halverneus/static-file-server:v1.8.11@sha256:2e91ce7ffb8519eeb882ba52d75c191ca6c921c16438447362128ef73ee2ea7e
user: "1000:1000"
environment:
- FOLDER=/www
- PORT=80
volumes:
- ${APP_DATA_DIR}/data/www:/www:ro
depends_on:
- ui
restart: on-failure
widget-server:
image: ghcr.io/duckaxe/umbrel-bassin-widget:main@sha256:293d4a17579bbef339c3f4595ed2dc36bef70699d34909bfa3ac20bba8facb7c
user: "1000:1000"
environment:
- BASSIN_API_POOL_URL=http://bassin_www_1/pool/pool.status
restart: on-failure

View File

@ -1,32 +0,0 @@
#!/usr/bin/env bash
# This script updates the btcsig in ckpool.conf for existing users
# who installed when the default was "/mined by Bassin/"
# Only runs once to avoid overriding user's intentional changes
APP_DATA_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
CKPOOL_CONFIG_FILE="${APP_DATA_DIR}/data/config/ckpool.conf"
BTCSIG_MIGRATION_FLAG="${APP_DATA_DIR}/BTCSIG_MIGRATED"
# Skip if migration has already run
if [[ -f "${BTCSIG_MIGRATION_FLAG}" ]]; then
exit
fi
# Check if the config file exists
if [[ ! -f "${CKPOOL_CONFIG_FILE}" ]]; then
touch "${BTCSIG_MIGRATION_FLAG}"
exit
fi
OLD_BTCSIG='"btcsig" : "/mined by Bassin/",'
NEW_BTCSIG='"btcsig" : "/mined by Bassin on Umbrel/",'
# Check if the exact old btcsig line exists
if grep -qF "${OLD_BTCSIG}" "${CKPOOL_CONFIG_FILE}"; then
echo "App: ${APP_ID} - Updating btcsig in ckpool.conf"
sed -i "s|${OLD_BTCSIG}|${NEW_BTCSIG}|" "${CKPOOL_CONFIG_FILE}"
fi
# Mark migration as complete
touch "${BTCSIG_MIGRATION_FLAG}"

View File

@ -1,62 +0,0 @@
manifestVersion: 1.1
version: "2.1.0-hotfix"
id: bassin
name: Bassin
tagline: Solo Bitcoin Mining Pool (ckPool)
description: >-
A zero-fee Bitcoin solo mining pool for Umbrel. Run your own ckPool at home.
No setup, no hassle.
- Make sure your Bitcoin node is fully synchronized and running
- Install the app, then follow the on-screen instructions
- Be part of decentralized mining
Check out the FAQ page: https://github.com/duckaxe/bassin/wiki/FAQ
For academic and research purposes only.
category: bitcoin
dependencies:
- bitcoin
releaseNotes: >-
🚨 CRITICAL SECURITY UPDATE - Please update immediately.
A security issue was discovered with the previous ckpool software used by this app. It has been replaced with a new version built from a verified source: https://github.com/getumbrel/docker-ckpool-solo
port: 5008
submitter: duckaxe
developer: duckaxe
website: https://github.com/duckaxe
repo: https://github.com/duckaxe/bassin
support: https://github.com/duckaxe/bassin/issues
submission: https://github.com/getumbrel/umbrel-apps/pull/3375
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
path: ""
defaultUsername: ""
defaultPassword: ""
widgets:
- id: "stats"
type: "four-stats"
refresh: "30s"
endpoint: "widget-server:3000/widgets/pool"
link: ""
example:
type: "four-stats"
link: ""
items:
- title: "Hashrate"
text: "2.10"
subtext: "Th/s"
- title: "Workers"
text: "2"
- title: "Best Share"
text: "21"
subtext: "G"
- title: "Total Shares"
text: "210"
subtext: "M"

View File

@ -8,11 +8,11 @@ services:
PROXY_AUTH_WHITELIST: "/api/*"
server:
image: linuxserver/bazarr:1.5.6@sha256:b0bc617664dbca25845ac3b1bb6411b145b6a44a6d173071c9d2f426524fdd9f
image: linuxserver/bazarr:1.5.1@sha256:ac9fe56bee9133bcb9e27fe48faaf83c57b83d75bacc277d9b2619136632b1fe
environment:
- PUID=1000
- PGID=1000
volumes:
- ${APP_DATA_DIR}/data/config:/config
- ${UMBREL_ROOT}/data/storage/downloads:/downloads
restart: on-failure
restart: on-failure

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: bazarr
category: media
name: Bazarr
version: "1.5.6"
version: "1.5.1"
tagline: Manage and download subtitles for Sonarr and Radarr
description: >-
Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles based on your requirements.
@ -18,22 +18,13 @@ description: >-
You can find your device's IP address by visiting your router's admin dashboard or by using an IP scanning tool like Angry IP Scanner.
You will also need to input your API key for Sonarr and/or Radarr. You can find your API keys in the settings of the Sonarr and Radarr apps.
releaseNotes: >-
Key improvements in this release include:
- Added Spain vs LATAM Spanish detection to SubX provider
- Added SubX subtitle proxy for Subdivx Latam Spanish provider
- Removed subdivx provider as it is no longer supported
- Added hostname setting in General for webhook security to prevent hostname poisoning
- Added audio delay detection in MKV headers for WhisperAI using FFprobe
- Added Plex library refresh after subtitle deletions or modifications
- Improved subdl provider with search by TMDB ID and better error handling
- Improved Gestdown provider release matching
- Fixed assrt provider skipping season pack subtitles for episode searches
- Fixed missing audio_exclude migration in language profile upgrades
- Fixed post-processing failing on non-English Windows systems
- Fixed subssabbz search, diacritics, language comparison, and download error handling
- Improved job queue handling to prevent high CPU usage from busy waiting
- Improved performance by replacing blocking job progress monitoring with async implementation
Key improvements include:
- Improved language profile health checks
- Enhanced Sonarr and Radarr syncing reliability
- Better handling of subtitle classifications
- Improved server connectivity and stability
- Various performance improvements and bug fixes
Full release notes are found at https://github.com/morpheus65535/bazarr/releases
developer: morpheus65535
@ -51,4 +42,4 @@ defaultUsername: ""
defaultPassword: ""
torOnly: false
submitter: Umbrel
submission: https://github.com/getumbrel/umbrel-apps/pull/610
submission: https://github.com/getumbrel/umbrel-apps/pull/610

View File

@ -1,11 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: bentopdf_web_1
APP_PORT: 8080
web:
image: ghcr.io/alam00000/bentopdf:v2.8.2@sha256:ceee3325f10c3c7e2eef582cc14492e809c1646b5bee4ef00094f2ef3bacebf9
restart: on-failure

View File

@ -1,48 +0,0 @@
manifestVersion: 1
id: bentopdf
name: BentoPDF
tagline: A Privacy First PDF Toolkit
category: files
version: "2.8.2"
port: 8730
description: >-
📄 BentoPDF is an advanced privacy-oriented application designed to give users complete control over their PDF documents directly within the browser. It eliminates the need for external uploads or online conversion services, ensuring that every action takes place locally and confidentially. This focus on privacy makes BentoPDF a secure alternative to traditional cloud-based PDF tools.
At its core, BentoPDF provides an extensive set of features for working with digital documents. Users can merge multiple PDFs into a single file, split them into separate sections, or reorganize individual pages in just a few clicks. The application allows rotating, duplicating, or removing pages with ease, offering full flexibility when editing complex documents. Visual adjustments such as background color changes, watermarks, headers, and footers can also be applied to enhance the appearance of professional documents.
BentoPDF includes a robust conversion engine that supports transforming images into PDFs and exporting individual pages back into common image formats. It also enables file compression to optimize storage space without compromising quality. For document security, users can apply passwords, encrypt sensitive information, or remove existing restrictions to regain editing access. These tools make it suitable for both personal use and professional document preparation.
Another highlight is the integrated OCR functionality, which scans and recognizes text from image-based PDFs, turning them into fully searchable documents. Metadata editing options let users refine document properties and improve organization. With all these capabilities combined, BentoPDF offers a comprehensive, user-friendly environment for creating, editing, and managing PDFs efficiently — all while maintaining the highest level of privacy and control.
developer: BentoPDF
website: https://bentopdf.com/
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/3843
repo: https://github.com/alam00000/bentopdf
support: https://github.com/alam00000/bentopdf/issues
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
releaseNotes: >-
This update brings minor bug fixes and quality of life improvements.
✨ New features and improvements:
- The container listen port can now be changed via the PORT environment variable
- All tools now preserve the original filename on download instead of adding prefixes like "encrypted-" or "rotated_"
- Auto orientation in Page Size now correctly matches the source page layout
- Multi-channel TIFF formats are now supported with added compression options
- OCR quality improved by copying original pages instead of embedding rasterized images
- Fixed permission errors when running as a non-root user introduced in v2.8
- Dutch translation corrections
Full release notes are found at https://github.com/alam00000/bentopdf/releases
dependencies: []
path: ""
defaultUsername: ""
defaultPassword: ""

View File

@ -1,30 +0,0 @@
services:
app_proxy:
environment:
APP_HOST: bitaxe-sentry_web_1
APP_PORT: 7070
sentry:
image: zachprice105/bitaxe-sentry:v0.6.1@sha256:2326e3ea1f7e054da41768a4648277cd523d19a235490a2c0ae364315abbc8ee
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
volumes:
- ${APP_DATA_DIR}/data/sentry:/var/lib/bitaxe
environment:
DB_PATH: "/var/lib/bitaxe/bitaxe_sentry.db"
DB_DATA_DIR: "/var/lib/bitaxe"
web:
image: zachprice105/bitaxe-sentry:v0.6.1@sha256:2326e3ea1f7e054da41768a4648277cd523d19a235490a2c0ae364315abbc8ee
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
volumes:
- ${APP_DATA_DIR}/data/sentry:/var/lib/bitaxe
environment:
DB_PATH: "/var/lib/bitaxe/bitaxe_sentry.db"
DB_DATA_DIR: "/var/lib/bitaxe"
command: uvicorn bitaxe_sentry.sentry.webapp:app --host 0.0.0.0 --port 7070
depends_on:
- sentry

View File

@ -1,33 +0,0 @@
manifestVersion: 1
id: bitaxe-sentry
category: bitcoin
name: Bitaxe Sentry
version: "0.6.1"
tagline: Bitaxe stats and alerts, all in one
description: >-
Bitaxe Sentry is a monitoring and management solution for Bitaxe ASIC miners.
Track the performance, temperature, and status of your miners from a single dashboard. Get alerts when your miners hit a new best difficulty, or when temperature or voltage thresholds are exceeded.
Features included:
- 📊 Centralized dashboard for all Bitaxe miners
- 🌡️ Temperature and hashrate monitoring
- 🚨 Discord notifications for critical events
releaseNotes: >-
This release includes a minor bug fix:
- Changed mh/s to gh/s to reflect the correct unit of hashrate
developer: Zach Price
website: https://github.com/zachchan105/bitaxe-sentry
repo: https://github.com/zachchan105/bitaxe-sentry
support: https://github.com/zachchan105/bitaxe-sentry/issues
port: 7070
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
path: ""
defaultUsername: ""
defaultPassword: ""
submitter: Zach Price
submission: https://github.com/getumbrel/umbrel-apps/pull/3122
dependencies: []

View File

@ -3,57 +3,57 @@ version: "3.7"
services:
app_proxy:
environment:
APP_HOST: $APP_BITCOIN_KNOTS_NODE_IP
APP_PORT: 3000
APP_HOST: $APP_BITCOIN_KNOTS_IP
APP_PORT: 3005
app:
image: ghcr.io/retropex/umbrel-bitcoin-knots:1.2.10@sha256:4dc37d9014eb29d47898d512422736ad2eed89bf31d321fc27b27547f04d0866
user: "1000:1000"
server:
image: ghcr.io/retropex/umbrel-bitcoin-knots:v0.5.7@sha256:fc5ef209bd5443087416dae6efaf57e79b6b13af154ab9bd1b5bf6f0922e128b
depends_on: [bitcoind]
restart: on-failure
stop_grace_period: 15m30s
# these ports are exposed for external connections to bitcoind
ports:
- "${APP_BITCOIN_KNOTS_P2P_PORT}:${APP_BITCOIN_KNOTS_P2P_PORT}"
- "${APP_BITCOIN_KNOTS_RPC_PORT}:${APP_BITCOIN_KNOTS_RPC_PORT}"
volumes:
- ${APP_DATA_DIR}/data:/data # data/app and data/bitcoin
- ${APP_DATA_DIR}/data/app:/data # volume to persist advanced settings json
- ${APP_BITCOIN_KNOTS_DATA_DIR}:/bitcoin/.bitcoin # volume to persist umbrel-bitcoin.conf and bitcoin.conf
environment:
# DATA DIRECTORY SETTINGS
# BITCOIN_DIR: bitcoin-dir-override
# APP_STATE_DIR: app-state-dir-override
# BITCOIND BINARY SETTINGS
# BITCOIND_BIN: bitcoind-binary-path-override
# comma-delimited list of extra startup flags to pass to bitcoind
BITCOIND_EXTRA_ARGS: '-deprecatedrpc=create_bdb' # We can remove depratedrpc=create_bdb in a future update once Jam (JoinMarket) implements descriptor wallet support
# BITCOIND CONF FILE SETTINGS
APPS_SUBNET: "${NETWORK_IP}/16" # used for rpcallowip
P2P_PORT: "${APP_BITCOIN_KNOTS_P2P_PORT}" # port, bind (also used for connect details)
P2P_WHITEBIND_PORT: "${APP_BITCOIN_KNOTS_P2P_WHITEBIND_PORT}" # Additional inbound P2P listener granting whitelisted permissions (whitebind) to this port; for trusted internal apps only; do not publish externally
RPC_PORT: "${APP_BITCOIN_KNOTS_RPC_PORT}" # rpcport (also used for rpc client and connect details)
TOR_PORT: "${APP_BITCOIN_KNOTS_TOR_PORT}" # bind=onion
ZMQ_RAWBLOCK_PORT: "${APP_BITCOIN_KNOTS_ZMQ_RAWBLOCK_PORT}" # zmqpubrawblock
ZMQ_RAWTX_PORT: "${APP_BITCOIN_KNOTS_ZMQ_RAWTX_PORT}" # zmqpubrawtx
ZMQ_HASHBLOCK_PORT: "${APP_BITCOIN_KNOTS_ZMQ_HASHBLOCK_PORT}" # zmqpubhashblock
ZMQ_SEQUENCE_PORT: "${APP_BITCOIN_KNOTS_ZMQ_SEQUENCE_PORT}" # zmqpubsequence
ZMQ_HASHTX_PORT: "${APP_BITCOIN_KNOTS_ZMQ_HASHTX_PORT}" # zmqpubhashtx
TOR_HOST: "${APP_BITCOIN_KNOTS_TOR_PROXY_IP}" # proxy, onion, torcontrol
TOR_SOCKS_PORT: "9050" # proxy, onion
TOR_CONTROL_PORT: "9051" # torcontrol
TOR_CONTROL_PASSWORD: "moneyprintergobrrr" # torpassword
I2P_HOST: "${APP_BITCOIN_KNOTS_I2P_DAEMON_IP}" # i2psam
I2P_SAM_PORT: "7656" # i2psam
# RPC CLIENT SETTINGS
BITCOIND_IP: "${APP_BITCOIN_KNOTS_NODE_IP}" # host for the rpc client. Also used for bitcoind conf file rpcbind & bind.
RPC_USER: "${APP_BITCOIN_KNOTS_RPC_USER}" # also shown in the connect modal
RPC_PASS: "${APP_BITCOIN_KNOTS_RPC_PASS}" # also shown in the connect modal
# CONNECTION DETAILS (shown to user in the connect modal)
PORT: "3005"
BITCOIN_HOST: "${APP_BITCOIN_KNOTS_NODE_IP}"
# used to connect to internal bitcoind port
RPC_PORT: "${APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT}"
# displayed to user in connection details for external connections
BITCOIN_RPC_PORT: "${APP_BITCOIN_KNOTS_RPC_PORT}"
RPC_USER: "${APP_BITCOIN_KNOTS_RPC_USER}"
BITCOIN_RPC_USER: "${APP_BITCOIN_KNOTS_RPC_USER}"
RPC_PASSWORD: "${APP_BITCOIN_KNOTS_RPC_PASS}"
BITCOIN_RPC_PASSWORD: "${APP_BITCOIN_KNOTS_RPC_PASS}"
BITCOIN_RPC_HIDDEN_SERVICE: "${APP_BITCOIN_KNOTS_RPC_HIDDEN_SERVICE}"
BITCOIN_P2P_HIDDEN_SERVICE: "${APP_BITCOIN_KNOTS_P2P_HIDDEN_SERVICE}"
# displayed to user in connection details for external connections
BITCOIN_P2P_PORT: "${APP_BITCOIN_KNOTS_P2P_PORT}"
DEVICE_DOMAIN_NAME: "${DEVICE_DOMAIN_NAME}"
P2P_HIDDEN_SERVICE: "${APP_BITCOIN_KNOTS_P2P_HIDDEN_SERVICE}"
RPC_HIDDEN_SERVICE: "${APP_BITCOIN_KNOTS_RPC_HIDDEN_SERVICE}"
BITCOIN_DEFAULT_NETWORK: "${BITCOIN_KNOTS_DEFAULT_NETWORK:-mainnet}"
# not needed
BITCOIN_INITIALIZE_WITH_CLEARNET_OVER_TOR: "${BITCOIN_INITIALIZE_WITH_CLEARNET_OVER_TOR:-unset}"
BITCOIND_IP: "${APP_BITCOIN_KNOTS_NODE_IP}"
TOR_PROXY_IP: "${APP_BITCOIN_KNOTS_TOR_PROXY_IP}"
TOR_PROXY_PORT: "9050"
TOR_PROXY_CONTROL_PORT: "9051"
TOR_PROXY_CONTROL_PASSWORD: "moneyprintergobrrr"
I2P_DAEMON_IP: "${APP_BITCOIN_KNOTS_I2P_DAEMON_IP}"
I2P_DAEMON_PORT: "7656"
networks:
default:
ipv4_address: $APP_BITCOIN_KNOTS_IP
bitcoind:
image: ghcr.io/retropex/bitcoin:v28.1@sha256:9dab3c9e0e21bf17ae7e624e1a3fabc51dff812ee8382fb10f8ebdf6e0af5801
user: "1000:1000"
command: "${APP_BITCOIN_KNOTS_COMMAND}"
restart: unless-stopped
stop_grace_period: 15m30s
volumes:
- "${APP_BITCOIN_KNOTS_DATA_DIR}:/data/.bitcoin"
ports:
- "${APP_BITCOIN_KNOTS_P2P_PORT}:${APP_BITCOIN_KNOTS_INTERNAL_P2P_PORT}"
- "${APP_BITCOIN_KNOTS_RPC_PORT}:${APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT}"
networks:
default:
ipv4_address: $APP_BITCOIN_KNOTS_NODE_IP

View File

@ -1,3 +1,4 @@
export APP_BITCOIN_KNOTS_IP="10.21.22.5"
export APP_BITCOIN_KNOTS_NODE_IP="10.21.21.7"
export APP_BITCOIN_KNOTS_TOR_PROXY_IP="10.21.22.12"
export APP_BITCOIN_KNOTS_I2P_DAEMON_IP="10.21.22.13"
@ -5,62 +6,118 @@ export APP_BITCOIN_KNOTS_I2P_DAEMON_IP="10.21.22.13"
export APP_BITCOIN_KNOTS_DATA_DIR="${EXPORTS_APP_DIR}/data/bitcoin"
export APP_BITCOIN_KNOTS_RPC_PORT="9332"
export APP_BITCOIN_KNOTS_P2P_PORT="9333"
# Additional inbound P2P listener granting whitelisted permissions (whitebind) to this port; for trusted internal apps only; do not publish externally
export APP_BITCOIN_KNOTS_P2P_WHITEBIND_PORT="9335"
export APP_BITCOIN_KNOTS_TOR_PORT="8334"
export APP_BITCOIN_KNOTS_TOR_PORT="9334"
export APP_BITCOIN_KNOTS_ZMQ_RAWBLOCK_PORT="48332"
export APP_BITCOIN_KNOTS_ZMQ_RAWTX_PORT="48333"
export APP_BITCOIN_KNOTS_ZMQ_HASHBLOCK_PORT="48334"
export APP_BITCOIN_KNOTS_ZMQ_SEQUENCE_PORT="48335"
export APP_BITCOIN_KNOTS_ZMQ_HASHTX_PORT="48336"
export APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT="8332"
export APP_BITCOIN_KNOTS_INTERNAL_P2P_PORT="8333"
# These are legacy env vars we need to keep around for DATUM compatibility
export APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT="9332"
export APP_BITCOIN_KNOTS_INTERNAL_P2P_PORT="9333"
BITCOIN_CHAIN="main"
BITCOIN_ENV_FILE="${EXPORTS_APP_DIR}/.env"
export APP_BITCOIN_KNOTS_NETWORK="mainnet"
# Check for an existing settings.json file to override APP_BITCOIN_NETWORK with user's choice
{
BITCOIN_APP_CONFIG_FILE="${EXPORTS_APP_DIR}/data/app/settings.json"
BITCOIN_APP_CONFIG_FILE="${EXPORTS_APP_DIR}/data/app/bitcoin-config.json"
if [[ -f "${BITCOIN_APP_CONFIG_FILE}" ]]
then
bitcoin_app_network=$(jq -r '.chain' "${BITCOIN_APP_CONFIG_FILE}")
bitcoin_app_network=$(jq -r '.network' "${BITCOIN_APP_CONFIG_FILE}")
case $bitcoin_app_network in
"main")
APP_BITCOIN_KNOTS_NETWORK="mainnet";;
BITCOIN_NETWORK="mainnet";;
"test")
APP_BITCOIN_KNOTS_NETWORK="testnet";;
"testnet4")
APP_BITCOIN_KNOTS_NETWORK="testnet4";;
BITCOIN_NETWORK="testnet";;
"signet")
APP_BITCOIN_KNOTS_NETWORK="signet";;
BITCOIN_NETWORK="signet";;
"regtest")
APP_BITCOIN_KNOTS_NETWORK="regtest";;
*)
if [[ -n "$bitcoin_app_network" ]] && [[ "$bitcoin_app_network" != "null" ]]; then
echo "Warning (${EXPORTS_APP_ID}): Invalid network '${bitcoin_app_network}' in settings.json. Exporting APP_BITCOIN_NETWORK as default 'mainnet'."
fi;;
BITCOIN_NETWORK="regtest";;
esac
fi
} > /dev/null || true
BITCOIN_ENV_FILE="${EXPORTS_APP_DIR}/.env"
if [[ ! -f "${BITCOIN_ENV_FILE}" ]]; then
if [[ -z "${BITCOIN_NETWORK}" ]]; then
BITCOIN_NETWORK="mainnet"
fi
if [[ -z ${BITCOIN_RPC_USER+x} ]] || [[ -z ${BITCOIN_RPC_PASS+x} ]]; then
if [[ -z ${BITCOIN_RPC_USER+x} ]] || [[ -z ${BITCOIN_RPC_PASS+x} ]] || [[ -z ${BITCOIN_RPC_AUTH+x} ]]; then
BITCOIN_RPC_USER="umbrel"
BITCOIN_RPC_DETAILS=$("${EXPORTS_APP_DIR}/scripts/rpcauth.py" "${BITCOIN_RPC_USER}")
BITCOIN_RPC_PASS=$(echo "$BITCOIN_RPC_DETAILS" | tail -1)
BITCOIN_RPC_AUTH=$(echo "$BITCOIN_RPC_DETAILS" | head -2 | tail -1 | sed -e "s/^rpcauth=//")
fi
echo "export APP_BITCOIN_KNOTS_NETWORK='${BITCOIN_NETWORK}'" > "${BITCOIN_ENV_FILE}"
echo "export APP_BITCOIN_KNOTS_RPC_USER='${BITCOIN_RPC_USER}'" >> "${BITCOIN_ENV_FILE}"
echo "export APP_BITCOIN_KNOTS_RPC_PASS='${BITCOIN_RPC_PASS}'" >> "${BITCOIN_ENV_FILE}"
echo "export APP_BITCOIN_KNOTS_RPC_AUTH='${BITCOIN_RPC_AUTH}'" >> "${BITCOIN_ENV_FILE}"
fi
. "${BITCOIN_ENV_FILE}"
# Make sure we don't persist the original value in .env if we have a more recent
# value from the app config
{
if [[ ! -z ${BITCOIN_NETWORK+x} ]] && [[ "${BITCOIN_NETWORK}" ]] && [[ "${APP_BITCOIN_KNOTS_NETWORK}" ]]
then
APP_BITCOIN_KNOTS_NETWORK="${BITCOIN_NETWORK}"
fi
} > /dev/null || true
if [[ "${APP_BITCOIN_KNOTS_NETWORK}" == "mainnet" ]]; then
BITCOIN_CHAIN="main"
elif [[ "${APP_BITCOIN_KNOTS_NETWORK}" == "testnet" ]]; then
BITCOIN_CHAIN="test"
# export APP_BITCOIN_RPC_PORT="18332"
# export APP_BITCOIN_P2P_PORT="18333"
# export APP_BITCOIN_TOR_PORT="18334"
elif [[ "${APP_BITCOIN_KNOTS_NETWORK}" == "signet" ]]; then
BITCOIN_CHAIN="signet"
# export APP_BITCOIN_RPC_PORT="38332"
# export APP_BITCOIN_P2P_PORT="38333"
# export APP_BITCOIN_TOR_PORT="38334"
elif [[ "${APP_BITCOIN_KNOTS_NETWORK}" == "regtest" ]]; then
BITCOIN_CHAIN="regtest"
# export APP_BITCOIN_RPC_PORT="18443"
# export APP_BITCOIN_P2P_PORT="18444"
# export APP_BITCOIN_TOR_PORT="18445"
else
echo "Warning (${EXPORTS_APP_ID}): Bitcoin Network '${APP_BITCOIN_KNOTS_NETWORK}' is not supported"
fi
export BITCOIN_KNOTS_DEFAULT_NETWORK="${BITCOIN_CHAIN}"
BIN_ARGS=()
# Commenting out options that are replaced by generated config file. We should migrate all these over in a future update.
# BIN_ARGS+=( "-chain=${BITCOIN_CHAIN}" )
# BIN_ARGS+=( "-proxy=${TOR_PROXY_IP}:${TOR_PROXY_PORT}" )
# BIN_ARGS+=( "-listen" )
# BIN_ARGS+=( "-bind=0.0.0.0:${APP_BITCOIN_TOR_PORT}=onion" )
# BIN_ARGS+=( "-bind=${APP_BITCOIN_NODE_IP}" )
# BIN_ARGS+=( "-port=${APP_BITCOIN_P2P_PORT}" )
# BIN_ARGS+=( "-rpcport=${APP_BITCOIN_RPC_PORT}" )
BIN_ARGS+=( "-port=8333" )
BIN_ARGS+=( "-rpcport=8332" )
BIN_ARGS+=( "-rpcbind=${APP_BITCOIN_KNOTS_NODE_IP}" )
BIN_ARGS+=( "-rpcbind=127.0.0.1" )
BIN_ARGS+=( "-rpcallowip=${NETWORK_IP}/16" )
BIN_ARGS+=( "-rpcallowip=127.0.0.1" )
BIN_ARGS+=( "-rpcauth=\"${APP_BITCOIN_KNOTS_RPC_AUTH}\"" )
BIN_ARGS+=( "-zmqpubrawblock=tcp://0.0.0.0:${APP_BITCOIN_KNOTS_ZMQ_RAWBLOCK_PORT}" )
BIN_ARGS+=( "-zmqpubrawtx=tcp://0.0.0.0:${APP_BITCOIN_KNOTS_ZMQ_RAWTX_PORT}" )
BIN_ARGS+=( "-zmqpubhashblock=tcp://0.0.0.0:${APP_BITCOIN_KNOTS_ZMQ_HASHBLOCK_PORT}" )
BIN_ARGS+=( "-zmqpubsequence=tcp://0.0.0.0:${APP_BITCOIN_KNOTS_ZMQ_SEQUENCE_PORT}" )
# BIN_ARGS+=( "-txindex=1" )
# BIN_ARGS+=( "-blockfilterindex=1" )
# BIN_ARGS+=( "-peerbloomfilters=1" )
# BIN_ARGS+=( "-peerblockfilters=1" )
# BIN_ARGS+=( "-rpcworkqueue=128" )
BIN_ARGS+=( "-blocknotify='curl -s -m 5 http://datum_datum_1:21000/NOTIFY'" )
# We can remove depratedrpc=create_bdb in a future update once Jam (JoinMarket) implements descriptor wallet support
BIN_ARGS+=( "-deprecatedrpc=create_bdb" )
export APP_BITCOIN_KNOTS_COMMAND=$(IFS=" "; echo "${BIN_ARGS[@]}")
# echo "${APP_BITCOIN_KNOTS_COMMAND}"
rpc_hidden_service_file="${EXPORTS_TOR_DATA_DIR}/app-${EXPORTS_APP_ID}-rpc/hostname"
@ -74,23 +131,31 @@ if [[ "${APP_BITCOIN_KNOTS_NETWORK_ELECTRS}" = "mainnet" ]]; then
APP_BITCOIN_KNOTS_NETWORK_ELECTRS="bitcoin"
fi
# Add special handling for knots internal/external port mismatch.
# This must appear above the below loop.
export APP_BITCOIN_RPC_PORT="${APP_BITCOIN_RPC_PORT:-$APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT}"
export APP_BITCOIN_P2P_PORT="${APP_BITCOIN_P2P_PORT:-$APP_BITCOIN_KNOTS_INTERNAL_P2P_PORT}"
for var in \
IP \
NODE_IP \
TOR_PROXY_IP \
I2P_DAEMON_IP \
DATA_DIR \
RPC_PORT \
P2P_PORT \
P2P_WHITEBIND_PORT \
TOR_PORT \
ZMQ_RAWBLOCK_PORT \
ZMQ_RAWTX_PORT \
ZMQ_HASHBLOCK_PORT \
ZMQ_SEQUENCE_PORT \
ZMQ_HASHTX_PORT \
NETWORK \
RPC_USER \
RPC_PASS \
RPC_AUTH \
INTERNAL_RPC_PORT \
INTERNAL_P2P_PORT \
COMMAND \
RPC_HIDDEN_SERVICE \
P2P_HIDDEN_SERVICE \
NETWORK_ELECTRS

View File

@ -1,41 +1,25 @@
#!/usr/bin/env bash
APP_DATA_DIR="$(readlink -f $(dirname "${BASH_SOURCE[0]}")/../data)"
DESIRED_OWNER="1000:1000"
# Recursively chown the bitcoind data directory if this is an install impacted by the bitcoind container running as root.
set_correct_permissions() {
local -r path="${1}"
APP_DIR="$(dirname "${BASH_SOURCE[0]}")/.."
BITCOIND_DATA_DIR="${APP_DIR}/data/bitcoin"
IS_BITCOIND_PERMISSIONS_SET="${APP_DIR}/data/IS_BITCOIND_PERMISSIONS_SET"
# Check if the file exists
if [[ -f "${path}" ]]; then
owner=$(stat -c "%u:%g" "${path}")
if [[ "${owner}" != "${DESIRED_OWNER}" ]]; then
chown "${DESIRED_OWNER}" "${path}"
echo "Changed ownership of ${path} to ${DESIRED_OWNER}"
fi
else
echo "Skipping ${path} - file does not exist"
fi
}
# We set the correct permissions for any files that may have been created by a previous app running as root:
set_correct_permissions "${APP_DATA_DIR}/bitcoin/umbrel-bitcoin.conf"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/bitcoin.conf"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/bitcoin.conf.save"
# settings.json for any network could have been self-corrected by the old app running under root.
set_correct_permissions "${APP_DATA_DIR}/bitcoin/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/regtest/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/signet/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/testnet3/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/testnet4/settings.json"
# Set permissions recursively on the entire /app bind directory
if [[ -d "${APP_DATA_DIR}/app" ]]; then
chown -R "${DESIRED_OWNER}" "${APP_DATA_DIR}/app"
# If no blocks directory exists, we write out the file to indicate that this is a fresh install with correct permissions.
if [[ ! -d "${BITCOIND_DATA_DIR}/blocks" ]] && [[ ! -d "${BITCOIND_DATA_DIR}/testnet3/blocks" ]] && [[ ! -d "${BITCOIND_DATA_DIR}/signet/blocks" ]] && [[ ! -d "${BITCOIND_DATA_DIR}/regtest/blocks" ]]
then
touch "${IS_BITCOIND_PERMISSIONS_SET}"
fi
# Delay booting the full app until the RPC and P2P Tor Hidden Services are ready
# If the file exists, we know that the permissions have already been set.
if [[ ! -f "${IS_BITCOIND_PERMISSIONS_SET}" ]]
then
chown -R 1000:1000 "${BITCOIND_DATA_DIR}"
touch "${IS_BITCOIND_PERMISSIONS_SET}"
fi
# Delay booting Bitcoin until the RPC and P2P Tor Hidden Services are ready
HIDDEN_SERVICE_FILE="${TOR_DATA_DIR}/app-${APP_ID}-rpc/hostname"
@ -43,7 +27,7 @@ if [[ -f "${HIDDEN_SERVICE_FILE}" ]]; then
exit
fi
"${UMBREL_ROOT}/scripts/app" compose "${APP_ID}" up --detach app
"${UMBREL_ROOT}/scripts/app" compose "${APP_ID}" up --detach bitcoind
"${UMBREL_ROOT}/scripts/app" compose "${APP_ID}" up --detach tor
echo "App: ${APP_ID} - Generating Tor Hidden Service..."

View File

@ -10,4 +10,4 @@ HiddenServicePort $APP_BITCOIN_KNOTS_P2P_PORT $APP_BITCOIN_KNOTS_NODE_IP:$APP_BI
# Bitcoin Knots RPC Hidden Service
HiddenServiceDir /data/app-$APP_ID-rpc
HiddenServicePort $APP_BITCOIN_KNOTS_RPC_PORT $APP_BITCOIN_KNOTS_NODE_IP:$APP_BITCOIN_KNOTS_RPC_PORT
HiddenServicePort $APP_BITCOIN_KNOTS_RPC_PORT $APP_BITCOIN_KNOTS_NODE_IP:$APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT

View File

@ -4,22 +4,11 @@ implements:
- bitcoin
category: bitcoin
name: Bitcoin Knots
version: "1.2.10"
version: "28.1"
tagline: Run your personal node powered by Bitcoin Knots
description: >-
Take control of your digital sovereignty by choosing Bitcoin Knots to run your node! By using Knots, youre supporting a version of Bitcoin that prioritizes efficiency, security, and flexibility. With Bitcoin Knots enhanced configuration options, you can fine-tune your node to help keep the network clean and resilient, actively reducing unnecessary load from spam or parasitic transactions.
Every node strengthens the Bitcoin network, and your decision to use Bitcoin Knots contributes directly to a more decentralized and spam-resistant ecosystem. Your node not only validates and secures transactions but also sets an example for a more sustainable, user-focused Bitcoin network.
Welcome to the community of Bitcoin Knots users, and thank you for helping Bitcoin grow stronger!
Here's a guide on how to move the blockchain from bitcoin core to knots: https://docs.mempool.guide/page/migrationumbrel.html
To forward incoming peer traffic to your device, set up the following configuration: (router) 9333 -> (device) 9333
Take control of your digital sovereignty by running a Bitcoin node that aligns with your needs and preferences.
Independently store and validate every single Bitcoin transaction with Bitcoin Knots.
Powered by Bitcoin Knots: https://bitcoinknots.org/
@ -36,12 +25,15 @@ gallery:
path: ""
defaultPassword: ""
releaseNotes: >-
Internal changes
This release updates Bitcoin Knots to version v28.1.knots20250305
Full release notes can be found at https://github.com/bitcoinknots/bitcoin/releases/tag/v28.1.knots20250305
widgets:
- id: "stats"
type: "four-stats"
refresh: "5s"
endpoint: "app:3000/api/widget/stats"
endpoint: "server:3005/v1/bitcoind/widgets/stats"
link: ""
example:
type: "four-stats"
@ -62,7 +54,7 @@ widgets:
- id: "sync"
type: "text-with-progress"
refresh: "2s"
endpoint: "app:3000/api/widget/sync"
endpoint: "server:3005/v1/bitcoind/widgets/sync"
link: ""
example:
type: "text-with-progress"
@ -71,21 +63,5 @@ widgets:
text: "83%"
progressLabel: "In progress"
progress: 0.83
backupIgnore:
- data/bitcoin/blocks
- data/bitcoin/chainstate
- data/bitcoin/indexes
- data/bitcoin/testnet3/blocks
- data/bitcoin/testnet3/chainstate
- data/bitcoin/testnet3/indexes
- data/bitcoin/testnet4/blocks
- data/bitcoin/testnet4/chainstate
- data/bitcoin/testnet4/indexes
- data/bitcoin/signet/blocks
- data/bitcoin/signet/chainstate
- data/bitcoin/signet/indexes
- data/bitcoin/regtest/blocks
- data/bitcoin/regtest/chainstate
- data/bitcoin/regtest/indexes
submitter: Léo Haf
submission: https://github.com/getumbrel/umbrel-apps/pull/953

View File

@ -3,59 +3,53 @@ version: "3.7"
services:
app_proxy:
environment:
APP_HOST: $APP_BITCOIN_NODE_IP
APP_PORT: 3000
app:
image: ghcr.io/getumbrel/umbrel-bitcoin:v1.2.2@sha256:bc72c7fe705c582b8be1740c52449ac82de4d40b0e91ea090513aac6d4fc9393
user: "1000:1000"
APP_HOST: $APP_BITCOIN_IP
APP_PORT: 3005
server:
image: getumbrel/umbrel-bitcoin:v0.8.0@sha256:38465d8e3744223201993950954f0644841587d741e66d200d92b68ca719e6c1
depends_on: [bitcoind]
restart: on-failure
volumes:
- ${APP_DATA_DIR}/data/app:/data # volume to persist advanced settings json
- ${APP_BITCOIN_DATA_DIR}:/bitcoin/.bitcoin # volume to persist umbrel-bitcoin.conf and bitcoin.conf
environment:
PORT: "3005"
BITCOIN_HOST: "${APP_BITCOIN_NODE_IP}"
RPC_PORT: "${APP_BITCOIN_RPC_PORT}"
BITCOIN_RPC_PORT: "${APP_BITCOIN_RPC_PORT}"
RPC_USER: "${APP_BITCOIN_RPC_USER}"
BITCOIN_RPC_USER: "${APP_BITCOIN_RPC_USER}"
RPC_PASSWORD: "${APP_BITCOIN_RPC_PASS}"
BITCOIN_RPC_PASSWORD: "${APP_BITCOIN_RPC_PASS}"
BITCOIN_RPC_HIDDEN_SERVICE: "${APP_BITCOIN_RPC_HIDDEN_SERVICE}"
BITCOIN_P2P_HIDDEN_SERVICE: "${APP_BITCOIN_P2P_HIDDEN_SERVICE}"
BITCOIN_P2P_PORT: "${APP_BITCOIN_P2P_PORT}"
DEVICE_DOMAIN_NAME: "${DEVICE_DOMAIN_NAME}"
BITCOIN_DEFAULT_NETWORK: "${BITCOIN_DEFAULT_NETWORK:-mainnet}"
BITCOIN_INITIALIZE_WITH_CLEARNET_OVER_TOR: "${BITCOIN_INITIALIZE_WITH_CLEARNET_OVER_TOR:-unset}"
BITCOIND_IP: "${APP_BITCOIN_NODE_IP}"
TOR_PROXY_IP: "${APP_BITCOIN_TOR_PROXY_IP}"
TOR_PROXY_PORT: "9050"
TOR_PROXY_CONTROL_PORT: "9051"
TOR_PROXY_CONTROL_PASSWORD: "moneyprintergobrrr"
I2P_DAEMON_IP: "${APP_BITCOIN_I2P_DAEMON_IP}"
I2P_DAEMON_PORT: "7656"
networks:
default:
ipv4_address: $APP_BITCOIN_IP
bitcoind:
image: getumbrel/bitcoind:v28.1@sha256:c565266ea302c9ab2fc490f04ff14e584210cde3d0d991b8309157e5dfae9e8d
user: "1000:1000"
command: "${APP_BITCOIN_COMMAND}"
restart: unless-stopped
stop_grace_period: 15m30s
# these ports are exposed for external connections to bitcoind
volumes:
- "${APP_BITCOIN_DATA_DIR}:/data/.bitcoin"
ports:
- "${APP_BITCOIN_P2P_PORT}:${APP_BITCOIN_P2P_PORT}"
- "${APP_BITCOIN_RPC_PORT}:${APP_BITCOIN_RPC_PORT}"
volumes:
- ${APP_DATA_DIR}/data:/data # data/app and data/bitcoin
environment:
# DATA DIRECTORY SETTINGS
# BITCOIN_DIR: bitcoin-dir-override
# APP_STATE_DIR: app-state-dir-override
# BITCOIND BINARY SETTINGS
# BITCOIND_BIN: bitcoind-binary-path-override
# BITCOIND_EXTRA_ARGS is a comma-delimited list of extra startup flags to pass to bitcoind
# We can remove depratedrpc=create_bdb in a future update once Jam (JoinMarket) implements descriptor wallet support
# Bitcoin Core v30 no longer supports legacy bdb wallets, so Jam users will need to run v29.2 for compatibility
BITCOIND_EXTRA_ARGS: '-deprecatedrpc=create_bdb'
# BITCOIND CONF FILE SETTINGS
APPS_SUBNET: "${NETWORK_IP}/16" # used for rpcallowip
P2P_PORT: "${APP_BITCOIN_P2P_PORT}" # port, bind (also used for connect details)
P2P_WHITEBIND_PORT: "${APP_BITCOIN_P2P_WHITEBIND_PORT}" # Additional inbound P2P listener granting whitelisted permissions (whitebind) to this port; for trusted internal apps only; do not publish externally
RPC_PORT: "${APP_BITCOIN_RPC_PORT}" # rpcport (also used for rpc client and connect details)
TOR_PORT: "${APP_BITCOIN_TOR_PORT}" # bind=onion
ZMQ_RAWBLOCK_PORT: "${APP_BITCOIN_ZMQ_RAWBLOCK_PORT}" # zmqpubrawblock
ZMQ_RAWTX_PORT: "${APP_BITCOIN_ZMQ_RAWTX_PORT}" # zmqpubrawtx
ZMQ_HASHBLOCK_PORT: "${APP_BITCOIN_ZMQ_HASHBLOCK_PORT}" # zmqpubhashblock
ZMQ_SEQUENCE_PORT: "${APP_BITCOIN_ZMQ_SEQUENCE_PORT}" # zmqpubsequence
ZMQ_HASHTX_PORT: "${APP_BITCOIN_ZMQ_HASHTX_PORT}" # zmqpubhashtx
TOR_HOST: "${APP_BITCOIN_TOR_PROXY_IP}" # proxy, onion, torcontrol
TOR_SOCKS_PORT: "9050" # proxy, onion
TOR_CONTROL_PORT: "9051" # torcontrol
TOR_CONTROL_PASSWORD: "moneyprintergobrrr" # torpassword
I2P_HOST: "${APP_BITCOIN_I2P_DAEMON_IP}" # i2psam
I2P_SAM_PORT: "7656" # i2psam
# RPC CLIENT SETTINGS
BITCOIND_IP: "${APP_BITCOIN_NODE_IP}" # host for the rpc client. Also used for bitcoind conf file rpcbind & bind.
RPC_USER: "${APP_BITCOIN_RPC_USER}" # also shown in the connect modal
RPC_PASS: "${APP_BITCOIN_RPC_PASS}" # also shown in the connect modal
# CONNECTION DETAILS (shown to user in the connect modal)
DEVICE_DOMAIN_NAME: "${DEVICE_DOMAIN_NAME}"
P2P_HIDDEN_SERVICE: "${APP_BITCOIN_P2P_HIDDEN_SERVICE}"
RPC_HIDDEN_SERVICE: "${APP_BITCOIN_RPC_HIDDEN_SERVICE}"
networks:
default:
ipv4_address: $APP_BITCOIN_NODE_IP
@ -74,7 +68,7 @@ services:
ipv4_address: "${APP_BITCOIN_TOR_PROXY_IP}"
i2pd_daemon:
image: purplei2p/i2pd:release-2.59.0@sha256:257653c18ce0b127ef480e3d8373b3ddbf1495e842674c8cfc59909be0015979
image: purplei2p/i2pd:release-2.44.0@sha256:d154a599793c393cf9c91f8549ba7ece0bb40e5728e1813aa6dd4c210aa606f6
user: "root"
command: --sam.enabled=true --sam.address=0.0.0.0 --sam.port=7656 --loglevel=error
restart: on-failure

View File

@ -1,81 +1,168 @@
# IP ADDRESSES
export APP_BITCOIN_IP="10.21.22.2"
export APP_BITCOIN_NODE_IP="10.21.21.8"
export APP_BITCOIN_TOR_PROXY_IP="10.21.22.10"
export APP_BITCOIN_I2P_DAEMON_IP="10.21.22.11"
# DATA DIR
export APP_BITCOIN_DATA_DIR="${EXPORTS_APP_DIR}/data/bitcoin"
# PORTS
export APP_BITCOIN_RPC_PORT="8332"
export APP_BITCOIN_P2P_PORT="8333"
# Additional inbound P2P listener granting whitelisted permissions (whitebind) to this port; for trusted internal apps only; do not publish externally
export APP_BITCOIN_P2P_WHITEBIND_PORT="8335"
# As of v28.1, the default onion listening port will now be derived to be -port + 1 instead of being set to a fixed value (8334 on mainnet)
# We are fine because we always hardcode port to 8333 regardless of network
export APP_BITCOIN_TOR_PORT="8334"
export APP_BITCOIN_ZMQ_RAWBLOCK_PORT="28332"
export APP_BITCOIN_ZMQ_RAWTX_PORT="28333"
export APP_BITCOIN_ZMQ_HASHBLOCK_PORT="28334"
export APP_BITCOIN_ZMQ_SEQUENCE_PORT="28335"
export APP_BITCOIN_ZMQ_HASHTX_PORT="28336"
# NETWORK
export APP_BITCOIN_NETWORK="mainnet"
BITCOIN_CHAIN="main"
BITCOIN_ENV_FILE="${EXPORTS_APP_DIR}/.env"
# Check for an existing settings.json file to override APP_BITCOIN_NETWORK with user's choice
{
BITCOIN_APP_CONFIG_FILE="${EXPORTS_APP_DIR}/data/app/settings.json"
BITCOIN_APP_CONFIG_FILE="${EXPORTS_APP_DIR}/data/app/bitcoin-config.json"
if [[ -f "${BITCOIN_APP_CONFIG_FILE}" ]]
then
bitcoin_app_network=$(jq -r '.chain' "${BITCOIN_APP_CONFIG_FILE}")
bitcoin_app_network=$(jq -r '.network' "${BITCOIN_APP_CONFIG_FILE}")
case $bitcoin_app_network in
"main")
APP_BITCOIN_NETWORK="mainnet";;
BITCOIN_NETWORK="mainnet";;
"test")
APP_BITCOIN_NETWORK="testnet";;
BITCOIN_NETWORK="testnet3";;
"testnet4")
APP_BITCOIN_NETWORK="testnet4";;
BITCOIN_NETWORK="testnet4";;
"signet")
APP_BITCOIN_NETWORK="signet";;
BITCOIN_NETWORK="signet";;
"regtest")
APP_BITCOIN_NETWORK="regtest";;
*)
if [[ -n "$bitcoin_app_network" ]] && [[ "$bitcoin_app_network" != "null" ]]; then
echo "Warning (${EXPORTS_APP_ID}): Invalid network '${bitcoin_app_network}' in settings.json. Exporting APP_BITCOIN_NETWORK as default 'mainnet'."
fi;;
BITCOIN_NETWORK="regtest";;
esac
fi
} > /dev/null || true
# .env file to persist the rpc username and password
BITCOIN_ENV_FILE="${EXPORTS_APP_DIR}/.env"
# If no .env file exists, create one with generated values
if [[ ! -f "${BITCOIN_ENV_FILE}" ]]; then
if [[ -z ${BITCOIN_RPC_USER+x} ]] || [[ -z ${BITCOIN_RPC_PASS+x} ]]; then
if [[ -z "${BITCOIN_NETWORK}" ]]; then
BITCOIN_NETWORK="mainnet"
fi
if [[ -z ${BITCOIN_RPC_USER+x} ]] || [[ -z ${BITCOIN_RPC_PASS+x} ]] || [[ -z ${BITCOIN_RPC_AUTH+x} ]]; then
BITCOIN_RPC_USER="umbrel"
BITCOIN_RPC_DETAILS=$("${EXPORTS_APP_DIR}/scripts/rpcauth.py" "${BITCOIN_RPC_USER}")
BITCOIN_RPC_PASS=$(echo "$BITCOIN_RPC_DETAILS" | tail -1)
BITCOIN_RPC_AUTH=$(echo "$BITCOIN_RPC_DETAILS" | head -2 | tail -1 | sed -e "s/^rpcauth=//")
fi
echo "export APP_BITCOIN_NETWORK='${BITCOIN_NETWORK}'" > "${BITCOIN_ENV_FILE}"
echo "export APP_BITCOIN_RPC_USER='${BITCOIN_RPC_USER}'" >> "${BITCOIN_ENV_FILE}"
echo "export APP_BITCOIN_RPC_PASS='${BITCOIN_RPC_PASS}'" >> "${BITCOIN_ENV_FILE}"
echo "export APP_BITCOIN_RPC_AUTH='${BITCOIN_RPC_AUTH}'" >> "${BITCOIN_ENV_FILE}"
fi
# Source the .env file to export APP_BITCOIN_RPC_USER and APP_BITCOIN_RPC_PASS
. "${BITCOIN_ENV_FILE}"
# HIDDEN SERVICES
# Make sure we don't persist the original value in .env if we have a more recent
# value from the app config
{
if [[ ! -z ${BITCOIN_NETWORK+x} ]] && [[ "${BITCOIN_NETWORK}" ]] && [[ "${APP_BITCOIN_NETWORK}" ]]
then
APP_BITCOIN_NETWORK="${BITCOIN_NETWORK}"
fi
} > /dev/null || true
if [[ "${APP_BITCOIN_NETWORK}" == "mainnet" ]]; then
BITCOIN_CHAIN="main"
elif [[ "${APP_BITCOIN_NETWORK}" == "testnet3" ]]; then
BITCOIN_CHAIN="test"
# export APP_BITCOIN_RPC_PORT="18332"
# export APP_BITCOIN_P2P_PORT="18333"
# export APP_BITCOIN_TOR_PORT="18334"
elif [[ "${APP_BITCOIN_NETWORK}" == "testnet4" ]]; then
BITCOIN_CHAIN="testnet4"
# export APP_BITCOIN_RPC_PORT="48332"
# export APP_BITCOIN_P2P_PORT="48333"
# export APP_BITCOIN_TOR_PORT="48334"
elif [[ "${APP_BITCOIN_NETWORK}" == "signet" ]]; then
BITCOIN_CHAIN="signet"
# export APP_BITCOIN_RPC_PORT="38332"
# export APP_BITCOIN_P2P_PORT="38333"
# export APP_BITCOIN_TOR_PORT="38334"
elif [[ "${APP_BITCOIN_NETWORK}" == "regtest" ]]; then
BITCOIN_CHAIN="regtest"
# export APP_BITCOIN_RPC_PORT="18443"
# export APP_BITCOIN_P2P_PORT="18444"
# export APP_BITCOIN_TOR_PORT="18445"
else
echo "Warning (${EXPORTS_APP_ID}): Bitcoin Network '${APP_BITCOIN_NETWORK}' is not supported"
fi
export BITCOIN_DEFAULT_NETWORK="${BITCOIN_CHAIN}"
BIN_ARGS=()
# Commenting out options that are replaced by generated config file. We should migrate all these over in a future update.
# BIN_ARGS+=( "-chain=${BITCOIN_CHAIN}" )
# BIN_ARGS+=( "-proxy=${TOR_PROXY_IP}:${TOR_PROXY_PORT}" )
# BIN_ARGS+=( "-listen" )
# BIN_ARGS+=( "-bind=0.0.0.0:${APP_BITCOIN_TOR_PORT}=onion" )
# BIN_ARGS+=( "-bind=${APP_BITCOIN_NODE_IP}" )
# BIN_ARGS+=( "-port=${APP_BITCOIN_P2P_PORT}" )
# BIN_ARGS+=( "-rpcport=${APP_BITCOIN_RPC_PORT}" )
# We hardcode the ports p2p and rpc ports to always be the same for all networks
# As of v28.1, the default onion listening port will now be derived to be -port + 1 instead of being set to a fixed value (8334 on mainnet)
BIN_ARGS+=( "-port=8333" )
BIN_ARGS+=( "-rpcport=8332" )
BIN_ARGS+=( "-rpcbind=${APP_BITCOIN_NODE_IP}" )
BIN_ARGS+=( "-rpcbind=127.0.0.1" )
BIN_ARGS+=( "-rpcallowip=${NETWORK_IP}/16" )
BIN_ARGS+=( "-rpcallowip=127.0.0.1" )
BIN_ARGS+=( "-rpcauth=\"${APP_BITCOIN_RPC_AUTH}\"" )
BIN_ARGS+=( "-zmqpubrawblock=tcp://0.0.0.0:${APP_BITCOIN_ZMQ_RAWBLOCK_PORT}" )
BIN_ARGS+=( "-zmqpubrawtx=tcp://0.0.0.0:${APP_BITCOIN_ZMQ_RAWTX_PORT}" )
BIN_ARGS+=( "-zmqpubhashblock=tcp://0.0.0.0:${APP_BITCOIN_ZMQ_HASHBLOCK_PORT}" )
BIN_ARGS+=( "-zmqpubsequence=tcp://0.0.0.0:${APP_BITCOIN_ZMQ_SEQUENCE_PORT}" )
# BIN_ARGS+=( "-txindex=1" )
# BIN_ARGS+=( "-blockfilterindex=1" )
# BIN_ARGS+=( "-peerbloomfilters=1" )
# BIN_ARGS+=( "-peerblockfilters=1" )
# BIN_ARGS+=( "-rpcworkqueue=128" )
# We can remove depratedrpc=create_bdb in a future update once Jam (JoinMarket) implements descriptor wallet support
BIN_ARGS+=( "-deprecatedrpc=create_bdb" )
# Required for LND compatibility. We can remove deprecatedrpc=warnings in a future update once LND releases a version with this fix: https://github.com/btcsuite/btcd/pull/2245
# No longer required as of LND v0.18.4
# BIN_ARGS+=( "-deprecatedrpc=warnings" )
export APP_BITCOIN_COMMAND=$(IFS=" "; echo "${BIN_ARGS[@]}")
# echo "${APP_BITCOIN_COMMAND}"
rpc_hidden_service_file="${EXPORTS_TOR_DATA_DIR}/app-${EXPORTS_APP_ID}-rpc/hostname"
p2p_hidden_service_file="${EXPORTS_TOR_DATA_DIR}/app-${EXPORTS_APP_ID}-p2p/hostname"
export APP_BITCOIN_RPC_HIDDEN_SERVICE="$(cat "${rpc_hidden_service_file}" 2>/dev/null || echo "notyetset.onion")"
export APP_BITCOIN_P2P_HIDDEN_SERVICE="$(cat "${p2p_hidden_service_file}" 2>/dev/null || echo "notyetset.onion")"
# TODO: it would be nice for Electrs to handle this instead, but removing this would break existing installs of Electrs until they updated.
# Export an electrs compatible network parameter
# electrs uses "bitcoin" instead of "mainnet", but matches all other test networks
# electrs compatible network param
export APP_BITCOIN_NETWORK_ELECTRS=$APP_BITCOIN_NETWORK
if [[ "${APP_BITCOIN_NETWORK_ELECTRS}" = "mainnet" ]]; then
APP_BITCOIN_NETWORK_ELECTRS="bitcoin"
fi
fi
{
# Migrate settings for app updates differently to fresh installs
BITCOIN_DATA_DIR="${EXPORTS_APP_DIR}/data/bitcoin"
IS_POST_ADVANCED_SETTINGS_INSTALL_FILE_PATH="${EXPORTS_APP_DIR}/data/app/IS_POST_ADVANCED_SETTINGS_INSTALL"
# If no blocks directory exists, we write out a file to indicate that this is a fresh install.
# This gets around the issue of the pre-start hook starting up the bitcoind container early for Tor HS creation
# and creating the blocks directory.
if [[ ! -d "${BITCOIN_DATA_DIR}/blocks" ]] && [[ ! -d "${BITCOIN_DATA_DIR}/testnet3/blocks" ]] && [[ ! -d "${BITCOIN_DATA_DIR}/regtest/blocks" ]]
then
touch "${IS_POST_ADVANCED_SETTINGS_INSTALL_FILE_PATH}"
fi
APP_CONFIG_EXISTS="false"
if [[ -f "${EXPORTS_APP_DIR}/data/app/bitcoin-config.json" ]]
then
APP_CONFIG_EXISTS="true"
fi
if [[ ! -f "${IS_POST_ADVANCED_SETTINGS_INSTALL_FILE_PATH}" ]] && [[ "${APP_CONFIG_EXISTS}" = "false" ]]
then
# This app is not a fresh install, it's being updated, so preserve existing clearnet over Tor setting
export BITCOIN_INITIALIZE_WITH_CLEARNET_OVER_TOR="true"
fi
} || true

View File

@ -1,41 +1,6 @@
#!/usr/bin/env bash
APP_DATA_DIR="$(readlink -f $(dirname "${BASH_SOURCE[0]}")/../data)"
DESIRED_OWNER="1000:1000"
set_correct_permissions() {
local -r path="${1}"
# Check if the file exists
if [[ -f "${path}" ]]; then
owner=$(stat -c "%u:%g" "${path}")
if [[ "${owner}" != "${DESIRED_OWNER}" ]]; then
chown "${DESIRED_OWNER}" "${path}"
echo "Changed ownership of ${path} to ${DESIRED_OWNER}"
fi
else
echo "Skipping ${path} - file does not exist"
fi
}
# We set the correct permissions for any files that may have been created by a previous app running as root:
set_correct_permissions "${APP_DATA_DIR}/bitcoin/umbrel-bitcoin.conf"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/bitcoin.conf"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/bitcoin.conf.save"
# settings.json for any network could have been self-corrected by the old app running under root.
set_correct_permissions "${APP_DATA_DIR}/bitcoin/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/regtest/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/signet/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/testnet3/settings.json"
set_correct_permissions "${APP_DATA_DIR}/bitcoin/testnet4/settings.json"
# Set permissions recursively on the entire /app bind directory
if [[ -d "${APP_DATA_DIR}/app" ]]; then
chown -R "${DESIRED_OWNER}" "${APP_DATA_DIR}/app"
fi
# Delay booting the full app until the RPC and P2P Tor Hidden Services are ready
# Delay booting Bitcoin until the RPC and P2P Tor Hidden Services are ready
HIDDEN_SERVICE_FILE="${TOR_DATA_DIR}/app-${APP_ID}-rpc/hostname"
@ -43,7 +8,7 @@ if [[ -f "${HIDDEN_SERVICE_FILE}" ]]; then
exit
fi
"${UMBREL_ROOT}/scripts/app" compose "${APP_ID}" up --detach app
"${UMBREL_ROOT}/scripts/app" compose "${APP_ID}" up --detach bitcoind
"${UMBREL_ROOT}/scripts/app" compose "${APP_ID}" up --detach tor
echo "App: ${APP_ID} - Generating Tor Hidden Service..."

View File

@ -2,19 +2,25 @@ manifestVersion: 1.1
id: bitcoin
category: bitcoin
name: Bitcoin Node
version: "1.2.2"
version: "28.1"
tagline: Run your personal node powered by Bitcoin Core
description: >-
Run your Bitcoin node, powered by Bitcoin Core. Independently store and validate every Bitcoin transaction.
Connect your wallet directly to your node for unmatched privacy so your wallet provider can't track your activity - or worse, mislead you.
Run your Bitcoin node and independently store and validate
every single Bitcoin transaction with it. Achieve unparalleled
privacy by connecting your wallet directly to your node to
ensure that your wallet company cant spy on your transactions,
or worse — lie to you.
Transacting through your own node also helps keep the Bitcoin network decentralized — win-win.
Plus, transacting with your own node also helps keep the entire
Bitcoin network decentralized; win-win!
With over 20 advanced settings, you're in full control. Choose which version of Bitcoin Core your node runs,
how your node connects to other nodes over Tor, clearnet, and I2P, adjust daily upload limits, set the maximum mempool size,
fine-tune performance, and much more.
With over 20 advanced settings, you can take control of your node
and customize it to your needs. Control how your node connects to
other nodes over Tor, clearnet, and I2P, adjust your daily upload
limit, set the maximum mempool size, fine-tune its performance,
and much more.
Don't trust. Verify. On steroids.
@ -36,12 +42,15 @@ gallery:
path: ""
defaultPassword: ""
releaseNotes: >-
This update fixes an issue that could cause the Bitcoin Node app to crash and restart unexpectedly.
⚠️ If you are running the Lightning Node app (LND) connected to your Bitcoin Node app, please update Lightning Node to the latest version available in the app store to ensure compatibility.
Bitcoin Core has been updated to v28.1. See the full Bitcoin Core release notes at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-28.1.md
widgets:
- id: "stats"
type: "four-stats"
refresh: "5s"
endpoint: "app:3000/api/widget/stats"
endpoint: "server:3005/v1/bitcoind/widgets/stats"
link: ""
example:
type: "four-stats"
@ -62,7 +71,7 @@ widgets:
- id: "sync"
type: "text-with-progress"
refresh: "2s"
endpoint: "app:3000/api/widget/sync"
endpoint: "server:3005/v1/bitcoind/widgets/sync"
link: ""
example:
type: "text-with-progress"
@ -71,21 +80,5 @@ widgets:
text: "83%"
progressLabel: "In progress"
progress: 0.83
backupIgnore:
- data/bitcoin/blocks
- data/bitcoin/chainstate
- data/bitcoin/indexes
- data/bitcoin/testnet3/blocks
- data/bitcoin/testnet3/chainstate
- data/bitcoin/testnet3/indexes
- data/bitcoin/testnet4/blocks
- data/bitcoin/testnet4/chainstate
- data/bitcoin/testnet4/indexes
- data/bitcoin/signet/blocks
- data/bitcoin/signet/chainstate
- data/bitcoin/signet/indexes
- data/bitcoin/regtest/blocks
- data/bitcoin/regtest/chainstate
- data/bitcoin/regtest/indexes
submitter: Umbrel
submission: https://github.com/getumbrel/umbrel-apps/commit/576ecd2bef8d625abceed0f67ec9c487da9b2b1b

View File

View File

@ -1,15 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: bitwatch_web_1
APP_PORT: 3117
web:
image: ghcr.io/zapomatic/bitwatch:v1.7.2@sha256:bfc7522e0953c212010e189fdf6bd060168fb9ed283f59512600b0da0c98bd3b
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
volumes:
- ${APP_DATA_DIR}/data:/app/server/data

View File

View File

@ -1,43 +0,0 @@
manifestVersion: 1
id: bitwatch
category: bitcoin
name: Bitwatch
version: "1.7.2"
tagline: Monitor Bitcoin addresses in real-time
description: >-
Monitor Bitcoin addresses in the mempool and on-chain using the mempool.space API and websocket.
Track balance changes, get telegram notifications, and manage expectations for multiple addresses.
Features:
- Build list of addresses in collections to sum-up balances accross wallets
- Subscribes to mempool.space (or locally hosted) websocket for real-time mempool activity
- Double checks data against mempool.space (or locally hosted) API on a configured interval
- Track both on-chain and mempool activity
- Configure auto-acceptance or alert mode of changes (chain_in, chain_out, mempool_in, mempool_out)
- by default, incoming transactions are auto-accepted, outgoing transactions are alerted
- all activity is alerted to a configured telegram connection once (even when auto-accepted)
- Option to use your own local node for privacy
Recommended to have Mempool + Fulcrum to run privately but not required.
developer: Zap-O-Matic
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
releaseNotes: >-
This release addresses privacy concerns:
- when a local mempool instance is configured, address links open to that service url
website: https://github.com/zapomatic/bitwatch
repo: https://github.com/zapomatic/bitwatch
support: https://github.com/zapomatic/bitwatch/issues
dependencies: []
port: 3117
path: ""
submitter: Zap-O-Matic
submission: https://github.com/getumbrel/umbrel-apps/pull/2410

View File

@ -24,7 +24,7 @@ services:
restart: on-failure
app:
image: blinkospace/blinko:1.8.7@sha256:f7c1167f8c86db586599d849539a732929d89adb10977046e7b427813b2a84b4
image: blinkospace/blinko:0.50.0@sha256:bc74af1f724d11edab60137e4d4fedb273f88e236bcc04876b8d840ad7d87e72
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1111"]
interval: 30s

View File

@ -3,7 +3,7 @@ id: blinko
name: Blinko
tagline: An AI-powered hub for your ideas and notes
category: files
version: "1.8.7"
version: "0.50.0"
port: 1111
description: >-
😉 Blinko is an open-source application that combines note-taking, microblogging, pastebin functionality, task management, and AI-powered features in a self-hosted environment. The platform allows users to quickly and efficiently capture their thoughts, with full Markdown support for easy formatting.
@ -31,14 +31,10 @@ gallery:
- 4.jpg
- 5.jpg
releaseNotes: >-
This update includes new features, bug fixes, and improvements.
Key highlights in this version:
- Added MiniMax as a new built-in AI/LLM provider option
- Fixed file upload errors caused by special characters in filenames
- Fixed tag filters not being cleared when resetting search
- Updated Turkish translations for various UI elements
This update of Blinko contains new features and improvements:
- Cards now show internal sharing icons
- Fixed behavior of the Enter key when using Chinese input method
- Improved daily review configuration
Full release notes are available at https://github.com/blinko-space/blinko/releases

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1,35 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: booklore_web_1
APP_PORT: 6060
web:
image: booklore/booklore:v2.2.0@sha256:346064cb1fef6149dad2d8a373ea5fd1a7e3b61c22540995e40e8452136e202b
# does not work rootless
#user: "1000:1000"
restart: on-failure
environment:
DATABASE_URL: jdbc:mariadb://booklore_db_1:3306/booklore
DATABASE_USERNAME: bookloreuser
DATABASE_PASSWORD: booklorepass
depends_on:
db:
condition: service_started
volumes:
- ${APP_DATA_DIR}/data/app:/app/data
- ${APP_DATA_DIR}/data/books:/books
db:
image: mariadb:12.0.2@sha256:b30cc65b57a11a2e791ad5c06284e599fe9f1bf3fe9081a88d85bcf36389be4a
user: "1000:1000"
restart: on-failure
environment:
MARIADB_DATABASE: booklore
MARIADB_USER: bookloreuser
MARIADB_PASSWORD: booklorepass
MARIADB_ROOT_PASSWORD: rootpass
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/mysql

View File

@ -1,62 +0,0 @@
manifestVersion: 1
id: booklore
name: BookLore
tagline: An app for managing and reading books
category: files
version: "2.2.0"
port: 6060
description: >-
📖 BookLore is a modern web application created to transform the way digital libraries are managed and experienced. It is designed for readers who want to bring order and beauty to their collection of books and comics while also making them instantly accessible. Instead of leaving files scattered across folders, BookLore gathers them into a central library that can be explored and enjoyed directly through the browser. It provides a seamless reading environment where organization, discovery, and enjoyment flow together.
One of the most defining features of BookLore is its ability to automatically retrieve detailed information about each book. When a new file is added, the application fetches metadata such as title, author, description, and cover art, ensuring that the library always looks complete and polished. This automation removes the tedious task of entering details by hand and makes the collection feel like a professional archive. Users can browse their books with confidence that the information they see is accurate and visually appealing.
Organization is at the heart of the experience. Books can be sorted and displayed in a variety of ways, including by library, shelf, genre, author, or even mood. This flexibility allows each reader to create a system that matches personal habits and preferences, whether the goal is to maintain a precise catalog or to simply group titles in a way that feels natural. The interface encourages exploration and makes it easy to rediscover forgotten gems within the collection.
Reading itself is made enjoyable through the integrated BookLore reader, which supports popular formats such as PDF, EPUB, and CBZ. The reader is not only functional but also customizable, allowing themes and layouts to be adjusted so that each session feels comfortable. Whether someone prefers dark mode for nighttime reading or a lighter background during the day, the application adapts to the needs of the reader. This level of care ensures that the act of reading is always pleasant, no matter the device or environment.
BookLore is also built for sharing and collaboration. It supports multiple users with individually assigned permissions, making it possible to create a communal library without giving up control. Some users can be allowed to upload and edit entries, while others may only be able to read or download. This approach makes the application suitable for families, reading groups, or anyone who wants to curate a shared space for books while maintaining order and consistency.
Another powerful element is the way BookLore integrates with external reading tools. Through support for OPDS, it can synchronize with many popular reader applications, allowing books to be accessed beyond the browser while still being part of the same collection. This flexibility ensures that the library feels connected and portable, no matter which reading environment is preferred.
Adding new titles is effortless thanks to the BookDrop feature. Instead of manually managing file names and directories, users can simply place a book into a designated space, and BookLore automatically processes it, retrieves the correct metadata, and adds it to the collection. The process is smooth and requires almost no interaction, transforming what is usually a chore into a delightfully simple act.
The application also makes it easy to share individual books directly with others. With built in email functionality, a title can be sent straight to a recipient, which is especially useful for sending documents or transferring books to dedicated e reading devices such as a Kindle. This convenience bridges the gap between managing a collection and actually putting the books into the hands of readers.
The design of the interface is another strength of BookLore. It is responsive, intuitive, and built to adapt to different screen sizes, ensuring that browsing the library is equally pleasant on a phone, tablet, or desktop. The layout emphasizes clarity and usability, encouraging readers to engage with their collection in a way that feels natural and inviting.
At its core, BookLore is more than just a management tool. It is a thoughtful environment for digital reading that combines organization, automation, sharing, and customization into a single experience. By bringing together the functional needs of cataloging with the emotional enjoyment of reading, it helps transform a scattered set of files into a living, evolving library that is both beautiful and deeply personal.
developer: BookLore
website: https://demo.booklore.dev/login
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/3560
repo: https://github.com/booklore-app/booklore
support: https://github.com/booklore-app/booklore/issues
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
- 5.jpg
- 6.jpg
releaseNotes: >-
New features and improvements in this release:
- Two new library organization modes: Book per File (every file becomes its own book) and Book per Folder (files in the same folder are grouped into one book)
- Auto-detect mode is now marked as legacy and cannot be changed on existing libraries
- Configurable magnifier zoom and lens size for the CBX reader
- OIDC scopes are now configurable
Full release notes can be found at: https://github.com/booklore-app/booklore/releases
dependencies: []
path: ""
defaultUsername: ""
defaultPassword: ""

View File

@ -7,7 +7,7 @@ services:
APP_PORT: 8080
web:
image: getumbrel/btc-rpc-explorer:v3.5.1@sha256:ebf4cdafc189761b909bb3e211b01a6b50d2f08097f3493543ed9c3174d83d89
image: getumbrel/btc-rpc-explorer:v3.4.0@sha256:e85a1fe80919d308b1f80de2dc7174e7b61ec79384d695304fbf259b67b53594
restart: on-failure
stop_grace_period: 1m
environment:

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: btc-rpc-explorer
category: bitcoin
name: BTC RPC Explorer
version: "3.5.1"
version: "3.4.0-rpc"
tagline: Simple, database-free blockchain explorer
description: >-
BTC RPC Explorer is a full-featured, self-hosted explorer for the
@ -16,10 +16,10 @@ description: >-
It's time to appreciate the "fullness" of your node.
releaseNotes: >-
⚠️ It may take a few minutes for the app to be accessible after updating. Please be patient.
This update brings RPC Browser and RPC Terminal features to BTC RPC Explorer on umbrelOS.
This release includes some small fixes, as well as a new addition to the Bitcoin Fun page.
⚠️ A username and password is now required to access the explorer due to the new RPC Browser and RPC Terminal features. You can find your unique credentials by right-clicking on the BTC RPC Explorer app icon on the umbrelOS homescreen and selecting "Show default credentials".
Full release notes for BTC RPC Explorer versions are available at https://github.com/janoside/btc-rpc-explorer/releases

View File

@ -8,7 +8,7 @@ services:
PROXY_AUTH_ADD: "false"
nbxplorer:
image: nicolasdorier/nbxplorer:2.6.0@sha256:bd2f0f513cfed2e9ab4c72e891bb8b5b508bb7ce0026bdc39babaa9362800c1e
image: nicolasdorier/nbxplorer:2.5.23@sha256:9eee0f974ed5e56756f5d75fbc7ac4008e07a768cc5f51a33e01e55a8f9a8936
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
@ -22,14 +22,14 @@ services:
NBXPLORER_CHAINS: "btc"
NBXPLORER_SIGNALFILEDIR: "/data"
NBXPLORER_BTCRPCURL: "http://$APP_BITCOIN_NODE_IP:$APP_BITCOIN_RPC_PORT"
NBXPLORER_BTCNODEENDPOINT: $APP_BITCOIN_NODE_IP:${APP_BITCOIN_P2P_WHITEBIND_PORT-${APP_BITCOIN_P2P_PORT}}
NBXPLORER_BTCNODEENDPOINT: $APP_BITCOIN_NODE_IP:$APP_BITCOIN_P2P_PORT
NBXPLORER_BTCRPCUSER: $APP_BITCOIN_RPC_USER
NBXPLORER_BTCRPCPASSWORD: $APP_BITCOIN_RPC_PASS
NBXPLORER_POSTGRES: User ID=postgres;Host=btcpay-server_postgres_1;Port=5432;Application Name=nbxplorer;MaxPoolSize=20;Database=nbxplorer$APP_BITCOIN_NETWORK
NBXPLORER_BTCHASTXINDEX: 1
web:
image: btcpayserver/btcpayserver:2.3.6@sha256:0ff445daffc6d3d6bb8a59cf37f0f6c0d958eafb9b62147f65de7d66d5132392
image: btcpayserver/btcpayserver:2.0.8@sha256:00f9612ec99843ba926a4aa27261272c6ec366f7099f6209e7296013d1cd3e7d
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: btcpay-server
category: bitcoin
name: BTCPay Server
version: "2.3.6"
version: "2.0.8"
tagline: Accept Bitcoin payments with 0 fees & no 3rd party
description: >-
BTCPay Server is a payment processor that allows you to receive
@ -34,29 +34,18 @@ path: ""
defaultUsername: ""
defaultPassword: ""
releaseNotes: >-
This release comes with new features, bug fixes, improvements, and reverts a regression.
Highlights:
- Added previews for fiat amounts in transactions
- Allowed setting a custom email server through the API
- Improved form handling and invoice display
- Made archived invoices private for better security
- Fixed an issue with duplicate payouts for certain payments
- Added options to customize page titles and language settings
- Fixed issues when upgrading from very old versions
- Improved display of small Lightning balances
- Notified users about the old Shopify integration being replaced
- Fixed a crash when upgrading from older versions
New features:
- Wallets: Add filtering using search bar on the label filter dropdown when labels exceed more than 20
- API: Include a payment method in the Get invoices endpoint
- BTCPay Invoice Modal: Add a paymentMethodId parameter
- Security: Include API key permission analysis metadata
- A plugin can now create new permission policies
Bug fixes:
- Dashboard layout issues on mobile, regression from 2.3.5
- Subscriber portal sessions can be created again via API
- Can't upgrade/downgrade a Lifetime subscription
Improvements:
- Update Wasabi wallet folder access instructions
- Security: Apply CSRF protection globally to UI controllers
- Update many missing translations from the language packs
Regression:
- Revert: Dashboard: Support multi-crypto wallet balance widgets
Full release notes can be found at https://github.com/btcpayserver/btcpayserver/releases
Full release notes can be found at https://github.com/btcpayserver/btcpayserver/releases.
submitter: Umbrel
submission: https://github.com/getumbrel/umbrel/pull/353

View File

@ -1 +0,0 @@

View File

@ -1,19 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: btctracker_web_1
APP_PORT: 3000
web:
image: thewilqq/btc-tracker:v0.7.0@sha256:0c7beea5e0791cc39c9294f0a62faa24aa2ef42ed04571b63977c0afe085321b
restart: on-failure
user: 1000:1000
environment:
- NODE_ENV=production
- PORT=3000
- DATABASE_URL=file:/app/data/bitcoin-tracker.db
- NEXTAUTH_SECRET=${APP_SEED}
- NEXTAUTH_URL=http://${DEVICE_DOMAIN_NAME}:3947
volumes:
- ${APP_DATA_DIR}/data:/app/data

View File

@ -1,54 +0,0 @@
manifestVersion: 1
id: btctracker
name: BTC Tracker
tagline: A simple, privacy-focused Bitcoin investment tracker
category: bitcoin
version: "0.7.0"
port: 3947
description: >-
BTC Tracker is a user-friendly yet powerful application designed for managing and analyzing Bitcoin investments. It was created to offer a privacy-focused and straightforward alternative to existing tracking tools, which are often cluttered with unnecessary features, complicated to set up, or designed for managing large, diversified portfolios. Many of those tools require connections to external services and the sharing of sensitive information such as wallet addresses or transaction histories.
BTC Tracker takes a different approach. The entire application runs locally on your own device, with no data ever sent to external servers or third parties. All investment data, transactions, and settings are stored securely and privately on your machine, giving you full control over your personal information at all times. This makes BTC Tracker an ideal solution for anyone who values privacy and data ownership.
Beyond simply recording investments, BTC Tracker provides powerful analysis features. Users can track the performance of their Bitcoin holdings over time, calculate profits and losses, and monitor their return on investment (ROI). The app supports multiple currencies, including EUR, USD, GBP, JPY, CHF, and PLN, allowing users to view their data in their preferred local currency.
The interface is modern and responsive, designed to work seamlessly on both desktop and mobile devices. Users can choose between a light or dark theme depending on their visual preferences. BTC Tracker also includes CSV import and export features, making it easy to migrate data from other tools or create backups.
Overall, BTC Tracker is a focused tool that puts privacy first and strips away unnecessary complexity. It gives you a clear, secure way to track your Bitcoin investments without compromising your data.
⚠️ To use BTC Tracker, you need to create a user account. The application cannot function without it, as all data is securely linked to your personal profile and stored locally.
developer: wilqq-the
website: https://github.com/wilqq-the
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/2597
repo: https://github.com/wilqq-the/BTC-Tracker
support: https://github.com/wilqq-the/BTC-Tracker/issues
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
releaseNotes: >-
✨ New Features
- Exchange Auto-Sync (Beta) — connect exchange API keys to automatically import BTC spot trades; supports Binance, Kraken, Coinbase, Bybit, and Gemini
- Exchange Connections UI — new "Exchanges" tab in Settings to manage connections, test credentials, and trigger syncs
🐛 Bug Fixes
- Fixed "Net Holdings" on Transactions page showing USD values regardless of display currency setting
🔧 Improvements
- Calendar now has month/year dropdowns for faster navigation
- Sort and filter on Transactions page now works across all pages (server-side)
- New optional "Wallet" column in transactions showing source/destination wallet
- Named wallets now show individual BTC balances in the portfolio sidebar
dependencies: []
path: ""
defaultUsername: ""
defaultPassword: ""

View File

@ -8,7 +8,7 @@ services:
PROXY_AUTH_ADD: "false"
budibase:
image: budibase/budibase:3.34.11@sha256:5f13b4c0939c5905cfeb8770bf982f71c7914f36b414c85a90a5986d251bd902
image: budibase/budibase:3.8.5@sha256:e18195a03d9d4aa5cbcb5f09ac4845ee5ebcd4c22fd1730a0798fe48dce97662
restart: on-failure
stop_grace_period: 1m
volumes:

View File

@ -3,7 +3,7 @@ id: budibase
name: Budibase
tagline: The low code platform you'll enjoy using
category: developer
version: "3.34.11"
version: "3.8.5"
port: 6733
description: >-
Budibase is an open-source low-code platform that saves engineers 100s of hours building forms, portals, and approval apps, securely.
@ -11,7 +11,7 @@ description: >-
🔨 Build and ship real software
Unlike other platforms, with Budibase you build and ship real software. Budibase applications have performance baked in and can be designed responsively, providing users with a great experience.
Unlike other platforms, with Budibase you build and ship single page applications. Budibase applications have performance baked in and can be designed responsively, providing users with a great experience.
🗄️ Load data or start from scratch
@ -38,9 +38,9 @@ gallery:
- 2.jpg
- 3.jpg
releaseNotes: >-
Key improvements in this release include:
- Fixed context passing to formatter
- Implemented EventBrokerProcessor HTTP request to Account Portal
Key highlights in this release include:
- Improved performance for public configurations
- Enhanced Automations External Data Connector picker
Full release notes are found at https://github.com/Budibase/budibase/releases

View File

@ -7,7 +7,7 @@ services:
APP_PORT: 8083
server:
image: linuxserver/calibre-web:0.6.26@sha256:95fa0d0d07bf1be2404236222a882a467431f34ee35ad29b6e7b3b4bca3b0376
image: linuxserver/calibre-web:0.6.24@sha256:71cf33758891aa4fcd9dace41bbbc1aaf8faeedf78fff9f1a12f46cfc9156b97
stop_grace_period: 1m
environment:
- PUID=1000
@ -15,4 +15,4 @@ services:
volumes:
- ${APP_DATA_DIR}/data/config:/config
- ${APP_DATA_DIR}/data/books:/books
restart: on-failure
restart: on-failure

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: calibre-web
category: files
name: Calibre Web
version: "0.6.26"
version: "0.6.24"
tagline: A clean web app for your eBooks
description: >-
Calibre-Web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database.
@ -31,18 +31,17 @@ torOnly: false
releaseNotes: >-
This update includes several new features and improvements:
- Multi-edit capability for books in the book list
- Instapaper configuration support for Kobo sync
- Enhanced EPUB reader with page count display and Books button to return to Calibre-Web
- Additional EPUB reader theme
- Improved performance during search operations
- Fixed compatibility with Calibre 9
- Fixed read status updates when books are archived
- Fixed mass removal of books from shelves
- Security improvement: API keys are no longer exposed in config exports
- Added metadata extraction for audio files during upload
- Updated PDF viewer with improved functionality
- New upload interface with progress tracking and drag & drop support
- Improved shelf sorting capabilities
- Better contrast for epub reader in dark modes
- Enhanced support for multiple e-reader email addresses
- Improved whitespace handling and string formatting
- Various improvements to the Kobo sync and browser experience
- Multiple bug fixes for database handling and metadata operations
- Enhanced support for Windows installations
Full release notes can be found here: https://github.com/janeczku/calibre-web/releases
submitter: Xosten
submission: https://github.com/getumbrel/umbrel-apps/pull/74
submission: https://github.com/getumbrel/umbrel-apps/pull/74

View File

@ -1 +0,0 @@

View File

@ -1,34 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: canary_web_1
APP_PORT: 3000
PROXY_AUTH_WHITELIST: "/api/*"
backend:
image: schjonhaug/canary-backend:v1.4.0@sha256:daf6920e1f0ff781c526fa92ee0e39720dd1b18b5d7e1bcdd0aeff0cb76a68ad
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
environment:
CANARY_NETWORK: mainnet
CANARY_ELECTRUM_URL: tcp://$APP_ELECTRS_NODE_IP:$APP_ELECTRS_NODE_PORT
CANARY_BIND_ADDRESS: 0.0.0.0:3001
CANARY_DATA_DIR: /app/data
CANARY_MODE: "self-hosted"
CANARY_SYNC_INTERVAL: 60
CANARY_MEMPOOL_PORT: ${APP_CANARY_MEMPOOL_PORT:-}
volumes:
- ${APP_DATA_DIR}/data:/app/data
web:
image: schjonhaug/canary-frontend:v1.4.0@sha256:5c273df8bf4dc16af0edc8f6d48519ecffb4a76b49ad8eb0cef99259c6188511
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
environment:
API_URL: http://canary_backend_1:3001
depends_on:
- backend

View File

@ -1,10 +0,0 @@
export APP_CANARY_PORT="3005"
# Auto-detect optional Mempool integration
# If Mempool is installed on Umbrel, pass its port so Canary can link to it
# Note: APP_MEMPOOL_PORT comes from Mempool's exports.sh, which is only sourced
# if Mempool is a dependency. Since it's optional, we hardcode the known port.
installed_apps=$("${UMBREL_ROOT}/scripts/app" ls-installed)
if echo "$installed_apps" | grep --quiet 'mempool'; then
export APP_CANARY_MEMPOOL_PORT="3006"
fi

View File

@ -1,35 +0,0 @@
manifestVersion: 1.1
id: canary
category: bitcoin
name: Canary
version: "1.4.0"
tagline: Early warning system for Bitcoin cold storage
description: >-
A canary in the cold mine. When your bitcoins are in cold storage, you seldom check on them.
Canary acts as an early warning system that alerts you the moment your coins move, giving you immediate notification of any activity on your wallets.
Built with Rust and BDK, it provides real-time transaction intelligence with advanced pattern recognition (RBF fee bumping, CPFP acceleration) and instant multilingual notifications via ntfy.sh.
Set custom balance alerts (equal, less than, or more than) to monitor your holdings. Perfect for monitoring cold storage and Bitcoin holdings you don't actively use.
developer: schjonhaug
website: https://github.com/schjonhaug/canary
repo: https://github.com/schjonhaug/canary
support: https://github.com/schjonhaug/canary/issues
port: 3005
dependencies:
- electrs
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
releaseNotes: >-
Monitor individual Bitcoin addresses alongside HD wallets, with automatic transaction lookup via your local Mempool instance when installed on Umbrel. Added the ability to test your ntfy notification setup directly from the app.
path: ""
defaultUsername: ""
defaultPassword: ""
submitter: schjonhaug
submission: https://github.com/getumbrel/umbrel-apps/pull/4117

View File

@ -1,12 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: cashu-me_web_1
APP_PORT: 80
web:
image: rstmsn/cashu-me:0.1.1@sha256:46cf3752f58e20b7fd191b270208f6f41aa143ba950fddb0efb390ed3ea2851b
restart: on-failure
stop_grace_period: 1m

View File

@ -1,49 +0,0 @@
manifestVersion: 1
id: cashu-me
category: bitcoin
name: Cashu.me Wallet
version: "0.1.1"
tagline: An open-source Bitcoin ecash wallet
description: >-
🥜 Cashu.me is a free and open-source Bitcoin wallet built on the Cashu ecash protocol.
It combines the speed and efficiency of ecash with the power of Bitcoin — ensuring
your financial privacy like never before.
## 🚀 Why Use Cashu.me?
- 🧾 No KYC You stay anonymous.
- 🔐 Privacy-first Ecash ensures your wallet data stays yours.
- 🪙 Bitcoin-native Designed from the ground up to work with Bitcoin.
- 🧠 Open-source Trust through transparency.
## 🌐 How It Works
Cashu is a privacy-focused ecash protocol for Bitcoin. Learn more at https://cashu.space.
To use the wallet, you need to connect to one or more Cashu mints of your choice. This
wallet is not affiliated with any specific mint.
## 📦 Important to Know
- 🔑 **Back up your seed phrase!** Your ecash tokens are stored locally in your browser.
If you clear your browser data without a backup, your funds will be lost forever.
- 🧪 **Beta Warning**: This wallet is in active development and considered beta software.
Use at your own risk.
- 🧾 **License**: Open-source and MIT licensed.
releaseNotes: >-
This release contains various improvements and bug fixes.
developer: cashubtc
website: https://cashu.space
dependencies: []
repo: https://github.com/cashubtc/cashu.me
support: https://docs.cashu.space/
port: 3194
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
path: ""
defaultUsername: ""
defaultPassword: ""
submitter: RSTMSN
submission: https://github.com/getumbrel/umbrel\-apps/pull/3044

View File

@ -1,24 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: chantools_chantools_1
APP_PORT: 7682
chantools:
image: guggero/chantools:v0.14.1-umbrel@sha256:8994745086ab1708205f030f70e37dcfbe57154c72f27782089b229069fd8043
user: "1000:1000"
restart: on-failure
stop_grace_period: 1s
volumes:
- ${APP_DATA_DIR}/data:/chantools
- ${UMBREL_ROOT}/app-data/lightning/data/lnd:/lnd:ro
command:
- "ttyd"
- "-W"
- "-p"
- "7682"
- "bash"
- "-c"
- "/bash-wrapper.sh"

View File

@ -1,36 +0,0 @@
manifestVersion: 1
id: chantools
category: bitcoin
name: chantools CLI
version: "v1.14.1"
tagline: lnd and cln channel rescue utility
description: >-
chantools is a command line interface (CLI) utility designed to help
Lightning Network node operators rescue their funds after experiencing data
loss.
You might want to visit https://www.node-recovery.com/chantools for more
information about what commands to run and how to compose those commands.
Also, you don't have to run chantools on Umbrel specifically. You can download
and run it on any machine, there is no direct interaction with your Lightning
node required and for most commands you don't even need anything other than
your seed phrase.
developer: guggero
website: https://github.com/lightninglabs/chantools
dependencies: []
repo: https://github.com/lightninglabs/chantools
support: https://github.com/lightninglabs/chantools/issues
port: 7682
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
path: ""
defaultUsername: ""
defaultPassword: ""
releaseNotes: ""
submitter: guggero
submission: https://github.com/getumbrel/umbrel-apps/pull/3849

View File

@ -6,7 +6,7 @@ services:
APP_PORT: 3000
chromium:
image: ghcr.io/linuxserver/chromium:version-8d3cb5f1@sha256:d7c5f7faf5fe524117fd73c4d446e1bf81bccd0d64d073a30b8c9819fdf105d6
image: ghcr.io/linuxserver/chromium:version-c0d313e5@sha256:231b1e75148be3a8bda8143a2cdffb18e0207d3dc3ba8fc4e07fb954830d51db
environment:
- PUID=1000
- PGID=1000

View File

@ -1,14 +1,11 @@
manifestVersion: 1.2
manifestVersion: 1
id: chromium
name: Chromium
tagline: The open-source browser project
category: networking
version: "8d3cb5f1"
version: "c0d313e5"
port: 30099
description: >-
⚠️ Removal Notice: The Chromium app has been disabled as there are no more updates that work without HTTPS.
Chromium is an open-source web browser project initiated and primarily maintained by Google. Serving as the foundation for many browsers, including Google Chrome, Microsoft Edge, and Opera, Chromium aims to build a safer, faster, and more stable way for all users to experience the web.
developer: The Chromium Project
website: https://www.chromium.org/Home/
@ -22,12 +19,3 @@ gallery:
- 1.jpg
- 2.jpg
- 3.jpg
releaseNotes: >-
This release includes various new features, security and performance improvements.
It is recommended to update to this version for an enhanced browsing experience and increased security.
Full release notes can be found at https://developer.chrome.com/release-notes
disabled: true

View File

@ -21,10 +21,10 @@ services:
CLOUDFLARED_TOKEN_FILE: "/app/data/token"
connector:
image: ghcr.io/radiokot/umbrel-cloudflared-connector:1.0.1-cf.2026.3.0@sha256:8f883ef254bbf44ba94a2647233b36723fe51cf84690ba9b5311145f3b2a8892
image: ghcr.io/radiokot/umbrel-cloudflared-connector:1.0.0-cf.2025.2.0@sha256:9a126ccfd01e93e447a98f246cc948b55b4822455beb7dda995dfb216c1b3eab
hostname: cloudflared-connector
restart: on-failure
stop_grace_period: 3s
stop_grace_period: 5s
volumes:
- ${APP_DATA_DIR}/data:/data
environment:

View File

@ -3,7 +3,7 @@ id: cloudflared
name: Cloudflare Tunnel
tagline: Access your Umbrel apps from the Internet using Cloudflare network
category: networking
version: "2026.3.0"
version: "2025.2.0"
port: 4499
description: >-
Start a secure tunnel to access your Umbrel apps from the Internet using the Cloudflare network.
@ -34,7 +34,7 @@ gallery:
- 2.jpg
- 3.jpg
releaseNotes: >-
The tunneling daemon (cloudflared) has been updated to 2026.3.0
The tunneling daemon (cloudflared) has been updated to 2025.2.0
dependencies: []
path: ""
defaultUsername: ""

View File

@ -7,7 +7,7 @@ services:
APP_PORT: 9001
PROXY_AUTH_ADD: "false"
web:
image: dennysubke/cobalt:11.5@sha256:e3b1626d6026f1f714643ad9b0b14257b0ce9ab4cedb3a5e041eb540f2e12798
image: dennysubke/cobalt:10.6@sha256:870110e7002b7080adc81f9cee5357ab784adba81385a7b51663a7c1e92030cd
read_only: true
restart: on-failure
user: "1000:1000"
@ -18,4 +18,3 @@ services:
API_AUTH_REQUIRED: 0
DURATION_LIMIT: 86400

View File

@ -3,18 +3,18 @@ id: cobalt
name: cobalt
tagline: Best way to save what you love
category: media
version: "11.5"
version: "10.6"
port: 9009
description: >-
⚙️ In order use your own cobalt instance, go to settings > instances > and toggle "use a custom processing server". Add http://umbrel.local:9013 as your server.
cobalt is a powerful and intuitive media downloader built to simplify the process of saving your favorite content from the web. Designed for users who want to enjoy their media without the interruptions of ads, trackers, or paywalls, cobalt offers a streamlined experience. Whether you're downloading videos, music, images, or other types of media, cobalt acts as a proxy that fetches content directly from its source, ensuring a fast and seamless process.
What sets cobalt apart is its commitment to user privacy and freedom. The tool doesn't cache content, so you're always downloading directly from the original source. It also avoids unnecessary distractions, like ads or third-party interference, letting you enjoy a cleaner, faster, and more reliable media retrieval process.
cobalt is ideal for anyone who values simplicity and control over their media downloads. With its easy-to-use interface and efficient functionality, you can quickly retrieve and store content without the usual hassle. Whether you're an enthusiast collecting media or someone simply trying to access content without restrictions, cobalt makes it easy to download what you love, whenever you want.
developer: imputnet
website: https://cobalt.tools/
@ -28,15 +28,7 @@ gallery:
- 3.jpg
- 4.jpg
- 5.jpg
releaseNotes: >-
This release brings new features and improvements.
Key Highlights:
- Added support for explicitly specifying access tokens in the Vimeo API
- Ensured backward compatibility with existing access tokens
- Updated youtubei.js to version 15.1.1 for improved stability and compatibility
- General improvements to web and API functionality
releaseNotes: ""
dependencies: []
path: ""
defaultUsername: ""

View File

@ -7,7 +7,7 @@ services:
APP_PORT: 8080
server:
image: codercom/code-server:4.112.0@sha256:ddd9b0b854fec5a3c65ec0095b5c59fb8505ad44d8a18d00d6fcf6a3179692dd
image: codercom/code-server:4.98.2@sha256:9ed588a05d4e81aa464e753a409bc3b2b93267323d1c3975fbddf6f9aef84c26
restart: on-failure
user: "1000:1000"
volumes:

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: code-server
category: developer
name: code-server
version: "4.112.0"
version: "4.98.2"
tagline: Run VS Code on your Umbrel
description: >-
Run VS Code on your Umbrel and access it in the browser so you can
@ -13,10 +13,10 @@ description: >-
By running all intensive tasks run on your Umbrel, preserve battery life of your devices when you're on the go.
releaseNotes: >-
This release updates the underlying VS Code editor to 1.112.0.
This release updates the underlying VS Code editor to 1.98.2.
Full release notes are available at https://github.com/coder/code-server/releases
Full release notes are available at https://github.com/coder/code-server/releases.
developer: Coder
website: https://coder.com
dependencies: []

View File

@ -1 +0,0 @@

View File

@ -1,16 +0,0 @@
services:
app_proxy:
environment:
APP_HOST: convertx_server_1
APP_PORT: 3000
server:
image: c4illin/convertx:v0.17.0@sha256:e1f85be04bbaf8a55ead9261194c3ae0fa0957d303ea537127154860b2552afd
restart: on-failure
stop_grace_period: 1m
user: "1000:1000"
environment:
- HTTP_ALLOWED=true
- ACCOUNT_REGISTRATION=true
volumes:
- ${APP_DATA_DIR}/data/app:/app/data

View File

@ -1,42 +0,0 @@
manifestVersion: 1
id: convertx
category: files
name: ConvertX
version: "0.17.0"
tagline: Self-hosted online file converter
description: >
ConvertX is a self-hosted file converter. Supports over a thousand different formats.
Features:
- Convert files to different formats.
- Process multiple files at once
- Password protection
- Multiple accounts
developer: Emrik Östling
website: https://github.com/C4illin/ConvertX
dependencies: []
repo: https://github.com/C4illin/ConvertX
support: https://github.com/C4illin/ConvertX/issues
port: 8386
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
path: ""
defaultPassword: ""
releaseNotes: >-
This release brings two new converters and a new bulk deletion UI.
Key highlights include:
- Added VCF to CSV converter
- Added bulk job deletion with multi-select UI
- Added markitdown implementation for document conversion
- Fixed timezone display in history page
- Added support for .wma files in FFMPEG
Full changelog can be found at https://github.com/C4illin/ConvertX/releases
submitter: Kanishk Pachauri
submission: https://github.com/getumbrel/umbrel-apps/pull/3832

View File

@ -1,15 +0,0 @@
[global]
p: 3923 # Listen on port 3923
e2dsa # Scans all mounted volumes (including readonly ones)
e2ts # Scans for tags in all files that don't have tags yet
z # Enable Zeroconf discovery
shr: /shr # Base URL where shares will be accessible from
hist: /cfg/hists/ # Database (fs+media index) and thumbnail cache
[accounts]
admin: umbrel # Create a user named admin with password
[/]
/media # Expose /media as the root volume
accs:
rwmda: admin # The user "admin" gets read-write-move-delete-admin

Some files were not shown because too many files have changed in this diff Show More