feat(apps): complete the manifest platform — convert the last five stragglers
Demo images / Build & push demo images (push) Failing after 36s
Demo images / Build & push demo images (push) Failing after 36s
Nginx Proxy Manager, Tailscale, Ollama, CryptPad, and AdGuard Home now carry full manifests: the app gate fronts their web ports (TLS on the same port, node login where appropriate), installs run through the orchestrator, and pins live in the signed catalog. Tailscale mirrors its legacy shape exactly (userspace networking, web console on 8240, plain HTTP for the gate to front). Ollama stays loopback-only — the assistant's local model backend, not a web app. Retires the four already-removed apps for good (FIPS, Nostr VPN, Routstr, Penpot pins dropped from image-versions.sh, the generator map, and image_versions.rs), fixes Cuprate's duplicated metadata block that strict YAML parsers reject, and updates the port-inventory review gates for the new open (3 own-login consoles) and exempt (2 DNS) ports.
This commit is contained in:
+402
-354
@@ -11,16 +11,47 @@
|
|||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"id": "bitcoin-knots",
|
"id": "adguardhome",
|
||||||
"title": "Bitcoin Knots",
|
"title": "AdGuard Home",
|
||||||
"version": "28.1.0",
|
"version": "v0.107.55",
|
||||||
"description": "Full Bitcoin Knots node with dynamic prune/full-mode startup based on host disk.",
|
"description": "Network-wide ad and tracker blocking: a DNS server that filters every device on your LAN, with a web console for rules and client management.",
|
||||||
"icon": "/assets/img/app-icons/bitcoin-knots.webp",
|
"icon": "",
|
||||||
"author": "Bitcoin Knots",
|
"author": "AdGuard",
|
||||||
|
"category": "networking",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/adguardhome:v0.107.55",
|
||||||
|
"repoUrl": "https://github.com/AdguardTeam/AdGuardHome"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "alby-hub",
|
||||||
|
"title": "Alby Hub",
|
||||||
|
"version": "1.23.0",
|
||||||
|
"description": "Self-custodial Lightning wallet hub. Runs its own Lightning node on your Archipelago and connects your apps to it over Nostr Wallet Connect \u2014 one hub, every app pays through it.",
|
||||||
|
"icon": "/assets/img/app-icons/alby-hub.svg",
|
||||||
|
"author": "Alby",
|
||||||
"category": "money",
|
"category": "money",
|
||||||
"tier": "core",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/bitcoin-knots:29.3.knots20260210",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/alby-hub:v1.24.0",
|
||||||
"repoUrl": "https://github.com/bitcoinknots/bitcoin"
|
"repoUrl": "https://github.com/getAlby/hub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "barkd",
|
||||||
|
"title": "Ark Wallet",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"description": "Ark protocol wallet daemon (barkd). Lets the node hold self-custodial off-chain bitcoin via an Ark server; the wallet talks to it over a local REST API. Signet by default while Ark matures.",
|
||||||
|
"icon": "/assets/img/app-icons/bark.png",
|
||||||
|
"author": "Second",
|
||||||
|
"category": "money",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/barkd:0.3.0",
|
||||||
|
"repoUrl": "https://gitlab.com/ark-bitcoin/bark",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"3535:3535"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/barkd:/data"
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "bitcoin-core",
|
"id": "bitcoin-core",
|
||||||
@@ -35,76 +66,16 @@
|
|||||||
"repoUrl": "https://github.com/bitcoin/bitcoin"
|
"repoUrl": "https://github.com/bitcoin/bitcoin"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "lnd",
|
"id": "bitcoin-knots",
|
||||||
"title": "LND",
|
"title": "Bitcoin Knots",
|
||||||
"version": "0.18.4",
|
"version": "28.1.0",
|
||||||
"description": "Lightning Network implementation by Lightning Labs. Enables instant, low-cost Bitcoin payments.",
|
"description": "Full Bitcoin Knots node with dynamic prune/full-mode startup based on host disk.",
|
||||||
"icon": "/assets/img/app-icons/lnd.png",
|
"icon": "/assets/img/app-icons/bitcoin-knots.webp",
|
||||||
"author": "Lightning Labs",
|
"author": "Bitcoin Knots",
|
||||||
"category": "money",
|
"category": "money",
|
||||||
"tier": "core",
|
"tier": "core",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/lnd:v0.18.4-beta",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/bitcoin-knots:29.3.knots20260210",
|
||||||
"repoUrl": "https://github.com/lightningnetwork/lnd",
|
"repoUrl": "https://github.com/bitcoinknots/bitcoin"
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "btcpay-server",
|
|
||||||
"title": "BTCPay Server",
|
|
||||||
"version": "2.4.3",
|
|
||||||
"description": "Self-hosted Bitcoin payment processor. Accept Bitcoin payments without intermediaries.",
|
|
||||||
"icon": "/assets/img/app-icons/btcpay-server.png",
|
|
||||||
"author": "BTCPay Server Foundation",
|
|
||||||
"category": "commerce",
|
|
||||||
"tier": "core",
|
|
||||||
"dockerImage": "docker.io/btcpayserver/btcpayserver:2.4.3",
|
|
||||||
"repoUrl": "https://github.com/btcpayserver/btcpayserver",
|
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "mempool",
|
|
||||||
"title": "Mempool Explorer",
|
|
||||||
"version": "3.0.0",
|
|
||||||
"description": "Bitcoin mempool and blockchain explorer. Real-time transaction and block visualization.",
|
|
||||||
"icon": "/assets/img/app-icons/mempool.webp",
|
|
||||||
"author": "Mempool",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "core",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/mempool-frontend:v3.3.1",
|
|
||||||
"repoUrl": "https://github.com/mempool/mempool",
|
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots",
|
|
||||||
"electrumx"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "electrumx",
|
|
||||||
"title": "ElectrumX",
|
|
||||||
"version": "1.18.0",
|
|
||||||
"description": "Electrum server indexing Bitcoin chain data for lightweight wallet queries.",
|
|
||||||
"icon": "/assets/img/app-icons/electrumx.png",
|
|
||||||
"author": "Luke Childs",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "core",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/electrumx:v1.18.0",
|
|
||||||
"repoUrl": "https://github.com/spesmilo/electrumx",
|
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "indeedhub",
|
|
||||||
"title": "IndeeHub",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Bitcoin documentary streaming platform featuring God Bless Bitcoin and other educational content about Bitcoin, sovereignty, and decentralized technology. Sign in with your Nostr identity.",
|
|
||||||
"icon": "/assets/img/app-icons/indeedhub.png",
|
|
||||||
"author": "IndeeHub",
|
|
||||||
"category": "community",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/indeedhub:1.0.0",
|
|
||||||
"repoUrl": "https://github.com/indeedhub/indeedhub"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "botfights",
|
"id": "botfights",
|
||||||
@@ -132,127 +103,58 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "gitea",
|
"id": "btcpay-server",
|
||||||
"title": "Gitea",
|
"title": "BTCPay Server",
|
||||||
"version": "1.23",
|
"version": "2.4.3",
|
||||||
"description": "Self-hosted Git service with built-in container registry, CI/CD, and package hosting.",
|
"description": "Self-hosted Bitcoin payment processor. Accept Bitcoin payments without intermediaries.",
|
||||||
"icon": "/assets/img/app-icons/gitea.svg",
|
"icon": "/assets/img/app-icons/btcpay-server.png",
|
||||||
"author": "Gitea",
|
"author": "BTCPay Server Foundation",
|
||||||
"category": "development",
|
"category": "commerce",
|
||||||
"dockerImage": "docker.io/gitea/gitea:1.23",
|
|
||||||
"repoUrl": "https://gitea.com",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"3001:3000",
|
|
||||||
"2222:22"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/gitea/data:/data",
|
|
||||||
"/var/lib/archipelago/gitea/config:/etc/gitea"
|
|
||||||
],
|
|
||||||
"env": [
|
|
||||||
"GITEA__database__DB_TYPE=sqlite3",
|
|
||||||
"GITEA__server__SSH_PORT=2222",
|
|
||||||
"GITEA__server__SSH_LISTEN_PORT=22",
|
|
||||||
"GITEA__server__LFS_START_SERVER=true",
|
|
||||||
"GITEA__packages__ENABLED=true",
|
|
||||||
"GITEA__repository__ENABLE_PUSH_CREATE_USER=true",
|
|
||||||
"GITEA__repository__ENABLE_PUSH_CREATE_ORG=true",
|
|
||||||
"GITEA__security__X_FRAME_OPTIONS="
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"tier": "optional"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "filebrowser",
|
|
||||||
"title": "File Browser",
|
|
||||||
"version": "2.27.0",
|
|
||||||
"description": "Baseline Archipelago file manager service.",
|
|
||||||
"icon": "/assets/img/app-icons/file-browser.webp",
|
|
||||||
"author": "File Browser",
|
|
||||||
"category": "data",
|
|
||||||
"tier": "core",
|
"tier": "core",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/filebrowser:v2.27.0",
|
"dockerImage": "docker.io/btcpayserver/btcpayserver:2.4.3",
|
||||||
"repoUrl": "https://github.com/filebrowser/filebrowser",
|
"repoUrl": "https://github.com/btcpayserver/btcpayserver",
|
||||||
"containerConfig": {
|
"requires": [
|
||||||
"ports": [
|
"bitcoin-knots"
|
||||||
"8083:80"
|
]
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/filebrowser:/srv",
|
|
||||||
"/var/lib/archipelago/filebrowser-data:/data"
|
|
||||||
],
|
|
||||||
"args": [
|
|
||||||
"--database=/data/database.db",
|
|
||||||
"--root=/srv",
|
|
||||||
"--address=0.0.0.0",
|
|
||||||
"--port=80"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "nostr-rs-relay",
|
"id": "cryptpad",
|
||||||
"title": "Nostr Relay (Rust)",
|
"title": "CryptPad",
|
||||||
"version": "0.10.0",
|
"version": "2024.12.0",
|
||||||
"description": "High-performance Nostr relay written in Rust. Host your own decentralized social media relay and earn networking profits.",
|
"description": "End-to-end encrypted documents, spreadsheets, and presentations. Zero-knowledge collaboration.",
|
||||||
"icon": "/assets/img/app-icons/nostrudel.svg",
|
"icon": "/assets/icon/favico-black-v2.svg",
|
||||||
"author": "Nostr RS Relay",
|
"author": "XWiki SAS",
|
||||||
"category": "community",
|
|
||||||
"tier": "recommended",
|
|
||||||
"dockerImage": "scsibug/nostr-rs-relay:0.10.0",
|
|
||||||
"repoUrl": "https://github.com/scsibug/nostr-rs-relay",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8081:8080"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/nostr-relay:/usr/src/app/db"
|
|
||||||
],
|
|
||||||
"env": [
|
|
||||||
"RELAY_NAME=Archipelago Nostr Relay",
|
|
||||||
"RELAY_DESCRIPTION=Self-hosted Nostr relay on Archipelago"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "vaultwarden",
|
|
||||||
"title": "Vaultwarden",
|
|
||||||
"version": "1.30.0",
|
|
||||||
"description": "Self-hosted password vault with zero-knowledge encryption.",
|
|
||||||
"icon": "/assets/img/app-icons/vaultwarden.webp",
|
|
||||||
"author": "Vaultwarden",
|
|
||||||
"category": "data",
|
"category": "data",
|
||||||
"tier": "recommended",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/vaultwarden:1.37.1-alpine",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/cryptpad:2024.12.0",
|
||||||
"repoUrl": "https://github.com/dani-garcia/vaultwarden",
|
"repoUrl": "https://github.com/cryptpad/cryptpad"
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8082:80"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/vaultwarden:/data"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "searxng",
|
"id": "cuprate",
|
||||||
"title": "SearXNG",
|
"title": "Cuprate",
|
||||||
"version": "1.0.0",
|
"version": "0.1.0-preview",
|
||||||
"description": "Privacy-respecting metasearch engine. Search the web without tracking.",
|
"description": "Alternative Monero node implementation in Rust. Independently validates Monero consensus rules, providing a layer of security and redundancy for the network.",
|
||||||
"icon": "/assets/img/app-icons/searxng.png",
|
"icon": "/assets/img/app-icons/cuprate.svg",
|
||||||
"author": "SearXNG",
|
"author": "Cuprate contributors",
|
||||||
"category": "data",
|
"category": "money",
|
||||||
"tier": "recommended",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/searxng:latest",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/cuprate:0.1.0-preview-18-g618ff14",
|
||||||
"repoUrl": "https://github.com/searxng/searxng",
|
"repoUrl": "https://github.com/Cuprate/cuprate"
|
||||||
"containerConfig": {
|
},
|
||||||
"ports": [
|
{
|
||||||
"8888:8080"
|
"id": "electrumx",
|
||||||
],
|
"title": "ElectrumX",
|
||||||
"volumes": [
|
"version": "1.18.0",
|
||||||
"/var/lib/archipelago/searxng:/etc/searxng"
|
"description": "Electrum server indexing Bitcoin chain data for lightweight wallet queries.",
|
||||||
]
|
"icon": "/assets/img/app-icons/electrumx.png",
|
||||||
}
|
"author": "Luke Childs",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "core",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/electrumx:v1.18.0",
|
||||||
|
"repoUrl": "https://github.com/spesmilo/electrumx",
|
||||||
|
"requires": [
|
||||||
|
"bitcoin-knots"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "fedimint",
|
"id": "fedimint",
|
||||||
@@ -299,54 +201,87 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "barkd",
|
"id": "filebrowser",
|
||||||
"title": "Ark Wallet",
|
"title": "File Browser",
|
||||||
"version": "0.3.0",
|
"version": "2.27.0",
|
||||||
"description": "Ark protocol wallet daemon (barkd). Lets the node hold self-custodial off-chain bitcoin via an Ark server; the wallet talks to it over a local REST API. Signet by default while Ark matures.",
|
"description": "Baseline Archipelago file manager service.",
|
||||||
"icon": "/assets/img/app-icons/bark.png",
|
"icon": "/assets/img/app-icons/file-browser.webp",
|
||||||
"author": "Second",
|
"author": "File Browser",
|
||||||
"category": "money",
|
"category": "data",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/barkd:0.3.0",
|
"tier": "core",
|
||||||
"repoUrl": "https://gitlab.com/ark-bitcoin/bark",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/filebrowser:v2.27.0",
|
||||||
|
"repoUrl": "https://github.com/filebrowser/filebrowser",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"3535:3535"
|
"8083:80"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/barkd:/data"
|
"/var/lib/archipelago/filebrowser:/srv",
|
||||||
|
"/var/lib/archipelago/filebrowser-data:/data"
|
||||||
|
],
|
||||||
|
"args": [
|
||||||
|
"--database=/data/database.db",
|
||||||
|
"--root=/srv",
|
||||||
|
"--address=0.0.0.0",
|
||||||
|
"--port=80"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "jellyfin",
|
"id": "gitea",
|
||||||
"title": "Jellyfin",
|
"title": "Gitea",
|
||||||
"version": "10.8.13",
|
"version": "1.23",
|
||||||
"description": "Free media server. Stream movies, music, and photos.",
|
"description": "Self-hosted Git service with built-in container registry, CI/CD, and package hosting.",
|
||||||
"icon": "/assets/img/app-icons/jellyfin.webp",
|
"icon": "/assets/img/app-icons/gitea.svg",
|
||||||
"author": "Jellyfin",
|
"author": "Gitea",
|
||||||
"category": "data",
|
"category": "development",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/jellyfin:10.11.11",
|
"dockerImage": "docker.io/gitea/gitea:1.23",
|
||||||
"repoUrl": "https://github.com/jellyfin/jellyfin",
|
"repoUrl": "https://gitea.com",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"8096:8096"
|
"3001:3000",
|
||||||
|
"2222:22"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/jellyfin/config:/config",
|
"/var/lib/archipelago/gitea/data:/data",
|
||||||
"/var/lib/archipelago/jellyfin/cache:/cache"
|
"/var/lib/archipelago/gitea/config:/etc/gitea"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"GITEA__database__DB_TYPE=sqlite3",
|
||||||
|
"GITEA__server__SSH_PORT=2222",
|
||||||
|
"GITEA__server__SSH_LISTEN_PORT=22",
|
||||||
|
"GITEA__server__LFS_START_SERVER=true",
|
||||||
|
"GITEA__packages__ENABLED=true",
|
||||||
|
"GITEA__repository__ENABLE_PUSH_CREATE_USER=true",
|
||||||
|
"GITEA__repository__ENABLE_PUSH_CREATE_ORG=true",
|
||||||
|
"GITEA__security__X_FRAME_OPTIONS="
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"tier": "optional"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "immich",
|
"id": "grafana",
|
||||||
"title": "Immich",
|
"title": "Grafana",
|
||||||
"version": "2.7.4",
|
"version": "10.2.0",
|
||||||
"description": "Self-hosted photo and video backup with mobile apps and search.",
|
"description": "Analytics and monitoring platform. Visualize metrics and create dashboards.",
|
||||||
"icon": "/assets/img/app-icons/immich.png",
|
"icon": "/assets/img/app-icons/grafana.png",
|
||||||
"author": "Immich",
|
"author": "Grafana Labs",
|
||||||
"category": "data",
|
"category": "data",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/immich-server:release",
|
"tier": "recommended",
|
||||||
"repoUrl": "https://github.com/immich-app/immich"
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/grafana:10.2.0",
|
||||||
|
"repoUrl": "https://github.com/grafana/grafana",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"3000:3000"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/grafana:/var/lib/grafana"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"GF_PATHS_DATA=/var/lib/grafana",
|
||||||
|
"GF_USERS_ALLOW_SIGN_UP=false"
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "homeassistant",
|
"id": "homeassistant",
|
||||||
@@ -370,11 +305,209 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "immich",
|
||||||
|
"title": "Immich",
|
||||||
|
"version": "2.7.4",
|
||||||
|
"description": "Self-hosted photo and video backup with mobile apps and search.",
|
||||||
|
"icon": "/assets/img/app-icons/immich.png",
|
||||||
|
"author": "Immich",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/immich-server:release",
|
||||||
|
"repoUrl": "https://github.com/immich-app/immich"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "indeedhub",
|
||||||
|
"title": "IndeeHub",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Bitcoin documentary streaming platform featuring God Bless Bitcoin and other educational content about Bitcoin, sovereignty, and decentralized technology. Sign in with your Nostr identity.",
|
||||||
|
"icon": "/assets/img/app-icons/indeedhub.png",
|
||||||
|
"author": "IndeeHub",
|
||||||
|
"category": "community",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/indeedhub:1.0.0",
|
||||||
|
"repoUrl": "https://github.com/indeedhub/indeedhub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "jellyfin",
|
||||||
|
"title": "Jellyfin",
|
||||||
|
"version": "10.8.13",
|
||||||
|
"description": "Free media server. Stream movies, music, and photos.",
|
||||||
|
"icon": "/assets/img/app-icons/jellyfin.webp",
|
||||||
|
"author": "Jellyfin",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/jellyfin:10.11.11",
|
||||||
|
"repoUrl": "https://github.com/jellyfin/jellyfin",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8096:8096"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/jellyfin/config:/config",
|
||||||
|
"/var/lib/archipelago/jellyfin/cache:/cache"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "lnd",
|
||||||
|
"title": "LND",
|
||||||
|
"version": "0.18.4",
|
||||||
|
"description": "Lightning Network implementation by Lightning Labs. Enables instant, low-cost Bitcoin payments.",
|
||||||
|
"icon": "/assets/img/app-icons/lnd.png",
|
||||||
|
"author": "Lightning Labs",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "core",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/lnd:v0.18.4-beta",
|
||||||
|
"repoUrl": "https://github.com/lightningnetwork/lnd",
|
||||||
|
"requires": [
|
||||||
|
"bitcoin-knots"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "mempool",
|
||||||
|
"title": "Mempool Explorer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"description": "Bitcoin mempool and blockchain explorer. Real-time transaction and block visualization.",
|
||||||
|
"icon": "/assets/img/app-icons/mempool.webp",
|
||||||
|
"author": "Mempool",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "core",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/mempool-frontend:v3.3.1",
|
||||||
|
"repoUrl": "https://github.com/mempool/mempool",
|
||||||
|
"requires": [
|
||||||
|
"bitcoin-knots",
|
||||||
|
"electrumx"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "netbird",
|
||||||
|
"title": "NetBird",
|
||||||
|
"version": "2.38.0",
|
||||||
|
"description": "Self-hosted WireGuard mesh VPN control plane with dashboard, embedded identity provider, management API, signal, relay, and STUN. The user-facing entry point \u2014 a TLS proxy in front of the dashboard + server.",
|
||||||
|
"icon": "/assets/img/app-icons/netbird.svg",
|
||||||
|
"author": "NetBird",
|
||||||
|
"category": "networking",
|
||||||
|
"tier": "recommended",
|
||||||
|
"dockerImage": "docker.io/library/nginx:1.31.4-alpine",
|
||||||
|
"repoUrl": "https://github.com/netbirdio/netbird",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8087:80",
|
||||||
|
"8086:80",
|
||||||
|
"3478:3478/udp"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/netbird:/var/lib/netbird"
|
||||||
|
],
|
||||||
|
"notes": "Installed as a two-container stack: netbird dashboard on 8087 and netbird-server control plane on 8086 plus UDP 3478. For production clients, publish a DNS name over HTTPS with gRPC/WebSocket routing."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nextcloud",
|
||||||
|
"title": "Nextcloud",
|
||||||
|
"version": "29",
|
||||||
|
"description": "Your own private cloud. File sync, calendars, contacts.",
|
||||||
|
"icon": "/assets/img/app-icons/nextcloud.webp",
|
||||||
|
"author": "Nextcloud",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/nextcloud:29",
|
||||||
|
"repoUrl": "https://github.com/nextcloud/server",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8085:80"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/nextcloud:/var/www/html"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nginx-proxy-manager",
|
||||||
|
"title": "Nginx Proxy Manager",
|
||||||
|
"version": "2.12.1",
|
||||||
|
"description": "Reverse proxy with SSL. Beautiful web interface for managing proxies. On a node, this manages its admin UI and upstream configuration \u2014 the proxy's own :80/:443 listeners are not published (the node's web server owns those ports).",
|
||||||
|
"icon": "/assets/img/app-icons/nginx.svg",
|
||||||
|
"author": "Nginx Proxy Manager",
|
||||||
|
"category": "networking",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/nginx-proxy-manager:latest",
|
||||||
|
"repoUrl": "https://github.com/NginxProxyManager/nginx-proxy-manager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nostr-rs-relay",
|
||||||
|
"title": "Nostr Relay (Rust)",
|
||||||
|
"version": "0.10.0",
|
||||||
|
"description": "High-performance Nostr relay written in Rust. Host your own decentralized social media relay and earn networking profits.",
|
||||||
|
"icon": "/assets/img/app-icons/nostrudel.svg",
|
||||||
|
"author": "Nostr RS Relay",
|
||||||
|
"category": "community",
|
||||||
|
"tier": "recommended",
|
||||||
|
"dockerImage": "scsibug/nostr-rs-relay:0.10.0",
|
||||||
|
"repoUrl": "https://github.com/scsibug/nostr-rs-relay",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8081:8080"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/nostr-relay:/usr/src/app/db"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"RELAY_NAME=Archipelago Nostr Relay",
|
||||||
|
"RELAY_DESCRIPTION=Self-hosted Nostr relay on Archipelago"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ollama",
|
||||||
|
"title": "Ollama",
|
||||||
|
"version": "0.5.4",
|
||||||
|
"description": "Run large language models locally. Download and run AI models like Llama, Mistral on your own hardware \u2014 served on the node's loopback for the AI assistant (Settings \u2192 Claude Auth \u2192 model backend), never exposed to the network.",
|
||||||
|
"icon": "/assets/img/app-icons/ollama.png",
|
||||||
|
"author": "Ollama",
|
||||||
|
"category": "community",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/ollama:latest",
|
||||||
|
"repoUrl": "https://github.com/ollama/ollama"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "phoenixd",
|
||||||
|
"title": "phoenixd",
|
||||||
|
"version": "0.9.0",
|
||||||
|
"description": "Headless Lightning daemon by ACINQ (the Phoenix wallet team). No screen of its own \u2014 it exposes a small local API that other apps and tools use to send and receive Lightning payments. Channel liquidity is managed automatically for a fee.",
|
||||||
|
"icon": "/assets/img/app-icons/phoenixd.svg",
|
||||||
|
"author": "ACINQ",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/phoenixd:0.9.0",
|
||||||
|
"repoUrl": "https://github.com/ACINQ/phoenixd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "photoprism",
|
||||||
|
"title": "PhotoPrism",
|
||||||
|
"version": "240915",
|
||||||
|
"description": "AI-powered photo management with facial recognition.",
|
||||||
|
"icon": "/assets/img/app-icons/photoprism.svg",
|
||||||
|
"author": "PhotoPrism",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/photoprism:240915",
|
||||||
|
"repoUrl": "https://github.com/photoprism/photoprism",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"2342:2342"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/photoprism:/photoprism/storage"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"PHOTOPRISM_ADMIN_PASSWORD=archipelago",
|
||||||
|
"PHOTOPRISM_DEFAULT_LOCALE=en"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "pine",
|
"id": "pine",
|
||||||
"title": "Pine",
|
"title": "Pine",
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"description": "A private voice assistant for your home. Pine runs speech-to-text (Whisper), text-to-speech (Piper) and wake-word detection (openWakeWord) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud. Ask it about your node — block height, sync, peers, Lightning balance — and, when a Claude API key is set, anything else.",
|
"description": "A private voice assistant for your home. Pine runs speech-to-text (Whisper), text-to-speech (Piper) and wake-word detection (openWakeWord) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud. Ask it about your node \u2014 block height, sync, peers, Lightning balance \u2014 and, when a Claude API key is set, anything else.",
|
||||||
"icon": "/assets/img/app-icons/pine.svg",
|
"icon": "/assets/img/app-icons/pine.svg",
|
||||||
"author": "Archipelago",
|
"author": "Archipelago",
|
||||||
"category": "home",
|
"category": "home",
|
||||||
@@ -382,26 +515,44 @@
|
|||||||
"repoUrl": "https://github.com/rhasspy/wyoming"
|
"repoUrl": "https://github.com/rhasspy/wyoming"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "grafana",
|
"id": "portainer",
|
||||||
"title": "Grafana",
|
"title": "Portainer",
|
||||||
"version": "10.2.0",
|
"version": "2.19.4",
|
||||||
"description": "Analytics and monitoring platform. Visualize metrics and create dashboards.",
|
"description": "Container management web UI for the local Podman socket.",
|
||||||
"icon": "/assets/img/app-icons/grafana.png",
|
"icon": "/assets/img/app-icons/portainer.webp",
|
||||||
"author": "Grafana Labs",
|
"author": "Portainer",
|
||||||
"category": "data",
|
"category": "development",
|
||||||
"tier": "recommended",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/grafana:10.2.0",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/portainer:2.39.6",
|
||||||
"repoUrl": "https://github.com/grafana/grafana",
|
"repoUrl": "https://github.com/portainer/portainer",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"3000:3000"
|
"9000:9000"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/grafana:/var/lib/grafana"
|
"/var/lib/archipelago/portainer:/data",
|
||||||
|
"/run/user/1000/podman/podman.sock:/var/run/docker.sock"
|
||||||
],
|
],
|
||||||
"env": [
|
"notes": "Uses the manifest-owned Podman socket bind mount preparation path."
|
||||||
"GF_PATHS_DATA=/var/lib/grafana",
|
}
|
||||||
"GF_USERS_ALLOW_SIGN_UP=false"
|
},
|
||||||
|
{
|
||||||
|
"id": "searxng",
|
||||||
|
"title": "SearXNG",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Privacy-respecting metasearch engine. Search the web without tracking.",
|
||||||
|
"icon": "/assets/img/app-icons/searxng.png",
|
||||||
|
"author": "SearXNG",
|
||||||
|
"category": "data",
|
||||||
|
"tier": "recommended",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/searxng:latest",
|
||||||
|
"repoUrl": "https://github.com/searxng/searxng",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8888:8080"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/searxng:/etc/searxng"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -433,51 +584,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"id": "portainer",
|
|
||||||
"title": "Portainer",
|
|
||||||
"version": "2.19.4",
|
|
||||||
"description": "Container management web UI for the local Podman socket.",
|
|
||||||
"icon": "/assets/img/app-icons/portainer.webp",
|
|
||||||
"author": "Portainer",
|
|
||||||
"category": "development",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/portainer:2.39.6",
|
|
||||||
"repoUrl": "https://github.com/portainer/portainer",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"9000:9000"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/portainer:/data",
|
|
||||||
"/run/user/1000/podman/podman.sock:/var/run/docker.sock"
|
|
||||||
],
|
|
||||||
"notes": "Uses the manifest-owned Podman socket bind mount preparation path."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "netbird",
|
|
||||||
"title": "NetBird",
|
|
||||||
"version": "2.38.0",
|
|
||||||
"description": "Self-hosted WireGuard mesh VPN control plane with dashboard, embedded identity provider, management API, signal, relay, and STUN. The user-facing entry point — a TLS proxy in front of the dashboard + server.",
|
|
||||||
"icon": "/assets/img/app-icons/netbird.svg",
|
|
||||||
"author": "NetBird",
|
|
||||||
"category": "networking",
|
|
||||||
"tier": "recommended",
|
|
||||||
"dockerImage": "docker.io/library/nginx:1.31.4-alpine",
|
|
||||||
"repoUrl": "https://github.com/netbirdio/netbird",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8087:80",
|
|
||||||
"8086:80",
|
|
||||||
"3478:3478/udp"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/netbird:/var/lib/netbird"
|
|
||||||
],
|
|
||||||
"notes": "Installed as a two-container stack: netbird dashboard on 8087 and netbird-server control plane on 8086 plus UDP 3478. For production clients, publish a DNS name over HTTPS with gRPC/WebSocket routing."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "uptime-kuma",
|
"id": "uptime-kuma",
|
||||||
"title": "Uptime Kuma",
|
"title": "Uptime Kuma",
|
||||||
@@ -507,82 +613,24 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "photoprism",
|
"id": "vaultwarden",
|
||||||
"title": "PhotoPrism",
|
"title": "Vaultwarden",
|
||||||
"version": "240915",
|
"version": "1.30.0",
|
||||||
"description": "AI-powered photo management with facial recognition.",
|
"description": "Self-hosted password vault with zero-knowledge encryption.",
|
||||||
"icon": "/assets/img/app-icons/photoprism.svg",
|
"icon": "/assets/img/app-icons/vaultwarden.webp",
|
||||||
"author": "PhotoPrism",
|
"author": "Vaultwarden",
|
||||||
"category": "data",
|
"category": "data",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/photoprism:240915",
|
"tier": "recommended",
|
||||||
"repoUrl": "https://github.com/photoprism/photoprism",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/vaultwarden:1.37.1-alpine",
|
||||||
|
"repoUrl": "https://github.com/dani-garcia/vaultwarden",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"2342:2342"
|
"8082:80"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/photoprism:/photoprism/storage"
|
"/var/lib/archipelago/vaultwarden:/data"
|
||||||
],
|
|
||||||
"env": [
|
|
||||||
"PHOTOPRISM_ADMIN_PASSWORD=archipelago",
|
|
||||||
"PHOTOPRISM_DEFAULT_LOCALE=en"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "nextcloud",
|
|
||||||
"title": "Nextcloud",
|
|
||||||
"version": "29",
|
|
||||||
"description": "Your own private cloud. File sync, calendars, contacts.",
|
|
||||||
"icon": "/assets/img/app-icons/nextcloud.webp",
|
|
||||||
"author": "Nextcloud",
|
|
||||||
"category": "data",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/nextcloud:29",
|
|
||||||
"repoUrl": "https://github.com/nextcloud/server",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8085:80"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/nextcloud:/var/www/html"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "alby-hub",
|
|
||||||
"title": "Alby Hub",
|
|
||||||
"version": "1.23.0",
|
|
||||||
"description": "Self-custodial Lightning wallet hub. Runs its own Lightning node on your Archipelago and connects your apps to it over Nostr Wallet Connect — one hub, every app pays through it.",
|
|
||||||
"icon": "/assets/img/app-icons/alby-hub.svg",
|
|
||||||
"author": "Alby",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/alby-hub:v1.24.0",
|
|
||||||
"repoUrl": "https://github.com/getAlby/hub"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "phoenixd",
|
|
||||||
"title": "phoenixd",
|
|
||||||
"version": "0.9.0",
|
|
||||||
"description": "Headless Lightning daemon by ACINQ (the Phoenix wallet team). No screen of its own — it exposes a small local API that other apps and tools use to send and receive Lightning payments. Channel liquidity is managed automatically for a fee.",
|
|
||||||
"icon": "/assets/img/app-icons/phoenixd.svg",
|
|
||||||
"author": "ACINQ",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/phoenixd:0.9.0",
|
|
||||||
"repoUrl": "https://github.com/ACINQ/phoenixd"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "cuprate",
|
|
||||||
"title": "Cuprate",
|
|
||||||
"version": "0.1.0-preview",
|
|
||||||
"description": "Alternative Monero node implementation in Rust. Independently validates Monero consensus rules, providing a layer of security and redundancy for the network.",
|
|
||||||
"icon": "/assets/img/app-icons/cuprate.svg",
|
|
||||||
"author": "Cuprate contributors",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/cuprate:0.1.0-preview-18-g618ff14",
|
|
||||||
"repoUrl": "https://github.com/Cuprate/cuprate"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
app:
|
||||||
|
id: adguardhome
|
||||||
|
name: AdGuard Home
|
||||||
|
version: v0.107.55
|
||||||
|
upstream:
|
||||||
|
kind: github
|
||||||
|
repo: AdguardTeam/AdGuardHome
|
||||||
|
description: >-
|
||||||
|
Network-wide ad and tracker blocking: a DNS server that filters every
|
||||||
|
device on your LAN, with a web console for rules and client management.
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: source.archipelago-foundation.org/lfg2025/adguardhome:v0.107.55
|
||||||
|
pull_policy: if-not-present
|
||||||
|
network: pasta
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- storage: 1Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
memory_limit: 512Mi
|
||||||
|
disk_limit: 1Gi
|
||||||
|
|
||||||
|
security:
|
||||||
|
capabilities: [NET_BIND_SERVICE]
|
||||||
|
readonly_root: false
|
||||||
|
no_new_privileges: true
|
||||||
|
network_policy: isolated
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- host: 3000
|
||||||
|
container: 3000
|
||||||
|
protocol: tcp
|
||||||
|
bind: 127.0.0.1
|
||||||
|
# open: the setup wizard and admin console carry AdGuard Home's own
|
||||||
|
# login; the gate fronts the port (TLS, header fixes) without a
|
||||||
|
# second cookie challenge.
|
||||||
|
auth: open
|
||||||
|
auth_rationale: >-
|
||||||
|
AdGuard Home enforces its own admin login on the console, and the
|
||||||
|
first-run wizard must answer before any account exists.
|
||||||
|
- host: 53
|
||||||
|
container: 53
|
||||||
|
protocol: udp
|
||||||
|
# none: plain DNS must answer every unauthenticated query from LAN
|
||||||
|
# devices — a login page in front of :53 breaks every client on the
|
||||||
|
# network by design.
|
||||||
|
auth: none
|
||||||
|
auth_rationale: >-
|
||||||
|
Plain DNS answers unauthenticated by protocol: resolvers and clients
|
||||||
|
send queries directly; a login challenge would make DNS unreachable.
|
||||||
|
- host: 53
|
||||||
|
container: 53
|
||||||
|
protocol: tcp
|
||||||
|
auth: none
|
||||||
|
auth_rationale: >-
|
||||||
|
DNS-over-TCP fallback (truncated responses, zone transfers); same
|
||||||
|
protocol-level requirement as the UDP port.
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /var/lib/archipelago/adguardhome
|
||||||
|
target: /opt/adguardhome
|
||||||
|
options: [rw]
|
||||||
|
|
||||||
|
environment: []
|
||||||
|
|
||||||
|
health_check:
|
||||||
|
type: tcp
|
||||||
|
endpoint: localhost:3000
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
interfaces:
|
||||||
|
main:
|
||||||
|
name: Admin console
|
||||||
|
description: AdGuard Home web console
|
||||||
|
type: ui
|
||||||
|
port: 3000
|
||||||
|
protocol: http
|
||||||
|
path: /
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
author: AdGuard
|
||||||
|
category: networking
|
||||||
|
repo: https://github.com/AdguardTeam/AdGuardHome
|
||||||
|
tier: optional
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
app:
|
||||||
|
id: cryptpad
|
||||||
|
name: CryptPad
|
||||||
|
version: 2024.12.0
|
||||||
|
upstream:
|
||||||
|
kind: github
|
||||||
|
repo: cryptpad/cryptpad
|
||||||
|
description: End-to-end encrypted documents, spreadsheets, and presentations. Zero-knowledge collaboration.
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: source.archipelago-foundation.org/lfg2025/cryptpad:2024.12.0
|
||||||
|
pull_policy: if-not-present
|
||||||
|
network: pasta
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- storage: 5Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
memory_limit: 1Gi
|
||||||
|
disk_limit: 5Gi
|
||||||
|
|
||||||
|
security:
|
||||||
|
capabilities: []
|
||||||
|
readonly_root: false
|
||||||
|
no_new_privileges: true
|
||||||
|
network_policy: isolated
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- host: 3000
|
||||||
|
container: 3000
|
||||||
|
protocol: tcp
|
||||||
|
bind: 127.0.0.1
|
||||||
|
# gated: CryptPad is browser-only (its own per-user accounts sit on top
|
||||||
|
# of the node login, exactly like Vaultwarden), so the gate's session
|
||||||
|
# challenge costs nothing and keeps the pads behind the node login.
|
||||||
|
auth: gated
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /var/lib/archipelago/cryptpad
|
||||||
|
target: /cryptpad/data
|
||||||
|
options: [rw]
|
||||||
|
|
||||||
|
environment: []
|
||||||
|
|
||||||
|
health_check:
|
||||||
|
type: tcp
|
||||||
|
endpoint: localhost:3000
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
interfaces:
|
||||||
|
main:
|
||||||
|
name: CryptPad
|
||||||
|
description: Encrypted collaboration suite
|
||||||
|
type: ui
|
||||||
|
port: 3000
|
||||||
|
protocol: http
|
||||||
|
path: /
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
author: XWiki SAS
|
||||||
|
category: data
|
||||||
|
icon: /assets/icon/favico-black-v2.svg
|
||||||
|
repo: https://github.com/cryptpad/cryptpad
|
||||||
|
tier: optional
|
||||||
@@ -15,11 +15,6 @@ app:
|
|||||||
description: Alternative Monero node implementation in Rust. Independently validates Monero consensus rules, providing a layer of security and redundancy for the network.
|
description: Alternative Monero node implementation in Rust. Independently validates Monero consensus rules, providing a layer of security and redundancy for the network.
|
||||||
category: money
|
category: money
|
||||||
|
|
||||||
metadata:
|
|
||||||
icon: /assets/img/app-icons/cuprate.svg
|
|
||||||
repo: https://github.com/Cuprate/cuprate
|
|
||||||
tier: optional
|
|
||||||
|
|
||||||
container:
|
container:
|
||||||
# Built from the upstream Dockerfile at the tip of main, 18 commits past
|
# Built from the upstream Dockerfile at the tip of main, 18 commits past
|
||||||
# the cuprated-0.1.0-preview tag (commit 618ff14, 2026-08-19) — there is
|
# the cuprated-0.1.0-preview tag (commit 618ff14, 2026-08-19) — there is
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
app:
|
||||||
|
id: nginx-proxy-manager
|
||||||
|
name: Nginx Proxy Manager
|
||||||
|
version: 2.12.1
|
||||||
|
upstream:
|
||||||
|
kind: github
|
||||||
|
repo: NginxProxyManager/nginx-proxy-manager
|
||||||
|
description: >-
|
||||||
|
Reverse proxy with SSL. Beautiful web interface for managing proxies.
|
||||||
|
On a node, this manages its admin UI and upstream configuration — the
|
||||||
|
proxy's own :80/:443 listeners are not published (the node's web server
|
||||||
|
owns those ports).
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: source.archipelago-foundation.org/lfg2025/nginx-proxy-manager:latest
|
||||||
|
pull_policy: if-not-present
|
||||||
|
network: pasta
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- storage: 1Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
memory_limit: 512Mi
|
||||||
|
disk_limit: 1Gi
|
||||||
|
|
||||||
|
security:
|
||||||
|
capabilities: [CHOWN, SETUID, SETGID, DAC_OVERRIDE]
|
||||||
|
readonly_root: false
|
||||||
|
no_new_privileges: true
|
||||||
|
network_policy: isolated
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- host: 8081
|
||||||
|
container: 81
|
||||||
|
protocol: tcp
|
||||||
|
bind: 127.0.0.1
|
||||||
|
# open, not gated: NPM carries a complete admin login of its own. The
|
||||||
|
# gate still fronts the port (TLS on the same port, header fixes, retry
|
||||||
|
# page, Tor) without putting a cookie challenge in front of it.
|
||||||
|
auth: open
|
||||||
|
auth_rationale: >-
|
||||||
|
Nginx Proxy Manager enforces its own admin account on every page;
|
||||||
|
the initial setup wizard also has to answer before any account exists.
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /var/lib/archipelago/nginx-proxy-manager
|
||||||
|
target: /data
|
||||||
|
options: [rw]
|
||||||
|
|
||||||
|
environment: []
|
||||||
|
|
||||||
|
health_check:
|
||||||
|
type: tcp
|
||||||
|
endpoint: localhost:81
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
interfaces:
|
||||||
|
main:
|
||||||
|
name: Admin UI
|
||||||
|
description: Nginx Proxy Manager admin interface
|
||||||
|
type: ui
|
||||||
|
port: 8081
|
||||||
|
protocol: http
|
||||||
|
path: /
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
author: Nginx Proxy Manager
|
||||||
|
category: networking
|
||||||
|
icon: /assets/img/app-icons/nginx.svg
|
||||||
|
repo: https://github.com/NginxProxyManager/nginx-proxy-manager
|
||||||
|
tier: optional
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
app:
|
||||||
|
id: ollama
|
||||||
|
name: Ollama
|
||||||
|
version: 0.5.4
|
||||||
|
upstream:
|
||||||
|
kind: github
|
||||||
|
repo: ollama/ollama
|
||||||
|
description: >-
|
||||||
|
Run large language models locally. Download and run AI models like
|
||||||
|
Llama, Mistral on your own hardware — served on the node's loopback for
|
||||||
|
the AI assistant (Settings → Claude Auth → model backend), never exposed
|
||||||
|
to the network.
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: source.archipelago-foundation.org/lfg2025/ollama:latest
|
||||||
|
pull_policy: if-not-present
|
||||||
|
network: pasta
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- storage: 50Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
memory_limit: 0
|
||||||
|
disk_limit: 50Gi
|
||||||
|
|
||||||
|
security:
|
||||||
|
capabilities: []
|
||||||
|
readonly_root: false
|
||||||
|
no_new_privileges: true
|
||||||
|
network_policy: isolated
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- host: 11434
|
||||||
|
container: 11434
|
||||||
|
protocol: tcp
|
||||||
|
# local: Ollama's REST API is consumed by the node's own assistant over
|
||||||
|
# loopback — never externally reachable, so no gate, no TLS, and no
|
||||||
|
# login surface exist at all.
|
||||||
|
bind: 127.0.0.1
|
||||||
|
auth: local
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /var/lib/archipelago/ollama
|
||||||
|
target: /root/.ollama
|
||||||
|
options: [rw]
|
||||||
|
|
||||||
|
environment: []
|
||||||
|
|
||||||
|
health_check:
|
||||||
|
type: tcp
|
||||||
|
endpoint: localhost:11434
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
author: Ollama
|
||||||
|
category: community
|
||||||
|
icon: /assets/img/app-icons/ollama.png
|
||||||
|
repo: https://github.com/ollama/ollama
|
||||||
|
tier: optional
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
app:
|
||||||
|
id: tailscale
|
||||||
|
name: Tailscale
|
||||||
|
version: 1.78.0
|
||||||
|
upstream:
|
||||||
|
kind: github
|
||||||
|
repo: tailscale/tailscale
|
||||||
|
description: Zero-config VPN with WireGuard mesh networking.
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: source.archipelago-foundation.org/lfg2025/tailscale:stable
|
||||||
|
pull_policy: if-not-present
|
||||||
|
network: pasta
|
||||||
|
# Mirrors the legacy curated install exactly: tailscaled in userspace
|
||||||
|
# networking (no host TUN device needed — the rootless container cannot
|
||||||
|
# have one anyway), then `tailscale web` serving the console on :8240 as
|
||||||
|
# plain HTTP the app gate can front (TLS on the same port via the node
|
||||||
|
# certificate, framing-header fixes, retry page, Tor).
|
||||||
|
entrypoint: ["sh", "-c", "tailscaled --tun=userspace-networking & for i in $(seq 1 30); do [ -S /var/run/tailscale/tailscaled.sock ] && break; sleep 1; done; tailscale web --listen 0.0.0.0:8240 & wait"]
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- storage: 1Gi
|
||||||
|
|
||||||
|
resources:
|
||||||
|
memory_limit: 512Mi
|
||||||
|
disk_limit: 1Gi
|
||||||
|
|
||||||
|
security:
|
||||||
|
capabilities: []
|
||||||
|
readonly_root: false
|
||||||
|
no_new_privileges: true
|
||||||
|
network_policy: isolated
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- host: 8240
|
||||||
|
container: 8240
|
||||||
|
protocol: tcp
|
||||||
|
bind: 127.0.0.1
|
||||||
|
# open, not gated: the web console requires the tailnet's own login for
|
||||||
|
# every administrative action — the gate fronts the port without adding
|
||||||
|
# a second login in front of it.
|
||||||
|
auth: open
|
||||||
|
auth_rationale: >-
|
||||||
|
Tailscale's web console authenticates against the tailnet account for
|
||||||
|
all administrative actions; the node's cookie challenge would be a
|
||||||
|
second, redundant login.
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /var/lib/archipelago/tailscale
|
||||||
|
target: /var/lib/tailscale
|
||||||
|
options: [rw]
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- TS_STATE_DIR=/var/lib/tailscale
|
||||||
|
|
||||||
|
health_check:
|
||||||
|
type: tcp
|
||||||
|
endpoint: localhost:8240
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
interfaces:
|
||||||
|
main:
|
||||||
|
name: Web console
|
||||||
|
description: Tailscale web console
|
||||||
|
type: ui
|
||||||
|
port: 8240
|
||||||
|
protocol: http
|
||||||
|
path: /
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
author: Tailscale
|
||||||
|
category: networking
|
||||||
|
icon: /assets/img/app-icons/tailscale.webp
|
||||||
|
repo: https://github.com/tailscale/tailscale
|
||||||
|
tier: recommended
|
||||||
@@ -178,18 +178,10 @@ fn image_var_for_app(app_id: &str) -> Option<&'static str> {
|
|||||||
|
|
||||||
// Nostr / VPN
|
// Nostr / VPN
|
||||||
"nostr-rs-relay" => Some("NOSTR_RS_RELAY_IMAGE"),
|
"nostr-rs-relay" => Some("NOSTR_RS_RELAY_IMAGE"),
|
||||||
"nostr-vpn" => Some("NOSTR_VPN_IMAGE"),
|
|
||||||
"fips" => Some("FIPS_IMAGE"),
|
|
||||||
|
|
||||||
// Immich (primary = server)
|
// Immich (primary = server)
|
||||||
"immich" | "immich_server" => Some("IMMICH_SERVER_IMAGE"),
|
"immich" | "immich_server" => Some("IMMICH_SERVER_IMAGE"),
|
||||||
|
|
||||||
// Penpot (primary = frontend)
|
|
||||||
"penpot" | "penpot-frontend" => Some("PENPOT_FRONTEND_IMAGE"),
|
|
||||||
|
|
||||||
// AI
|
|
||||||
"routstr" => Some("ROUTSTR_IMAGE"),
|
|
||||||
|
|
||||||
// Networking
|
// Networking
|
||||||
"adguardhome" => Some("ADGUARDHOME_IMAGE"),
|
"adguardhome" => Some("ADGUARDHOME_IMAGE"),
|
||||||
"tor" | "archy-tor" => Some("ALPINE_TOR_IMAGE"),
|
"tor" | "archy-tor" => Some("ALPINE_TOR_IMAGE"),
|
||||||
@@ -341,13 +333,6 @@ pub fn containers_for_stack(app_id: &str) -> Vec<(&'static str, &'static str)> {
|
|||||||
("immich_redis", "REDIS_IMAGE"),
|
("immich_redis", "REDIS_IMAGE"),
|
||||||
("immich_server", "IMMICH_SERVER_IMAGE"),
|
("immich_server", "IMMICH_SERVER_IMAGE"),
|
||||||
],
|
],
|
||||||
"penpot" | "penpot-frontend" => vec![
|
|
||||||
("penpot-postgres", "PENPOT_POSTGRES_IMAGE"),
|
|
||||||
("penpot-valkey", "PENPOT_VALKEY_IMAGE"),
|
|
||||||
("penpot-backend", "PENPOT_BACKEND_IMAGE"),
|
|
||||||
("penpot-exporter", "PENPOT_EXPORTER_IMAGE"),
|
|
||||||
("penpot-frontend", "PENPOT_FRONTEND_IMAGE"),
|
|
||||||
],
|
|
||||||
"netbird" => vec![
|
"netbird" => vec![
|
||||||
("netbird", "NETBIRD_PROXY_IMAGE"),
|
("netbird", "NETBIRD_PROXY_IMAGE"),
|
||||||
("netbird-dashboard", "NETBIRD_DASHBOARD_IMAGE"),
|
("netbird-dashboard", "NETBIRD_DASHBOARD_IMAGE"),
|
||||||
|
|||||||
@@ -1746,6 +1746,11 @@ app:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
exempt.sort();
|
exempt.sort();
|
||||||
|
// 30 as of 2026-08-31: the 28 below plus adguardhome's two DNS ports
|
||||||
|
// (53 udp + tcp) — plain DNS answers unauthenticated by protocol, the
|
||||||
|
// same reason router's mDNS/SSDP and every p2p port is exempt; each
|
||||||
|
// carries its auth_rationale in the manifest.
|
||||||
|
//
|
||||||
// 28 as of 2026-08-23: the 26 below plus cuprate's two exemptions —
|
// 28 as of 2026-08-23: the 26 below plus cuprate's two exemptions —
|
||||||
// 18183 (Monero p2p gossip, same reasoning as bitcoin's 8333) and
|
// 18183 (Monero p2p gossip, same reasoning as bitcoin's 8333) and
|
||||||
// 18090 (host mapping for Monero's canonical 18089 restricted RPC,
|
// 18090 (host mapping for Monero's canonical 18089 restricted RPC,
|
||||||
@@ -1771,7 +1776,7 @@ app:
|
|||||||
// stage timed out that cycle, so the count here lagged at 17.
|
// stage timed out that cycle, so the count here lagged at 17.
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
exempt.len(),
|
exempt.len(),
|
||||||
28,
|
30,
|
||||||
"unauthenticated port set changed — review before updating this count: {exempt:?}"
|
"unauthenticated port set changed — review before updating this count: {exempt:?}"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1801,15 +1806,22 @@ app:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
open.sort();
|
open.sort();
|
||||||
// Gitea 3001 (git clients speak basic-auth, not browser cookies) and
|
// Gitea 3001 (git clients speak basic-auth, not browser cookies),
|
||||||
// BTCPay 23000 (checkout/invoice/webhook endpoints must be reachable
|
// BTCPay 23000 (checkout/invoice/webhook endpoints must be reachable
|
||||||
// by anonymous payers). Both enforce their own account login, and an
|
// by anonymous payers), and — since the v1.8.7 platform round — the
|
||||||
// operator can re-gate either from Settings → Access control.
|
// three own-login consoles brought onto the manifest platform:
|
||||||
|
// nginx-proxy-manager 8081 (NPM admin accounts), tailscale 8240
|
||||||
|
// (tailnet login on the web console), adguardhome 3000 (AGH admin
|
||||||
|
// accounts + first-run wizard). All enforce their own login, and an
|
||||||
|
// operator can re-gate any of them from Settings → Access control.
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
open,
|
open,
|
||||||
vec![
|
vec![
|
||||||
|
("adguardhome".to_string(), 3000u16),
|
||||||
("btcpay-server".to_string(), 23000u16),
|
("btcpay-server".to_string(), 23000u16),
|
||||||
("gitea".to_string(), 3001u16)
|
("gitea".to_string(), 3001u16),
|
||||||
|
("nginx-proxy-manager".to_string(), 8081u16),
|
||||||
|
("tailscale".to_string(), 8240u16),
|
||||||
],
|
],
|
||||||
"gate-open port set changed — every entry must be an app with its own login"
|
"gate-open port set changed — every entry must be an app with its own login"
|
||||||
);
|
);
|
||||||
|
|||||||
+402
-354
@@ -11,16 +11,47 @@
|
|||||||
},
|
},
|
||||||
"apps": [
|
"apps": [
|
||||||
{
|
{
|
||||||
"id": "bitcoin-knots",
|
"id": "adguardhome",
|
||||||
"title": "Bitcoin Knots",
|
"title": "AdGuard Home",
|
||||||
"version": "28.1.0",
|
"version": "v0.107.55",
|
||||||
"description": "Full Bitcoin Knots node with dynamic prune/full-mode startup based on host disk.",
|
"description": "Network-wide ad and tracker blocking: a DNS server that filters every device on your LAN, with a web console for rules and client management.",
|
||||||
"icon": "/assets/img/app-icons/bitcoin-knots.webp",
|
"icon": "",
|
||||||
"author": "Bitcoin Knots",
|
"author": "AdGuard",
|
||||||
|
"category": "networking",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/adguardhome:v0.107.55",
|
||||||
|
"repoUrl": "https://github.com/AdguardTeam/AdGuardHome"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "alby-hub",
|
||||||
|
"title": "Alby Hub",
|
||||||
|
"version": "1.23.0",
|
||||||
|
"description": "Self-custodial Lightning wallet hub. Runs its own Lightning node on your Archipelago and connects your apps to it over Nostr Wallet Connect \u2014 one hub, every app pays through it.",
|
||||||
|
"icon": "/assets/img/app-icons/alby-hub.svg",
|
||||||
|
"author": "Alby",
|
||||||
"category": "money",
|
"category": "money",
|
||||||
"tier": "core",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/bitcoin-knots:29.3.knots20260210",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/alby-hub:v1.24.0",
|
||||||
"repoUrl": "https://github.com/bitcoinknots/bitcoin"
|
"repoUrl": "https://github.com/getAlby/hub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "barkd",
|
||||||
|
"title": "Ark Wallet",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"description": "Ark protocol wallet daemon (barkd). Lets the node hold self-custodial off-chain bitcoin via an Ark server; the wallet talks to it over a local REST API. Signet by default while Ark matures.",
|
||||||
|
"icon": "/assets/img/app-icons/bark.png",
|
||||||
|
"author": "Second",
|
||||||
|
"category": "money",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/barkd:0.3.0",
|
||||||
|
"repoUrl": "https://gitlab.com/ark-bitcoin/bark",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"3535:3535"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/barkd:/data"
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "bitcoin-core",
|
"id": "bitcoin-core",
|
||||||
@@ -35,76 +66,16 @@
|
|||||||
"repoUrl": "https://github.com/bitcoin/bitcoin"
|
"repoUrl": "https://github.com/bitcoin/bitcoin"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "lnd",
|
"id": "bitcoin-knots",
|
||||||
"title": "LND",
|
"title": "Bitcoin Knots",
|
||||||
"version": "0.18.4",
|
"version": "28.1.0",
|
||||||
"description": "Lightning Network implementation by Lightning Labs. Enables instant, low-cost Bitcoin payments.",
|
"description": "Full Bitcoin Knots node with dynamic prune/full-mode startup based on host disk.",
|
||||||
"icon": "/assets/img/app-icons/lnd.png",
|
"icon": "/assets/img/app-icons/bitcoin-knots.webp",
|
||||||
"author": "Lightning Labs",
|
"author": "Bitcoin Knots",
|
||||||
"category": "money",
|
"category": "money",
|
||||||
"tier": "core",
|
"tier": "core",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/lnd:v0.18.4-beta",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/bitcoin-knots:29.3.knots20260210",
|
||||||
"repoUrl": "https://github.com/lightningnetwork/lnd",
|
"repoUrl": "https://github.com/bitcoinknots/bitcoin"
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "btcpay-server",
|
|
||||||
"title": "BTCPay Server",
|
|
||||||
"version": "2.4.3",
|
|
||||||
"description": "Self-hosted Bitcoin payment processor. Accept Bitcoin payments without intermediaries.",
|
|
||||||
"icon": "/assets/img/app-icons/btcpay-server.png",
|
|
||||||
"author": "BTCPay Server Foundation",
|
|
||||||
"category": "commerce",
|
|
||||||
"tier": "core",
|
|
||||||
"dockerImage": "docker.io/btcpayserver/btcpayserver:2.4.3",
|
|
||||||
"repoUrl": "https://github.com/btcpayserver/btcpayserver",
|
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "mempool",
|
|
||||||
"title": "Mempool Explorer",
|
|
||||||
"version": "3.0.0",
|
|
||||||
"description": "Bitcoin mempool and blockchain explorer. Real-time transaction and block visualization.",
|
|
||||||
"icon": "/assets/img/app-icons/mempool.webp",
|
|
||||||
"author": "Mempool",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "core",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/mempool-frontend:v3.3.1",
|
|
||||||
"repoUrl": "https://github.com/mempool/mempool",
|
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots",
|
|
||||||
"electrumx"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "electrumx",
|
|
||||||
"title": "ElectrumX",
|
|
||||||
"version": "1.18.0",
|
|
||||||
"description": "Electrum server indexing Bitcoin chain data for lightweight wallet queries.",
|
|
||||||
"icon": "/assets/img/app-icons/electrumx.png",
|
|
||||||
"author": "Luke Childs",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "core",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/electrumx:v1.18.0",
|
|
||||||
"repoUrl": "https://github.com/spesmilo/electrumx",
|
|
||||||
"requires": [
|
|
||||||
"bitcoin-knots"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "indeedhub",
|
|
||||||
"title": "IndeeHub",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Bitcoin documentary streaming platform featuring God Bless Bitcoin and other educational content about Bitcoin, sovereignty, and decentralized technology. Sign in with your Nostr identity.",
|
|
||||||
"icon": "/assets/img/app-icons/indeedhub.png",
|
|
||||||
"author": "IndeeHub",
|
|
||||||
"category": "community",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/indeedhub:1.0.0",
|
|
||||||
"repoUrl": "https://github.com/indeedhub/indeedhub"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "botfights",
|
"id": "botfights",
|
||||||
@@ -132,127 +103,58 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "gitea",
|
"id": "btcpay-server",
|
||||||
"title": "Gitea",
|
"title": "BTCPay Server",
|
||||||
"version": "1.23",
|
"version": "2.4.3",
|
||||||
"description": "Self-hosted Git service with built-in container registry, CI/CD, and package hosting.",
|
"description": "Self-hosted Bitcoin payment processor. Accept Bitcoin payments without intermediaries.",
|
||||||
"icon": "/assets/img/app-icons/gitea.svg",
|
"icon": "/assets/img/app-icons/btcpay-server.png",
|
||||||
"author": "Gitea",
|
"author": "BTCPay Server Foundation",
|
||||||
"category": "development",
|
"category": "commerce",
|
||||||
"dockerImage": "docker.io/gitea/gitea:1.23",
|
|
||||||
"repoUrl": "https://gitea.com",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"3001:3000",
|
|
||||||
"2222:22"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/gitea/data:/data",
|
|
||||||
"/var/lib/archipelago/gitea/config:/etc/gitea"
|
|
||||||
],
|
|
||||||
"env": [
|
|
||||||
"GITEA__database__DB_TYPE=sqlite3",
|
|
||||||
"GITEA__server__SSH_PORT=2222",
|
|
||||||
"GITEA__server__SSH_LISTEN_PORT=22",
|
|
||||||
"GITEA__server__LFS_START_SERVER=true",
|
|
||||||
"GITEA__packages__ENABLED=true",
|
|
||||||
"GITEA__repository__ENABLE_PUSH_CREATE_USER=true",
|
|
||||||
"GITEA__repository__ENABLE_PUSH_CREATE_ORG=true",
|
|
||||||
"GITEA__security__X_FRAME_OPTIONS="
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"tier": "optional"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "filebrowser",
|
|
||||||
"title": "File Browser",
|
|
||||||
"version": "2.27.0",
|
|
||||||
"description": "Baseline Archipelago file manager service.",
|
|
||||||
"icon": "/assets/img/app-icons/file-browser.webp",
|
|
||||||
"author": "File Browser",
|
|
||||||
"category": "data",
|
|
||||||
"tier": "core",
|
"tier": "core",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/filebrowser:v2.27.0",
|
"dockerImage": "docker.io/btcpayserver/btcpayserver:2.4.3",
|
||||||
"repoUrl": "https://github.com/filebrowser/filebrowser",
|
"repoUrl": "https://github.com/btcpayserver/btcpayserver",
|
||||||
"containerConfig": {
|
"requires": [
|
||||||
"ports": [
|
"bitcoin-knots"
|
||||||
"8083:80"
|
]
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/filebrowser:/srv",
|
|
||||||
"/var/lib/archipelago/filebrowser-data:/data"
|
|
||||||
],
|
|
||||||
"args": [
|
|
||||||
"--database=/data/database.db",
|
|
||||||
"--root=/srv",
|
|
||||||
"--address=0.0.0.0",
|
|
||||||
"--port=80"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "nostr-rs-relay",
|
"id": "cryptpad",
|
||||||
"title": "Nostr Relay (Rust)",
|
"title": "CryptPad",
|
||||||
"version": "0.10.0",
|
"version": "2024.12.0",
|
||||||
"description": "High-performance Nostr relay written in Rust. Host your own decentralized social media relay and earn networking profits.",
|
"description": "End-to-end encrypted documents, spreadsheets, and presentations. Zero-knowledge collaboration.",
|
||||||
"icon": "/assets/img/app-icons/nostrudel.svg",
|
"icon": "/assets/icon/favico-black-v2.svg",
|
||||||
"author": "Nostr RS Relay",
|
"author": "XWiki SAS",
|
||||||
"category": "community",
|
|
||||||
"tier": "recommended",
|
|
||||||
"dockerImage": "scsibug/nostr-rs-relay:0.10.0",
|
|
||||||
"repoUrl": "https://github.com/scsibug/nostr-rs-relay",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8081:8080"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/nostr-relay:/usr/src/app/db"
|
|
||||||
],
|
|
||||||
"env": [
|
|
||||||
"RELAY_NAME=Archipelago Nostr Relay",
|
|
||||||
"RELAY_DESCRIPTION=Self-hosted Nostr relay on Archipelago"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "vaultwarden",
|
|
||||||
"title": "Vaultwarden",
|
|
||||||
"version": "1.30.0",
|
|
||||||
"description": "Self-hosted password vault with zero-knowledge encryption.",
|
|
||||||
"icon": "/assets/img/app-icons/vaultwarden.webp",
|
|
||||||
"author": "Vaultwarden",
|
|
||||||
"category": "data",
|
"category": "data",
|
||||||
"tier": "recommended",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/vaultwarden:1.37.1-alpine",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/cryptpad:2024.12.0",
|
||||||
"repoUrl": "https://github.com/dani-garcia/vaultwarden",
|
"repoUrl": "https://github.com/cryptpad/cryptpad"
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8082:80"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/vaultwarden:/data"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "searxng",
|
"id": "cuprate",
|
||||||
"title": "SearXNG",
|
"title": "Cuprate",
|
||||||
"version": "1.0.0",
|
"version": "0.1.0-preview",
|
||||||
"description": "Privacy-respecting metasearch engine. Search the web without tracking.",
|
"description": "Alternative Monero node implementation in Rust. Independently validates Monero consensus rules, providing a layer of security and redundancy for the network.",
|
||||||
"icon": "/assets/img/app-icons/searxng.png",
|
"icon": "/assets/img/app-icons/cuprate.svg",
|
||||||
"author": "SearXNG",
|
"author": "Cuprate contributors",
|
||||||
"category": "data",
|
"category": "money",
|
||||||
"tier": "recommended",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/searxng:latest",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/cuprate:0.1.0-preview-18-g618ff14",
|
||||||
"repoUrl": "https://github.com/searxng/searxng",
|
"repoUrl": "https://github.com/Cuprate/cuprate"
|
||||||
"containerConfig": {
|
},
|
||||||
"ports": [
|
{
|
||||||
"8888:8080"
|
"id": "electrumx",
|
||||||
],
|
"title": "ElectrumX",
|
||||||
"volumes": [
|
"version": "1.18.0",
|
||||||
"/var/lib/archipelago/searxng:/etc/searxng"
|
"description": "Electrum server indexing Bitcoin chain data for lightweight wallet queries.",
|
||||||
]
|
"icon": "/assets/img/app-icons/electrumx.png",
|
||||||
}
|
"author": "Luke Childs",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "core",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/electrumx:v1.18.0",
|
||||||
|
"repoUrl": "https://github.com/spesmilo/electrumx",
|
||||||
|
"requires": [
|
||||||
|
"bitcoin-knots"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "fedimint",
|
"id": "fedimint",
|
||||||
@@ -299,54 +201,87 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "barkd",
|
"id": "filebrowser",
|
||||||
"title": "Ark Wallet",
|
"title": "File Browser",
|
||||||
"version": "0.3.0",
|
"version": "2.27.0",
|
||||||
"description": "Ark protocol wallet daemon (barkd). Lets the node hold self-custodial off-chain bitcoin via an Ark server; the wallet talks to it over a local REST API. Signet by default while Ark matures.",
|
"description": "Baseline Archipelago file manager service.",
|
||||||
"icon": "/assets/img/app-icons/bark.png",
|
"icon": "/assets/img/app-icons/file-browser.webp",
|
||||||
"author": "Second",
|
"author": "File Browser",
|
||||||
"category": "money",
|
"category": "data",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/barkd:0.3.0",
|
"tier": "core",
|
||||||
"repoUrl": "https://gitlab.com/ark-bitcoin/bark",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/filebrowser:v2.27.0",
|
||||||
|
"repoUrl": "https://github.com/filebrowser/filebrowser",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"3535:3535"
|
"8083:80"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/barkd:/data"
|
"/var/lib/archipelago/filebrowser:/srv",
|
||||||
|
"/var/lib/archipelago/filebrowser-data:/data"
|
||||||
|
],
|
||||||
|
"args": [
|
||||||
|
"--database=/data/database.db",
|
||||||
|
"--root=/srv",
|
||||||
|
"--address=0.0.0.0",
|
||||||
|
"--port=80"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "jellyfin",
|
"id": "gitea",
|
||||||
"title": "Jellyfin",
|
"title": "Gitea",
|
||||||
"version": "10.8.13",
|
"version": "1.23",
|
||||||
"description": "Free media server. Stream movies, music, and photos.",
|
"description": "Self-hosted Git service with built-in container registry, CI/CD, and package hosting.",
|
||||||
"icon": "/assets/img/app-icons/jellyfin.webp",
|
"icon": "/assets/img/app-icons/gitea.svg",
|
||||||
"author": "Jellyfin",
|
"author": "Gitea",
|
||||||
"category": "data",
|
"category": "development",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/jellyfin:10.11.11",
|
"dockerImage": "docker.io/gitea/gitea:1.23",
|
||||||
"repoUrl": "https://github.com/jellyfin/jellyfin",
|
"repoUrl": "https://gitea.com",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"8096:8096"
|
"3001:3000",
|
||||||
|
"2222:22"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/jellyfin/config:/config",
|
"/var/lib/archipelago/gitea/data:/data",
|
||||||
"/var/lib/archipelago/jellyfin/cache:/cache"
|
"/var/lib/archipelago/gitea/config:/etc/gitea"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"GITEA__database__DB_TYPE=sqlite3",
|
||||||
|
"GITEA__server__SSH_PORT=2222",
|
||||||
|
"GITEA__server__SSH_LISTEN_PORT=22",
|
||||||
|
"GITEA__server__LFS_START_SERVER=true",
|
||||||
|
"GITEA__packages__ENABLED=true",
|
||||||
|
"GITEA__repository__ENABLE_PUSH_CREATE_USER=true",
|
||||||
|
"GITEA__repository__ENABLE_PUSH_CREATE_ORG=true",
|
||||||
|
"GITEA__security__X_FRAME_OPTIONS="
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"tier": "optional"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "immich",
|
"id": "grafana",
|
||||||
"title": "Immich",
|
"title": "Grafana",
|
||||||
"version": "2.7.4",
|
"version": "10.2.0",
|
||||||
"description": "Self-hosted photo and video backup with mobile apps and search.",
|
"description": "Analytics and monitoring platform. Visualize metrics and create dashboards.",
|
||||||
"icon": "/assets/img/app-icons/immich.png",
|
"icon": "/assets/img/app-icons/grafana.png",
|
||||||
"author": "Immich",
|
"author": "Grafana Labs",
|
||||||
"category": "data",
|
"category": "data",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/immich-server:release",
|
"tier": "recommended",
|
||||||
"repoUrl": "https://github.com/immich-app/immich"
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/grafana:10.2.0",
|
||||||
|
"repoUrl": "https://github.com/grafana/grafana",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"3000:3000"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/grafana:/var/lib/grafana"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"GF_PATHS_DATA=/var/lib/grafana",
|
||||||
|
"GF_USERS_ALLOW_SIGN_UP=false"
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "homeassistant",
|
"id": "homeassistant",
|
||||||
@@ -370,11 +305,209 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "immich",
|
||||||
|
"title": "Immich",
|
||||||
|
"version": "2.7.4",
|
||||||
|
"description": "Self-hosted photo and video backup with mobile apps and search.",
|
||||||
|
"icon": "/assets/img/app-icons/immich.png",
|
||||||
|
"author": "Immich",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/immich-server:release",
|
||||||
|
"repoUrl": "https://github.com/immich-app/immich"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "indeedhub",
|
||||||
|
"title": "IndeeHub",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Bitcoin documentary streaming platform featuring God Bless Bitcoin and other educational content about Bitcoin, sovereignty, and decentralized technology. Sign in with your Nostr identity.",
|
||||||
|
"icon": "/assets/img/app-icons/indeedhub.png",
|
||||||
|
"author": "IndeeHub",
|
||||||
|
"category": "community",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/indeedhub:1.0.0",
|
||||||
|
"repoUrl": "https://github.com/indeedhub/indeedhub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "jellyfin",
|
||||||
|
"title": "Jellyfin",
|
||||||
|
"version": "10.8.13",
|
||||||
|
"description": "Free media server. Stream movies, music, and photos.",
|
||||||
|
"icon": "/assets/img/app-icons/jellyfin.webp",
|
||||||
|
"author": "Jellyfin",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/jellyfin:10.11.11",
|
||||||
|
"repoUrl": "https://github.com/jellyfin/jellyfin",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8096:8096"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/jellyfin/config:/config",
|
||||||
|
"/var/lib/archipelago/jellyfin/cache:/cache"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "lnd",
|
||||||
|
"title": "LND",
|
||||||
|
"version": "0.18.4",
|
||||||
|
"description": "Lightning Network implementation by Lightning Labs. Enables instant, low-cost Bitcoin payments.",
|
||||||
|
"icon": "/assets/img/app-icons/lnd.png",
|
||||||
|
"author": "Lightning Labs",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "core",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/lnd:v0.18.4-beta",
|
||||||
|
"repoUrl": "https://github.com/lightningnetwork/lnd",
|
||||||
|
"requires": [
|
||||||
|
"bitcoin-knots"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "mempool",
|
||||||
|
"title": "Mempool Explorer",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"description": "Bitcoin mempool and blockchain explorer. Real-time transaction and block visualization.",
|
||||||
|
"icon": "/assets/img/app-icons/mempool.webp",
|
||||||
|
"author": "Mempool",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "core",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/mempool-frontend:v3.3.1",
|
||||||
|
"repoUrl": "https://github.com/mempool/mempool",
|
||||||
|
"requires": [
|
||||||
|
"bitcoin-knots",
|
||||||
|
"electrumx"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "netbird",
|
||||||
|
"title": "NetBird",
|
||||||
|
"version": "2.38.0",
|
||||||
|
"description": "Self-hosted WireGuard mesh VPN control plane with dashboard, embedded identity provider, management API, signal, relay, and STUN. The user-facing entry point \u2014 a TLS proxy in front of the dashboard + server.",
|
||||||
|
"icon": "/assets/img/app-icons/netbird.svg",
|
||||||
|
"author": "NetBird",
|
||||||
|
"category": "networking",
|
||||||
|
"tier": "recommended",
|
||||||
|
"dockerImage": "docker.io/library/nginx:1.31.4-alpine",
|
||||||
|
"repoUrl": "https://github.com/netbirdio/netbird",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8087:80",
|
||||||
|
"8086:80",
|
||||||
|
"3478:3478/udp"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/netbird:/var/lib/netbird"
|
||||||
|
],
|
||||||
|
"notes": "Installed as a two-container stack: netbird dashboard on 8087 and netbird-server control plane on 8086 plus UDP 3478. For production clients, publish a DNS name over HTTPS with gRPC/WebSocket routing."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nextcloud",
|
||||||
|
"title": "Nextcloud",
|
||||||
|
"version": "29",
|
||||||
|
"description": "Your own private cloud. File sync, calendars, contacts.",
|
||||||
|
"icon": "/assets/img/app-icons/nextcloud.webp",
|
||||||
|
"author": "Nextcloud",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/nextcloud:29",
|
||||||
|
"repoUrl": "https://github.com/nextcloud/server",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8085:80"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/nextcloud:/var/www/html"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nginx-proxy-manager",
|
||||||
|
"title": "Nginx Proxy Manager",
|
||||||
|
"version": "2.12.1",
|
||||||
|
"description": "Reverse proxy with SSL. Beautiful web interface for managing proxies. On a node, this manages its admin UI and upstream configuration \u2014 the proxy's own :80/:443 listeners are not published (the node's web server owns those ports).",
|
||||||
|
"icon": "/assets/img/app-icons/nginx.svg",
|
||||||
|
"author": "Nginx Proxy Manager",
|
||||||
|
"category": "networking",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/nginx-proxy-manager:latest",
|
||||||
|
"repoUrl": "https://github.com/NginxProxyManager/nginx-proxy-manager"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nostr-rs-relay",
|
||||||
|
"title": "Nostr Relay (Rust)",
|
||||||
|
"version": "0.10.0",
|
||||||
|
"description": "High-performance Nostr relay written in Rust. Host your own decentralized social media relay and earn networking profits.",
|
||||||
|
"icon": "/assets/img/app-icons/nostrudel.svg",
|
||||||
|
"author": "Nostr RS Relay",
|
||||||
|
"category": "community",
|
||||||
|
"tier": "recommended",
|
||||||
|
"dockerImage": "scsibug/nostr-rs-relay:0.10.0",
|
||||||
|
"repoUrl": "https://github.com/scsibug/nostr-rs-relay",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8081:8080"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/nostr-relay:/usr/src/app/db"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"RELAY_NAME=Archipelago Nostr Relay",
|
||||||
|
"RELAY_DESCRIPTION=Self-hosted Nostr relay on Archipelago"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ollama",
|
||||||
|
"title": "Ollama",
|
||||||
|
"version": "0.5.4",
|
||||||
|
"description": "Run large language models locally. Download and run AI models like Llama, Mistral on your own hardware \u2014 served on the node's loopback for the AI assistant (Settings \u2192 Claude Auth \u2192 model backend), never exposed to the network.",
|
||||||
|
"icon": "/assets/img/app-icons/ollama.png",
|
||||||
|
"author": "Ollama",
|
||||||
|
"category": "community",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/ollama:latest",
|
||||||
|
"repoUrl": "https://github.com/ollama/ollama"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "phoenixd",
|
||||||
|
"title": "phoenixd",
|
||||||
|
"version": "0.9.0",
|
||||||
|
"description": "Headless Lightning daemon by ACINQ (the Phoenix wallet team). No screen of its own \u2014 it exposes a small local API that other apps and tools use to send and receive Lightning payments. Channel liquidity is managed automatically for a fee.",
|
||||||
|
"icon": "/assets/img/app-icons/phoenixd.svg",
|
||||||
|
"author": "ACINQ",
|
||||||
|
"category": "money",
|
||||||
|
"tier": "optional",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/phoenixd:0.9.0",
|
||||||
|
"repoUrl": "https://github.com/ACINQ/phoenixd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "photoprism",
|
||||||
|
"title": "PhotoPrism",
|
||||||
|
"version": "240915",
|
||||||
|
"description": "AI-powered photo management with facial recognition.",
|
||||||
|
"icon": "/assets/img/app-icons/photoprism.svg",
|
||||||
|
"author": "PhotoPrism",
|
||||||
|
"category": "data",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/photoprism:240915",
|
||||||
|
"repoUrl": "https://github.com/photoprism/photoprism",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"2342:2342"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/photoprism:/photoprism/storage"
|
||||||
|
],
|
||||||
|
"env": [
|
||||||
|
"PHOTOPRISM_ADMIN_PASSWORD=archipelago",
|
||||||
|
"PHOTOPRISM_DEFAULT_LOCALE=en"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "pine",
|
"id": "pine",
|
||||||
"title": "Pine",
|
"title": "Pine",
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"description": "A private voice assistant for your home. Pine runs speech-to-text (Whisper), text-to-speech (Piper) and wake-word detection (openWakeWord) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud. Ask it about your node — block height, sync, peers, Lightning balance — and, when a Claude API key is set, anything else.",
|
"description": "A private voice assistant for your home. Pine runs speech-to-text (Whisper), text-to-speech (Piper) and wake-word detection (openWakeWord) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud. Ask it about your node \u2014 block height, sync, peers, Lightning balance \u2014 and, when a Claude API key is set, anything else.",
|
||||||
"icon": "/assets/img/app-icons/pine.svg",
|
"icon": "/assets/img/app-icons/pine.svg",
|
||||||
"author": "Archipelago",
|
"author": "Archipelago",
|
||||||
"category": "home",
|
"category": "home",
|
||||||
@@ -382,26 +515,44 @@
|
|||||||
"repoUrl": "https://github.com/rhasspy/wyoming"
|
"repoUrl": "https://github.com/rhasspy/wyoming"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "grafana",
|
"id": "portainer",
|
||||||
"title": "Grafana",
|
"title": "Portainer",
|
||||||
"version": "10.2.0",
|
"version": "2.19.4",
|
||||||
"description": "Analytics and monitoring platform. Visualize metrics and create dashboards.",
|
"description": "Container management web UI for the local Podman socket.",
|
||||||
"icon": "/assets/img/app-icons/grafana.png",
|
"icon": "/assets/img/app-icons/portainer.webp",
|
||||||
"author": "Grafana Labs",
|
"author": "Portainer",
|
||||||
"category": "data",
|
"category": "development",
|
||||||
"tier": "recommended",
|
"tier": "optional",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/grafana:10.2.0",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/portainer:2.39.6",
|
||||||
"repoUrl": "https://github.com/grafana/grafana",
|
"repoUrl": "https://github.com/portainer/portainer",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"3000:3000"
|
"9000:9000"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/grafana:/var/lib/grafana"
|
"/var/lib/archipelago/portainer:/data",
|
||||||
|
"/run/user/1000/podman/podman.sock:/var/run/docker.sock"
|
||||||
],
|
],
|
||||||
"env": [
|
"notes": "Uses the manifest-owned Podman socket bind mount preparation path."
|
||||||
"GF_PATHS_DATA=/var/lib/grafana",
|
}
|
||||||
"GF_USERS_ALLOW_SIGN_UP=false"
|
},
|
||||||
|
{
|
||||||
|
"id": "searxng",
|
||||||
|
"title": "SearXNG",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Privacy-respecting metasearch engine. Search the web without tracking.",
|
||||||
|
"icon": "/assets/img/app-icons/searxng.png",
|
||||||
|
"author": "SearXNG",
|
||||||
|
"category": "data",
|
||||||
|
"tier": "recommended",
|
||||||
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/searxng:latest",
|
||||||
|
"repoUrl": "https://github.com/searxng/searxng",
|
||||||
|
"containerConfig": {
|
||||||
|
"ports": [
|
||||||
|
"8888:8080"
|
||||||
|
],
|
||||||
|
"volumes": [
|
||||||
|
"/var/lib/archipelago/searxng:/etc/searxng"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -433,51 +584,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"id": "portainer",
|
|
||||||
"title": "Portainer",
|
|
||||||
"version": "2.19.4",
|
|
||||||
"description": "Container management web UI for the local Podman socket.",
|
|
||||||
"icon": "/assets/img/app-icons/portainer.webp",
|
|
||||||
"author": "Portainer",
|
|
||||||
"category": "development",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/portainer:2.39.6",
|
|
||||||
"repoUrl": "https://github.com/portainer/portainer",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"9000:9000"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/portainer:/data",
|
|
||||||
"/run/user/1000/podman/podman.sock:/var/run/docker.sock"
|
|
||||||
],
|
|
||||||
"notes": "Uses the manifest-owned Podman socket bind mount preparation path."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "netbird",
|
|
||||||
"title": "NetBird",
|
|
||||||
"version": "2.38.0",
|
|
||||||
"description": "Self-hosted WireGuard mesh VPN control plane with dashboard, embedded identity provider, management API, signal, relay, and STUN. The user-facing entry point — a TLS proxy in front of the dashboard + server.",
|
|
||||||
"icon": "/assets/img/app-icons/netbird.svg",
|
|
||||||
"author": "NetBird",
|
|
||||||
"category": "networking",
|
|
||||||
"tier": "recommended",
|
|
||||||
"dockerImage": "docker.io/library/nginx:1.31.4-alpine",
|
|
||||||
"repoUrl": "https://github.com/netbirdio/netbird",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8087:80",
|
|
||||||
"8086:80",
|
|
||||||
"3478:3478/udp"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/netbird:/var/lib/netbird"
|
|
||||||
],
|
|
||||||
"notes": "Installed as a two-container stack: netbird dashboard on 8087 and netbird-server control plane on 8086 plus UDP 3478. For production clients, publish a DNS name over HTTPS with gRPC/WebSocket routing."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "uptime-kuma",
|
"id": "uptime-kuma",
|
||||||
"title": "Uptime Kuma",
|
"title": "Uptime Kuma",
|
||||||
@@ -507,82 +613,24 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "photoprism",
|
"id": "vaultwarden",
|
||||||
"title": "PhotoPrism",
|
"title": "Vaultwarden",
|
||||||
"version": "240915",
|
"version": "1.30.0",
|
||||||
"description": "AI-powered photo management with facial recognition.",
|
"description": "Self-hosted password vault with zero-knowledge encryption.",
|
||||||
"icon": "/assets/img/app-icons/photoprism.svg",
|
"icon": "/assets/img/app-icons/vaultwarden.webp",
|
||||||
"author": "PhotoPrism",
|
"author": "Vaultwarden",
|
||||||
"category": "data",
|
"category": "data",
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/photoprism:240915",
|
"tier": "recommended",
|
||||||
"repoUrl": "https://github.com/photoprism/photoprism",
|
"dockerImage": "source.archipelago-foundation.org/lfg2025/vaultwarden:1.37.1-alpine",
|
||||||
|
"repoUrl": "https://github.com/dani-garcia/vaultwarden",
|
||||||
"containerConfig": {
|
"containerConfig": {
|
||||||
"ports": [
|
"ports": [
|
||||||
"2342:2342"
|
"8082:80"
|
||||||
],
|
],
|
||||||
"volumes": [
|
"volumes": [
|
||||||
"/var/lib/archipelago/photoprism:/photoprism/storage"
|
"/var/lib/archipelago/vaultwarden:/data"
|
||||||
],
|
|
||||||
"env": [
|
|
||||||
"PHOTOPRISM_ADMIN_PASSWORD=archipelago",
|
|
||||||
"PHOTOPRISM_DEFAULT_LOCALE=en"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "nextcloud",
|
|
||||||
"title": "Nextcloud",
|
|
||||||
"version": "29",
|
|
||||||
"description": "Your own private cloud. File sync, calendars, contacts.",
|
|
||||||
"icon": "/assets/img/app-icons/nextcloud.webp",
|
|
||||||
"author": "Nextcloud",
|
|
||||||
"category": "data",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/nextcloud:29",
|
|
||||||
"repoUrl": "https://github.com/nextcloud/server",
|
|
||||||
"containerConfig": {
|
|
||||||
"ports": [
|
|
||||||
"8085:80"
|
|
||||||
],
|
|
||||||
"volumes": [
|
|
||||||
"/var/lib/archipelago/nextcloud:/var/www/html"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "alby-hub",
|
|
||||||
"title": "Alby Hub",
|
|
||||||
"version": "1.23.0",
|
|
||||||
"description": "Self-custodial Lightning wallet hub. Runs its own Lightning node on your Archipelago and connects your apps to it over Nostr Wallet Connect — one hub, every app pays through it.",
|
|
||||||
"icon": "/assets/img/app-icons/alby-hub.svg",
|
|
||||||
"author": "Alby",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/alby-hub:v1.24.0",
|
|
||||||
"repoUrl": "https://github.com/getAlby/hub"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "phoenixd",
|
|
||||||
"title": "phoenixd",
|
|
||||||
"version": "0.9.0",
|
|
||||||
"description": "Headless Lightning daemon by ACINQ (the Phoenix wallet team). No screen of its own — it exposes a small local API that other apps and tools use to send and receive Lightning payments. Channel liquidity is managed automatically for a fee.",
|
|
||||||
"icon": "/assets/img/app-icons/phoenixd.svg",
|
|
||||||
"author": "ACINQ",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/phoenixd:0.9.0",
|
|
||||||
"repoUrl": "https://github.com/ACINQ/phoenixd"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "cuprate",
|
|
||||||
"title": "Cuprate",
|
|
||||||
"version": "0.1.0-preview",
|
|
||||||
"description": "Alternative Monero node implementation in Rust. Independently validates Monero consensus rules, providing a layer of security and redundancy for the network.",
|
|
||||||
"icon": "/assets/img/app-icons/cuprate.svg",
|
|
||||||
"author": "Cuprate contributors",
|
|
||||||
"category": "money",
|
|
||||||
"tier": "optional",
|
|
||||||
"dockerImage": "source.archipelago-foundation.org/lfg2025/cuprate:0.1.0-preview-18-g618ff14",
|
|
||||||
"repoUrl": "https://github.com/Cuprate/cuprate"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+3588
-3213
File diff suppressed because one or more lines are too long
@@ -81,9 +81,6 @@ SINGLE = {
|
|||||||
"fedimint": "FEDIMINT_IMAGE",
|
"fedimint": "FEDIMINT_IMAGE",
|
||||||
"fedimint-gateway": "FEDIMINT_GATEWAY_IMAGE",
|
"fedimint-gateway": "FEDIMINT_GATEWAY_IMAGE",
|
||||||
"nostr-rs-relay": "NOSTR_RS_RELAY_IMAGE",
|
"nostr-rs-relay": "NOSTR_RS_RELAY_IMAGE",
|
||||||
"nostr-vpn": "NOSTR_VPN_IMAGE",
|
|
||||||
"fips": "FIPS_IMAGE",
|
|
||||||
"routstr": "ROUTSTR_IMAGE",
|
|
||||||
"adguardhome": "ADGUARDHOME_IMAGE",
|
"adguardhome": "ADGUARDHOME_IMAGE",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,13 +97,6 @@ STACK = {
|
|||||||
"immich_postgres": "IMMICH_POSTGRES_IMAGE",
|
"immich_postgres": "IMMICH_POSTGRES_IMAGE",
|
||||||
"immich_redis": "REDIS_IMAGE",
|
"immich_redis": "REDIS_IMAGE",
|
||||||
},
|
},
|
||||||
"penpot": {
|
|
||||||
"penpot-frontend": "PENPOT_FRONTEND_IMAGE",
|
|
||||||
"penpot-backend": "PENPOT_BACKEND_IMAGE",
|
|
||||||
"penpot-exporter": "PENPOT_EXPORTER_IMAGE",
|
|
||||||
"penpot-postgres": "PENPOT_POSTGRES_IMAGE",
|
|
||||||
"penpot-valkey": "PENPOT_VALKEY_IMAGE",
|
|
||||||
},
|
|
||||||
"mempool": {
|
"mempool": {
|
||||||
"archy-mempool-web": "MEMPOOL_WEB_IMAGE",
|
"archy-mempool-web": "MEMPOOL_WEB_IMAGE",
|
||||||
"mempool-api": "MEMPOOL_BACKEND_IMAGE",
|
"mempool-api": "MEMPOOL_BACKEND_IMAGE",
|
||||||
|
|||||||
@@ -99,13 +99,9 @@ VALKEY_IMAGE="$ARCHY_REGISTRY/valkey:8.1.6"
|
|||||||
# Nostr
|
# Nostr
|
||||||
NOSTR_RS_RELAY_IMAGE="$ARCHY_REGISTRY/nostr-rs-relay:0.10.0"
|
NOSTR_RS_RELAY_IMAGE="$ARCHY_REGISTRY/nostr-rs-relay:0.10.0"
|
||||||
STRFRY_IMAGE="$ARCHY_REGISTRY/strfry:1.0.4"
|
STRFRY_IMAGE="$ARCHY_REGISTRY/strfry:1.0.4"
|
||||||
NOSTR_VPN_IMAGE="$ARCHY_REGISTRY/nostr-vpn:v0.3.7"
|
|
||||||
NOSTR_VPN_UI_IMAGE="$ARCHY_REGISTRY/nostr-vpn-ui:latest"
|
|
||||||
FIPS_IMAGE="$ARCHY_REGISTRY/fips:v0.1.0"
|
|
||||||
FIPS_UI_IMAGE="$ARCHY_REGISTRY/fips-ui:1.7.123-alpha"
|
FIPS_UI_IMAGE="$ARCHY_REGISTRY/fips-ui:1.7.123-alpha"
|
||||||
|
|
||||||
# AI / Routing
|
# AI / Routing
|
||||||
ROUTSTR_IMAGE="$ARCHY_REGISTRY/routstr:v0.4.3"
|
|
||||||
|
|
||||||
# Community / Gaming
|
# Community / Gaming
|
||||||
BOTFIGHTS_IMAGE="$ARCHY_REGISTRY/botfights:1.2.11"
|
BOTFIGHTS_IMAGE="$ARCHY_REGISTRY/botfights:1.2.11"
|
||||||
@@ -127,12 +123,6 @@ GITEA_IMAGE="docker.io/gitea/gitea:1.23"
|
|||||||
IMMICH_POSTGRES_IMAGE="$ARCHY_REGISTRY/immich-postgres:14-vectorchord0.4.3-pgvectors0.2.0"
|
IMMICH_POSTGRES_IMAGE="$ARCHY_REGISTRY/immich-postgres:14-vectorchord0.4.3-pgvectors0.2.0"
|
||||||
IMMICH_SERVER_IMAGE="$ARCHY_REGISTRY/immich-server:release"
|
IMMICH_SERVER_IMAGE="$ARCHY_REGISTRY/immich-server:release"
|
||||||
|
|
||||||
# Penpot stack
|
|
||||||
PENPOT_POSTGRES_IMAGE="$ARCHY_REGISTRY/postgres:15"
|
|
||||||
PENPOT_VALKEY_IMAGE="$ARCHY_REGISTRY/valkey:8.1"
|
|
||||||
PENPOT_BACKEND_IMAGE="$ARCHY_REGISTRY/penpot-backend:2.4"
|
|
||||||
PENPOT_EXPORTER_IMAGE="$ARCHY_REGISTRY/penpot-exporter:2.4"
|
|
||||||
PENPOT_FRONTEND_IMAGE="$ARCHY_REGISTRY/penpot-frontend:2.4"
|
|
||||||
|
|
||||||
# Custom UI containers (built from docker/ dirs, pushed to registry)
|
# Custom UI containers (built from docker/ dirs, pushed to registry)
|
||||||
BITCOIN_UI_IMAGE="$ARCHY_REGISTRY/bitcoin-ui:1.7.123-alpha"
|
BITCOIN_UI_IMAGE="$ARCHY_REGISTRY/bitcoin-ui:1.7.123-alpha"
|
||||||
|
|||||||
Reference in New Issue
Block a user