From 37cfc9ae1a5db06251e033fba56bfcf242c7ce7d Mon Sep 17 00:00:00 2001 From: Padreug Date: Thu, 7 May 2026 11:33:42 +0200 Subject: [PATCH 01/18] Initial catalog migrated from aiolabs/lnbits:main extensions.json --- README.md | 71 ++++++++++++++ extensions.json | 256 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 README.md create mode 100644 extensions.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..be48bbf --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# lnbits-extensions — aiolabs catalog manifest + +A standalone catalog of LNbits extensions we make available across our +deployments. Just `extensions.json` + this README — no server code. + +## Why this is its own repo + +`extensions.json` is a **catalog** (what's available), not a +**dependency** (what's installed). Keeping it out of the lnbits server +fork (`aiolabs/lnbits`) means: + +- The server fork's `main` can be locked-down and slow-moving — only + real server code goes through PR review. +- Catalog updates (new versions, new extensions, deprecating an entry) + happen here on a different cadence and review bar. +- Hosts pull the catalog at runtime via `LNBITS_EXTENSIONS_MANIFESTS`, + so promoting a new extension version is a single commit here, not a + rebuild of every lnbits host. + +## How hosts consume it + +Server-deploy sets `services.lnbits.env.LNBITS_EXTENSIONS_MANIFESTS` to +the raw URL of `extensions.json` on this repo's `main`: + +``` +https://git.atitlan.io/aiolabs/lnbits-extensions/raw/branch/main/extensions.json +``` + +LNbits fetches that URL on boot, builds the in-app catalog from it, and +verifies each downloaded archive against the per-entry `hash` field +(sha256). That `hash` is the integrity guarantee — without a matching +sha256, lnbits refuses to install. So even though the manifest itself +is fetched at runtime, the *artifacts* installed are content-addressed. + +## How to add or update an entry + +Each entry has a stable schema (see `extensions.json`); the required +fields are `id`, `repo`, `name`, `version`, `short_description`, +`archive`, and `hash`. + +To add a new extension or version: + +1. Tag a release in the source extension repo (e.g. + `git.atitlan.io/aiolabs/` `v0.0.5`). +2. Compute the sha256 of the archive: + ```sh + curl -sL https://git.atitlan.io/aiolabs//archive/v0.0.5.zip \ + | sha256sum + ``` +3. Append a new object to `extensions.extensions[]`. Multiple versions + of the same `id` are allowed — lnbits picks the highest the host's + `min_lnbits_version` permits. +4. Commit + push to `main`. Hosts pick up the change on next lnbits + restart. + +## Featured extensions + +`extensions.featured[]` is the array of `id`s shown prominently in the +lnbits "Manage Extensions" UI. Add an `id` here when an extension is +considered the canonical choice for a category (e.g. `libra` for +accounting); remove when superseded. + +## Why we don't include the lnbits upstream manifest + +We could chain ours with +`https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json` +in `LNBITS_EXTENSIONS_MANIFESTS`, but a tight curated catalog is a +feature, not a limitation, for our deployments — every available +extension on a host is one we've explicitly vetted. The upstream +catalog is mirrored at `~/dev/refs/repos/lnbits/lnbits-extensions/` for +awareness if we want to lift a specific extension. diff --git a/extensions.json b/extensions.json new file mode 100644 index 0000000..0914208 --- /dev/null +++ b/extensions.json @@ -0,0 +1,256 @@ +{ + "featured": [ + "satmachineclient", + "libra" + ], + "extensions": [ + { + "id": "satmachineadmin", + "repo": "https://git.atitlan.io/aiolabs/satmachineadmin", + "name": "Satoshi Machine Admin", + "min_lnbits_version": "1.4.0", + "version": "0.0.3", + "short_description": "Admin Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineadmin/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineadmin/archive/v0.0.3.zip", + "hash": "0cf520ee62037298320d8c0caa6f15d89858447d826af53472cb369023eda46d" + }, + { + "id": "satmachineadmin", + "repo": "https://git.atitlan.io/aiolabs/satmachineadmin", + "name": "Satoshi Machine Admin", + "version": "0.0.4", + "short_description": "Admin Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineadmin/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineadmin/archive/v0.0.4.zip", + "hash": "f5a6e33e6379984964cd0a4b25225770c4356c5c8a62c8e811b712775a180615" + }, + { + "id": "satmachineadmin", + "repo": "https://git.atitlan.io/aiolabs/satmachineadmin", + "name": "Satoshi Machine Admin", + "version": "0.0.5", + "short_description": "Admin Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineadmin/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineadmin/archive/v0.0.5.zip", + "hash": "a342a349504c25eb99b5d9a45ea88ea6bfcc21d628068dde1b5fda374d01da68" + }, + { + "id": "satmachineclient", + "repo": "https://git.atitlan.io/aiolabs/satmachineclient", + "name": "Satoshi Machine Client", + "version": "0.0.1", + "short_description": "Client Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineclient/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineclient/archive/v0.0.1.zip", + "hash": "05cf74b0f8a39953ad9c063c40a983d6223ebbfa906f5598b6ebe2c58eccfd9a" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "0.0.1", + "short_description": "AIO fork of aiolabs/events", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v0.0.1.zip", + "hash": "410ac9c340551aabe88e0dc7393ed30dc7f4703f1345af5e6b02b0ebc5337d52" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "0.0.2", + "short_description": "AIO fork of aiolabs/events", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v0.0.2.zip", + "hash": "4ac140b97b164f81c482cc19da07a79e961685ae146dc89cba6d12e7d5e80716" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.2.1-aio.1", + "short_description": "AIO fork of lnbits/events", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.2.1-aio.1.zip", + "hash": "73fa1f8859d6e776768b0669002701707a423781474a57780bed68f70a2b7841" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.2.1-aio.2", + "short_description": "NIP-52 Nostr publishing, approval workflow, bidirectional sync", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.2.1-aio.2.zip", + "hash": "d20b7c9ee23b5d9ef71528408da94a127a2ef40277b2b30ee7e78e644da55df8" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.3.0-aio.1", + "short_description": "Rebased onto upstream v1.3.0; approval workflow, NIP-52 bidirectional Nostr sync, optional user_id tickets", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.3.0-aio.1.zip", + "hash": "d7a5f3110eae5402af2d64a890ea6aa8e112c47dd5ce6299224e0231f0706cb0" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.3.0-aio.2", + "short_description": "Rebased onto upstream v1.3.0; approval workflow, NIP-52 bidirectional Nostr sync, optional user_id tickets", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.3.0-aio.2.zip", + "hash": "ccfa652dc0a5ca2474fa138f9ed6af15a33db7f211e3b66cb162bbfe04be2be0" + }, + { + "id": "nostrclient", + "repo": "https://git.atitlan.io/aiolabs/nostrclient", + "name": "AIO nostrclient", + "version": "0.0.1", + "short_description": "AIO fork of aiolabs/nostrclient", + "icon": "https://git.atitlan.io/aiolabs/nostrclient/raw/branch/main/static/images/nostr-bitcoin.png", + "archive": "https://git.atitlan.io/aiolabs/nostrclient/archive/v0.0.1.zip", + "hash": "7f0b1861243a10d16d41d17bc6e64616d61c6b299a86f40dc1a0f9cfc7f9725a" + }, + { + "id": "nostrclient", + "repo": "https://git.atitlan.io/aiolabs/nostrclient", + "name": "AIO nostrclient", + "version": "1.2.0-aio.1", + "short_description": "AIO fork of lnbits/nostrclient", + "icon": "https://git.atitlan.io/aiolabs/nostrclient/raw/branch/main/static/images/nostr-bitcoin.png", + "archive": "https://git.atitlan.io/aiolabs/nostrclient/archive/v1.2.0-aio.1.zip", + "hash": "7f0b1861243a10d16d41d17bc6e64616d61c6b299a86f40dc1a0f9cfc7f9725a" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "0.0.1", + "short_description": "AIO fork of aiolabs/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v0.0.1.zip", + "hash": "7599485232c600c00896caac15c0fdec07aef26d2cce95c9b2df85b9807bf4f3" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "1.1.0-aio.1", + "short_description": "AIO fork of lnbits/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v1.1.0-aio.1.zip", + "hash": "edfd11c995a091f71f6439038e6d6ca06cd591abea114e6ac306a6ed5854eb6a" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "1.1.0-aio.2", + "short_description": "AIO fork of lnbits/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v1.1.0-aio.2.zip", + "hash": "35bd9d20ef43a108ad3b6f0f6a64e3ba56a5b9938ebcf4839f8bc72f3058b23d" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "1.1.0-aio.3", + "short_description": "AIO fork of lnbits/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v1.1.0-aio.3.zip", + "hash": "f887d25768586920b21c564afd526e218f42bb2ce114b5934c182be1dacb9897" + }, + { + "id": "nostrrelay", + "repo": "https://git.atitlan.io/aiolabs/nostrrelay", + "name": "AIO Nostrrelay", + "version": "0.0.2", + "short_description": "AIO fork of aiolabs/nostrrelay", + "icon": "https://git.atitlan.io/aiolabs/nostrrelay/raw/branch/main/static/image/nostrrelay.png", + "archive": "https://git.atitlan.io/aiolabs/nostrrelay/archive/v0.0.2.zip", + "hash": "6e353358314b740679e55e2ff98c7024a97c6df8bf27d1784e8cee448407bebd" + }, + { + "id": "nostrrelay", + "repo": "https://git.atitlan.io/aiolabs/nostrrelay", + "name": "AIO Nostrrelay", + "version": "1.1.0-aio.1", + "short_description": "AIO fork of lnbits/nostrrelay", + "icon": "https://git.atitlan.io/aiolabs/nostrrelay/raw/branch/main/static/image/nostrrelay.png", + "archive": "https://git.atitlan.io/aiolabs/nostrrelay/archive/v1.1.0-aio.1.zip", + "hash": "0826d16b985be4e9199841223ccd6777aa85120fb6f576dc00c159fef37dd61f" + }, + { + "id": "nostrrelay", + "repo": "https://git.atitlan.io/aiolabs/nostrrelay", + "name": "AIO Nostrrelay", + "version": "1.1.0-aio.2", + "short_description": "AIO fork of lnbits/nostrrelay", + "icon": "https://git.atitlan.io/aiolabs/nostrrelay/raw/branch/main/static/image/nostrrelay.png", + "archive": "https://git.atitlan.io/aiolabs/nostrrelay/archive/v1.1.0-aio.2.zip", + "hash": "2f5435b4849b7d1e8f4af456d88ad336f78132d5db0ec5d60efe304034c1c5cc" + }, + { + "id": "withdraw", + "repo": "https://git.atitlan.io/aiolabs/withdraw", + "name": "AIO Withdraw", + "version": "1.2.2-aio.1", + "short_description": "AIO fork of lnbits/withdraw", + "icon": "https://github.com/lnbits/withdraw/raw/main/static/image/lnurl-withdraw.png", + "archive": "https://git.atitlan.io/aiolabs/withdraw/archive/v1.2.2-aio.1.zip", + "hash": "38c9baf92966b6d8bdb13af12cf324cff4bafd19510cd56650d69e864011492d" + }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.1.0", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.1.0.zip", + "hash": "b3dc77d95047b3ef0733bd2ae761b547bc8d2275cb022ec071a1ab276d9683da" + }, + { + "id": "lnurlp", + "repo": "https://github.com/lnbits/lnurlp", + "name": "Pay Links", + "version": "1.1.3", + "min_lnbits_version": "1.3.0", + "short_description": "Make reusable LNURL pay links", + "icon": "https://github.com/lnbits/lnurlp/raw/main/static/image/lnurl-pay.png", + "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", + "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.1.3.zip", + "hash": "913b6880fd824e801f05ae50ed6f57817c9a580f1ed1b02b435823d5754e1b98", + "max_lnbits_version": "1.4.0" + }, + { + "id": "lnurlp", + "repo": "https://github.com/lnbits/lnurlp", + "name": "Pay Links", + "version": "1.3.0", + "min_lnbits_version": "1.4.0", + "short_description": "Make reusable LNURL pay links", + "icon": "https://github.com/lnbits/lnurlp/raw/main/static/image/lnurl-pay.png", + "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", + "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.3.0.zip", + "hash": "71701b5756628fec6d7418192158c647e840e1fbf9a65e6fd2372bc73f626562" + }, + { + "id": "lnurlp", + "repo": "https://github.com/lnbits/lnurlp", + "name": "Pay Links", + "version": "1.2.0", + "min_lnbits_version": "1.4.0", + "short_description": "Make reusable LNURL pay links", + "icon": "https://github.com/lnbits/lnurlp/raw/main/static/image/lnurl-pay.png", + "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", + "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.2.0.zip", + "hash": "d3872eb5f65b9e962fc201d6784f94f3fd576284582b980805142a2b3f62d8e8" + } + ] +} From 8719e9f01b0f5f30d2b846a9c245f5ebbda5175d Mon Sep 17 00:00:00 2001 From: Padreug Date: Thu, 7 May 2026 11:33:42 +0200 Subject: [PATCH 02/18] Initial catalog migrated from aiolabs/lnbits:main extensions.json --- README.md | 71 ++++++++++++++ extensions.json | 256 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 README.md create mode 100644 extensions.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..be48bbf --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# lnbits-extensions — aiolabs catalog manifest + +A standalone catalog of LNbits extensions we make available across our +deployments. Just `extensions.json` + this README — no server code. + +## Why this is its own repo + +`extensions.json` is a **catalog** (what's available), not a +**dependency** (what's installed). Keeping it out of the lnbits server +fork (`aiolabs/lnbits`) means: + +- The server fork's `main` can be locked-down and slow-moving — only + real server code goes through PR review. +- Catalog updates (new versions, new extensions, deprecating an entry) + happen here on a different cadence and review bar. +- Hosts pull the catalog at runtime via `LNBITS_EXTENSIONS_MANIFESTS`, + so promoting a new extension version is a single commit here, not a + rebuild of every lnbits host. + +## How hosts consume it + +Server-deploy sets `services.lnbits.env.LNBITS_EXTENSIONS_MANIFESTS` to +the raw URL of `extensions.json` on this repo's `main`: + +``` +https://git.atitlan.io/aiolabs/lnbits-extensions/raw/branch/main/extensions.json +``` + +LNbits fetches that URL on boot, builds the in-app catalog from it, and +verifies each downloaded archive against the per-entry `hash` field +(sha256). That `hash` is the integrity guarantee — without a matching +sha256, lnbits refuses to install. So even though the manifest itself +is fetched at runtime, the *artifacts* installed are content-addressed. + +## How to add or update an entry + +Each entry has a stable schema (see `extensions.json`); the required +fields are `id`, `repo`, `name`, `version`, `short_description`, +`archive`, and `hash`. + +To add a new extension or version: + +1. Tag a release in the source extension repo (e.g. + `git.atitlan.io/aiolabs/` `v0.0.5`). +2. Compute the sha256 of the archive: + ```sh + curl -sL https://git.atitlan.io/aiolabs//archive/v0.0.5.zip \ + | sha256sum + ``` +3. Append a new object to `extensions.extensions[]`. Multiple versions + of the same `id` are allowed — lnbits picks the highest the host's + `min_lnbits_version` permits. +4. Commit + push to `main`. Hosts pick up the change on next lnbits + restart. + +## Featured extensions + +`extensions.featured[]` is the array of `id`s shown prominently in the +lnbits "Manage Extensions" UI. Add an `id` here when an extension is +considered the canonical choice for a category (e.g. `libra` for +accounting); remove when superseded. + +## Why we don't include the lnbits upstream manifest + +We could chain ours with +`https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json` +in `LNBITS_EXTENSIONS_MANIFESTS`, but a tight curated catalog is a +feature, not a limitation, for our deployments — every available +extension on a host is one we've explicitly vetted. The upstream +catalog is mirrored at `~/dev/refs/repos/lnbits/lnbits-extensions/` for +awareness if we want to lift a specific extension. diff --git a/extensions.json b/extensions.json new file mode 100644 index 0000000..0914208 --- /dev/null +++ b/extensions.json @@ -0,0 +1,256 @@ +{ + "featured": [ + "satmachineclient", + "libra" + ], + "extensions": [ + { + "id": "satmachineadmin", + "repo": "https://git.atitlan.io/aiolabs/satmachineadmin", + "name": "Satoshi Machine Admin", + "min_lnbits_version": "1.4.0", + "version": "0.0.3", + "short_description": "Admin Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineadmin/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineadmin/archive/v0.0.3.zip", + "hash": "0cf520ee62037298320d8c0caa6f15d89858447d826af53472cb369023eda46d" + }, + { + "id": "satmachineadmin", + "repo": "https://git.atitlan.io/aiolabs/satmachineadmin", + "name": "Satoshi Machine Admin", + "version": "0.0.4", + "short_description": "Admin Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineadmin/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineadmin/archive/v0.0.4.zip", + "hash": "f5a6e33e6379984964cd0a4b25225770c4356c5c8a62c8e811b712775a180615" + }, + { + "id": "satmachineadmin", + "repo": "https://git.atitlan.io/aiolabs/satmachineadmin", + "name": "Satoshi Machine Admin", + "version": "0.0.5", + "short_description": "Admin Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineadmin/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineadmin/archive/v0.0.5.zip", + "hash": "a342a349504c25eb99b5d9a45ea88ea6bfcc21d628068dde1b5fda374d01da68" + }, + { + "id": "satmachineclient", + "repo": "https://git.atitlan.io/aiolabs/satmachineclient", + "name": "Satoshi Machine Client", + "version": "0.0.1", + "short_description": "Client Dashboard for Satoshi Machine", + "icon": "https://git.atitlan.io/aiolabs/satmachineclient/raw/branch/main/static/image/aio.png", + "archive": "https://git.atitlan.io/aiolabs/satmachineclient/archive/v0.0.1.zip", + "hash": "05cf74b0f8a39953ad9c063c40a983d6223ebbfa906f5598b6ebe2c58eccfd9a" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "0.0.1", + "short_description": "AIO fork of aiolabs/events", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v0.0.1.zip", + "hash": "410ac9c340551aabe88e0dc7393ed30dc7f4703f1345af5e6b02b0ebc5337d52" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "0.0.2", + "short_description": "AIO fork of aiolabs/events", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v0.0.2.zip", + "hash": "4ac140b97b164f81c482cc19da07a79e961685ae146dc89cba6d12e7d5e80716" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.2.1-aio.1", + "short_description": "AIO fork of lnbits/events", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.2.1-aio.1.zip", + "hash": "73fa1f8859d6e776768b0669002701707a423781474a57780bed68f70a2b7841" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.2.1-aio.2", + "short_description": "NIP-52 Nostr publishing, approval workflow, bidirectional sync", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.2.1-aio.2.zip", + "hash": "d20b7c9ee23b5d9ef71528408da94a127a2ef40277b2b30ee7e78e644da55df8" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.3.0-aio.1", + "short_description": "Rebased onto upstream v1.3.0; approval workflow, NIP-52 bidirectional Nostr sync, optional user_id tickets", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.3.0-aio.1.zip", + "hash": "d7a5f3110eae5402af2d64a890ea6aa8e112c47dd5ce6299224e0231f0706cb0" + }, + { + "id": "events", + "repo": "https://git.atitlan.io/aiolabs/events", + "name": "AIO Events", + "version": "1.3.0-aio.2", + "short_description": "Rebased onto upstream v1.3.0; approval workflow, NIP-52 bidirectional Nostr sync, optional user_id tickets", + "icon": "https://git.atitlan.io/aiolabs/events/raw/branch/main/static/image/events.png", + "archive": "https://git.atitlan.io/aiolabs/events/archive/v1.3.0-aio.2.zip", + "hash": "ccfa652dc0a5ca2474fa138f9ed6af15a33db7f211e3b66cb162bbfe04be2be0" + }, + { + "id": "nostrclient", + "repo": "https://git.atitlan.io/aiolabs/nostrclient", + "name": "AIO nostrclient", + "version": "0.0.1", + "short_description": "AIO fork of aiolabs/nostrclient", + "icon": "https://git.atitlan.io/aiolabs/nostrclient/raw/branch/main/static/images/nostr-bitcoin.png", + "archive": "https://git.atitlan.io/aiolabs/nostrclient/archive/v0.0.1.zip", + "hash": "7f0b1861243a10d16d41d17bc6e64616d61c6b299a86f40dc1a0f9cfc7f9725a" + }, + { + "id": "nostrclient", + "repo": "https://git.atitlan.io/aiolabs/nostrclient", + "name": "AIO nostrclient", + "version": "1.2.0-aio.1", + "short_description": "AIO fork of lnbits/nostrclient", + "icon": "https://git.atitlan.io/aiolabs/nostrclient/raw/branch/main/static/images/nostr-bitcoin.png", + "archive": "https://git.atitlan.io/aiolabs/nostrclient/archive/v1.2.0-aio.1.zip", + "hash": "7f0b1861243a10d16d41d17bc6e64616d61c6b299a86f40dc1a0f9cfc7f9725a" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "0.0.1", + "short_description": "AIO fork of aiolabs/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v0.0.1.zip", + "hash": "7599485232c600c00896caac15c0fdec07aef26d2cce95c9b2df85b9807bf4f3" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "1.1.0-aio.1", + "short_description": "AIO fork of lnbits/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v1.1.0-aio.1.zip", + "hash": "edfd11c995a091f71f6439038e6d6ca06cd591abea114e6ac306a6ed5854eb6a" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "1.1.0-aio.2", + "short_description": "AIO fork of lnbits/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v1.1.0-aio.2.zip", + "hash": "35bd9d20ef43a108ad3b6f0f6a64e3ba56a5b9938ebcf4839f8bc72f3058b23d" + }, + { + "id": "nostrmarket", + "repo": "https://git.atitlan.io/aiolabs/nostrmarket", + "name": "AIO nostrmarket", + "version": "1.1.0-aio.3", + "short_description": "AIO fork of lnbits/nostrmarket", + "icon": "https://git.atitlan.io/aiolabs/nostrmarket/raw/branch/main/static/image/bitcoin-shop.png", + "archive": "https://git.atitlan.io/aiolabs/nostrmarket/archive/v1.1.0-aio.3.zip", + "hash": "f887d25768586920b21c564afd526e218f42bb2ce114b5934c182be1dacb9897" + }, + { + "id": "nostrrelay", + "repo": "https://git.atitlan.io/aiolabs/nostrrelay", + "name": "AIO Nostrrelay", + "version": "0.0.2", + "short_description": "AIO fork of aiolabs/nostrrelay", + "icon": "https://git.atitlan.io/aiolabs/nostrrelay/raw/branch/main/static/image/nostrrelay.png", + "archive": "https://git.atitlan.io/aiolabs/nostrrelay/archive/v0.0.2.zip", + "hash": "6e353358314b740679e55e2ff98c7024a97c6df8bf27d1784e8cee448407bebd" + }, + { + "id": "nostrrelay", + "repo": "https://git.atitlan.io/aiolabs/nostrrelay", + "name": "AIO Nostrrelay", + "version": "1.1.0-aio.1", + "short_description": "AIO fork of lnbits/nostrrelay", + "icon": "https://git.atitlan.io/aiolabs/nostrrelay/raw/branch/main/static/image/nostrrelay.png", + "archive": "https://git.atitlan.io/aiolabs/nostrrelay/archive/v1.1.0-aio.1.zip", + "hash": "0826d16b985be4e9199841223ccd6777aa85120fb6f576dc00c159fef37dd61f" + }, + { + "id": "nostrrelay", + "repo": "https://git.atitlan.io/aiolabs/nostrrelay", + "name": "AIO Nostrrelay", + "version": "1.1.0-aio.2", + "short_description": "AIO fork of lnbits/nostrrelay", + "icon": "https://git.atitlan.io/aiolabs/nostrrelay/raw/branch/main/static/image/nostrrelay.png", + "archive": "https://git.atitlan.io/aiolabs/nostrrelay/archive/v1.1.0-aio.2.zip", + "hash": "2f5435b4849b7d1e8f4af456d88ad336f78132d5db0ec5d60efe304034c1c5cc" + }, + { + "id": "withdraw", + "repo": "https://git.atitlan.io/aiolabs/withdraw", + "name": "AIO Withdraw", + "version": "1.2.2-aio.1", + "short_description": "AIO fork of lnbits/withdraw", + "icon": "https://github.com/lnbits/withdraw/raw/main/static/image/lnurl-withdraw.png", + "archive": "https://git.atitlan.io/aiolabs/withdraw/archive/v1.2.2-aio.1.zip", + "hash": "38c9baf92966b6d8bdb13af12cf324cff4bafd19510cd56650d69e864011492d" + }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.1.0", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.1.0.zip", + "hash": "b3dc77d95047b3ef0733bd2ae761b547bc8d2275cb022ec071a1ab276d9683da" + }, + { + "id": "lnurlp", + "repo": "https://github.com/lnbits/lnurlp", + "name": "Pay Links", + "version": "1.1.3", + "min_lnbits_version": "1.3.0", + "short_description": "Make reusable LNURL pay links", + "icon": "https://github.com/lnbits/lnurlp/raw/main/static/image/lnurl-pay.png", + "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", + "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.1.3.zip", + "hash": "913b6880fd824e801f05ae50ed6f57817c9a580f1ed1b02b435823d5754e1b98", + "max_lnbits_version": "1.4.0" + }, + { + "id": "lnurlp", + "repo": "https://github.com/lnbits/lnurlp", + "name": "Pay Links", + "version": "1.3.0", + "min_lnbits_version": "1.4.0", + "short_description": "Make reusable LNURL pay links", + "icon": "https://github.com/lnbits/lnurlp/raw/main/static/image/lnurl-pay.png", + "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", + "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.3.0.zip", + "hash": "71701b5756628fec6d7418192158c647e840e1fbf9a65e6fd2372bc73f626562" + }, + { + "id": "lnurlp", + "repo": "https://github.com/lnbits/lnurlp", + "name": "Pay Links", + "version": "1.2.0", + "min_lnbits_version": "1.4.0", + "short_description": "Make reusable LNURL pay links", + "icon": "https://github.com/lnbits/lnurlp/raw/main/static/image/lnurl-pay.png", + "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", + "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.2.0.zip", + "hash": "d3872eb5f65b9e962fc201d6784f94f3fd576284582b980805142a2b3f62d8e8" + } + ] +} From a64d52afa2ec9ad1d8a5d076a01dc9e592e6bf4f Mon Sep 17 00:00:00 2001 From: Padreug Date: Mon, 11 May 2026 19:50:02 +0200 Subject: [PATCH 03/18] =?UTF-8?q?feat(restaurant):=20add=20v0.1.0=20?= =?UTF-8?q?=E2=80=94=20first=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restaurant CMS extension (menus, modifiers, inventory, orders, KDS, print queue). Lightning-native via LNbits, Nostr-published menus (NIP-99). Customer surface ships in aiolabs/webapp's restaurant bundle. Repo: https://git.atitlan.io/aiolabs/restaurant Tag: v0.1.0 --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index 0914208..b36cf22 100644 --- a/extensions.json +++ b/extensions.json @@ -251,6 +251,17 @@ "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.2.0.zip", "hash": "d3872eb5f65b9e962fc201d6784f94f3fd576284582b980805142a2b3f62d8e8" + }, + { + "id": "restaurant", + "repo": "https://git.atitlan.io/aiolabs/restaurant", + "name": "Restaurant", + "min_lnbits_version": "1.3.0", + "version": "0.1.0", + "short_description": "Restaurant CMS: menus, modifiers, inventory, orders, KDS, printer. Lightning-native via LNbits, Nostr-published menus (NIP-99) and order DMs (NIP-17).", + "icon": "https://git.atitlan.io/aiolabs/restaurant/raw/branch/main/static/image/restaurant.png", + "archive": "https://git.atitlan.io/aiolabs/restaurant/archive/v0.1.0.zip", + "hash": "4a7284ca485019238d0a05fb7b7b97366a8d04e3343ce2441beb37b55d78fb67" } ] } From b451fccb689f97400f64b0897c8338a104268a14 Mon Sep 17 00:00:00 2001 From: Padreug Date: Mon, 11 May 2026 19:50:02 +0200 Subject: [PATCH 04/18] =?UTF-8?q?feat(restaurant):=20add=20v0.1.0=20?= =?UTF-8?q?=E2=80=94=20first=20release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restaurant CMS extension (menus, modifiers, inventory, orders, KDS, print queue). Lightning-native via LNbits, Nostr-published menus (NIP-99). Customer surface ships in aiolabs/webapp's restaurant bundle. Repo: https://git.atitlan.io/aiolabs/restaurant Tag: v0.1.0 --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index 0914208..b36cf22 100644 --- a/extensions.json +++ b/extensions.json @@ -251,6 +251,17 @@ "details_link": "https://raw.githubusercontent.com/lnbits/lnurlp/main/config.json", "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.2.0.zip", "hash": "d3872eb5f65b9e962fc201d6784f94f3fd576284582b980805142a2b3f62d8e8" + }, + { + "id": "restaurant", + "repo": "https://git.atitlan.io/aiolabs/restaurant", + "name": "Restaurant", + "min_lnbits_version": "1.3.0", + "version": "0.1.0", + "short_description": "Restaurant CMS: menus, modifiers, inventory, orders, KDS, printer. Lightning-native via LNbits, Nostr-published menus (NIP-99) and order DMs (NIP-17).", + "icon": "https://git.atitlan.io/aiolabs/restaurant/raw/branch/main/static/image/restaurant.png", + "archive": "https://git.atitlan.io/aiolabs/restaurant/archive/v0.1.0.zip", + "hash": "4a7284ca485019238d0a05fb7b7b97366a8d04e3343ce2441beb37b55d78fb67" } ] } From 5dac3c14836ad8651be6b716fb5469b128401615 Mon Sep 17 00:00:00 2001 From: Padreug Date: Wed, 13 May 2026 08:42:01 +0200 Subject: [PATCH 05/18] extensions: add aiolabs lnurlp fork (v1.3.0-aio.1) First aiolabs build off lnbits/lnurlp v1.3.0. Upstream github.com entries kept; this new entry points at the forgejo fork archive. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index b36cf22..e9693b2 100644 --- a/extensions.json +++ b/extensions.json @@ -252,6 +252,17 @@ "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.2.0.zip", "hash": "d3872eb5f65b9e962fc201d6784f94f3fd576284582b980805142a2b3f62d8e8" }, + { + "id": "lnurlp", + "repo": "https://git.atitlan.io/aiolabs/lnurlp", + "name": "Pay Links", + "min_lnbits_version": "1.4.0", + "version": "1.3.0-aio.1", + "short_description": "Make reusable LNURL pay links", + "icon": "https://git.atitlan.io/aiolabs/lnurlp/raw/branch/main/static/image/lnurl-pay.png", + "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.1.zip", + "hash": "1b3b982aea53d7935a551fd069efd8ba0f362834494cef14c115ae38b6b54a08" + }, { "id": "restaurant", "repo": "https://git.atitlan.io/aiolabs/restaurant", From be0c023b5c8900d4eb0b1a02be8500ee57df1fdc Mon Sep 17 00:00:00 2001 From: Padreug Date: Wed, 13 May 2026 08:42:01 +0200 Subject: [PATCH 06/18] extensions: add aiolabs lnurlp fork (v1.3.0-aio.1) First aiolabs build off lnbits/lnurlp v1.3.0. Upstream github.com entries kept; this new entry points at the forgejo fork archive. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index b36cf22..e9693b2 100644 --- a/extensions.json +++ b/extensions.json @@ -252,6 +252,17 @@ "archive": "https://github.com/lnbits/lnurlp/archive/refs/tags/v1.2.0.zip", "hash": "d3872eb5f65b9e962fc201d6784f94f3fd576284582b980805142a2b3f62d8e8" }, + { + "id": "lnurlp", + "repo": "https://git.atitlan.io/aiolabs/lnurlp", + "name": "Pay Links", + "min_lnbits_version": "1.4.0", + "version": "1.3.0-aio.1", + "short_description": "Make reusable LNURL pay links", + "icon": "https://git.atitlan.io/aiolabs/lnurlp/raw/branch/main/static/image/lnurl-pay.png", + "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.1.zip", + "hash": "1b3b982aea53d7935a551fd069efd8ba0f362834494cef14c115ae38b6b54a08" + }, { "id": "restaurant", "repo": "https://git.atitlan.io/aiolabs/restaurant", From 8a01efe10f93700edb2683f132e7f7e9a1acb1b7 Mon Sep 17 00:00:00 2001 From: Padreug Date: Thu, 14 May 2026 09:35:59 +0200 Subject: [PATCH 07/18] extensions: add aiolabs splitpayments fork (v1.1.0-aio.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First aiolabs build off lnbits/splitpayments v1.1.0 via the PatMulligan fork (org rename + uv migration + wallet-select + typo fixes). No upstream entry to keep — splitpayments wasn't previously listed. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index e9693b2..cac0109 100644 --- a/extensions.json +++ b/extensions.json @@ -263,6 +263,17 @@ "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.1.zip", "hash": "1b3b982aea53d7935a551fd069efd8ba0f362834494cef14c115ae38b6b54a08" }, + { + "id": "splitpayments", + "repo": "https://git.atitlan.io/aiolabs/splitpayments", + "name": "Split Payments", + "min_lnbits_version": "1.3.0", + "version": "1.1.0-aio.1", + "short_description": "Split incoming payments across wallets", + "icon": "https://git.atitlan.io/aiolabs/splitpayments/raw/branch/main/static/image/split-payments.png", + "archive": "https://git.atitlan.io/aiolabs/splitpayments/archive/v1.1.0-aio.1.zip", + "hash": "dcde1f1127810a3b8655e07eb5b4b789e4cc787c8ceee7be2d7f7921edc2df99" + }, { "id": "restaurant", "repo": "https://git.atitlan.io/aiolabs/restaurant", From 7be3f88a4bf97d808778b757106b8c4fa808029b Mon Sep 17 00:00:00 2001 From: Padreug Date: Thu, 14 May 2026 09:35:59 +0200 Subject: [PATCH 08/18] extensions: add aiolabs splitpayments fork (v1.1.0-aio.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First aiolabs build off lnbits/splitpayments v1.1.0 via the PatMulligan fork (org rename + uv migration + wallet-select + typo fixes). No upstream entry to keep — splitpayments wasn't previously listed. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index e9693b2..cac0109 100644 --- a/extensions.json +++ b/extensions.json @@ -263,6 +263,17 @@ "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.1.zip", "hash": "1b3b982aea53d7935a551fd069efd8ba0f362834494cef14c115ae38b6b54a08" }, + { + "id": "splitpayments", + "repo": "https://git.atitlan.io/aiolabs/splitpayments", + "name": "Split Payments", + "min_lnbits_version": "1.3.0", + "version": "1.1.0-aio.1", + "short_description": "Split incoming payments across wallets", + "icon": "https://git.atitlan.io/aiolabs/splitpayments/raw/branch/main/static/image/split-payments.png", + "archive": "https://git.atitlan.io/aiolabs/splitpayments/archive/v1.1.0-aio.1.zip", + "hash": "dcde1f1127810a3b8655e07eb5b4b789e4cc787c8ceee7be2d7f7921edc2df99" + }, { "id": "restaurant", "repo": "https://git.atitlan.io/aiolabs/restaurant", From d104e1113eba2c7694537771393f998d4ea08f53 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 15:51:23 +0200 Subject: [PATCH 09/18] extensions: bump libra to v0.2.0 Adds user-facing income/revenue submission endpoint, SUBMIT_INCOME permission, and assorted UI polish on the pending-approvals view. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extensions.json b/extensions.json index cac0109..e1ce4ac 100644 --- a/extensions.json +++ b/extensions.json @@ -215,6 +215,16 @@ "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.1.0.zip", "hash": "b3dc77d95047b3ef0733bd2ae761b547bc8d2275cb022ec071a1ab276d9683da" }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.2.0", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.0.zip", + "hash": "c40d6378c012358ce1acf6c7d0957a44f04282c68401648b41637005d37ed5f8" + }, { "id": "lnurlp", "repo": "https://github.com/lnbits/lnurlp", From eb5c1d9cdd8b2f587d8f9b73f5b302998d2a3c1d Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 15:51:23 +0200 Subject: [PATCH 10/18] extensions: bump libra to v0.2.0 Adds user-facing income/revenue submission endpoint, SUBMIT_INCOME permission, and assorted UI polish on the pending-approvals view. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extensions.json b/extensions.json index cac0109..e1ce4ac 100644 --- a/extensions.json +++ b/extensions.json @@ -215,6 +215,16 @@ "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.1.0.zip", "hash": "b3dc77d95047b3ef0733bd2ae761b547bc8d2275cb022ec071a1ab276d9683da" }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.2.0", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.0.zip", + "hash": "c40d6378c012358ce1acf6c7d0957a44f04282c68401648b41637005d37ed5f8" + }, { "id": "lnurlp", "repo": "https://github.com/lnbits/lnurlp", From b8609ce7fe1b27d1c6352dc40b968ee3c9b2a4bd Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 16:06:56 +0200 Subject: [PATCH 11/18] extensions: bump libra to v0.2.1 Adds lifetime income/expense totals to the /api/v1/balance response so clients can render an Income vs Expenses breakdown alongside the net balance. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extensions.json b/extensions.json index e1ce4ac..3def9ed 100644 --- a/extensions.json +++ b/extensions.json @@ -225,6 +225,16 @@ "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.0.zip", "hash": "c40d6378c012358ce1acf6c7d0957a44f04282c68401648b41637005d37ed5f8" }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.2.1", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.1.zip", + "hash": "fe0041e11432e671187988d235d19c9dc3608b5a6a023969eeb8c0800c0962f7" + }, { "id": "lnurlp", "repo": "https://github.com/lnbits/lnurlp", From 24dffa1555df62657bcfd2df808500f06b61ceb0 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 16:06:56 +0200 Subject: [PATCH 12/18] extensions: bump libra to v0.2.1 Adds lifetime income/expense totals to the /api/v1/balance response so clients can render an Income vs Expenses breakdown alongside the net balance. Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extensions.json b/extensions.json index e1ce4ac..3def9ed 100644 --- a/extensions.json +++ b/extensions.json @@ -225,6 +225,16 @@ "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.0.zip", "hash": "c40d6378c012358ce1acf6c7d0957a44f04282c68401648b41637005d37ed5f8" }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.2.1", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.1.zip", + "hash": "fe0041e11432e671187988d235d19c9dc3608b5a6a023969eeb8c0800c0962f7" + }, { "id": "lnurlp", "repo": "https://github.com/lnbits/lnurlp", From 77837d45f1c2c55b888641133ac58a7dbce132b7 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 16:49:24 +0200 Subject: [PATCH 13/18] lnurlp: replace v1.3.0-aio.1 with v1.3.0-aio.2 v1.3.0-aio.1 (tag at 6d8ee66) pointed at an upstream PR cherry-pick without the nostr-transport-RPC work we actually want shipped. No deployed host was running it; remove to prevent it being installable. v1.3.0-aio.2 is cut at aiolabs/lnurlp main HEAD (31cf2eb), which includes the nostr-transport-RPC commit plus three upstream PR cherry-picks (#125 docs, #129 double-slash fix, #133 zap receipt) that landed after the upstream v1.3.0 tag. archive: https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.2.zip sha256: 7a6428c81d4a23c1a7060fcd12d4bd732c1383c2ee3cd91a228a01fee8170b3c --- extensions.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions.json b/extensions.json index 3def9ed..2ce9f38 100644 --- a/extensions.json +++ b/extensions.json @@ -277,11 +277,11 @@ "repo": "https://git.atitlan.io/aiolabs/lnurlp", "name": "Pay Links", "min_lnbits_version": "1.4.0", - "version": "1.3.0-aio.1", + "version": "1.3.0-aio.2", "short_description": "Make reusable LNURL pay links", "icon": "https://git.atitlan.io/aiolabs/lnurlp/raw/branch/main/static/image/lnurl-pay.png", - "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.1.zip", - "hash": "1b3b982aea53d7935a551fd069efd8ba0f362834494cef14c115ae38b6b54a08" + "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.2.zip", + "hash": "7a6428c81d4a23c1a7060fcd12d4bd732c1383c2ee3cd91a228a01fee8170b3c" }, { "id": "splitpayments", From 47dd7d4b7b1b3637e16539c7d8f5002b16a9d0b8 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 16:49:24 +0200 Subject: [PATCH 14/18] lnurlp: replace v1.3.0-aio.1 with v1.3.0-aio.2 v1.3.0-aio.1 (tag at 6d8ee66) pointed at an upstream PR cherry-pick without the nostr-transport-RPC work we actually want shipped. No deployed host was running it; remove to prevent it being installable. v1.3.0-aio.2 is cut at aiolabs/lnurlp main HEAD (31cf2eb), which includes the nostr-transport-RPC commit plus three upstream PR cherry-picks (#125 docs, #129 double-slash fix, #133 zap receipt) that landed after the upstream v1.3.0 tag. archive: https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.2.zip sha256: 7a6428c81d4a23c1a7060fcd12d4bd732c1383c2ee3cd91a228a01fee8170b3c --- extensions.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions.json b/extensions.json index 3def9ed..2ce9f38 100644 --- a/extensions.json +++ b/extensions.json @@ -277,11 +277,11 @@ "repo": "https://git.atitlan.io/aiolabs/lnurlp", "name": "Pay Links", "min_lnbits_version": "1.4.0", - "version": "1.3.0-aio.1", + "version": "1.3.0-aio.2", "short_description": "Make reusable LNURL pay links", "icon": "https://git.atitlan.io/aiolabs/lnurlp/raw/branch/main/static/image/lnurl-pay.png", - "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.1.zip", - "hash": "1b3b982aea53d7935a551fd069efd8ba0f362834494cef14c115ae38b6b54a08" + "archive": "https://git.atitlan.io/aiolabs/lnurlp/archive/v1.3.0-aio.2.zip", + "hash": "7a6428c81d4a23c1a7060fcd12d4bd732c1383c2ee3cd91a228a01fee8170b3c" }, { "id": "splitpayments", From 62581f1264d4ff9c455172bf73b6917741fb16a1 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 20:04:26 +0200 Subject: [PATCH 15/18] tasks: add v0.0.1 (initial release) LNbits-side counterpart to the webapp tasks module. Caches NIP-52 kind 31922 task events and kind 31925 completions in a local schema, publishes mutations through nostrclient, and subscribes back to keep the local DB in sync with the relay set. Tags published 31922 events with ["event-type", "task"] to disambiguate from activities on shared relays. archive: https://git.atitlan.io/aiolabs/tasks/archive/v0.0.1.zip sha256: 0564d3c51fbadc5e4f4a2c547248e954aa6e0fc796cef266304ae47f3a12dc35 Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index 2ce9f38..325ce11 100644 --- a/extensions.json +++ b/extensions.json @@ -304,6 +304,17 @@ "icon": "https://git.atitlan.io/aiolabs/restaurant/raw/branch/main/static/image/restaurant.png", "archive": "https://git.atitlan.io/aiolabs/restaurant/archive/v0.1.0.zip", "hash": "4a7284ca485019238d0a05fb7b7b97366a8d04e3343ce2441beb37b55d78fb67" + }, + { + "id": "tasks", + "repo": "https://git.atitlan.io/aiolabs/tasks", + "name": "Tasks", + "min_lnbits_version": "1.4.1", + "version": "0.0.1", + "short_description": "Recurring tasks and chore-tracking, published over Nostr", + "icon": "https://git.atitlan.io/aiolabs/tasks/raw/branch/main/static/image/tasks.png", + "archive": "https://git.atitlan.io/aiolabs/tasks/archive/v0.0.1.zip", + "hash": "0564d3c51fbadc5e4f4a2c547248e954aa6e0fc796cef266304ae47f3a12dc35" } ] } From 8038f841a39e387205a1962a03779e5cd88fe447 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 20:04:26 +0200 Subject: [PATCH 16/18] tasks: add v0.0.1 (initial release) LNbits-side counterpart to the webapp tasks module. Caches NIP-52 kind 31922 task events and kind 31925 completions in a local schema, publishes mutations through nostrclient, and subscribes back to keep the local DB in sync with the relay set. Tags published 31922 events with ["event-type", "task"] to disambiguate from activities on shared relays. archive: https://git.atitlan.io/aiolabs/tasks/archive/v0.0.1.zip sha256: 0564d3c51fbadc5e4f4a2c547248e954aa6e0fc796cef266304ae47f3a12dc35 Co-Authored-By: Claude Opus 4.7 (1M context) --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index 2ce9f38..325ce11 100644 --- a/extensions.json +++ b/extensions.json @@ -304,6 +304,17 @@ "icon": "https://git.atitlan.io/aiolabs/restaurant/raw/branch/main/static/image/restaurant.png", "archive": "https://git.atitlan.io/aiolabs/restaurant/archive/v0.1.0.zip", "hash": "4a7284ca485019238d0a05fb7b7b97366a8d04e3343ce2441beb37b55d78fb67" + }, + { + "id": "tasks", + "repo": "https://git.atitlan.io/aiolabs/tasks", + "name": "Tasks", + "min_lnbits_version": "1.4.1", + "version": "0.0.1", + "short_description": "Recurring tasks and chore-tracking, published over Nostr", + "icon": "https://git.atitlan.io/aiolabs/tasks/raw/branch/main/static/image/tasks.png", + "archive": "https://git.atitlan.io/aiolabs/tasks/archive/v0.0.1.zip", + "hash": "0564d3c51fbadc5e4f4a2c547248e954aa6e0fc796cef266304ae47f3a12dc35" } ] } From cf59d77c9cd501fe9047e53840cc5a0926a0db12 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 20:32:02 +0200 Subject: [PATCH 17/18] extensions: bump libra to v0.2.2 --- extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extensions.json b/extensions.json index 325ce11..dd9514f 100644 --- a/extensions.json +++ b/extensions.json @@ -235,6 +235,16 @@ "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.1.zip", "hash": "fe0041e11432e671187988d235d19c9dc3608b5a6a023969eeb8c0800c0962f7" }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.2.2", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.2.zip", + "hash": "06a02b18437427164c8db4857fe97bac2e7aa768ca818973cb4023b578faf607" + }, { "id": "lnurlp", "repo": "https://github.com/lnbits/lnurlp", From 53346c1abcfc4f32658f25a1c78dc7fcde32e7a0 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 17 May 2026 20:32:02 +0200 Subject: [PATCH 18/18] extensions: bump libra to v0.2.2 --- extensions.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/extensions.json b/extensions.json index 325ce11..dd9514f 100644 --- a/extensions.json +++ b/extensions.json @@ -235,6 +235,16 @@ "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.1.zip", "hash": "fe0041e11432e671187988d235d19c9dc3608b5a6a023969eeb8c0800c0962f7" }, + { + "id": "libra", + "repo": "https://git.atitlan.io/aiolabs/libra", + "name": "Libra", + "version": "0.2.2", + "short_description": "Double-entry accounting for collectives", + "icon": "https://git.atitlan.io/aiolabs/libra/raw/branch/main/static/image/libra.png", + "archive": "https://git.atitlan.io/aiolabs/libra/archive/v0.2.2.zip", + "hash": "06a02b18437427164c8db4857fe97bac2e7aa768ca818973cb4023b578faf607" + }, { "id": "lnurlp", "repo": "https://github.com/lnbits/lnurlp",