Compare commits

..

7 Commits

Author SHA1 Message Date
Felipe Knorr Kuhn
a9629b9b39
Add the missing SERVICES_API override 2024-07-22 17:21:32 +02:00
Felipe Knorr Kuhn
ace49f347c
Merge branch 'master' into knorrium/mempool_v3.0.0 2024-07-18 16:44:21 +02:00
Felipe Knorr Kuhn
8e25003e73
Enable debug logs 2024-04-04 10:21:05 +09:00
Felipe Knorr Kuhn
bf4fd34338
Use the latest images for testing 2024-04-03 21:23:00 +09:00
Felipe Knorr Kuhn
460f36d2f8
Enable the accelerator 2024-04-03 21:22:00 +09:00
Felipe Knorr Kuhn
17164a32f4
Merge branch 'master' into knorrium/mempool_v3.0.0 2024-04-03 14:44:28 +09:00
Felipe Knorr Kuhn
664b922a3e
WIP mempool v3.0.0 integration 2024-03-18 19:48:08 -07:00
919 changed files with 2189 additions and 19575 deletions

View File

@ -1,13 +0,0 @@
name: Lint apps
on:
pull_request_target:
branches:
- master
jobs:
lint-apps:
name: Lint apps
runs-on: ubuntu-latest
steps:
- uses: sharknoon/umbrel-app-linter-action@d0b39f9ec5867fd001b05d5ddd6037dcc35f41bd

29
.gitignore vendored
View File

@ -1,29 +0,0 @@
# Mac OS specific
.DS_Store
.AppleDouble
.LSOverride
._*
.Spotlight-V100
.Trashes
# Editor specific files
.idea/
.vscode/
*.swp
*.swo
*~
.cursorrules
# Build artifacts
dist/
build/
out/
# Dependency directories
node_modules/
vendor/
# Temporary files
tmp/
temp/
*.tmp

141
README.md
View File

@ -1,20 +1,22 @@
# 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.0.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:
1. [🛳 Containerizing the app using Docker](#1-containerizing-the-app-using-docker)
1. [☂️ Packaging the app for umbrelOS](#2-%EF%B8%8Fpackaging-the-app-for-umbrelos)
1. [🛠 Testing the app on umbrelOS](#3-testing-the-app-on-umbrelos)
1. [Test using an umbrelOS development environment on your local machine](#31-test-using-an-umbrelos-development-environment-on-your-local-machine)
1. [Test using umbrelOS running on a physical device](#32-test-using-umbrelos-running-on-a-physical-device)
1. [☂️ Packaging the app for Umbrel](#2-%EF%B8%8Fpackaging-the-app-for-umbrel)
1. [🛠 Testing the app on Umbrel](#3-testing-the-app-on-umbrel)
1. [Test using a Linux VM on your local machine with Multipass](#31-test-using-a-linux-vm-on-your-local-machine-with-multipass)
1. [Testing on a Raspberry Pi or Umbrel Home](#32-testing-on-a-raspberry-pi-or-umbrel-home)
1. [🚀 Submitting the app](#4-submitting-the-app)
___
@ -67,7 +69,7 @@ docker buildx build --platform linux/arm64,linux/amd64 --tag getumbrel/btc-rpc-e
___
## 2. ☂️  Packaging the app for umbrelOS
## 2. ☂️  Packaging the app for Umbrel
1\. Let's fork the [getumbrel/umbrel-apps](https://github.com/getumbrel/umbrel-apps) repo on GitHub, clone our fork locally, create a new branch for our app, and then switch to it:
@ -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.
@ -299,113 +294,103 @@ git push
___
## 3. 🛠  Testing the app on umbrelOS
## 3. 🛠  Testing the app on Umbrel
🚨 This is the current workflow for 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).
🚨 This is the current workflow for testing an app on umbrelOS 1.0.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).
### 3.1 Test using an umbrelOS development environment on your local machine
### 3.1 Test using a Linux VM on your local machine with Multipass
The umbrelOS development environment (umbrel-dev) requires a Docker environment that exposes container IPs to the host. This is how Docker natively works on Linux and can be done with OrbStack on macOS and WSL 2 on Windows.
It is very easy to spin up a Linux VM on your local machine using [Multipass](https://multipass.run/) and the pre-configured scripts for creating a production-like umbrelOS environment.
1\. Install [OrbStack](https://orbstack.dev/) on macOS or [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install) with Docker Desktop on Windows.
1\. Install [Multipass](https://multipass.run/)
2\. Clone the [getumbrel/umbrel](https://github.com/getumbrel/umbrel) repo.
From the root of the cloned repo, run the following command to view the available umbrel-dev commands:
From the root of the cloned repo, run the following command to provision a VM with the latest umbrelOS:
```sh
npm run dev help
npm run vm:provision
```
To start the development environment, run the following command:
Once provisioned, umbrelOS will be accessible at http://umbrel-dev.local.
The VM environment has a slight difference compared to the production environment. Specifically, the main Umbrel data directory is located at `~/umbrel/packages/umbreld/data` in the VM environment, whereas in the production environment, it's located at `~/umbrel`.
3\. The following commands can be used to interact with the VM:
You can run any command on the VM with `npm run vm:exec -- <command>`. For example:
```sh
npm run dev
npm run vm:exec -- sudo journalctl -u umbreld
```
> [!NOTE]
> If this is your first time running the development environment, it may take a while to build the OS image locally on your machine.
Once initialized, umbrelOS will be accessible at http://umbrel-dev.local.
3\. Copy the app's directory (with any .gitkeep files excluded) to the app-store directory on umbrel-dev.
To do this, we run the following command on our local machine:
You can also run trpc commands on the VM with `npm run vm:trpc <command>`. For example:
```sh
rsync -av --exclude=".gitkeep" <path-to-your-forked-repo-on-local-machine>/btc-rpc-explorer umbrel@umbrel-dev.local:/home/umbrel/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/
npm run vm:trpc apps.install.mutate -- --appId transmission
```
If you are asked for a password during the transfer, use the password that you set when you created your umbrelOS account.
4\. Install the app.
From the umbrelOS homescreen, go to the App Store and navigate to BTC RPC Explorer. Click on the "Install" button and wait for the app to install.
You can also install the app from the command line. umbrelOS provides a web terminal that can be accessed via Settings > Advanced Settings > Terminal > umbrelOS, or you can use the umbrel-dev scripts to install the app using the umbreld RPC server:
Alternatively, you can get a shell on the VM with:
```sh
npm run dev client -- apps.install.mutate -- --appId btc-rpc-explorer
npm run vm:shell
```
You can completely destroy the VM with `npm run vm:destroy`.
Other useful commands can be found in the `package.json` file in the root of the cloned repo.
4\. This next step will become easier in the future, but for now, we need to manually copy the app directory to the app-store directory in the VM in order to test our app:
```sh
multipass transfer -r <path-to-your-forked-repo>/btc-rpc-explorer/ umbrel-dev:/home/ubuntu/umbrel/packages/umbreld/data/app-stores/getumbrel-umbrel-apps-github-53f74447/
```
5\. And finally, it's time to install our app through the homescreen or via the terminal with:
```sh
npm run vm:trpc apps.install.mutate -- --appId btc-rpc-explorer
```
That's it! Our BTC RPC Explorer app should now be accessible at http://umbrel-dev.local:3002
To uninstall the app, you can right-click on the app's icon on your homescreen and click on the "Uninstall" button. You can also uninstall the app using the umbrel-dev scripts:
### 3.2 Testing on a Raspberry Pi or Umbrel Home
You can test your app on a real Raspberry Pi (arm64) or Umbrel Home (x86_64) device. Instructions for installing umbrelOS on a Raspberry Pi can be found [here](https://getumbrel.com/#install). For Umbrel Home, simply connect the device to your local network and plug it in.
1\. After plugging in your device, umbrelOS will be accessible from your browser at http://umbrel.local.
You can SSH into the device with:
```sh
npm run dev client -- apps.uninstall.mutate -- --appId btc-rpc-explorer
ssh umbrel@umbrel.local
```
> [!WARNING]
> When testing your app, make sure to verify that any application state that needs to be persisted is in-fact being persisted in volumes.
>
> A good way to test this is to restart the app (right-click on the app's icon on your homescreen and click on the "Restart" button). If any state is lost, it means that state should be mapped to a persistent volume.
>
> When stopping/starting the app, all data in volumes will be persisted and anything else will be discarded. When uninstalling/installing an app, even persistent data will be discarded.
(SSH password is the same as your Umbrel's homescreen password)
### 3.2 Test using umbrelOS running on a physical device
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)
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.
1\. Copy the app's directory (with any .gitkeep files excluded) to the app-store directory on your umbrelOS device.
To do this, we run the following command on our local machine:
2\. This next step will become easier in the future, but for now, we need to manually copy the app directory (with dotfiles excluded) to the app-store directory on your umbrelOS device in order to test our app:
```sh
rsync -av --exclude=".gitkeep" <path-to-your-forked-repo-on-local-machine>/btc-rpc-explorer umbrel@umbrel.local:/home/umbrel/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/
rsync -av --exclude=".*" <path-to-your-forked-repo>/btc-rpc-explorer umbrel@umbrel.local:/home/umbrel/umbrel/app-stores/getumbrel-umbrel-apps-github-53f74447/
```
If you are asked for a password during the transfer, use the password that you set for your umbrelOS device when you created your account.
2\. Install the app on your umbrelOS device:
From your umbrelOS homescreen, go to the App Store and navigate to BTC RPC Explorer. Click on the "Install" button and wait for the app to install.
You can also install the app from the command line. umbrelOS provides a web terminal that can be accessed via Settings > Advanced Settings > Terminal > umbrelOS, or you can SSH into the device from your local machine via `ssh umbrel@umbrel.local` and use the same password you set for your umbrelOS device when you created your account.
3\. We can now install our app through the homescreen or via the terminal with:
```sh
umbreld client apps.install.mutate --appId btc-rpc-explorer
```
That's it! The app should now be accessible at http://umbrel.local:3002
The app should now be accessible at http://umbrel.local:3002
To uninstall the app, you can right-click on the app's icon on your homescreen and click on the "Uninstall" button. You can also uninstall the app from the command line with:
4\. To uninstall:
```sh
umbreld client apps.uninstall.mutate --appId btc-rpc-explorer
```
> [!WARNING]
> When testing your app, make sure to verify that any application state that needs to be persisted is in-fact being persisted in volumes.
>
> A good way to test this is to restart the app (right-click on the app's icon on your homescreen and click on the "Restart" button). If any state is lost, it means that state should be mapped to a persistent volume.
> A good way to test this is to restart the app with `umbreld client apps.restart.mutate --appId <app-id>`. If any state is lost, it means that state should be mapped to a persistent volume.
>
> When stopping/starting the app, all data in volumes will be persisted and anything else will be discarded. When uninstalling/installing an app, even persistent data will be discarded.
@ -422,7 +407,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 +446,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 +467,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.52@sha256:d16cc7517ab96f843e7f8bf8826402dba98f5e6b175858920296243332391589
# 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"]
@ -12,4 +12,4 @@ services:
- ${APP_DATA_DIR}/data/work:/opt/adguardhome/work
- ${APP_DATA_DIR}/data/conf:/opt/adguardhome/conf
cap_add:
- NET_ADMIN
- NET_ADMIN

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: adguard-home
category: networking
name: AdGuard Home
version: "0.107.73"
version: "0.107.52"
tagline: Network-wide software for blocking ads and tracking
description: >-
⚠️ See below for important set-up instructions.
@ -19,11 +19,7 @@ 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.
Security Fix:
- Authentication is now enforced for requests upgraded from HTTP/2 Cleartext (H2C) to public resources
In this release we have fixed a number of bugs, migrated our front-end to TypeScript and updated our front-end libraries to improve the quality of development and your user experience.
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,34 +6,19 @@ 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-06890d6@sha256:e80b83a14f11cdaf5388d156cf4bfb1933c39fa8e3f85d7b2874ac4cec72e625
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
- DATABASE_URL=postgres://affine:affine@db:5432/affine
- NODE_ENV=production
- AFFINE_ADMIN_EMAIL=admin@umbrel.local
- AFFINE_ADMIN_PASSWORD=$APP_PASSWORD
volumes:
- ${APP_DATA_DIR}/data/config:/root/.affine/config
- ${APP_DATA_DIR}/data/storage/blob:/root/.affine/storage
@ -68,4 +53,4 @@ services:
test: ['CMD-SHELL', 'pg_isready -U affine']
interval: 10s
timeout: 5s
retries: 5
retries: 5

View File

@ -3,28 +3,26 @@ id: affine
name: Affine
tagline: Open source alternative to Notion, Miro, and Airtable
category: files
version: "0.26.3"
version: "0.14.2"
port: 3013
description: >-
A privacy-focused, local-first, open-source, and ready-to-use alternative for Notion & Miro.
One hyper-fused platform for wildly creative minds.
To Shape, not to adapt. Tools can impact your lifestyle. AFFiNE is built for individual & teams who care their data, who refuse vendor lock-in, and who want to have control over their essential tools.
🛠️ SET-UP INSTRUCTIONS
In order to save your data, you need to sign in to your self-hosted Affine instance:
1. When you first open Affine, it will walk you through setting up an admin account.
1. In the Affine app select the "Sign up/ Sign in" to sync with your self-hosted instance.
2. After setting up your admin account, close the browser window and open up the Affine app again from the umbrelOS homescreen.
3. In the Affine app select the Demo Workspace from the sidebar and then select "Create cloud workspace"
2. Enter the email and password credentials that are provided when you installed the app. To find these again, right-click on the Affine app icon
on the umbrelOS homescreen and select "Show default credentials".
4. Follow the steps to create your self-hosted cloud workspace. You are now ready to use Affine with your self-hosted instance!
3. Follow the steps to create your self-hosted cloud workspace. You are now ready to use Affine with your self-hosted instance!
developer: toeverything
website: https://affine.pro
submitter: Jasper
@ -35,17 +33,8 @@ gallery:
- 1.jpg
- 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
Full release notes are found at https://github.com/toeverything/AFFiNE/releases
releaseNotes: ""
dependencies: []
path: ""
defaultUsername: ""
defaultUsername: "admin@umbrel.local"
deterministicPassword: true

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

View File

@ -1,22 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: albyhub_server_1
APP_PORT: 8080
server:
image: ghcr.io/getalby/hub:v1.21.6@sha256:dc05806a3384f57ded8aca2ba58d47ec93a0aeb213539b5faf32e7a3c71b5c32
user: 1000:1000
volumes:
- ${APP_DATA_DIR}/data:/data
- ${UMBREL_ROOT}/app-data/lightning/data/lnd:/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}
WORK_DIR: "/data/albyhub"
COOKIE_SECRET: ${APP_SEED}
LOG_EVENTS: "true"
restart: on-failure
stop_grace_period: 3m

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

@ -1,57 +0,0 @@
manifestVersion: 1
id: albyhub
name: Alby Hub ✨
tagline: Self-custodial Lightning wallet with integrated node and app connections
category: bitcoin
version: "1.21.6"
port: 59000
description: >-
Alby Hub is an open-source, self-custodial Bitcoin Lightning wallet, with the easiest-to-use Lightning Network node for everyone.
Whether you're an individual, creator, or developer, Alby Hub is your centre for seamless Bitcoin payments.
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
submission: https://github.com/getumbrel/umbrel-apps/pull/1409
repo: https://github.com/getAlby/hub
support: https://support.getalby.com
gallery:
- 1.jpg
- 2.jpg
- 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
Full release notes are found at https://github.com/getAlby/hub/releases
dependencies: []
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.11.0@sha256:725c287ac1b56f8115dfc7fca75d8490976af59466f893fbf344711bd117f8cb
user: 1000:1000
init: true
restart: on-failure
@ -24,4 +24,4 @@ services:
- ${APP_DATA_DIR}/data/config:/home/node/config
- ${APP_DATA_DIR}/data/metadata:/home/node/metadata
- ${UMBREL_ROOT}/data/storage/downloads/audiobooks:/audiobooks
- ${UMBREL_ROOT}/data/storage/downloads/podcasts:/podcasts
- ${UMBREL_ROOT}/data/storage/downloads/podcasts:/podcasts

View File

@ -3,7 +3,7 @@ id: audiobookshelf
name: Audiobookshelf
tagline: Audiobook and podcast server
category: media
version: "2.33.1"
version: "2.11.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,72 @@ 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
This release brings audiobookshelf from version 2.9.0 to 2.11.0.
Added
- Create book share links with expiration (admin users only)
- Email settings option to enable/disable rejecting unauthorized certificates
- Support for disabling SSRF request filter with env variable
- Support for custom backup path on backups config page or with env variable
- Epub ereader setting for font boldness
- Finnish translations
Fixed
- Casting podcast episodes
- Match all authors hitting rate limit
- Scheduled library scans using old copy of library
- Changing author name in edit author modal not updating metadata JSON files
- AB merge tool not working in Debian pkg due to ffmpeg v7
- Download file ssrfFilter URL
- Overdrive mediamarkers incorrect timestamp parsing
- Unhandled exception syncing user progress
- Server crash from library scanner race condition
- UI/UX: PDF reader flickering
- UI/UX: Audio player long author name overflowing
- UI/UX: Audio player long chapter name overflowing
Changed
- Replace Tone with Ffmpeg for embedding metadata
- Playback sessions are closed after 36 hours of inactivity
- User agent string for podcast RSS feed and file download requests
- Increased time delay between when watcher detects a file and when it scans the folder
- Prevent editing backup path if it is set using env variable
- UI/UX: Show publish date in changelog modal
- UI/UX: Chapters table "End" column changed to a "Duration" column
- UI/UX: Bookshelf refactor for consistent scaling
- UI/UX: Cleaner error page for 404s
- More strings translated
Full release notes can be found at https://github.com/advplyr/audiobookshelf/releases

View File

@ -8,9 +8,9 @@ services:
PROXY_AUTH_ADD: "false"
web:
image: ghcr.io/autobrr/autobrr:v1.76.0@sha256:f0f4d73fcd77700b1c98233562cd94a78b9bf685a7594a0aac4f8a9436b5044d
image: ghcr.io/autobrr/autobrr:v1.43.0@sha256:e26879a64c2251bd1ab42822b4a36f5acc8add8a4d4ec536f634d04745ae7455
restart: on-failure
stop_grace_period: 1m
user: "1000:1000"
volumes:
- ${APP_DATA_DIR}/data:/config
- ${APP_DATA_DIR}/data:/config

View File

@ -2,7 +2,7 @@ manifestVersion: 1
id: autobrr
category: media
name: autobrr
version: "1.76.0"
version: "1.43.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,22 @@ 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
New Features:
- Support for daily shows
- Added BitHUmen indexer
- Added FinElite indexer
- Added missing variables in macros
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
- Correct error message when providing wrong current password at credential change
- Custom client for RSS tests
Full release notes are available at https://autobrr.com/release-notes

View File

@ -1,13 +1,10 @@
manifestVersion: 1.2
manifestVersion: 1
id: back-that-mac-up
category: files
name: Back That Mac Up
version: "1.1.0"
tagline: Backup your Mac to your Umbrel using Time Machine
description: >
⚠️ Removal Notice: This app has been removed from the Umbrel App Store. It would really make sense for this to be integrated directly into umbrelOS... hmmmmmmm.
Introducing Back That Mac Up — an official app by Umbrel.
@ -55,4 +52,3 @@ widgets:
progress: 0.42
submitter: Umbrel
submission: https://github.com/getumbrel/umbrel-apps/pull/929
disabled: true

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1,15 +0,0 @@
version: '3.7'
services:
app_proxy:
environment:
APP_HOST: baikal_web_1
APP_PORT: 80
PROXY_AUTH_ADD: "false"
web:
image: ckulka/baikal:0.10.1@sha256:2385faeb7cc165d2b080c0ed8c84cc59e84d03107f814ad897ab62684c792f7b
# This container runs as user 33:33 and cannot be changed in compose (https://github.com/ckulka/baikal-docker/blob/master/examples/docker-compose.localvolumes.yaml)
restart: on-failure
volumes:
- ${APP_DATA_DIR}/data/config:/var/www/baikal/config
- ${APP_DATA_DIR}/data/Specific:/var/www/baikal/Specific

View File

@ -1,46 +0,0 @@
manifestVersion: 1
id: baikal
name: Baikal
tagline: A lightweight calendar and contacts server
category: networking
version: "0.10.1"
port: 8890
description: >-
🪆 Baikal Server is a lightweight CalDAV and CardDAV server designed for users who want to manage their calendar and contact information securely on their own server. This robust application offers an extensive web interface that simplifies the management of users, address books, and calendars, making it accessible for both beginners and experienced users.
One of the key features of Baikal is its ease of installation and configuration. It requires only a basic PHP-capable server, which means you don't need extensive technical knowledge to get started. The server supports both MySQL and SQLite databases for data storage, providing flexibility depending on your preferences and needs.
Baikal allows users to seamlessly access their contacts and calendars from any device. It is compatible with a wide range of applications, including iOS, macOS, DAVx5 on Android, Mozilla Thunderbird, and many other CalDAV and CardDAV capable applications. This compatibility ensures that you can sync your data across multiple platforms without any hassle.
In addition to its user-friendly features, Baikal emphasizes privacy and data security. By hosting your calendars and contacts yourself, you maintain full control over your personal information, protecting it from potential breaches and unauthorized access. This is particularly important in an era where data privacy is a growing concern.
Whether you are an individual looking for a reliable personal organizer or a small team needing a collaborative solution, Baikal Server provides a practical and efficient way to manage your scheduling and contact needs while ensuring your data remains private and secure. With its fast performance and straightforward interface, Baikal is an excellent choice for anyone seeking a self-hosted calendar and contact management solution.
developer: fruux GmbH
website: https://sabre.io/baikal/
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/1606
repo: https://github.com/sabre-io/Baikal
support: https://github.com/sabre-io/Baikal/issues
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
releaseNotes: >-
This release includes the following improvements:
- Fixed authentication issues when using reverse proxies
- Added PostgreSQL database support
- New environment variable configuration options
- Fixed database setup screen on install wizard
- Updated to sabre/dav 4.7.0
Full release notes can be found at https://github.com/sabre-io/Baikal/releases
dependencies: []
path: ""
defaultUsername: ""
defaultPassword: ""

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.4.3@sha256:5da74fc1bbd5da69e3b4f9b2376f6ccfbe3b47f143e6eb5651ed37cc1d4412dd
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.4.3"
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,24 +18,19 @@ 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
Full release notes are found at https://github.com/morpheus65535/bazarr/releases
This release updates Bazarr from 1.4.2 to 1.4.3. This update includes several fixes and improvements:
- Fixed issues with throttled providers and restart exceptions.
- Improved compatibility with case insensitive filesystems and fixed various provider-related errors.
- Reverted Apprise to version 1.7.6 to fix upgrade issues.
- Added support for additional languages and improved logging for subtitle scoring.
- Fixed issues with embedded subtitles and improved UI and error handling.
Full release notes are found at https://github.com/morpheus65535/bazarr/releases.
developer: morpheus65535
website: https://www.bazarr.media/
dependencies: []

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,53 @@ 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: retropexx/umbrel-bitcoin-knots:v0.5.3@sha256:c21fc893fb943c92fb078afb7622ab0741eccccf9073629a5bda713ed7a8f537
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}"
RPC_PORT: "${APP_BITCOIN_KNOTS_INTERNAL_RPC_PORT}"
BITCOIN_RPC_PORT: "${APP_BITCOIN_KNOTS_INTERNAL_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}"
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: retropexx/bitcoind:v27.1@sha256:4b405d9aca9d5b37a70cfa397f87df490a3f3452885d7bc80d1d1a6b110b06b5
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,116 @@ 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"
export APP_BITCOIN_KNOTS_INTERNAL_tor_PORT="8334"
# 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" )
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,32 +129,30 @@ if [[ "${APP_BITCOIN_KNOTS_NETWORK_ELECTRS}" = "mainnet" ]]; then
APP_BITCOIN_KNOTS_NETWORK_ELECTRS="bitcoin"
fi
for var in \
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_HIDDEN_SERVICE \
P2P_HIDDEN_SERVICE \
NETWORK_ELECTRS
do
bitcoin_var="APP_BITCOIN_${var}"
knots_var="APP_BITCOIN_KNOTS_${var}"
if [ -n "${!knots_var-}" ]; then
export "$bitcoin_var"="${!bitcoin_var:=${!knots_var}}"
else
echo "Warning: $knots_var is unset or empty"
fi
done
# We do not need this legacy bitcoin app logic because the Bitcoin Knots app was forked after advanced settings were introduced
# {
# # 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

@ -4,10 +4,10 @@ CookieAuthentication 1
CookieAuthFileGroupReadable 1
HashedControlPassword 16:39AF5EEFA4FC1D986022FDFB13663669FE50FB6DE9A3B4FE4FC7D82010 # moneyprintergobrrr
# Bitcoin Knots P2P Hidden Service
# Bitcoin Core P2P Hidden Service
HiddenServiceDir /data/app-$APP_ID-p2p
HiddenServicePort $APP_BITCOIN_KNOTS_P2P_PORT $APP_BITCOIN_KNOTS_NODE_IP:$APP_BITCOIN_KNOTS_TOR_PORT
HiddenServicePort $APP_BITCOIN_P2P_PORT $APP_BITCOIN_NODE_IP:$APP_BITCOIN_TOR_PORT
# Bitcoin Knots RPC Hidden Service
# Bitcoin Core 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_RPC_PORT $APP_BITCOIN_NODE_IP:$APP_BITCOIN_RPC_PORT

View File

@ -1,25 +1,16 @@
manifestVersion: 1.1
id: bitcoin-knots
implements:
- bitcoin
category: bitcoin
name: Bitcoin Knots
version: "1.2.10"
version: "27.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.
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.
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
⚠️ Bitcoin Knots does not yet automatically integrate with other apps in the Bitcoin ecosystem on Umbrel.
However, in a future umbrelOS update, users will be able to choose which Bitcoin node app they want to use to connect with other apps.
Powered by Bitcoin Knots: https://bitcoinknots.org/
@ -36,56 +27,9 @@ gallery:
path: ""
defaultPassword: ""
releaseNotes: >-
Internal changes
widgets:
- id: "stats"
type: "four-stats"
refresh: "5s"
endpoint: "app:3000/api/widget/stats"
link: ""
example:
type: "four-stats"
link: ""
items:
- title: "Connections"
text: "11"
subtext: "peers"
- title: "Mempool"
text: "257"
subtext: "MB"
- title: "Hashrate"
text: "590"
subtext: "EH/s"
- title: "Blockchain size"
text: "600"
subtext: "GB"
- id: "sync"
type: "text-with-progress"
refresh: "2s"
endpoint: "app:3000/api/widget/sync"
link: ""
example:
type: "text-with-progress"
link: ""
title: "Blockchain sync"
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
This release updates Bitcoin Knots to version 27.1
Full release notes for Bitcoin Knots can be found at https://github.com/bitcoinknots/bitcoin/releases/tag/v27.1.knots20240621
submitter: Léo Haf
submission: https://github.com/getumbrel/umbrel-apps/pull/953

View File

@ -3,59 +3,52 @@ 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.7.0@sha256:f2bb98c962fbad13991ceeda1308bbfaca13cc7cd5cb7d6b2e0d1d06e6123072
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: lncm/bitcoind:v27.0@sha256:324fec72192e8a1c7b79e7ab91003e47678b808d46da2c1943e72ec212ab348f
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 +67,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,155 @@
# 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";;
"testnet4")
APP_BITCOIN_NETWORK="testnet4";;
BITCOIN_NETWORK="testnet";;
"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}" == "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_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}" )
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" )
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: "27.0"
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,28 @@ gallery:
path: ""
defaultPassword: ""
releaseNotes: >-
This update fixes an issue that could cause the Bitcoin Node app to crash and restart unexpectedly.
This release of the Bitcoin Node app includes the following updates:
- Bitcoin Core: Upgrades Bitcoin Core to version 27.0. Full release notes for Bitcoin Core 27.0 can be found at https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-27.0.md.
- New Advanced Settings Options: Adds 3 new options to the Advanced Settings menu:
- datacarrier: Choose whether or not to relay transactions with OP_RETURN outputs.
- datacarriersize: Set the maximum size of the data in OP_RETURN outputs (in bytes) that your node will relay.
- permitbaremultisig: Choose wether or not to relay non-P2SH multisig transactions.
- JoinMarket Compatibility: The deprecated RPC 'deprecatedrpc=create_bdb' is enabled to allow integration with JoinMarket and the Jam app by default.
This fixes an issue where Jam app users who upgraded to Bitcoin Core v26.0 would have to manually add 'deprecatedrpc=create_bdb' to their bitcoin.conf file in order for the app to work.
⚠️ For existing Jam users, if you receive a connection error in Jam after updating to Bitcoin Core v27.0, please restart the Jam app from your homescreen by right-clicking on the app and selecting 'restart'.
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 +84,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 +93,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

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -1,50 +0,0 @@
version: '3.7'
services:
app_proxy:
environment:
APP_HOST: blinko_app_1
APP_PORT: 1111
PROXY_AUTH_ADD: "false"
db:
image: postgres:17.3@sha256:6e3358e46e34dae6c184f48fd06fe1b3dbf958ad5b83480031907e52b9ec2a7d
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "blinko", "-U", "blinkouser"]
timeout: 45s
interval: 10s
retries: 10
user: "1000:1000"
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data:rw
environment:
POSTGRES_DB: blinko
POSTGRES_USER: blinkouser
POSTGRES_PASSWORD: blinkopass
restart: on-failure
app:
image: blinkospace/blinko:1.8.7@sha256:f7c1167f8c86db586599d849539a732929d89adb10977046e7b427813b2a84b4
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1111"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
environment:
NODE_ENV: production
NEXTAUTH_URL: http://${DEVICE_DOMAIN_NAME}:1111
NEXT_PUBLIC_BASE_URL: http://${DEVICE_DOMAIN_NAME}:1111
NEXTAUTH_SECRET: ${APP_SEED}
DATABASE_URL: postgresql://blinkouser:blinkopass@blinko_db_1:5432/blinko
user: "1000:1000"
volumes:
- ${APP_DATA_DIR}/data/app:/app/.blinko:rw
logging:
options:
max-size: "10m"
max-file: "3"
depends_on:
db:
condition: service_healthy
restart: on-failure

View File

@ -1,48 +0,0 @@
manifestVersion: 1
id: blinko
name: Blinko
tagline: An AI-powered hub for your ideas and notes
category: files
version: "1.8.7"
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.
With the integration of AI models like OpenAI or Ollama, content can be intelligently searched and organized.
If you want to use the Ollama instance of your Umbrel, enter the following URL in the settings to connect to it: **http://ollama_ollama_1:11434**
The application provides a flexible way to manage notes, which can remain private or be shared publicly. Regular automatic backups and seamless data import and export ensure that users always retain control over their content. Since Blinko is self-hosted, users maintain full data sovereignty and can rely on a secure environment without commercial restrictions.
Built on Next.js, Blinko is optimized for speed and efficiency, offering a responsive and modern user experience. As an open-source project, it encourages collaboration and is available for free without hidden fees. It is designed for anyone looking for a powerful and customizable solution for digital organization.
developer: Blinko
website: https://blinko-demo.vercel.app/
submitter: dennysubke
submission: https://github.com/getumbrel/umbrel-apps/pull/2183
repo: https://github.com/blinko-space/blinko
support: https://github.com/blinko-space/blinko/issues
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
- 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
Full release notes are available at https://github.com/blinko-space/blinko/releases
dependencies: []
path: ""
defaultUsername: ""
defaultPassword: ""

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:
@ -32,4 +32,4 @@ services:
BTCEXP_NO_RATES: "true"
# Disable RPC
BTCEXP_RPC_ALLOWALL: "false"
BTCEXP_BASIC_AUTH_PASSWORD: ${APP_PASSWORD}
BTCEXP_BASIC_AUTH_PASSWORD: ""

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"
tagline: Simple, database-free blockchain explorer
description: >-
BTC RPC Explorer is a full-featured, self-hosted explorer for the
@ -16,13 +16,20 @@ 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 several changes to BTC RPC Explorer, including:
This release includes some small fixes, as well as a new addition to the Bitcoin Fun page.
- Several new API actions/changes (some breaking)
- Homepage additions such as a "Next Halving" widget.
- New curated list of Bitcoin "Holidays"
- Refreshed "Dark" theme with blues toned down (legacy dark theme still available)
- and more!
Full release notes for BTC RPC Explorer versions are available at https://github.com/janoside/btc-rpc-explorer/releases
Full release notes are available at https://github.com/janoside/btc-rpc-explorer/releases/tag/v3.4.0
developer: Dan Janosik
website: https://bitcoinexplorer.org/
dependencies:
@ -36,7 +43,7 @@ gallery:
- 2.jpg
- 3.jpg
path: ""
defaultUsername: "umbrel"
deterministicPassword: true
defaultUsername: ""
defaultPassword: ""
submitter: Umbrel
submission: https://github.com/getumbrel/umbrel/pull/334

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.2@sha256:a85a697d1cb35fd3736ed3bd4690076141beb32a965569b003b209e0b6fd4631
user: "1000:1000"
restart: on-failure
stop_grace_period: 1m
@ -22,14 +22,16 @@ 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_AUTOMIGRATE: 1
NBXPLORER_NOMIGRATEEVTS: 1
NBXPLORER_BTCHASTXINDEX: 1
web:
image: btcpayserver/btcpayserver:2.3.6@sha256:0ff445daffc6d3d6bb8a59cf37f0f6c0d958eafb9b62147f65de7d66d5132392
image: btcpayserver/btcpayserver:1.13.1@sha256:ee432e652e129d82a76e4de8ff28e90eb5476d01fcb008e3678991c52f5084e9
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: "1.13.1"
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,22 @@ path: ""
defaultUsername: ""
defaultPassword: ""
releaseNotes: >-
This release comes with new features, bug fixes, improvements, and reverts a regression.
This update brings BTCPay Server to version 1.13.1, and includes various new features, bug fixes, and improvements.
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
Highlights:
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
- It is now possible to customize your instance name and add a contact URL in Server Settings
- There is a new Admin overview of the stores on the instance
- Onboarding: Invite new users (#5714 #5719 #5874) @dennisreimann @dstrukt
- A new option to add item list to keypad
- Support for Better Bitcoin QRs (BBQr)
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

@ -1,17 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: budibase_budibase_1
APP_PORT: 80
PROXY_AUTH_ADD: "false"
budibase:
image: budibase/budibase:3.34.11@sha256:5f13b4c0939c5905cfeb8770bf982f71c7914f36b414c85a90a5986d251bd902
restart: on-failure
stop_grace_period: 1m
volumes:
- ${APP_DATA_DIR}/data/budibase:/data
environment:
JWT_SECRET: ${APP_SEED}

View File

@ -1,48 +0,0 @@
manifestVersion: 1
id: budibase
name: Budibase
tagline: The low code platform you'll enjoy using
category: developer
version: "3.34.11"
port: 6733
description: >-
Budibase is an open-source low-code platform that saves engineers 100s of hours building forms, portals, and approval apps, securely.
🔨 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.
🗄️ Load data or start from scratch
Budibase pulls data from multiple sources, including MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB, or a REST API. And unlike other platforms, with Budibase you can start from scratch and create business apps with no data sources.
🎨 Design and build apps with powerful pre-made components
Budibase comes out of the box with beautifully designed, powerful components which you can use like building blocks to build your UI. We also expose many of your favourite CSS styling options so you can go that extra creative mile.
⚙️ Automate processes, integrate with other tools and connect to webhooks
Save time by automating manual processes and workflows. From connecting to webhooks to automating emails, simply tell Budibase what to do and let it work for you.
developer: Budibase
website: https://budibase.com
submitter: Sharknoon
submission: https://github.com/getumbrel/umbrel-apps/pull/1178
repo: https://github.com/Budibase/budibase
support: https://github.com/Budibase/budibase/discussions
gallery:
- 1.jpg
- 2.jpg
- 3.jpg
releaseNotes: >-
Key improvements in this release include:
- Fixed context passing to formatter
- Implemented EventBrokerProcessor HTTP request to Account Portal
Full release notes are found at https://github.com/Budibase/budibase/releases
dependencies: []
path: ""

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.21@sha256:e7470c127d86178c2de121b1382cff697f233195b58e31a423ef0a235048cf63
stop_grace_period: 1m
environment:
- PUID=1000

View File

@ -2,18 +2,21 @@ manifestVersion: 1
id: calibre-web
category: files
name: Calibre Web
version: "0.6.26"
version: "0.6.21"
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.
Calibre-web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database.
It is also possible to integrate google drive and edit metadata and your calibre library through the app itself.
It's the webbapp version of the well known Calibre for desktop.
🛠️ SET-UP INSTRUCTIONS
- Library Setup: On the initial setup screen, enter /books as your calibre library location.
- Uploading eBooks: If you wish to enable the upload feature, navigate to Admin > Edit Basic Configuration > Feature Configuration and toggle "Enable Upload".
- Documentation: It is recommended to read through the official documentation available at https://github.com/janeczku/calibre-web/wiki
On the initial setup screen, enter /books as your calibre library location.
If you wish to enable the upload feature, please go to "Settings > Edit Basic Configuration > Feature Configuration > Enable Upload".
It's recommended to read through the official documentation, which is available at https://github.com/janeczku/calibre-web/wiki
developer: Janeczku
website: https://github.com/janeczku/calibre-web
dependencies: []
@ -29,20 +32,25 @@ defaultUsername: "admin"
defaultPassword: "admin123"
torOnly: false
releaseNotes: >-
This update includes several new features and improvements:
This release contains various bug fixes, as well as the following new features:
- cb7 files are now supported for metadata extrcation of comicfiles (but not for comicreader)
- Updated lubimyczytac metadata provider
- Cover size is adapted to requested size from kobo
- Added option "-o" to define logfile via command line
- Added "/opds/stats" route to generate a widget
- Reading position can be saved in comic reader
- Several dependencies are upgraded to newer versions
- Additional translations: portuguese
- 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
Full release notes can be found here: https://github.com/janeczku/calibre-web/releases
Full release notes can be found here: https://github.com/janeczku/calibre-web/releases/tag/0.6.21
submitter: Xosten
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

View File

@ -1,16 +0,0 @@
version: "3.7"
services:
app_proxy:
environment:
APP_HOST: chromium_chromium_1
APP_PORT: 3000
chromium:
image: ghcr.io/linuxserver/chromium:version-8d3cb5f1@sha256:d7c5f7faf5fe524117fd73c4d446e1bf81bccd0d64d073a30b8c9819fdf105d6
environment:
- PUID=1000
- PGID=1000
volumes:
- ${APP_DATA_DIR}/data:/config
shm_size: "1gb"
restart: on-failure

View File

@ -1,33 +0,0 @@
manifestVersion: 1.2
id: chromium
name: Chromium
tagline: The open-source browser project
category: networking
version: "8d3cb5f1"
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/
submitter: maddog11010
submission: https://github.com/getumbrel/umbrel-apps/pull/1888
repo: https://github.com/linuxserver/docker-chromium
support: https://discourse.linuxserver.io/
dependencies: []
path: ""
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

@ -7,7 +7,7 @@ services:
APP_PORT: 3000
web:
image: ghcr.io/radiokot/umbrel-cloudflared:1.0.2@sha256:9660fb4e90317036d2b418f1c9437cc2cdb7f7bdd8d820084237a0c37bb94f5b
image: ghcr.io/radiokot/umbrel-cloudflared:1.0.1-cf.2023.10.0@sha256:77a0fe80bd9c8c1fa83290bbffbb1d478a047c4103ecd2aa5826bd9f19f84f18
hostname: cloudflared-web
restart: on-failure
stop_grace_period: 1s
@ -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.2023.10.0@sha256:4e8daf3826c1717cce0b37dda927f0a255ca87d6bb75e4d97e5412643a531abe
hostname: cloudflared-connector
restart: on-failure
stop_grace_period: 3s
stop_grace_period: 5s
volumes:
- ${APP_DATA_DIR}/data:/data
environment:

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