feat(catalog): Add Streamlit Forge and RezApp Forge to KISS Apps

- luci-app-streamlit-forge: Streamlit app publishing platform
  - Category: productivity, runtime: lxc
  - Templates, SSL exposure, mesh publishing

- luci-app-rezapp: Docker to LXC app converter
  - Category: system, runtime: native
  - Catalog browsing, package generation

- Updated new_releases section
- Total plugins: 37 → 39

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-03-11 09:44:08 +01:00
parent 31ca0d7618
commit 66b58c74d6
185 changed files with 4760 additions and 239 deletions

View File

@ -1,6 +1,6 @@
# SecuBox UI & Theme History # SecuBox UI & Theme History
_Last updated: 2026-03-09 (HAProxy Routes Health Check, WAF Routing)_ _Last updated: 2026-03-11 (RezApp Forge, Streamlit Forge)_
1. **Unified Dashboard Refresh (2025-12-20)** 1. **Unified Dashboard Refresh (2025-12-20)**
- Dashboard received the "sh-page-header" layout, hero stats, and SecuNav top tabs. - Dashboard received the "sh-page-header" layout, hero stats, and SecuNav top tabs.
@ -4531,3 +4531,78 @@ git checkout HEAD -- index.html
- Modified haproxy_router.py to allow port 8081 routes (was blocked) - Modified haproxy_router.py to allow port 8081 routes (was blocked)
- Domain now accessible via HTTPS through WAF with proper access control - Domain now accessible via HTTPS through WAF with proper access control
- Web Terminal (ttyd shell access) - Web Terminal (ttyd shell access)
81. **RezApp Forge - Docker to SecuBox App Converter (2026-03-11)**
- Package: `secubox-app-rezapp` with `rezappctl` CLI
- UCI configuration: `/etc/config/rezapp` with catalog sources
- Supported catalogs: Docker Hub, LinuxServer.io, GitHub Container Registry
- CLI commands:
- `rezappctl catalog list/add/remove` - Manage catalog sources
- `rezappctl search <query>` - Search Docker images across catalogs
- `rezappctl info <image>` - Show image details (tags, arch, ENV)
- `rezappctl convert <image>` - Docker → LXC conversion
- `rezappctl package <app>` - Generate SecuBox package structure
- `rezappctl publish <app>` - Add to SecuBox addon catalog
- Conversion workflow: pull → export → extract → generate LXC config
- Templates: Makefile.tpl, init.d.tpl, ctl.tpl, config.tpl, start-lxc.tpl, lxc-config.tpl, manifest.tpl
- Auto-generates procd init scripts, management CLIs, and UCI configs
- Enables one-command Docker app deployment: convert → package → install
82. **Streamlit Forge Plan (2026-03-11)**
- Comprehensive Streamlit app publishing platform specification
- Features planned:
- App upload and source management via Gitea
- Multiple running instances with isolated configs
- Auto-publishing to SecuBox dedicated spaces
- Miniature preview/thumbnail generation
- UCI configuration synchronization
- Mesh AppStore publishing
- Author workspace with blog integration
- Templates: basic, dashboard, data-viewer, research-paper, slides, portfolio
- Integration with: Gitea, HAProxy, Mitmproxy, MetaBlogizer, SecuBox P2P
- Plan: `/home/reepost/.claude/plans/streamlit-forge.md`
83. **HAProxy Vhost Rename Feature (2026-03-11)**
- Added `haproxyctl vhost rename <old> <new>` command
- Renames vhost UCI section and all related configurations
- Tested: MC360_Streamlit_BPM_v2.gk2.secubox.in → mc360.gk2.secubox.in
84. **Streamlit Forge - App Publishing Platform (2026-03-11)**
- Package: `secubox-app-streamlit-forge` with `slforge` CLI
- UCI configuration at `/etc/config/streamlit-forge`
- 3 app templates: basic, dashboard, data-viewer
- CLI commands:
- `slforge create <name> --from-template <tpl>` - Create from template
- `slforge start/stop/restart <app>` - Instance control
- `slforge status/info/list` - Status and information
- `slforge expose <app> --domain <d>` - HAProxy vhost + SSL
- `slforge publish/unpublish <app>` - Mesh catalog management
- Runs apps in Streamlit LXC container (mount: /srv/apps/)
- Port-based status detection (works across LXC namespaces)
- Wrapper script approach for reliable container execution
- LuCI: `luci-app-streamlit-forge` with RPCD backend
- Status dashboard with running/total/LXC cards
- Create dialog with template selection
- App table with Start/Stop/Open/Expose/Publish/Delete actions
- Auto-refresh polling (10s interval)
85. **RezApp Forge LuCI Dashboard (2026-03-11)**
- Package: `luci-app-rezapp` with RPCD backend
- Menu: Services > RezApp Forge
- Features:
- Status cards (converted apps, catalogs, Docker status)
- Docker Hub search with star ratings and descriptions
- Convert dialog (name, tag, memory options)
- Converted apps table with Package/Publish/Delete actions
- RPCD methods: status, catalogs, apps, search, info, convert, package, publish, delete
- ACL permissions for read/write operations
86. **SecuBox KISS Apps Catalog Update (2026-03-11)**
- Added `luci-app-streamlit-forge` to catalog (productivity, lxc runtime)
- Streamlit app publishing with templates, SSL exposure, mesh publishing
- Featured as new release
- Added `luci-app-rezapp` to catalog (system, native runtime)
- Docker to LXC converter with catalog browsing, package generation
- Featured as new release
- Updated `new_releases` section with both apps
- Total plugins: 37 → 39

View File

@ -1,6 +1,6 @@
# Work In Progress (Claude) # Work In Progress (Claude)
_Last updated: 2026-03-10 (PeerTube Routing Fix)_ _Last updated: 2026-03-11 (Forge LuCI Apps + Documentation)_
> **Architecture Reference**: SecuBox Fanzine v3 — Les 4 Couches > **Architecture Reference**: SecuBox Fanzine v3 — Les 4 Couches
@ -8,6 +8,61 @@ _Last updated: 2026-03-10 (PeerTube Routing Fix)_
## Recently Completed ## Recently Completed
### 2026-03-11
- **RezApp Forge - Docker to SecuBox App Converter**
- Package: `secubox-app-rezapp` with `rezappctl` CLI
- UCI config: `/etc/config/rezapp` with catalog sources (Docker Hub, LinuxServer.io, GHCR)
- Commands: catalog, search, info, convert, package, publish, list
- Docker to LXC workflow: pull → export → extract → generate LXC config
- Templates: Makefile.tpl, init.d.tpl, ctl.tpl, config.tpl, start-lxc.tpl, lxc-config.tpl, manifest.tpl
- Plan: `/home/reepost/.claude/plans/tingly-rolling-sky.md`
- **Streamlit Forge Phase 1** (implemented)
- Package: `secubox-app-streamlit-forge` with `slforge` CLI
- UCI config for app management
- 3 templates: basic, dashboard, data-viewer
- Commands: create, start, stop, restart, status, list, info, delete, templates
- Runs apps in Streamlit LXC container with proper mount paths
- Port-based status detection (container PID namespaces)
- HAProxy expose integration
- Mesh catalog publish
- **LuCI dashboard**: `luci-app-streamlit-forge` with create/start/stop/expose/publish
- **RezApp Forge LuCI**
- Package: `luci-app-rezapp`
- Dashboard with Docker search, conversion dialog
- Converted apps table with Package/Publish/Delete
- Status cards for apps count, catalogs, Docker status
- **SecuBox KISS Apps Catalog Update**
- Added `luci-app-streamlit-forge` and `luci-app-rezapp` to catalog.json
- Category: productivity (Streamlit), system (RezApp)
- Featured in new_releases section
- Total plugins: 37 → 39
- **HAProxy Vhost Rename Feature**
- Added `haproxyctl vhost rename <old> <new>` command
- Renamed MC360_Streamlit_BPM_v2.gk2.secubox.in → mc360.gk2.secubox.in
- **Lyrion Music Server Upgrade (9.0.3 → 9.1.1)**
- Diagnosed library showing 0 tracks (Perl XS module version mismatches)
- Root cause: Alpine 3.19 Perl 5.038 incompatible with bundled modules
- **Solution**: Rebuilt LXC container from official Docker image
- Pulled `lmscommunity/lyrionmusicserver:stable` (Debian Bookworm based)
- Exported Docker to tarball, extracted to LXC rootfs
- Created `/start-lxc.sh` wrapper for LXC execution
- Updated LXC config: UID 499 (squeezeboxserver), new paths
- Fixed /srv/lyrion ownership for new UID
- Library scan working: 81,430 files discovered
- Preserved config in /srv/lyrion (prefs, logs, cache)
- **Metablogizer Package Conflict**
- opkg install fails: `/etc/config/metablogizer` file conflict
- Both `secubox-app-metablogizer` and `luci-app-metablogizer` provide same file
- Workaround: Deploy scripts directly via SCP instead of package install
- TODO: Fix package to use conffiles properly
### 2026-03-10 ### 2026-03-10
- **PeerTube Routing Fix** - **PeerTube Routing Fix**
@ -298,6 +353,9 @@ _Last updated: 2026-03-10 (PeerTube Routing Fix)_
## In Progress ## In Progress
- **Streamlit Forge Phase 2** - Preview generation, Gitea push/pull
- **RezApp Forge Full Test** - Test Docker → LXC conversion workflow
- **RTTY Remote Control Module (Phase 4 - Session Replay)** - **RTTY Remote Control Module (Phase 4 - Session Replay)**
- Avatar-tap integration for session capture - Avatar-tap integration for session capture
- Replay captured sessions to target nodes - Replay captured sessions to target nodes

View File

@ -0,0 +1,27 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-rezapp
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
LUCI_TITLE:=LuCI RezApp Forge - Docker to LXC Converter
LUCI_DEPENDS:=+secubox-app-rezapp
LUCI_PKGARCH:=all
include $(TOPDIR)/feeds/luci/luci.mk
define Package/luci-app-rezapp/install
$(INSTALL_DIR) $(1)/usr/share/luci/menu.d
$(INSTALL_DATA) ./root/usr/share/luci/menu.d/luci-app-rezapp.json $(1)/usr/share/luci/menu.d/
$(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d
$(INSTALL_DATA) ./root/usr/share/rpcd/acl.d/luci-app-rezapp.json $(1)/usr/share/rpcd/acl.d/
$(INSTALL_DIR) $(1)/usr/libexec/rpcd
$(INSTALL_BIN) ./root/usr/libexec/rpcd/luci.rezapp $(1)/usr/libexec/rpcd/
$(INSTALL_DIR) $(1)/www/luci-static/resources/view/rezapp
$(INSTALL_DATA) ./htdocs/luci-static/resources/view/rezapp/*.js $(1)/www/luci-static/resources/view/rezapp/
endef
$(eval $(call BuildPackage,luci-app-rezapp))

View File

@ -0,0 +1,396 @@
'use strict';
'require view';
'require rpc';
'require ui';
'require poll';
var callStatus = rpc.declare({
object: 'luci.rezapp',
method: 'status',
expect: {}
});
var callCatalogs = rpc.declare({
object: 'luci.rezapp',
method: 'catalogs',
expect: {}
});
var callApps = rpc.declare({
object: 'luci.rezapp',
method: 'apps',
expect: {}
});
var callSearch = rpc.declare({
object: 'luci.rezapp',
method: 'search',
params: ['query'],
expect: {}
});
var callInfo = rpc.declare({
object: 'luci.rezapp',
method: 'info',
params: ['image'],
expect: {}
});
var callConvert = rpc.declare({
object: 'luci.rezapp',
method: 'convert',
params: ['image', 'name', 'tag', 'memory'],
expect: {}
});
var callPackage = rpc.declare({
object: 'luci.rezapp',
method: 'package',
params: ['name'],
expect: {}
});
var callPublish = rpc.declare({
object: 'luci.rezapp',
method: 'publish',
params: ['name'],
expect: {}
});
var callDelete = rpc.declare({
object: 'luci.rezapp',
method: 'delete',
params: ['name'],
expect: {}
});
return view.extend({
status: {},
catalogs: [],
apps: [],
searchResults: [],
load: function() {
return Promise.all([
callStatus(),
callCatalogs(),
callApps()
]);
},
render: function(data) {
var self = this;
this.status = data[0] || {};
this.catalogs = (data[1] && data[1].catalogs) || [];
this.apps = (data[2] && data[2].apps) || [];
var view = E('div', { 'class': 'cbi-map' }, [
E('h2', {}, 'RezApp Forge'),
E('div', { 'class': 'cbi-map-descr' },
'Convert Docker images to SecuBox LXC apps.'),
// Status cards
E('div', { 'class': 'sh-stats', 'style': 'display:flex;gap:1rem;margin:1rem 0;flex-wrap:wrap;' }, [
this.renderStatCard('Converted Apps', this.status.apps || 0, '#2196f3'),
this.renderStatCard('Catalogs', this.status.catalogs || 0, '#9c27b0'),
this.renderStatCard('Docker', this.status.docker_status || 'unknown',
this.status.docker_status === 'running' ? '#4caf50' : '#ff9800')
]),
// Search section
E('div', { 'class': 'cbi-section' }, [
E('h3', {}, 'Search Docker Hub'),
E('div', { 'style': 'display:flex;gap:0.5rem;margin-bottom:1rem;' }, [
E('input', {
'type': 'text',
'id': 'search-query',
'class': 'cbi-input-text',
'placeholder': 'Search images (e.g., nginx, heimdall)',
'style': 'flex:1;'
}),
E('button', {
'class': 'cbi-button cbi-button-action',
'click': ui.createHandlerFn(this, 'handleSearch')
}, 'Search')
]),
E('div', { 'id': 'search-results' })
]),
// Converted apps section
E('div', { 'class': 'cbi-section' }, [
E('h3', {}, 'Converted Apps'),
E('div', { 'id': 'apps-table' }, this.renderAppsTable())
])
]);
poll.add(L.bind(this.pollApps, this), 15);
return view;
},
renderStatCard: function(label, value, color) {
return E('div', {
'style': 'background:#1a1a2e;border-left:4px solid ' + color + ';padding:1rem;min-width:120px;border-radius:4px;'
}, [
E('div', { 'style': 'font-size:1.5rem;font-weight:bold;color:' + color }, String(value)),
E('div', { 'style': 'color:#888;font-size:0.85rem;' }, label)
]);
},
renderAppsTable: function() {
if (!this.apps.length) {
return E('p', { 'class': 'cbi-value-description' },
'No converted apps yet. Search and convert a Docker image to get started.');
}
var rows = this.apps.map(L.bind(function(app) {
var statusBadge = E('span', {
'class': 'badge',
'style': 'background:' + (app.lxc_status === 'running' ? '#4caf50' : app.lxc_status === 'stopped' ? '#ff9800' : '#666') + ';color:#fff;padding:2px 8px;border-radius:10px;font-size:0.8rem;'
}, app.lxc_status || 'none');
var packageBadge = E('span', {
'style': 'color:' + (app.packaged === 'yes' ? '#4caf50' : '#666')
}, app.packaged === 'yes' ? 'Yes' : 'No');
var actions = E('div', { 'style': 'display:flex;gap:4px;flex-wrap:wrap;' }, [
app.packaged !== 'yes' ?
E('button', {
'class': 'cbi-button',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handlePackage', app.name)
}, 'Package') : '',
E('button', {
'class': 'cbi-button',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handlePublish', app.name)
}, 'Publish'),
E('button', {
'class': 'cbi-button cbi-button-remove',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handleDelete', app.name)
}, 'Delete')
]);
return E('tr', {}, [
E('td', {}, app.name),
E('td', { 'style': 'font-size:0.85rem;color:#888;' }, app.source_image || '-'),
E('td', {}, statusBadge),
E('td', {}, packageBadge),
E('td', { 'style': 'font-size:0.85rem;' }, app.converted_at || '-'),
E('td', {}, actions)
]);
}, this));
return E('table', { 'class': 'table cbi-section-table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, 'Name'),
E('th', { 'class': 'th' }, 'Source Image'),
E('th', { 'class': 'th' }, 'LXC Status'),
E('th', { 'class': 'th' }, 'Packaged'),
E('th', { 'class': 'th' }, 'Converted'),
E('th', { 'class': 'th' }, 'Actions')
])
].concat(rows));
},
renderSearchResults: function() {
var container = document.getElementById('search-results');
if (!container) return;
if (!this.searchResults.length) {
container.innerHTML = '';
return;
}
var rows = this.searchResults.map(L.bind(function(result) {
return E('tr', {}, [
E('td', {}, [
E('strong', {}, result.image),
E('span', { 'style': 'margin-left:0.5rem;color:#ffd700;' }, result.stars ? result.stars + '*' : '')
]),
E('td', { 'style': 'font-size:0.85rem;color:#888;max-width:300px;overflow:hidden;text-overflow:ellipsis;' },
result.description || ''),
E('td', {}, [
E('button', {
'class': 'cbi-button cbi-button-action',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handleConvert', result.image)
}, 'Convert')
])
]);
}, this));
var table = E('table', { 'class': 'table cbi-section-table', 'style': 'margin-top:1rem;' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, 'Image'),
E('th', { 'class': 'th' }, 'Description'),
E('th', { 'class': 'th' }, 'Action')
])
].concat(rows));
container.innerHTML = '';
container.appendChild(table);
},
pollApps: function() {
var self = this;
return callApps().then(function(data) {
self.apps = (data && data.apps) || [];
var container = document.getElementById('apps-table');
if (container) {
container.innerHTML = '';
container.appendChild(self.renderAppsTable());
}
});
},
handleSearch: function() {
var self = this;
var query = document.getElementById('search-query').value.trim();
if (!query) {
ui.addNotification(null, E('p', 'Please enter a search query'));
return;
}
var container = document.getElementById('search-results');
container.innerHTML = '<p class="spinning">Searching Docker Hub...</p>';
return callSearch(query).then(function(res) {
if (res.code !== 0) {
container.innerHTML = '<p style="color:#f44336;">Search failed</p>';
return;
}
self.searchResults = res.results || [];
self.renderSearchResults();
if (!self.searchResults.length) {
container.innerHTML = '<p>No results found for "' + query + '"</p>';
}
}).catch(function(err) {
container.innerHTML = '<p style="color:#f44336;">Error: ' + err.message + '</p>';
});
},
handleConvert: function(image) {
var self = this;
// Extract default name from image
var defaultName = image.split('/').pop().split(':')[0].replace(/[^a-zA-Z0-9_-]/g, '_');
ui.showModal('Convert Docker Image', [
E('div', { 'class': 'cbi-section' }, [
E('p', {}, ['Converting: ', E('strong', {}, image)]),
E('div', { 'class': 'cbi-value' }, [
E('label', { 'class': 'cbi-value-title' }, 'App Name'),
E('div', { 'class': 'cbi-value-field' }, [
E('input', { 'type': 'text', 'id': 'convert-name', 'class': 'cbi-input-text', 'value': defaultName })
])
]),
E('div', { 'class': 'cbi-value' }, [
E('label', { 'class': 'cbi-value-title' }, 'Tag'),
E('div', { 'class': 'cbi-value-field' }, [
E('input', { 'type': 'text', 'id': 'convert-tag', 'class': 'cbi-input-text', 'value': 'latest', 'placeholder': 'latest' })
])
]),
E('div', { 'class': 'cbi-value' }, [
E('label', { 'class': 'cbi-value-title' }, 'Memory Limit'),
E('div', { 'class': 'cbi-value-field' }, [
E('select', { 'id': 'convert-memory', 'class': 'cbi-input-select' }, [
E('option', { 'value': '256M' }, '256 MB'),
E('option', { 'value': '512M', 'selected': true }, '512 MB'),
E('option', { 'value': '1G' }, '1 GB'),
E('option', { 'value': '2G' }, '2 GB')
])
])
])
]),
E('div', { 'class': 'right' }, [
E('button', { 'class': 'cbi-button', 'click': ui.hideModal }, 'Cancel'),
E('button', {
'class': 'cbi-button cbi-button-positive',
'click': function() {
var name = document.getElementById('convert-name').value.trim();
var tag = document.getElementById('convert-tag').value.trim() || 'latest';
var memory = document.getElementById('convert-memory').value;
if (!name) {
ui.addNotification(null, E('p', 'Please enter an app name'));
return;
}
ui.hideModal();
ui.showModal('Converting...', [
E('p', { 'class': 'spinning' }, 'Converting ' + image + ':' + tag + '...'),
E('p', { 'style': 'color:#888;font-size:0.85rem;' }, 'This may take several minutes. Please wait...')
]);
callConvert(image, name, tag, memory).then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'Conversion complete!'));
self.pollApps();
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Conversion failed')));
}
}).catch(function(err) {
ui.hideModal();
ui.addNotification(null, E('p', 'Error: ' + err.message));
});
}
}, 'Convert')
])
]);
},
handlePackage: function(name) {
var self = this;
ui.showModal('Generating Package...', [
E('p', { 'class': 'spinning' }, 'Generating SecuBox package for ' + name + '...')
]);
return callPackage(name).then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'Package generated!'));
self.pollApps();
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Package generation failed')));
}
});
},
handlePublish: function(name) {
var self = this;
ui.showModal('Publishing...', [
E('p', { 'class': 'spinning' }, 'Publishing ' + name + ' to catalog...')
]);
return callPublish(name).then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'Published to catalog!'));
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Publish failed')));
}
});
},
handleDelete: function(name) {
var self = this;
if (!confirm('Delete converted app "' + name + '"? This cannot be undone.')) {
return;
}
return callDelete(name).then(function(res) {
if (res.code === 0) {
ui.addNotification(null, E('p', 'Deleted ' + name));
self.pollApps();
} else {
ui.addNotification(null, E('p', 'Error deleting'));
}
});
}
});

View File

@ -0,0 +1,265 @@
#!/bin/sh
# RPCD backend for RezApp Forge LuCI app
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
APPS_DIR="/srv/rezapp/apps"
CACHE_DIR="/srv/rezapp/cache"
OUTPUT_DIR="/srv/rezapp/generated"
# Get status overview
get_status() {
local apps=0
local catalogs=0
local docker_status="unknown"
# Count converted apps
[ -d "$APPS_DIR" ] && apps=$(ls -1 "$APPS_DIR" 2>/dev/null | wc -l)
# Count enabled catalogs
config_load rezapp
config_foreach count_catalog catalog
catalogs=$_catalog_count
# Check Docker status
if pgrep dockerd >/dev/null 2>&1; then
docker_status="running"
else
docker_status="stopped"
fi
json_init
json_add_int "apps" "$apps"
json_add_int "catalogs" "$catalogs"
json_add_string "docker_status" "$docker_status"
json_dump
}
_catalog_count=0
count_catalog() {
local enabled
config_get enabled "$1" enabled '0'
[ "$enabled" = "1" ] && _catalog_count=$((_catalog_count + 1))
}
# Get enabled catalogs
get_catalogs() {
json_init
json_add_array "catalogs"
config_load rezapp
config_foreach add_catalog catalog
json_close_array
json_dump
}
add_catalog() {
local section="$1"
local name type url namespace enabled
config_get name "$section" name "$section"
config_get type "$section" type 'dockerhub'
config_get url "$section" url ''
config_get namespace "$section" namespace ''
config_get enabled "$section" enabled '0'
[ "$enabled" = "1" ] || return
json_add_object ""
json_add_string "id" "$section"
json_add_string "name" "$name"
json_add_string "type" "$type"
json_add_string "url" "$url"
json_add_string "namespace" "$namespace"
json_close_object
}
# Get converted apps
get_apps() {
json_init
json_add_array "apps"
[ -d "$APPS_DIR" ] || { json_close_array; json_dump; return; }
for app_dir in "$APPS_DIR"/*/; do
[ -d "$app_dir" ] || continue
local name=$(basename "$app_dir")
local source_image=""
local converted_at=""
if [ -f "$app_dir/metadata.json" ]; then
source_image=$(jsonfilter -i "$app_dir/metadata.json" -e '@.source_image' 2>/dev/null)
converted_at=$(jsonfilter -i "$app_dir/metadata.json" -e '@.converted_at' 2>/dev/null)
fi
# Check if package exists
local packaged="no"
[ -d "$OUTPUT_DIR/secubox-app-$name" ] && packaged="yes"
# Check if LXC container exists
local lxc_status="none"
if [ -d "/srv/lxc/$name" ]; then
if lxc-info -n "$name" 2>/dev/null | grep -q "RUNNING"; then
lxc_status="running"
else
lxc_status="stopped"
fi
fi
json_add_object ""
json_add_string "name" "$name"
json_add_string "source_image" "$source_image"
json_add_string "converted_at" "$converted_at"
json_add_string "packaged" "$packaged"
json_add_string "lxc_status" "$lxc_status"
json_close_object
done
json_close_array
json_dump
}
# Search Docker Hub
do_search() {
local query="$1"
[ -z "$query" ] && { echo '{"error":"Query required"}'; return; }
local output
output=$(rezappctl search "$query" 2>&1)
local rc=$?
# Parse output into JSON
json_init
json_add_int "code" "$rc"
json_add_array "results"
echo "$output" | grep -E "^\s+" | while read -r line; do
local image=$(echo "$line" | awk '{print $1}')
local stars=$(echo "$line" | awk '{print $2}' | tr -d '*')
local desc=$(echo "$line" | cut -d' ' -f3-)
[ -n "$image" ] || continue
json_add_object ""
json_add_string "image" "$image"
json_add_string "stars" "$stars"
json_add_string "description" "$desc"
json_close_object
done
json_close_array
json_dump
}
# Get image info
get_info() {
local image="$1"
[ -z "$image" ] && { echo '{"error":"Image required"}'; return; }
local output
output=$(rezappctl info "$image" 2>&1)
local rc=$?
# Extract tags
local tags=""
tags=$(echo "$output" | grep -A100 "Available Tags:" | grep "^\s*-" | sed 's/^\s*-\s*//' | head -10 | tr '\n' ',')
json_init
json_add_int "code" "$rc"
json_add_string "image" "$image"
json_add_string "tags" "$tags"
json_add_string "raw_output" "$output"
json_dump
}
# Convert Docker image
do_convert() {
local image="$1"
local name="$2"
local tag="$3"
local memory="$4"
[ -z "$image" ] && { echo '{"error":"Image required"}'; return; }
local cmd="rezappctl convert $image"
[ -n "$name" ] && cmd="$cmd --name $name"
[ -n "$tag" ] && cmd="$cmd --tag $tag"
[ -n "$memory" ] && cmd="$cmd --memory $memory"
local output
output=$(eval "$cmd" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Generate package
do_package() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(rezappctl package "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Publish to catalog
do_publish() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(rezappctl publish "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Delete converted app
do_delete() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
# Remove app directory
rm -rf "$APPS_DIR/$name"
rm -rf "$OUTPUT_DIR/secubox-app-$name"
rm -rf "$OUTPUT_DIR/luci-app-$name"
json_init
json_add_int "code" 0
json_add_string "message" "Deleted $name"
json_dump
}
case "$1" in
list)
echo '{"status":{},"catalogs":{},"apps":{},"search":{"query":"String"},"info":{"image":"String"},"convert":{"image":"String","name":"String","tag":"String","memory":"String"},"package":{"name":"String"},"publish":{"name":"String"},"delete":{"name":"String"}}'
;;
call)
case "$2" in
status) get_status ;;
catalogs) get_catalogs ;;
apps) get_apps ;;
search) read input; json_load "$input"; json_get_var query query; do_search "$query" ;;
info) read input; json_load "$input"; json_get_var image image; get_info "$image" ;;
convert) read input; json_load "$input"; json_get_var image image; json_get_var name name; json_get_var tag tag; json_get_var memory memory; do_convert "$image" "$name" "$tag" "$memory" ;;
package) read input; json_load "$input"; json_get_var name name; do_package "$name" ;;
publish) read input; json_load "$input"; json_get_var name name; do_publish "$name" ;;
delete) read input; json_load "$input"; json_get_var name name; do_delete "$name" ;;
esac
;;
esac

View File

@ -0,0 +1,14 @@
{
"admin/services/rezapp": {
"title": "RezApp Forge",
"order": 86,
"action": {
"type": "view",
"path": "rezapp/overview"
},
"depends": {
"acl": ["luci-app-rezapp"],
"uci": { "rezapp": true }
}
}
}

View File

@ -0,0 +1,17 @@
{
"luci-app-rezapp": {
"description": "Grant access to RezApp Forge",
"read": {
"ubus": {
"luci.rezapp": ["status", "catalogs", "apps", "search", "info"]
},
"uci": ["rezapp"]
},
"write": {
"ubus": {
"luci.rezapp": ["convert", "package", "publish", "delete"]
},
"uci": ["rezapp"]
}
}
}

View File

@ -0,0 +1,27 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-streamlit-forge
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
LUCI_TITLE:=LuCI Streamlit Forge - App Publishing Platform
LUCI_DEPENDS:=+secubox-app-streamlit-forge
LUCI_PKGARCH:=all
include $(TOPDIR)/feeds/luci/luci.mk
define Package/luci-app-streamlit-forge/install
$(INSTALL_DIR) $(1)/usr/share/luci/menu.d
$(INSTALL_DATA) ./root/usr/share/luci/menu.d/luci-app-streamlit-forge.json $(1)/usr/share/luci/menu.d/
$(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d
$(INSTALL_DATA) ./root/usr/share/rpcd/acl.d/luci-app-streamlit-forge.json $(1)/usr/share/rpcd/acl.d/
$(INSTALL_DIR) $(1)/usr/libexec/rpcd
$(INSTALL_BIN) ./root/usr/libexec/rpcd/luci.streamlit-forge $(1)/usr/libexec/rpcd/
$(INSTALL_DIR) $(1)/www/luci-static/resources/view/streamlit-forge
$(INSTALL_DATA) ./htdocs/luci-static/resources/view/streamlit-forge/*.js $(1)/www/luci-static/resources/view/streamlit-forge/
endef
$(eval $(call BuildPackage,luci-app-streamlit-forge))

View File

@ -0,0 +1,383 @@
'use strict';
'require view';
'require rpc';
'require ui';
'require form';
'require poll';
var callList = rpc.declare({
object: 'luci.streamlit-forge',
method: 'list',
expect: {}
});
var callStatus = rpc.declare({
object: 'luci.streamlit-forge',
method: 'status',
expect: {}
});
var callTemplates = rpc.declare({
object: 'luci.streamlit-forge',
method: 'templates',
expect: {}
});
var callCreate = rpc.declare({
object: 'luci.streamlit-forge',
method: 'create',
params: ['name', 'template'],
expect: {}
});
var callStart = rpc.declare({
object: 'luci.streamlit-forge',
method: 'start',
params: ['name'],
expect: {}
});
var callStop = rpc.declare({
object: 'luci.streamlit-forge',
method: 'stop',
params: ['name'],
expect: {}
});
var callDelete = rpc.declare({
object: 'luci.streamlit-forge',
method: 'delete',
params: ['name'],
expect: {}
});
var callExpose = rpc.declare({
object: 'luci.streamlit-forge',
method: 'expose',
params: ['name', 'domain'],
expect: {}
});
var callPublish = rpc.declare({
object: 'luci.streamlit-forge',
method: 'publish',
params: ['name'],
expect: {}
});
return view.extend({
apps: [],
templates: [],
status: {},
load: function() {
return Promise.all([
callList(),
callStatus(),
callTemplates()
]);
},
render: function(data) {
var self = this;
this.apps = (data[0] && data[0].apps) || [];
this.status = data[1] || {};
this.templates = (data[2] && data[2].templates) || [];
var view = E('div', { 'class': 'cbi-map' }, [
E('h2', {}, 'Streamlit Forge'),
E('div', { 'class': 'cbi-map-descr' },
'Create, manage, and publish Streamlit applications.'),
// Status cards
E('div', { 'class': 'sh-stats', 'style': 'display:flex;gap:1rem;margin:1rem 0;flex-wrap:wrap;' }, [
this.renderStatCard('Running', this.status.running || 0, '#4caf50'),
this.renderStatCard('Total Apps', this.status.total || 0, '#2196f3'),
this.renderStatCard('LXC Container', this.status.lxc_status || 'unknown',
this.status.lxc_status === 'running' ? '#4caf50' : '#ff9800')
]),
// Actions
E('div', { 'class': 'cbi-section' }, [
E('h3', {}, 'Actions'),
E('div', { 'style': 'display:flex;gap:0.5rem;flex-wrap:wrap;' }, [
E('button', {
'class': 'cbi-button cbi-button-add',
'click': ui.createHandlerFn(this, 'handleCreate')
}, '+ Create App'),
E('button', {
'class': 'cbi-button',
'click': ui.createHandlerFn(this, 'handleRefresh')
}, 'Refresh')
])
]),
// Apps table
E('div', { 'class': 'cbi-section' }, [
E('h3', {}, 'Applications'),
this.renderAppsTable()
])
]);
poll.add(L.bind(this.pollStatus, this), 10);
return view;
},
renderStatCard: function(label, value, color) {
return E('div', {
'style': 'background:#1a1a2e;border-left:4px solid ' + color + ';padding:1rem;min-width:120px;border-radius:4px;'
}, [
E('div', { 'style': 'font-size:1.5rem;font-weight:bold;color:' + color }, String(value)),
E('div', { 'style': 'color:#888;font-size:0.85rem;' }, label)
]);
},
renderAppsTable: function() {
if (!this.apps.length) {
return E('p', { 'class': 'cbi-value-description' },
'No apps found. Click "Create App" to get started.');
}
var rows = this.apps.map(L.bind(function(app) {
var isRunning = app.status === 'running';
var statusBadge = E('span', {
'class': 'badge',
'style': 'background:' + (isRunning ? '#4caf50' : '#666') + ';color:#fff;padding:2px 8px;border-radius:10px;font-size:0.8rem;'
}, isRunning ? 'Running' : 'Stopped');
var actions = E('div', { 'style': 'display:flex;gap:4px;flex-wrap:wrap;' }, [
isRunning ?
E('button', {
'class': 'cbi-button cbi-button-remove',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handleStop', app.name)
}, 'Stop') :
E('button', {
'class': 'cbi-button cbi-button-apply',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handleStart', app.name)
}, 'Start'),
isRunning && app.port ?
E('a', {
'class': 'cbi-button',
'style': 'padding:4px 8px;font-size:0.8rem;text-decoration:none;',
'href': 'http://' + window.location.hostname + ':' + app.port,
'target': '_blank'
}, 'Open') : '',
!app.domain ?
E('button', {
'class': 'cbi-button',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handleExpose', app.name)
}, 'Expose') : '',
E('button', {
'class': 'cbi-button',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handlePublish', app.name)
}, 'Publish'),
E('button', {
'class': 'cbi-button cbi-button-remove',
'style': 'padding:4px 8px;font-size:0.8rem;',
'click': ui.createHandlerFn(this, 'handleDelete', app.name)
}, 'Delete')
]);
return E('tr', {}, [
E('td', {}, app.name),
E('td', {}, statusBadge),
E('td', {}, app.port || '-'),
E('td', {}, app.domain ? E('a', { 'href': 'https://' + app.domain, 'target': '_blank' }, app.domain) : '-'),
E('td', {}, app.created || '-'),
E('td', {}, actions)
]);
}, this));
return E('table', { 'class': 'table cbi-section-table' }, [
E('tr', { 'class': 'tr table-titles' }, [
E('th', { 'class': 'th' }, 'Name'),
E('th', { 'class': 'th' }, 'Status'),
E('th', { 'class': 'th' }, 'Port'),
E('th', { 'class': 'th' }, 'Domain'),
E('th', { 'class': 'th' }, 'Created'),
E('th', { 'class': 'th' }, 'Actions')
])
].concat(rows));
},
pollStatus: function() {
var self = this;
return Promise.all([callList(), callStatus()]).then(function(data) {
self.apps = (data[0] && data[0].apps) || [];
self.status = data[1] || {};
var container = document.querySelector('.cbi-map');
if (container) {
var statsDiv = container.querySelector('.sh-stats');
if (statsDiv) {
statsDiv.innerHTML = '';
statsDiv.appendChild(self.renderStatCard('Running', self.status.running || 0, '#4caf50'));
statsDiv.appendChild(self.renderStatCard('Total Apps', self.status.total || 0, '#2196f3'));
statsDiv.appendChild(self.renderStatCard('LXC Container', self.status.lxc_status || 'unknown',
self.status.lxc_status === 'running' ? '#4caf50' : '#ff9800'));
}
var tableSection = container.querySelectorAll('.cbi-section')[1];
if (tableSection) {
var oldTable = tableSection.querySelector('table, p');
if (oldTable) {
oldTable.replaceWith(self.renderAppsTable());
}
}
}
});
},
handleRefresh: function() {
return this.pollStatus();
},
handleCreate: function() {
var self = this;
var templates = this.templates;
var templateOptions = templates.map(function(t) {
return E('option', { 'value': t.name }, t.name + ' - ' + (t.description || 'No description'));
});
ui.showModal('Create New App', [
E('div', { 'class': 'cbi-section' }, [
E('div', { 'class': 'cbi-value' }, [
E('label', { 'class': 'cbi-value-title' }, 'App Name'),
E('div', { 'class': 'cbi-value-field' }, [
E('input', { 'type': 'text', 'id': 'new-app-name', 'class': 'cbi-input-text', 'placeholder': 'myapp' })
])
]),
E('div', { 'class': 'cbi-value' }, [
E('label', { 'class': 'cbi-value-title' }, 'Template'),
E('div', { 'class': 'cbi-value-field' }, [
E('select', { 'id': 'new-app-template', 'class': 'cbi-input-select' }, templateOptions)
])
])
]),
E('div', { 'class': 'right' }, [
E('button', {
'class': 'cbi-button',
'click': ui.hideModal
}, 'Cancel'),
E('button', {
'class': 'cbi-button cbi-button-positive',
'click': function() {
var name = document.getElementById('new-app-name').value.trim();
var template = document.getElementById('new-app-template').value;
if (!name) {
ui.addNotification(null, E('p', 'Please enter an app name'));
return;
}
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
ui.addNotification(null, E('p', 'Invalid app name. Use letters, numbers, underscore, hyphen.'));
return;
}
ui.hideModal();
ui.showModal('Creating App...', [
E('p', { 'class': 'spinning' }, 'Creating ' + name + ' from ' + template + ' template...')
]);
callCreate(name, template).then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'App created successfully!'));
self.pollStatus();
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Unknown error')));
}
});
}
}, 'Create')
])
]);
},
handleStart: function(name) {
var self = this;
ui.showModal('Starting App...', [
E('p', { 'class': 'spinning' }, 'Starting ' + name + '...')
]);
return callStart(name).then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'App started!'));
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Failed to start')));
}
return self.pollStatus();
});
},
handleStop: function(name) {
var self = this;
return callStop(name).then(function(res) {
if (res.code === 0) {
ui.addNotification(null, E('p', 'App stopped'));
}
return self.pollStatus();
});
},
handleDelete: function(name) {
var self = this;
if (!confirm('Delete app "' + name + '"? This cannot be undone.')) {
return;
}
return callDelete(name).then(function(res) {
if (res.code === 0) {
ui.addNotification(null, E('p', 'App deleted'));
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Failed to delete')));
}
return self.pollStatus();
});
},
handleExpose: function(name) {
var self = this;
var domain = prompt('Enter domain for ' + name + ' (leave empty for auto):', name + '.apps.secubox.in');
if (domain === null) return;
ui.showModal('Exposing App...', [
E('p', { 'class': 'spinning' }, 'Creating vhost and SSL certificate...')
]);
return callExpose(name, domain || '').then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'App exposed at ' + (domain || 'auto-domain')));
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Failed to expose')));
}
return self.pollStatus();
});
},
handlePublish: function(name) {
var self = this;
ui.showModal('Publishing...', [
E('p', { 'class': 'spinning' }, 'Publishing to mesh catalog...')
]);
return callPublish(name).then(function(res) {
ui.hideModal();
if (res.code === 0) {
ui.addNotification(null, E('p', 'App published to mesh catalog'));
} else {
ui.addNotification(null, E('p', 'Error: ' + (res.output || 'Failed to publish')));
}
return self.pollStatus();
});
}
});

View File

@ -0,0 +1,365 @@
#!/bin/sh
# RPCD backend for Streamlit Forge LuCI app
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
APPS_DIR="/srv/streamlit/apps"
# Get list of apps with status
get_apps() {
json_init
json_add_array "apps"
config_load streamlit-forge
config_get apps_dir main apps_dir '/srv/streamlit/apps'
for app_dir in "$apps_dir"/*/; do
[ -d "$app_dir" ] || continue
local name=$(basename "$app_dir")
[ "$name" = "." ] || [ "$name" = ".." ] && continue
[ -f "$app_dir/.slforge-start.sh" ] && continue
local enabled port domain entrypoint memory created status
config_get enabled "$name" enabled '0'
config_get port "$name" port ''
config_get domain "$name" domain ''
config_get entrypoint "$name" entrypoint 'app.py'
config_get memory "$name" memory '512M'
config_get created "$name" created ''
# Check status by port
status="stopped"
if [ -n "$port" ] && netstat -tln 2>/dev/null | grep -q ":$port "; then
status="running"
fi
json_add_object ""
json_add_string "name" "$name"
json_add_string "enabled" "$enabled"
json_add_string "port" "$port"
json_add_string "domain" "$domain"
json_add_string "entrypoint" "$entrypoint"
json_add_string "memory" "$memory"
json_add_string "created" "$created"
json_add_string "status" "$status"
json_close_object
done
json_close_array
json_dump
}
# Get app info
get_info() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
config_load streamlit-forge
config_get apps_dir main apps_dir '/srv/streamlit/apps'
local app_dir="$apps_dir/$name"
[ -d "$app_dir" ] || { echo '{"error":"App not found"}'; return; }
local enabled port domain entrypoint memory created status
config_get enabled "$name" enabled '0'
config_get port "$name" port ''
config_get domain "$name" domain ''
config_get entrypoint "$name" entrypoint 'app.py'
config_get memory "$name" memory '512M'
config_get created "$name" created ''
status="stopped"
if [ -n "$port" ] && netstat -tln 2>/dev/null | grep -q ":$port "; then
status="running"
fi
# Get files
local files=""
if [ -d "$app_dir/src" ]; then
files=$(ls -1 "$app_dir/src" 2>/dev/null | head -20 | tr '\n' ',')
fi
json_init
json_add_string "name" "$name"
json_add_string "enabled" "$enabled"
json_add_string "port" "$port"
json_add_string "domain" "$domain"
json_add_string "entrypoint" "$entrypoint"
json_add_string "memory" "$memory"
json_add_string "created" "$created"
json_add_string "status" "$status"
json_add_string "files" "$files"
json_add_string "directory" "$app_dir"
json_dump
}
# Get available templates
get_templates() {
json_init
json_add_array "templates"
local tpl_dir="/usr/share/streamlit-forge/templates"
for tpl in "$tpl_dir"/*/; do
[ -d "$tpl" ] || continue
local name=$(basename "$tpl")
local desc=""
[ -f "$tpl/README.md" ] && desc=$(head -1 "$tpl/README.md" | sed 's/^#\s*//')
json_add_object ""
json_add_string "name" "$name"
json_add_string "description" "$desc"
json_close_object
done
json_close_array
json_dump
}
# Get global status
get_status() {
local running=0
local total=0
config_load streamlit-forge
config_get apps_dir main apps_dir '/srv/streamlit/apps'
for app_dir in "$apps_dir"/*/; do
[ -d "$app_dir" ] || continue
local name=$(basename "$app_dir")
[ "$name" = "." ] || [ "$name" = ".." ] && continue
[ -f "$app_dir/.slforge-start.sh" ] && continue
total=$((total + 1))
local port
config_get port "$name" port ''
if [ -n "$port" ] && netstat -tln 2>/dev/null | grep -q ":$port "; then
running=$((running + 1))
fi
done
# Check LXC container
local lxc_status="stopped"
if lxc-info -n streamlit 2>/dev/null | grep -q "RUNNING"; then
lxc_status="running"
fi
json_init
json_add_int "total" "$total"
json_add_int "running" "$running"
json_add_string "lxc_status" "$lxc_status"
json_dump
}
# Create app
do_create() {
local name="$1"
local template="$2"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
[ -z "$template" ] && template="basic"
local output
output=$(slforge create "$name" --from-template "$template" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Delete app
do_delete() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge delete "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Start app
do_start() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge start "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Stop app
do_stop() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge stop "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Restart app
do_restart() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge restart "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Expose app
do_expose() {
local name="$1"
local domain="$2"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
if [ -n "$domain" ]; then
output=$(slforge expose "$name" --domain "$domain" 2>&1)
else
output=$(slforge expose "$name" 2>&1)
fi
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Hide app
do_hide() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge hide "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Publish to mesh
do_publish() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge publish "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Unpublish from mesh
do_unpublish() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
local output
output=$(slforge unpublish "$name" 2>&1)
local rc=$?
json_init
json_add_int "code" "$rc"
json_add_string "output" "$output"
json_dump
}
# Set config
do_set_config() {
local name="$1"
local key="$2"
local value="$3"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
[ -z "$key" ] && { echo '{"error":"Key required"}'; return; }
uci set streamlit-forge."$name"."$key"="$value"
uci commit streamlit-forge
json_init
json_add_int "code" 0
json_add_string "message" "Config updated"
json_dump
}
# Get config
get_config() {
local name="$1"
[ -z "$name" ] && { echo '{"error":"App name required"}'; return; }
json_init
config_load streamlit-forge
local enabled port domain entrypoint memory
config_get enabled "$name" enabled '0'
config_get port "$name" port ''
config_get domain "$name" domain ''
config_get entrypoint "$name" entrypoint 'app.py'
config_get memory "$name" memory '512M'
json_add_string "enabled" "$enabled"
json_add_string "port" "$port"
json_add_string "domain" "$domain"
json_add_string "entrypoint" "$entrypoint"
json_add_string "memory" "$memory"
json_dump
}
case "$1" in
list)
echo '{"list":{},"status":{},"info":{"name":"String"},"templates":{},"config":{"name":"String"},"create":{"name":"String","template":"String"},"delete":{"name":"String"},"start":{"name":"String"},"stop":{"name":"String"},"restart":{"name":"String"},"expose":{"name":"String","domain":"String"},"hide":{"name":"String"},"publish":{"name":"String"},"unpublish":{"name":"String"},"set_config":{"name":"String","key":"String","value":"String"}}'
;;
call)
case "$2" in
list) get_apps ;;
status) get_status ;;
info) read input; json_load "$input"; json_get_var name name; get_info "$name" ;;
templates) get_templates ;;
config) read input; json_load "$input"; json_get_var name name; get_config "$name" ;;
create) read input; json_load "$input"; json_get_var name name; json_get_var template template; do_create "$name" "$template" ;;
delete) read input; json_load "$input"; json_get_var name name; do_delete "$name" ;;
start) read input; json_load "$input"; json_get_var name name; do_start "$name" ;;
stop) read input; json_load "$input"; json_get_var name name; do_stop "$name" ;;
restart) read input; json_load "$input"; json_get_var name name; do_restart "$name" ;;
expose) read input; json_load "$input"; json_get_var name name; json_get_var domain domain; do_expose "$name" "$domain" ;;
hide) read input; json_load "$input"; json_get_var name name; do_hide "$name" ;;
publish) read input; json_load "$input"; json_get_var name name; do_publish "$name" ;;
unpublish) read input; json_load "$input"; json_get_var name name; do_unpublish "$name" ;;
set_config) read input; json_load "$input"; json_get_var name name; json_get_var key key; json_get_var value value; do_set_config "$name" "$key" "$value" ;;
esac
;;
esac

View File

@ -0,0 +1,14 @@
{
"admin/services/streamlit-forge": {
"title": "Streamlit Forge",
"order": 85,
"action": {
"type": "view",
"path": "streamlit-forge/overview"
},
"depends": {
"acl": ["luci-app-streamlit-forge"],
"uci": { "streamlit-forge": true }
}
}
}

View File

@ -0,0 +1,17 @@
{
"luci-app-streamlit-forge": {
"description": "Grant access to Streamlit Forge",
"read": {
"ubus": {
"luci.streamlit-forge": ["list", "status", "info", "templates", "config"]
},
"uci": ["streamlit-forge"]
},
"write": {
"ubus": {
"luci.streamlit-forge": ["create", "delete", "start", "stop", "restart", "expose", "hide", "publish", "unpublish", "set_config"]
},
"uci": ["streamlit-forge"]
}
}
}

View File

@ -7,7 +7,7 @@ Architecture: all
Installed-Size: 61440 Installed-Size: 61440
Description: Data Sovereignty Engine with multi-tier classification for ANSSI CSPN compliance Description: Data Sovereignty Engine with multi-tier classification for ANSSI CSPN compliance
Filename: luci-app-ai-gateway_1.0.0-r1_all.ipk Filename: luci-app-ai-gateway_1.0.0-r1_all.ipk
Size: 10787 Size: 10789
Package: luci-app-ai-insights Package: luci-app-ai-insights
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -22,7 +22,7 @@ Description: Unified AI security insights dashboard for SecuBox.
DNS Guard, Network Anomaly, CVE Triage, and LocalRecall. DNS Guard, Network Anomaly, CVE Triage, and LocalRecall.
Provides security posture scoring and AI-powered analysis. Provides security posture scoring and AI-powered analysis.
Filename: luci-app-ai-insights_1.0.0-r1_all.ipk Filename: luci-app-ai-insights_1.0.0-r1_all.ipk
Size: 11635 Size: 11638
Package: luci-app-auth-guardian Package: luci-app-auth-guardian
Version: 0.4.0-r3 Version: 0.4.0-r3
@ -34,7 +34,7 @@ Architecture: all
Installed-Size: 71680 Installed-Size: 71680
Description: Comprehensive authentication and session management with captive portal, OAuth2/OIDC integration, voucher system, and time-based access control Description: Comprehensive authentication and session management with captive portal, OAuth2/OIDC integration, voucher system, and time-based access control
Filename: luci-app-auth-guardian_0.4.0-r3_all.ipk Filename: luci-app-auth-guardian_0.4.0-r3_all.ipk
Size: 12393 Size: 12391
Package: luci-app-backup Package: luci-app-backup
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -46,7 +46,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI Backup Manager Description: LuCI Backup Manager
Filename: luci-app-backup_1.0.0-r1_all.ipk Filename: luci-app-backup_1.0.0-r1_all.ipk
Size: 4535 Size: 4532
Package: luci-app-bandwidth-manager Package: luci-app-bandwidth-manager
Version: 0.5.0-r2 Version: 0.5.0-r2
@ -58,7 +58,7 @@ Architecture: all
Installed-Size: 337920 Installed-Size: 337920
Description: Advanced bandwidth management with QoS rules, client quotas, and SQM integration Description: Advanced bandwidth management with QoS rules, client quotas, and SQM integration
Filename: luci-app-bandwidth-manager_0.5.0-r2_all.ipk Filename: luci-app-bandwidth-manager_0.5.0-r2_all.ipk
Size: 61684 Size: 61683
Package: luci-app-cdn-cache Package: luci-app-cdn-cache
Version: 0.5.0-r3 Version: 0.5.0-r3
@ -70,7 +70,7 @@ Architecture: all
Installed-Size: 122880 Installed-Size: 122880
Description: Dashboard for managing local CDN caching proxy on OpenWrt Description: Dashboard for managing local CDN caching proxy on OpenWrt
Filename: luci-app-cdn-cache_0.5.0-r3_all.ipk Filename: luci-app-cdn-cache_0.5.0-r3_all.ipk
Size: 24252 Size: 24256
Package: luci-app-client-guardian Package: luci-app-client-guardian
Version: 0.4.0-r7 Version: 0.4.0-r7
@ -82,7 +82,7 @@ Architecture: all
Installed-Size: 276480 Installed-Size: 276480
Description: Network Access Control with client monitoring, zone management, captive portal, parental controls, and SMS/email alerts Description: Network Access Control with client monitoring, zone management, captive portal, parental controls, and SMS/email alerts
Filename: luci-app-client-guardian_0.4.0-r7_all.ipk Filename: luci-app-client-guardian_0.4.0-r7_all.ipk
Size: 52682 Size: 52687
Package: luci-app-cloner Package: luci-app-cloner
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -93,7 +93,7 @@ Architecture: all
Installed-Size: 102400 Installed-Size: 102400
Description: SecuBox cloning station for building and deploying clone images Description: SecuBox cloning station for building and deploying clone images
Filename: luci-app-cloner_1.0.0-r1_all.ipk Filename: luci-app-cloner_1.0.0-r1_all.ipk
Size: 19431 Size: 19434
Package: luci-app-config-advisor Package: luci-app-config-advisor
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -105,7 +105,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: ANSSI CSPN compliance checking and security configuration advisor Description: ANSSI CSPN compliance checking and security configuration advisor
Filename: luci-app-config-advisor_1.0.0-r1_all.ipk Filename: luci-app-config-advisor_1.0.0-r1_all.ipk
Size: 8858 Size: 8857
Package: luci-app-cookie-tracker Package: luci-app-cookie-tracker
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -116,7 +116,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI Cookie Tracker Dashboard Description: LuCI Cookie Tracker Dashboard
Filename: luci-app-cookie-tracker_1.0.0-r1_all.ipk Filename: luci-app-cookie-tracker_1.0.0-r1_all.ipk
Size: 5657 Size: 5655
Package: luci-app-crowdsec-dashboard Package: luci-app-crowdsec-dashboard
Version: 0.8.0-r1 Version: 0.8.0-r1
@ -140,7 +140,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI CVE Triage Dashboard Description: LuCI CVE Triage Dashboard
Filename: luci-app-cve-triage_1.0.0-r1_all.ipk Filename: luci-app-cve-triage_1.0.0-r1_all.ipk
Size: 5942 Size: 5941
Package: luci-app-cyberfeed Package: luci-app-cyberfeed
Version: 0.1.1-r1 Version: 0.1.1-r1
@ -152,7 +152,7 @@ Architecture: all
Installed-Size: 71680 Installed-Size: 71680
Description: Cyberpunk-themed RSS feed aggregator dashboard with social media support Description: Cyberpunk-themed RSS feed aggregator dashboard with social media support
Filename: luci-app-cyberfeed_0.1.1-r1_all.ipk Filename: luci-app-cyberfeed_0.1.1-r1_all.ipk
Size: 12884 Size: 12882
Package: luci-app-device-intel Package: luci-app-device-intel
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -183,7 +183,7 @@ Description: SecuBox DNS Guard provides privacy-focused DNS management with AI-
- Real-time alerts and blocklist management - Real-time alerts and blocklist management
- Domain analysis with LocalAI integration - Domain analysis with LocalAI integration
Filename: luci-app-dnsguard_1.1.0-r1_all.ipk Filename: luci-app-dnsguard_1.1.0-r1_all.ipk
Size: 12446 Size: 12449
Package: luci-app-dns-provider Package: luci-app-dns-provider
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -195,7 +195,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI DNS Provider Manager Description: LuCI DNS Provider Manager
Filename: luci-app-dns-provider_1.0.0-r1_all.ipk Filename: luci-app-dns-provider_1.0.0-r1_all.ipk
Size: 7166 Size: 7167
Package: luci-app-domoticz Package: luci-app-domoticz
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -207,7 +207,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI Domoticz Home Automation Configuration Description: LuCI Domoticz Home Automation Configuration
Filename: luci-app-domoticz_1.0.0-r1_all.ipk Filename: luci-app-domoticz_1.0.0-r1_all.ipk
Size: 7122 Size: 7123
Package: luci-app-exposure Package: luci-app-exposure
Version: 1.0.0-r3 Version: 1.0.0-r3
@ -219,7 +219,7 @@ Architecture: all
Installed-Size: 71680 Installed-Size: 71680
Description: LuCI SecuBox Service Exposure Manager Description: LuCI SecuBox Service Exposure Manager
Filename: luci-app-exposure_1.0.0-r3_all.ipk Filename: luci-app-exposure_1.0.0-r3_all.ipk
Size: 11699 Size: 11695
Package: luci-app-gitea Package: luci-app-gitea
Version: 1.0.0-r2 Version: 1.0.0-r2
@ -231,7 +231,7 @@ Architecture: all
Installed-Size: 92160 Installed-Size: 92160
Description: Modern dashboard for Gitea Platform management on OpenWrt Description: Modern dashboard for Gitea Platform management on OpenWrt
Filename: luci-app-gitea_1.0.0-r2_all.ipk Filename: luci-app-gitea_1.0.0-r2_all.ipk
Size: 16620 Size: 16621
Package: luci-app-glances Package: luci-app-glances
Version: 1.0.0-r2 Version: 1.0.0-r2
@ -243,7 +243,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: Modern dashboard for Glances system monitoring with SecuBox theme Description: Modern dashboard for Glances system monitoring with SecuBox theme
Filename: luci-app-glances_1.0.0-r2_all.ipk Filename: luci-app-glances_1.0.0-r2_all.ipk
Size: 7017 Size: 7015
Package: luci-app-gotosocial Package: luci-app-gotosocial
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -255,7 +255,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: LuCI app for GoToSocial Fediverse Server Description: LuCI app for GoToSocial Fediverse Server
Filename: luci-app-gotosocial_0.1.0-r1_all.ipk Filename: luci-app-gotosocial_0.1.0-r1_all.ipk
Size: 8208 Size: 8206
Package: luci-app-haproxy Package: luci-app-haproxy
Version: 1.0.0-r8 Version: 1.0.0-r8
@ -267,7 +267,7 @@ Architecture: all
Installed-Size: 225280 Installed-Size: 225280
Description: Web interface for managing HAProxy load balancer with vhosts, SSL certificates, and backend routing Description: Web interface for managing HAProxy load balancer with vhosts, SSL certificates, and backend routing
Filename: luci-app-haproxy_1.0.0-r8_all.ipk Filename: luci-app-haproxy_1.0.0-r8_all.ipk
Size: 35342 Size: 35339
Package: luci-app-hexojs Package: luci-app-hexojs
Version: 1.0.0-r3 Version: 1.0.0-r3
@ -279,7 +279,7 @@ Architecture: all
Installed-Size: 194560 Installed-Size: 194560
Description: Modern dashboard for Hexo static site generator on OpenWrt Description: Modern dashboard for Hexo static site generator on OpenWrt
Filename: luci-app-hexojs_1.0.0-r3_all.ipk Filename: luci-app-hexojs_1.0.0-r3_all.ipk
Size: 30451 Size: 30453
Package: luci-app-iot-guard Package: luci-app-iot-guard
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -291,7 +291,7 @@ Architecture: all
Installed-Size: 61440 Installed-Size: 61440
Description: IoT device isolation and security monitoring interface Description: IoT device isolation and security monitoring interface
Filename: luci-app-iot-guard_1.0.0-r1_all.ipk Filename: luci-app-iot-guard_1.0.0-r1_all.ipk
Size: 10535 Size: 10533
Package: luci-app-ipblocklist Package: luci-app-ipblocklist
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -303,7 +303,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: SecuBox IP Blocklist - Static threat defense dashboard Description: SecuBox IP Blocklist - Static threat defense dashboard
Filename: luci-app-ipblocklist_1.0.0-r1_all.ipk Filename: luci-app-ipblocklist_1.0.0-r1_all.ipk
Size: 6528 Size: 6529
Package: luci-app-jabber Package: luci-app-jabber
Version: 0 Version: 0
@ -315,7 +315,7 @@ Architecture: all
Installed-Size: 61440 Installed-Size: 61440
Description: LuCI Jabber/XMPP Server (Prosody) Description: LuCI Jabber/XMPP Server (Prosody)
Filename: luci-app-jabber_0_all.ipk Filename: luci-app-jabber_0_all.ipk
Size: 9308 Size: 9311
Package: luci-app-jellyfin Package: luci-app-jellyfin
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -327,7 +327,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: LuCI Jellyfin Media Server Configuration Description: LuCI Jellyfin Media Server Configuration
Filename: luci-app-jellyfin_1.0.0-r1_all.ipk Filename: luci-app-jellyfin_1.0.0-r1_all.ipk
Size: 10486 Size: 10483
Package: luci-app-jitsi Package: luci-app-jitsi
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -339,7 +339,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI Jitsi Meet Configuration Description: LuCI Jitsi Meet Configuration
Filename: luci-app-jitsi_1.0.0-r1_all.ipk Filename: luci-app-jitsi_1.0.0-r1_all.ipk
Size: 5175 Size: 5173
Package: luci-app-ksm-manager Package: luci-app-ksm-manager
Version: 0.4.0-r2 Version: 0.4.0-r2
@ -351,7 +351,7 @@ Architecture: all
Installed-Size: 112640 Installed-Size: 112640
Description: Centralized cryptographic key management with hardware security module (HSM) support for Nitrokey and YubiKey devices. Provides secure key storage, certificate management, SSH key handling, and secret storage with audit logging. Description: Centralized cryptographic key management with hardware security module (HSM) support for Nitrokey and YubiKey devices. Provides secure key storage, certificate management, SSH key handling, and secret storage with audit logging.
Filename: luci-app-ksm-manager_0.4.0-r2_all.ipk Filename: luci-app-ksm-manager_0.4.0-r2_all.ipk
Size: 18778 Size: 18780
Package: luci-app-localai Package: luci-app-localai
Version: 0.1.0-r15 Version: 0.1.0-r15
@ -375,7 +375,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI LocalRecall AI Memory Dashboard Description: LuCI LocalRecall AI Memory Dashboard
Filename: luci-app-localrecall_1.0.0-r1_all.ipk Filename: luci-app-localrecall_1.0.0-r1_all.ipk
Size: 8415 Size: 8413
Package: luci-app-lyrion Package: luci-app-lyrion
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -387,7 +387,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI support for Lyrion Music Server Description: LuCI support for Lyrion Music Server
Filename: luci-app-lyrion_1.0.0-r1_all.ipk Filename: luci-app-lyrion_1.0.0-r1_all.ipk
Size: 6841 Size: 6837
Package: luci-app-mac-guardian Package: luci-app-mac-guardian
Version: 0.5.0-r1 Version: 0.5.0-r1
@ -399,7 +399,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI MAC Guardian - WiFi MAC Security Monitor Description: LuCI MAC Guardian - WiFi MAC Security Monitor
Filename: luci-app-mac-guardian_0.5.0-r1_all.ipk Filename: luci-app-mac-guardian_0.5.0-r1_all.ipk
Size: 6660 Size: 6667
Package: luci-app-magicmirror2 Package: luci-app-magicmirror2
Version: 0.4.0-r6 Version: 0.4.0-r6
@ -411,7 +411,7 @@ Architecture: all
Installed-Size: 71680 Installed-Size: 71680
Description: Modern dashboard for MagicMirror2 smart display platform with module manager and SecuBox theme Description: Modern dashboard for MagicMirror2 smart display platform with module manager and SecuBox theme
Filename: luci-app-magicmirror2_0.4.0-r6_all.ipk Filename: luci-app-magicmirror2_0.4.0-r6_all.ipk
Size: 12359 Size: 12358
Package: luci-app-mailinabox Package: luci-app-mailinabox
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -423,7 +423,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI support for Mail-in-a-Box Description: LuCI support for Mail-in-a-Box
Filename: luci-app-mailinabox_1.0.0-r1_all.ipk Filename: luci-app-mailinabox_1.0.0-r1_all.ipk
Size: 5484 Size: 5482
Package: luci-app-mailserver Package: luci-app-mailserver
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -435,7 +435,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI Mail Server Manager Description: LuCI Mail Server Manager
Filename: luci-app-mailserver_1.0.0-r1_all.ipk Filename: luci-app-mailserver_1.0.0-r1_all.ipk
Size: 6515 Size: 6510
Package: luci-app-master-link Package: luci-app-master-link
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -447,7 +447,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI SecuBox Master-Link Mesh Management Description: LuCI SecuBox Master-Link Mesh Management
Filename: luci-app-master-link_1.0.0-r1_all.ipk Filename: luci-app-master-link_1.0.0-r1_all.ipk
Size: 6305 Size: 6309
Package: luci-app-matrix Package: luci-app-matrix
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -459,7 +459,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI Matrix Homeserver Dashboard Description: LuCI Matrix Homeserver Dashboard
Filename: luci-app-matrix_1.0.0-r1_all.ipk Filename: luci-app-matrix_1.0.0-r1_all.ipk
Size: 7524 Size: 7518
Package: luci-app-media-flow Package: luci-app-media-flow
Version: 0.6.4-r1 Version: 0.6.4-r1
@ -471,7 +471,7 @@ Architecture: all
Installed-Size: 133120 Installed-Size: 133120
Description: Real-time detection and monitoring of streaming services (Netflix, YouTube, Spotify, etc.) with quality estimation, history tracking, and alerts. Supports nDPId local DPI and netifyd. Description: Real-time detection and monitoring of streaming services (Netflix, YouTube, Spotify, etc.) with quality estimation, history tracking, and alerts. Supports nDPId local DPI and netifyd.
Filename: luci-app-media-flow_0.6.4-r1_all.ipk Filename: luci-app-media-flow_0.6.4-r1_all.ipk
Size: 25380 Size: 25379
Package: luci-app-metablogizer Package: luci-app-metablogizer
Version: 1.1.0-r1 Version: 1.1.0-r1
@ -483,7 +483,7 @@ Architecture: all
Installed-Size: 133120 Installed-Size: 133120
Description: LuCI support for MetaBlogizer Static Site Publisher Description: LuCI support for MetaBlogizer Static Site Publisher
Filename: luci-app-metablogizer_1.1.0-r1_all.ipk Filename: luci-app-metablogizer_1.1.0-r1_all.ipk
Size: 26205 Size: 26203
Package: luci-app-metabolizer Package: luci-app-metabolizer
Version: 1.0.0-r2 Version: 1.0.0-r2
@ -495,7 +495,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI support for Metabolizer CMS Description: LuCI support for Metabolizer CMS
Filename: luci-app-metabolizer_1.0.0-r2_all.ipk Filename: luci-app-metabolizer_1.0.0-r2_all.ipk
Size: 4825 Size: 4822
Package: luci-app-mitmproxy Package: luci-app-mitmproxy
Version: 0.5.0-r2 Version: 0.5.0-r2
@ -519,7 +519,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: Web interface for MMPM - MagicMirror Package Manager Description: Web interface for MMPM - MagicMirror Package Manager
Filename: luci-app-mmpm_0.2.0-r3_all.ipk Filename: luci-app-mmpm_0.2.0-r3_all.ipk
Size: 7969 Size: 7968
Package: luci-app-mqtt-bridge Package: luci-app-mqtt-bridge
Version: 0.4.0-r4 Version: 0.4.0-r4
@ -531,7 +531,7 @@ Architecture: all
Installed-Size: 122880 Installed-Size: 122880
Description: USB-to-MQTT IoT hub with SecuBox theme Description: USB-to-MQTT IoT hub with SecuBox theme
Filename: luci-app-mqtt-bridge_0.4.0-r4_all.ipk Filename: luci-app-mqtt-bridge_0.4.0-r4_all.ipk
Size: 22691 Size: 22688
Package: luci-app-ndpid Package: luci-app-ndpid
Version: 1.1.2-r2 Version: 1.1.2-r2
@ -567,7 +567,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI Network Anomaly Detection Dashboard Description: LuCI Network Anomaly Detection Dashboard
Filename: luci-app-network-anomaly_1.0.0-r1_all.ipk Filename: luci-app-network-anomaly_1.0.0-r1_all.ipk
Size: 7646 Size: 7641
Package: luci-app-network-modes Package: luci-app-network-modes
Version: 0.5.0-r3 Version: 0.5.0-r3
@ -579,7 +579,7 @@ Architecture: all
Installed-Size: 286720 Installed-Size: 286720
Description: Configure OpenWrt for different network modes: Sniffer, Access Point, Relay, Router Description: Configure OpenWrt for different network modes: Sniffer, Access Point, Relay, Router
Filename: luci-app-network-modes_0.5.0-r3_all.ipk Filename: luci-app-network-modes_0.5.0-r3_all.ipk
Size: 54227 Size: 54225
Package: luci-app-network-tweaks Package: luci-app-network-tweaks
Version: 1.0.0-r7 Version: 1.0.0-r7
@ -591,7 +591,7 @@ Architecture: all
Installed-Size: 81920 Installed-Size: 81920
Description: Unified network services dashboard with DNS/hosts sync, CDN cache control, and WPAD auto-proxy configuration Description: Unified network services dashboard with DNS/hosts sync, CDN cache control, and WPAD auto-proxy configuration
Filename: luci-app-network-tweaks_1.0.0-r7_all.ipk Filename: luci-app-network-tweaks_1.0.0-r7_all.ipk
Size: 15947 Size: 15943
Package: luci-app-nextcloud Package: luci-app-nextcloud
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -603,7 +603,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: LuCI support for Nextcloud LXC Description: LuCI support for Nextcloud LXC
Filename: luci-app-nextcloud_1.0.0-r1_all.ipk Filename: luci-app-nextcloud_1.0.0-r1_all.ipk
Size: 10351 Size: 10347
Package: luci-app-ollama Package: luci-app-ollama
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -615,7 +615,7 @@ Architecture: all
Installed-Size: 71680 Installed-Size: 71680
Description: Modern dashboard for Ollama LLM management on OpenWrt Description: Modern dashboard for Ollama LLM management on OpenWrt
Filename: luci-app-ollama_0.1.0-r1_all.ipk Filename: luci-app-ollama_0.1.0-r1_all.ipk
Size: 14333 Size: 14337
Package: luci-app-openclaw Package: luci-app-openclaw
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -627,7 +627,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: Web interface for OpenClaw personal AI with Claude/OpenAI/Ollama support Description: Web interface for OpenClaw personal AI with Claude/OpenAI/Ollama support
Filename: luci-app-openclaw_1.0.0-r1_all.ipk Filename: luci-app-openclaw_1.0.0-r1_all.ipk
Size: 8412 Size: 8409
Package: luci-app-peertube Package: luci-app-peertube
Version: 0 Version: 0
@ -639,7 +639,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI PeerTube Video Platform Description: LuCI PeerTube Video Platform
Filename: luci-app-peertube_0_all.ipk Filename: luci-app-peertube_0_all.ipk
Size: 5757 Size: 5755
Package: luci-app-picobrew Package: luci-app-picobrew
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -651,7 +651,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: Modern dashboard for PicoBrew Server management on OpenWrt Description: Modern dashboard for PicoBrew Server management on OpenWrt
Filename: luci-app-picobrew_1.0.0-r1_all.ipk Filename: luci-app-picobrew_1.0.0-r1_all.ipk
Size: 9535 Size: 9531
Package: luci-app-secubox Package: luci-app-secubox
Version: 0.7.1-r4 Version: 0.7.1-r4
@ -663,7 +663,7 @@ Architecture: all
Installed-Size: 440320 Installed-Size: 440320
Description: Central control hub for all SecuBox modules. Provides unified dashboard, module status, system health monitoring, and quick actions. Description: Central control hub for all SecuBox modules. Provides unified dashboard, module status, system health monitoring, and quick actions.
Filename: luci-app-secubox_0.7.1-r4_all.ipk Filename: luci-app-secubox_0.7.1-r4_all.ipk
Size: 82095 Size: 82094
Package: luci-app-secubox-admin Package: luci-app-secubox-admin
Version: 1.0.0-r19 Version: 1.0.0-r19
@ -686,7 +686,7 @@ Architecture: all
Installed-Size: 81920 Installed-Size: 81920
Description: LuCI SecuBox CrowdSec Dashboard Description: LuCI SecuBox CrowdSec Dashboard
Filename: luci-app-secubox-crowdsec_1.0.0-r3_all.ipk Filename: luci-app-secubox-crowdsec_1.0.0-r3_all.ipk
Size: 13916 Size: 13921
Package: luci-app-secubox-mirror Package: luci-app-secubox-mirror
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -698,7 +698,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI MirrorNet Dashboard Description: LuCI MirrorNet Dashboard
Filename: luci-app-secubox-mirror_0.1.0-r1_all.ipk Filename: luci-app-secubox-mirror_0.1.0-r1_all.ipk
Size: 5847 Size: 5848
Package: luci-app-secubox-netdiag Package: luci-app-secubox-netdiag
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -710,7 +710,7 @@ Architecture: all
Installed-Size: 81920 Installed-Size: 81920
Description: Real-time DSA switch port statistics, error monitoring, and network health diagnostics Description: Real-time DSA switch port statistics, error monitoring, and network health diagnostics
Filename: luci-app-secubox-netdiag_1.0.0-r1_all.ipk Filename: luci-app-secubox-netdiag_1.0.0-r1_all.ipk
Size: 15344 Size: 15342
Package: luci-app-secubox-netifyd Package: luci-app-secubox-netifyd
Version: 1.2.1-r1 Version: 1.2.1-r1
@ -722,7 +722,7 @@ Architecture: all
Installed-Size: 194560 Installed-Size: 194560
Description: Complete LuCI interface for netifyd DPI engine with real-time flow monitoring, application detection, network analytics, and flow action plugins Description: Complete LuCI interface for netifyd DPI engine with real-time flow monitoring, application detection, network analytics, and flow action plugins
Filename: luci-app-secubox-netifyd_1.2.1-r1_all.ipk Filename: luci-app-secubox-netifyd_1.2.1-r1_all.ipk
Size: 36720 Size: 36715
Package: luci-app-secubox-p2p Package: luci-app-secubox-p2p
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -734,7 +734,7 @@ Architecture: all
Installed-Size: 245760 Installed-Size: 245760
Description: LuCI SecuBox P2P Hub Description: LuCI SecuBox P2P Hub
Filename: luci-app-secubox-p2p_0.1.0-r1_all.ipk Filename: luci-app-secubox-p2p_0.1.0-r1_all.ipk
Size: 46832 Size: 46830
Package: luci-app-secubox-portal Package: luci-app-secubox-portal
Version: 0.7.0-r3 Version: 0.7.0-r3
@ -758,7 +758,7 @@ Architecture: all
Installed-Size: 61440 Installed-Size: 61440
Description: Unified dashboard integrating netifyd DPI threats with CrowdSec intelligence for real-time threat monitoring and automated blocking Description: Unified dashboard integrating netifyd DPI threats with CrowdSec intelligence for real-time threat monitoring and automated blocking
Filename: luci-app-secubox-security-threats_1.0.0-r4_all.ipk Filename: luci-app-secubox-security-threats_1.0.0-r4_all.ipk
Size: 10656 Size: 10657
Package: luci-app-secubox-users Package: luci-app-secubox-users
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -769,7 +769,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI SecuBox User Management Description: LuCI SecuBox User Management
Filename: luci-app-secubox-users_1.0.0-r1_all.ipk Filename: luci-app-secubox-users_1.0.0-r1_all.ipk
Size: 5144 Size: 5141
Package: luci-app-service-registry Package: luci-app-service-registry
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -781,7 +781,7 @@ Architecture: all
Installed-Size: 194560 Installed-Size: 194560
Description: Unified service aggregation with HAProxy vhosts, Tor hidden services, and QR-coded landing page Description: Unified service aggregation with HAProxy vhosts, Tor hidden services, and QR-coded landing page
Filename: luci-app-service-registry_1.0.0-r1_all.ipk Filename: luci-app-service-registry_1.0.0-r1_all.ipk
Size: 39952 Size: 39953
Package: luci-app-simplex Package: luci-app-simplex
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -793,7 +793,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI SimpleX Chat Server Configuration Description: LuCI SimpleX Chat Server Configuration
Filename: luci-app-simplex_1.0.0-r1_all.ipk Filename: luci-app-simplex_1.0.0-r1_all.ipk
Size: 7035 Size: 7033
Package: luci-app-streamlit Package: luci-app-streamlit
Version: 1.0.0-r11 Version: 1.0.0-r11
@ -805,7 +805,7 @@ Architecture: all
Installed-Size: 112640 Installed-Size: 112640
Description: Multi-instance Streamlit management with Gitea integration Description: Multi-instance Streamlit management with Gitea integration
Filename: luci-app-streamlit_1.0.0-r11_all.ipk Filename: luci-app-streamlit_1.0.0-r11_all.ipk
Size: 20565 Size: 20567
Package: luci-app-system-hub Package: luci-app-system-hub
Version: 0.5.2-r2 Version: 0.5.2-r2
@ -817,7 +817,7 @@ Architecture: all
Installed-Size: 327680 Installed-Size: 327680
Description: Central system control with monitoring, services, logs, and backup Description: Central system control with monitoring, services, logs, and backup
Filename: luci-app-system-hub_0.5.2-r2_all.ipk Filename: luci-app-system-hub_0.5.2-r2_all.ipk
Size: 64292 Size: 64290
Package: luci-app-threat-analyst Package: luci-app-threat-analyst
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -829,7 +829,7 @@ Architecture: all
Installed-Size: 51200 Installed-Size: 51200
Description: LuCI Threat Analyst Dashboard Description: LuCI Threat Analyst Dashboard
Filename: luci-app-threat-analyst_1.0.0-r1_all.ipk Filename: luci-app-threat-analyst_1.0.0-r1_all.ipk
Size: 10142 Size: 10143
Package: luci-app-tor Package: luci-app-tor
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -865,7 +865,7 @@ Architecture: all
Installed-Size: 81920 Installed-Size: 81920
Description: Advanced traffic shaping with TC/CAKE for precise bandwidth control Description: Advanced traffic shaping with TC/CAKE for precise bandwidth control
Filename: luci-app-traffic-shaper_0.4.0-r2_all.ipk Filename: luci-app-traffic-shaper_0.4.0-r2_all.ipk
Size: 14587 Size: 14589
Package: luci-app-vhost-manager Package: luci-app-vhost-manager
Version: 0.5.0-r5 Version: 0.5.0-r5
@ -877,7 +877,7 @@ Architecture: all
Installed-Size: 153600 Installed-Size: 153600
Description: Nginx reverse proxy manager with Let's Encrypt SSL certificates, authentication, and WebSocket support Description: Nginx reverse proxy manager with Let's Encrypt SSL certificates, authentication, and WebSocket support
Filename: luci-app-vhost-manager_0.5.0-r5_all.ipk Filename: luci-app-vhost-manager_0.5.0-r5_all.ipk
Size: 26278 Size: 26282
Package: luci-app-voip Package: luci-app-voip
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -889,7 +889,7 @@ Architecture: all
Installed-Size: 81920 Installed-Size: 81920
Description: LuCI VoIP PBX Management Description: LuCI VoIP PBX Management
Filename: luci-app-voip_1.0.0-r1_all.ipk Filename: luci-app-voip_1.0.0-r1_all.ipk
Size: 11040 Size: 11048
Package: luci-app-vortex-dns Package: luci-app-vortex-dns
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -901,7 +901,7 @@ Architecture: all
Installed-Size: 40960 Installed-Size: 40960
Description: LuCI Vortex DNS Dashboard Description: LuCI Vortex DNS Dashboard
Filename: luci-app-vortex-dns_1.0.0-r1_all.ipk Filename: luci-app-vortex-dns_1.0.0-r1_all.ipk
Size: 6074 Size: 6080
Package: luci-app-vortex-firewall Package: luci-app-vortex-firewall
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -913,7 +913,7 @@ Architecture: all
Installed-Size: 30720 Installed-Size: 30720
Description: LuCI Vortex DNS Firewall Dashboard Description: LuCI Vortex DNS Firewall Dashboard
Filename: luci-app-vortex-firewall_1.0.0-r1_all.ipk Filename: luci-app-vortex-firewall_1.0.0-r1_all.ipk
Size: 5452 Size: 5453
Package: luci-app-wazuh Package: luci-app-wazuh
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -924,7 +924,7 @@ Architecture: all
Installed-Size: 71680 Installed-Size: 71680
Description: Unified security monitoring dashboard for Wazuh SIEM/XDR integration Description: Unified security monitoring dashboard for Wazuh SIEM/XDR integration
Filename: luci-app-wazuh_1.0.0-r1_all.ipk Filename: luci-app-wazuh_1.0.0-r1_all.ipk
Size: 11068 Size: 11072
Package: luci-app-wireguard-dashboard Package: luci-app-wireguard-dashboard
Version: 0.7.0-r5 Version: 0.7.0-r5
@ -936,7 +936,7 @@ Architecture: all
Installed-Size: 215040 Installed-Size: 215040
Description: Modern dashboard for WireGuard VPN monitoring on OpenWrt Description: Modern dashboard for WireGuard VPN monitoring on OpenWrt
Filename: luci-app-wireguard-dashboard_0.7.0-r5_all.ipk Filename: luci-app-wireguard-dashboard_0.7.0-r5_all.ipk
Size: 42284 Size: 42285
Package: luci-app-zigbee2mqtt Package: luci-app-zigbee2mqtt
Version: 1.0.0-r2 Version: 1.0.0-r2
@ -960,7 +960,7 @@ Architecture: all
Installed-Size: 491520 Installed-Size: 491520
Description: Global CyberMood design system (CSS/JS/i18n) shared by all SecuBox dashboards. Description: Global CyberMood design system (CSS/JS/i18n) shared by all SecuBox dashboards.
Filename: luci-theme-secubox_0.4.8-r1_all.ipk Filename: luci-theme-secubox_0.4.8-r1_all.ipk
Size: 121588 Size: 121590
Package: secubox-ai-gateway Package: secubox-ai-gateway
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -985,7 +985,7 @@ Description: SecuBox AI Gateway implements the Data Classifier (Sovereignty Eng
All cloud providers are opt-in. Local tier always active. All cloud providers are opt-in. Local tier always active.
Filename: secubox-ai-gateway_1.0.0-r1_all.ipk Filename: secubox-ai-gateway_1.0.0-r1_all.ipk
Size: 13665 Size: 13662
Package: secubox-app Package: secubox-app
Version: 1.0.0-r2 Version: 1.0.0-r2
@ -996,7 +996,7 @@ Installed-Size: 92160
Description: Command line helper for SecuBox App Store manifests. Installs /usr/sbin/secubox-app Description: Command line helper for SecuBox App Store manifests. Installs /usr/sbin/secubox-app
and ships the default manifests under /usr/share/secubox/plugins/. and ships the default manifests under /usr/share/secubox/plugins/.
Filename: secubox-app_1.0.0-r2_all.ipk Filename: secubox-app_1.0.0-r2_all.ipk
Size: 11185 Size: 11186
Package: secubox-app-adguardhome Package: secubox-app-adguardhome
Version: 1.0.0-r2 Version: 1.0.0-r2
@ -1010,7 +1010,7 @@ Description: Installer, configuration, and service manager for running AdGuard
inside Docker on SecuBox-powered OpenWrt systems. Network-wide ad blocker inside Docker on SecuBox-powered OpenWrt systems. Network-wide ad blocker
with DNS-over-HTTPS/TLS support and detailed analytics. with DNS-over-HTTPS/TLS support and detailed analytics.
Filename: secubox-app-adguardhome_1.0.0-r2_all.ipk Filename: secubox-app-adguardhome_1.0.0-r2_all.ipk
Size: 2881 Size: 2882
Package: secubox-app-auth-logger Package: secubox-app-auth-logger
Version: 1.2.2-r1 Version: 1.2.2-r1
@ -1028,7 +1028,7 @@ Description: Logs authentication failures from LuCI/rpcd and Dropbear SSH
- JavaScript hook to intercept login failures - JavaScript hook to intercept login failures
- CrowdSec parser and bruteforce scenario - CrowdSec parser and bruteforce scenario
Filename: secubox-app-auth-logger_1.2.2-r1_all.ipk Filename: secubox-app-auth-logger_1.2.2-r1_all.ipk
Size: 9371 Size: 9376
Package: secubox-app-crowdsec-custom Package: secubox-app-crowdsec-custom
Version: 1.1.0-r1 Version: 1.1.0-r1
@ -1053,7 +1053,7 @@ Description: Custom CrowdSec configurations for SecuBox web interface protectio
- Insider WAF: LAN threat detection (C2, exfiltration, lateral movement) - Insider WAF: LAN threat detection (C2, exfiltration, lateral movement)
- Whitelist for trusted networks - Whitelist for trusted networks
Filename: secubox-app-crowdsec-custom_1.1.0-r1_all.ipk Filename: secubox-app-crowdsec-custom_1.1.0-r1_all.ipk
Size: 6946 Size: 6942
Package: secubox-app-cs-firewall-bouncer Package: secubox-app-cs-firewall-bouncer
Version: 0.0.31-r4 Version: 0.0.31-r4
@ -1080,7 +1080,7 @@ Description: SecuBox CrowdSec Firewall Bouncer for OpenWrt.
- Automatic restart on firewall reload - Automatic restart on firewall reload
- procd service management - procd service management
Filename: secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk Filename: secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk
Size: 5049324 Size: 5049323
Package: secubox-app-cyberfeed Package: secubox-app-cyberfeed
Version: 0.2.1-r1 Version: 0.2.1-r1
@ -1094,7 +1094,7 @@ Description: Cyberpunk-themed RSS feed aggregator for OpenWrt/SecuBox.
Features emoji injection, neon styling, and RSS-Bridge support Features emoji injection, neon styling, and RSS-Bridge support
for social media feeds (Facebook, Twitter, Mastodon). for social media feeds (Facebook, Twitter, Mastodon).
Filename: secubox-app-cyberfeed_0.2.1-r1_all.ipk Filename: secubox-app-cyberfeed_0.2.1-r1_all.ipk
Size: 12450 Size: 12449
Package: secubox-app-device-intel Package: secubox-app-device-intel
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1108,7 +1108,7 @@ Description: Unified device inventory aggregating mac-guardian, client-guardian
P2P mesh, and exposure scanner data. Includes heuristic classification P2P mesh, and exposure scanner data. Includes heuristic classification
and pluggable emulator modules for MQTT, Zigbee, and USB devices. and pluggable emulator modules for MQTT, Zigbee, and USB devices.
Filename: secubox-app-device-intel_1.0.0-r1_all.ipk Filename: secubox-app-device-intel_1.0.0-r1_all.ipk
Size: 13098 Size: 13101
Package: secubox-app-dns-provider Package: secubox-app-dns-provider
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1122,7 +1122,7 @@ Description: Programmatic DNS record management via provider APIs (OVH, Gandi
Cloudflare). Provides the dnsctl CLI for record CRUD, zone sync Cloudflare). Provides the dnsctl CLI for record CRUD, zone sync
DNS propagation verification, and ACME DNS-01 challenge support. DNS propagation verification, and ACME DNS-01 challenge support.
Filename: secubox-app-dns-provider_1.0.0-r1_all.ipk Filename: secubox-app-dns-provider_1.0.0-r1_all.ipk
Size: 8258 Size: 8259
Package: secubox-app-domoticz Package: secubox-app-domoticz
Version: 1.0.0-r4 Version: 1.0.0-r4
@ -1135,7 +1135,7 @@ Installed-Size: 30720
Description: Installer, configuration, and service manager for running Domoticz Description: Installer, configuration, and service manager for running Domoticz
inside an LXC Alpine container on SecuBox-powered OpenWrt systems. inside an LXC Alpine container on SecuBox-powered OpenWrt systems.
Filename: secubox-app-domoticz_1.0.0-r4_all.ipk Filename: secubox-app-domoticz_1.0.0-r4_all.ipk
Size: 7513 Size: 7508
Package: secubox-app-exposure Package: secubox-app-exposure
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1173,7 +1173,7 @@ Description: Gitea Git Platform - Self-hosted lightweight Git service
Runs in LXC container with Alpine Linux. Runs in LXC container with Alpine Linux.
Configure in /etc/config/gitea. Configure in /etc/config/gitea.
Filename: secubox-app-gitea_1.0.0-r5_all.ipk Filename: secubox-app-gitea_1.0.0-r5_all.ipk
Size: 9436 Size: 9435
Package: secubox-app-gk2hub Package: secubox-app-gk2hub
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -1187,7 +1187,7 @@ Description: Dynamic landing page generator for GK2 SecuBox services.
Aggregates Streamlit apps, MetaBlogizer sites, and infrastructure Aggregates Streamlit apps, MetaBlogizer sites, and infrastructure
services into a single service directory page. services into a single service directory page.
Filename: secubox-app-gk2hub_0.1.0-r1_all.ipk Filename: secubox-app-gk2hub_0.1.0-r1_all.ipk
Size: 4060 Size: 4061
Package: secubox-app-glances Package: secubox-app-glances
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1210,7 +1210,7 @@ Description: Glances - Cross-platform system monitoring tool for SecuBox.
Runs in LXC container for isolation and security. Runs in LXC container for isolation and security.
Configure in /etc/config/glances. Configure in /etc/config/glances.
Filename: secubox-app-glances_1.0.0-r1_all.ipk Filename: secubox-app-glances_1.0.0-r1_all.ipk
Size: 6142 Size: 6137
Package: secubox-app-guacamole Package: secubox-app-guacamole
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1224,7 +1224,7 @@ Description: Apache Guacamole clientless remote desktop gateway.
Runs in an LXC Debian container with guacd and Tomcat. Runs in an LXC Debian container with guacd and Tomcat.
Supports SSH, VNC, and RDP connections via web browser. Supports SSH, VNC, and RDP connections via web browser.
Filename: secubox-app-guacamole_1.0.0-r1_all.ipk Filename: secubox-app-guacamole_1.0.0-r1_all.ipk
Size: 6942 Size: 6941
Package: secubox-app-haproxy Package: secubox-app-haproxy
Version: 1.0.0-r24 Version: 1.0.0-r24
@ -1268,7 +1268,7 @@ Description: Hexo CMS - Self-hosted static blog generator for OpenWrt
Runs in LXC container with Alpine Linux. Runs in LXC container with Alpine Linux.
Configure in /etc/config/hexojs. Configure in /etc/config/hexojs.
Filename: secubox-app-hexojs_1.0.0-r8_all.ipk Filename: secubox-app-hexojs_1.0.0-r8_all.ipk
Size: 100054 Size: 100059
Package: secubox-app-ipblocklist Package: secubox-app-ipblocklist
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1283,7 +1283,7 @@ Description: Pre-emptive IP blocklist defense layer for SecuBox.
Maintainer: Gandalf <gandalf@cybermind.fr> Maintainer: Gandalf <gandalf@cybermind.fr>
License: Apache-2.0 License: Apache-2.0
Filename: secubox-app-ipblocklist_1.0.0-r1_all.ipk Filename: secubox-app-ipblocklist_1.0.0-r1_all.ipk
Size: 4701 Size: 4699
Package: secubox-app-jabber Package: secubox-app-jabber
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1297,7 +1297,7 @@ Description: Jabber/XMPP instant messaging server based on Prosody.
Runs in an LXC Debian container with full XMPP support. Runs in an LXC Debian container with full XMPP support.
Features multi-user chat (MUC), file uploads, and S2S federation. Features multi-user chat (MUC), file uploads, and S2S federation.
Filename: secubox-app-jabber_1.0.0-r1_all.ipk Filename: secubox-app-jabber_1.0.0-r1_all.ipk
Size: 13277 Size: 13276
Package: secubox-app-jellyfin Package: secubox-app-jellyfin
Version: 3.0.0-r1 Version: 3.0.0-r1
@ -1310,7 +1310,7 @@ Installed-Size: 20480
Description: Jellyfin media server running in LXC container. Description: Jellyfin media server running in LXC container.
Free media server for streaming movies, TV shows, music, and photos. Free media server for streaming movies, TV shows, music, and photos.
Filename: secubox-app-jellyfin_3.0.0-r1_all.ipk Filename: secubox-app-jellyfin_3.0.0-r1_all.ipk
Size: 4755 Size: 4753
Package: secubox-app-jitsi Package: secubox-app-jitsi
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1335,7 +1335,7 @@ Description: Jitsi Meet - Secure, fully featured video conferencing for SecuBox
Integrates with HAProxy for SSL termination. Integrates with HAProxy for SSL termination.
Configure in /etc/config/jitsi. Configure in /etc/config/jitsi.
Filename: secubox-app-jitsi_1.0.0-r1_all.ipk Filename: secubox-app-jitsi_1.0.0-r1_all.ipk
Size: 8926 Size: 8920
Package: secubox-app-localai Package: secubox-app-localai
Version: 3.9.0-r1 Version: 3.9.0-r1
@ -1401,7 +1401,7 @@ Description: Lyrion Media Server (formerly Logitech Media Server / Squeezebox S
Auto-detects available runtime, preferring LXC for lower resource usage. Auto-detects available runtime, preferring LXC for lower resource usage.
Configure runtime in /etc/config/lyrion. Configure runtime in /etc/config/lyrion.
Filename: secubox-app-lyrion_2.0.2-r1_all.ipk Filename: secubox-app-lyrion_2.0.2-r1_all.ipk
Size: 8127 Size: 8125
Package: secubox-app-mac-guardian Package: secubox-app-mac-guardian
Version: 0.5.0-r1 Version: 0.5.0-r1
@ -1416,7 +1416,7 @@ Description: WiFi MAC address security monitor for SecuBox.
and spoofing. Integrates with CrowdSec and provides and spoofing. Integrates with CrowdSec and provides
real-time hostapd hotplug detection. real-time hostapd hotplug detection.
Filename: secubox-app-mac-guardian_0.5.0-r1_all.ipk Filename: secubox-app-mac-guardian_0.5.0-r1_all.ipk
Size: 12097 Size: 12093
Package: secubox-app-magicmirror2 Package: secubox-app-magicmirror2
Version: 0.4.0-r8 Version: 0.4.0-r8
@ -1463,7 +1463,7 @@ Description: Complete email server solution using docker-mailserver for SecuBox
Commands: mailinaboxctl --help Commands: mailinaboxctl --help
Filename: secubox-app-mailinabox_2.0.0-r1_all.ipk Filename: secubox-app-mailinabox_2.0.0-r1_all.ipk
Size: 7569 Size: 7572
Package: secubox-app-mailserver Package: secubox-app-mailserver
Version: 2.0.0-r1 Version: 2.0.0-r1
@ -1476,7 +1476,7 @@ Installed-Size: 20480
Description: Postfix + Dovecot mail server running in LXC container. Description: Postfix + Dovecot mail server running in LXC container.
Supports IMAP/SMTP with SSL/TLS. Supports IMAP/SMTP with SSL/TLS.
Filename: secubox-app-mailserver_2.0.0-r1_all.ipk Filename: secubox-app-mailserver_2.0.0-r1_all.ipk
Size: 5704 Size: 5694
Package: secubox-app-matrix Package: secubox-app-matrix
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1490,7 +1490,7 @@ Description: Matrix homeserver based on Conduit - a lightweight, high-performan
Matrix server written in Rust. Runs in an LXC Debian container. Matrix server written in Rust. Runs in an LXC Debian container.
Features E2EE messaging, federation, and mesh integration. Features E2EE messaging, federation, and mesh integration.
Filename: secubox-app-matrix_1.0.0-r1_all.ipk Filename: secubox-app-matrix_1.0.0-r1_all.ipk
Size: 10448 Size: 10451
Package: secubox-app-metabolizer Package: secubox-app-metabolizer
Version: 1.0.0-r3 Version: 1.0.0-r3
@ -1511,7 +1511,7 @@ Description: Metabolizer Blog Pipeline - Integrated CMS with Git-based workflow
Pipeline: Edit in Streamlit -> Push to Gitea -> Build with Hexo -> Publish Pipeline: Edit in Streamlit -> Push to Gitea -> Build with Hexo -> Publish
Filename: secubox-app-metabolizer_1.0.0-r3_all.ipk Filename: secubox-app-metabolizer_1.0.0-r3_all.ipk
Size: 13979 Size: 13976
Package: secubox-app-mitmproxy Package: secubox-app-mitmproxy
Version: 0.5.0-r19 Version: 0.5.0-r19
@ -1538,7 +1538,7 @@ Description: mitmproxy - Interactive HTTPS proxy for SecuBox-powered OpenWrt sy
Runs in LXC container for isolation and security. Runs in LXC container for isolation and security.
Configure in /etc/config/mitmproxy. Configure in /etc/config/mitmproxy.
Filename: secubox-app-mitmproxy_0.5.0-r19_all.ipk Filename: secubox-app-mitmproxy_0.5.0-r19_all.ipk
Size: 22956 Size: 22957
Package: secubox-app-mmpm Package: secubox-app-mmpm
Version: 0.2.0-r5 Version: 0.2.0-r5
@ -1573,7 +1573,7 @@ Description: Nextcloud file sync and collaboration platform running in a Debian
LXC container with MariaDB, Redis, and Nginx. Features HAProxy SSL LXC container with MariaDB, Redis, and Nginx. Features HAProxy SSL
integration, automated backups, and KISS LuCI dashboard. integration, automated backups, and KISS LuCI dashboard.
Filename: secubox-app-nextcloud_1.0.0-r2_all.ipk Filename: secubox-app-nextcloud_1.0.0-r2_all.ipk
Size: 9675 Size: 9673
Package: secubox-app-ollama Package: secubox-app-ollama
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -1595,7 +1595,7 @@ Description: Ollama - Simple local LLM runtime for SecuBox-powered OpenWrt syst
Runs in Docker/Podman container. Runs in Docker/Podman container.
Configure in /etc/config/ollama. Configure in /etc/config/ollama.
Filename: secubox-app-ollama_0.1.0-r1_all.ipk Filename: secubox-app-ollama_0.1.0-r1_all.ipk
Size: 5735 Size: 5731
Package: secubox-app-picobrew Package: secubox-app-picobrew
Version: 1.0.0-r7 Version: 1.0.0-r7
@ -1617,7 +1617,19 @@ Description: PicoBrew Server - Self-hosted brewing controller for PicoBrew devi
Runs in LXC container with Python/Flask backend. Runs in LXC container with Python/Flask backend.
Configure in /etc/config/picobrew. Configure in /etc/config/picobrew.
Filename: secubox-app-picobrew_1.0.0-r7_all.ipk Filename: secubox-app-picobrew_1.0.0-r7_all.ipk
Size: 5539 Size: 5537
Package: secubox-app-rezapp
Version: 1.0.0-r1
Depends: docker, lxc, lxc-common, curl, wget-ssl, jsonfilter
Section: secubox
Architecture: all
Installed-Size: 40960
Description: RezApp Forge converts Docker images to LXC containers and generates
SecuBox addon packages. Browse Docker Hub, GHCR, and LinuxServer.io
catalogs, convert images to LXC, and publish to the SecuBox app store.
Filename: secubox-app-rezapp_1.0.0-r1_all.ipk
Size: 8625
Package: secubox-app-rustdesk Package: secubox-app-rustdesk
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1630,7 +1642,7 @@ Installed-Size: 20480
Description: Self-hosted RustDesk relay server for remote desktop access. Description: Self-hosted RustDesk relay server for remote desktop access.
Downloads and manages hbbs (ID server) and hbbr (relay server) binaries. Downloads and manages hbbs (ID server) and hbbr (relay server) binaries.
Filename: secubox-app-rustdesk_1.0.0-r1_all.ipk Filename: secubox-app-rustdesk_1.0.0-r1_all.ipk
Size: 4463 Size: 4461
Package: secubox-app-simplex Package: secubox-app-simplex
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1695,7 +1707,20 @@ Description: Streamlit App Platform - Self-hosted Python data app platform
Configure in /etc/config/streamlit. Configure in /etc/config/streamlit.
Filename: secubox-app-streamlit_1.0.0-r5_all.ipk Filename: secubox-app-streamlit_1.0.0-r5_all.ipk
Size: 16514 Size: 16512
Package: secubox-app-streamlit-forge
Version: 1.0.0-r1
Depends: python3, python3-pip, lxc, lxc-common, curl, wget-ssl, jsonfilter
Section: secubox
Architecture: all
Installed-Size: 51200
Description: Streamlit Forge is a comprehensive platform for creating, managing
and publishing Streamlit applications. Features include Gitea source
management, preview generation, UCI configuration sync, and mesh
appstore publishing.
Filename: secubox-app-streamlit-forge_1.0.0-r1_all.ipk
Size: 10814
Package: secubox-app-tor Package: secubox-app-tor
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1718,7 +1743,7 @@ Description: SecuBox Tor Shield - One-click Tor anonymization for OpenWrt
Configure in /etc/config/tor-shield. Configure in /etc/config/tor-shield.
Filename: secubox-app-tor_1.0.0-r1_all.ipk Filename: secubox-app-tor_1.0.0-r1_all.ipk
Size: 7367 Size: 7369
Package: secubox-app-voip Package: secubox-app-voip
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1732,7 +1757,7 @@ Description: VoIP PBX solution with Asterisk in LXC container.
Features OVH SIP trunk integration, WebRTC support Features OVH SIP trunk integration, WebRTC support
and Jabber/XMPP relay for SMS and voicemail notifications. and Jabber/XMPP relay for SMS and voicemail notifications.
Filename: secubox-app-voip_1.0.0-r1_all.ipk Filename: secubox-app-voip_1.0.0-r1_all.ipk
Size: 11955 Size: 11951
Package: secubox-app-webapp Package: secubox-app-webapp
Version: 1.5.0-r7 Version: 1.5.0-r7
@ -1763,7 +1788,7 @@ Installed-Size: 20480
Description: Installer, configuration, and service manager for running Zigbee2MQTT Description: Installer, configuration, and service manager for running Zigbee2MQTT
inside an Alpine LXC container on SecuBox-powered OpenWrt systems. inside an Alpine LXC container on SecuBox-powered OpenWrt systems.
Filename: secubox-app-zigbee2mqtt_1.0.0-r3_all.ipk Filename: secubox-app-zigbee2mqtt_1.0.0-r3_all.ipk
Size: 5539 Size: 5540
Package: secubox-config-advisor Package: secubox-config-advisor
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -1782,7 +1807,7 @@ Description: AI-powered configuration security advisor for SecuBox.
- LocalAI integration for intelligent analysis - LocalAI integration for intelligent analysis
- Automated remediation suggestions - Automated remediation suggestions
Filename: secubox-config-advisor_0.1.0-r1_all.ipk Filename: secubox-config-advisor_0.1.0-r1_all.ipk
Size: 14847 Size: 14842
Package: secubox-content-pkg Package: secubox-content-pkg
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1795,7 +1820,7 @@ Installed-Size: 20480
Description: Package Metablogizer sites and Streamlit apps as IPKs for P2P distribution. Description: Package Metablogizer sites and Streamlit apps as IPKs for P2P distribution.
Auto-publishes content to the mesh feed for peer auto-sync. Auto-publishes content to the mesh feed for peer auto-sync.
Filename: secubox-content-pkg_1.0.0-r1_all.ipk Filename: secubox-content-pkg_1.0.0-r1_all.ipk
Size: 3909 Size: 3907
Package: secubox-cookie-tracker Package: secubox-cookie-tracker
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1818,7 +1843,7 @@ Description: Cookie Tracker for SecuBox InterceptoR.
Works with secubox-app-mitmproxy for transparent interception. Works with secubox-app-mitmproxy for transparent interception.
Filename: secubox-cookie-tracker_1.0.0-r1_all.ipk Filename: secubox-cookie-tracker_1.0.0-r1_all.ipk
Size: 10643 Size: 10639
Package: secubox-core Package: secubox-core
Version: 0.10.0-r16 Version: 0.10.0-r16
@ -1838,7 +1863,7 @@ Description: SecuBox Core Framework provides the foundational infrastructure fo
- Unified CLI interface - Unified CLI interface
- ubus RPC backend - ubus RPC backend
Filename: secubox-core_0.10.0-r16_all.ipk Filename: secubox-core_0.10.0-r16_all.ipk
Size: 127204 Size: 127202
Package: secubox-cve-triage Package: secubox-cve-triage
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1858,7 +1883,7 @@ Description: AI-powered CVE analysis and vulnerability management agent for Sec
- Approval workflow for patch recommendations - Approval workflow for patch recommendations
- LXC and Docker package monitoring - LXC and Docker package monitoring
Filename: secubox-cve-triage_1.0.0-r1_all.ipk Filename: secubox-cve-triage_1.0.0-r1_all.ipk
Size: 11829 Size: 11826
Package: secubox-dns-guard Package: secubox-dns-guard
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1877,7 +1902,7 @@ Description: SecuBox DNS Guard provides AI-powered DNS anomaly detection using
- Unusual TLD pattern detection - Unusual TLD pattern detection
- Automatic blocklist generation with approval workflow - Automatic blocklist generation with approval workflow
Filename: secubox-dns-guard_1.0.0-r1_all.ipk Filename: secubox-dns-guard_1.0.0-r1_all.ipk
Size: 12482 Size: 12480
Package: secubox-identity Package: secubox-identity
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -1896,7 +1921,7 @@ Description: Decentralized identity management for SecuBox mesh nodes.
- Peer identity verification - Peer identity verification
- Trust scoring integration - Trust scoring integration
Filename: secubox-identity_0.1.0-r1_all.ipk Filename: secubox-identity_0.1.0-r1_all.ipk
Size: 8090 Size: 8089
Package: secubox-iot-guard Package: secubox-iot-guard
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1912,7 +1937,7 @@ Description: IoT device isolation, classification, and security monitoring.
risk scoring. Orchestrates Client Guardian, MAC Guardian risk scoring. Orchestrates Client Guardian, MAC Guardian
Vortex Firewall, and Bandwidth Manager for IoT protection. Vortex Firewall, and Bandwidth Manager for IoT protection.
Filename: secubox-iot-guard_1.0.0-r1_all.ipk Filename: secubox-iot-guard_1.0.0-r1_all.ipk
Size: 13363 Size: 13370
Package: secubox-localrecall Package: secubox-localrecall
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1927,7 +1952,7 @@ Description: Persistent memory system for SecuBox AI agents.
for context across sessions. LocalAI integration for for context across sessions. LocalAI integration for
semantic search and AI-powered summarization. semantic search and AI-powered summarization.
Filename: secubox-localrecall_1.0.0-r1_all.ipk Filename: secubox-localrecall_1.0.0-r1_all.ipk
Size: 7793 Size: 7798
Package: secubox-master-link Package: secubox-master-link
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1949,7 +1974,7 @@ Description: Secure mesh onboarding for SecuBox nodes via master/peer link.
Configure in /etc/config/master-link. Configure in /etc/config/master-link.
Filename: secubox-master-link_1.0.0-r1_all.ipk Filename: secubox-master-link_1.0.0-r1_all.ipk
Size: 15034 Size: 15036
Package: secubox-mcp-server Package: secubox-mcp-server
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -1977,7 +2002,7 @@ Description: Model Context Protocol (MCP) server for SecuBox.
- ai.explain_ban (Explain CrowdSec decisions) - ai.explain_ban (Explain CrowdSec decisions)
- ai.security_posture (Security assessment) - ai.security_posture (Security assessment)
Filename: secubox-mcp-server_1.0.0-r1_all.ipk Filename: secubox-mcp-server_1.0.0-r1_all.ipk
Size: 11428 Size: 11427
Package: secubox-mirrornet Package: secubox-mirrornet
Version: 0.1.0-r1 Version: 0.1.0-r1
@ -1995,7 +2020,7 @@ Description: MirrorNet core mesh orchestration for SecuBox.
- Mesh health monitoring and anomaly detection - Mesh health monitoring and anomaly detection
- DID-based identity (did:plc compatible) - DID-based identity (did:plc compatible)
Filename: secubox-mirrornet_0.1.0-r1_all.ipk Filename: secubox-mirrornet_0.1.0-r1_all.ipk
Size: 15305 Size: 15303
Package: secubox-network-anomaly Package: secubox-network-anomaly
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -2067,7 +2092,7 @@ Description: Autonomous threat analysis agent for SecuBox.
Part of SecuBox AI Gateway (Couche 2). Part of SecuBox AI Gateway (Couche 2).
Filename: secubox-threat-analyst_1.0.0-r1_all.ipk Filename: secubox-threat-analyst_1.0.0-r1_all.ipk
Size: 9866 Size: 9865
Package: secubox-vortex-dns Package: secubox-vortex-dns
Version: 1.0.0-r1 Version: 1.0.0-r1
@ -2086,7 +2111,7 @@ Description: Meshed multi-dynamic subdomain delegation system for SecuBox.
- Gossip-based exposure config sync - Gossip-based exposure config sync
- Submastering for nested hierarchies - Submastering for nested hierarchies
Filename: secubox-vortex-dns_1.0.0-r1_all.ipk Filename: secubox-vortex-dns_1.0.0-r1_all.ipk
Size: 5439 Size: 5441
Package: secubox-vortex-firewall Package: secubox-vortex-firewall
Version: 1.0.0-r1 Version: 1.0.0-r1

View File

@ -1,12 +1,12 @@
{ {
"feed_url": "/secubox-feed", "feed_url": "/secubox-feed",
"generated": "2026-03-04T07:36:19+01:00", "generated": "2026-03-11T08:34:40+01:00",
"packages": [ "packages": [
{ {
"name": "luci-app-ai-gateway", "name": "luci-app-ai-gateway",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-ai-gateway_1.0.0-r1_all.ipk", "filename": "luci-app-ai-gateway_1.0.0-r1_all.ipk",
"size": 10787, "size": 10789,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -18,7 +18,7 @@
"name": "luci-app-ai-insights", "name": "luci-app-ai-insights",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-ai-insights_1.0.0-r1_all.ipk", "filename": "luci-app-ai-insights_1.0.0-r1_all.ipk",
"size": 11635, "size": 11638,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -30,7 +30,7 @@
"name": "luci-app-auth-guardian", "name": "luci-app-auth-guardian",
"version": "0.4.0-r3", "version": "0.4.0-r3",
"filename": "luci-app-auth-guardian_0.4.0-r3_all.ipk", "filename": "luci-app-auth-guardian_0.4.0-r3_all.ipk",
"size": 12393, "size": 12391,
"category": "security", "category": "security",
"icon": "key", "icon": "key",
"description": "Authentication management", "description": "Authentication management",
@ -42,7 +42,7 @@
"name": "luci-app-backup", "name": "luci-app-backup",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-backup_1.0.0-r1_all.ipk", "filename": "luci-app-backup_1.0.0-r1_all.ipk",
"size": 4535, "size": 4532,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -54,7 +54,7 @@
"name": "luci-app-bandwidth-manager", "name": "luci-app-bandwidth-manager",
"version": "0.5.0-r2", "version": "0.5.0-r2",
"filename": "luci-app-bandwidth-manager_0.5.0-r2_all.ipk", "filename": "luci-app-bandwidth-manager_0.5.0-r2_all.ipk",
"size": 61684, "size": 61683,
"category": "network", "category": "network",
"icon": "activity", "icon": "activity",
"description": "Bandwidth monitoring and control", "description": "Bandwidth monitoring and control",
@ -66,7 +66,7 @@
"name": "luci-app-cdn-cache", "name": "luci-app-cdn-cache",
"version": "0.5.0-r3", "version": "0.5.0-r3",
"filename": "luci-app-cdn-cache_0.5.0-r3_all.ipk", "filename": "luci-app-cdn-cache_0.5.0-r3_all.ipk",
"size": 24252, "size": 24256,
"category": "network", "category": "network",
"icon": "globe", "icon": "globe",
"description": "CDN caching", "description": "CDN caching",
@ -78,7 +78,7 @@
"name": "luci-app-client-guardian", "name": "luci-app-client-guardian",
"version": "0.4.0-r7", "version": "0.4.0-r7",
"filename": "luci-app-client-guardian_0.4.0-r7_all.ipk", "filename": "luci-app-client-guardian_0.4.0-r7_all.ipk",
"size": 52682, "size": 52687,
"category": "network", "category": "network",
"icon": "users", "icon": "users",
"description": "Client management and monitoring", "description": "Client management and monitoring",
@ -90,7 +90,7 @@
"name": "luci-app-cloner", "name": "luci-app-cloner",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-cloner_1.0.0-r1_all.ipk", "filename": "luci-app-cloner_1.0.0-r1_all.ipk",
"size": 19431, "size": 19434,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -102,7 +102,7 @@
"name": "luci-app-config-advisor", "name": "luci-app-config-advisor",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-config-advisor_1.0.0-r1_all.ipk", "filename": "luci-app-config-advisor_1.0.0-r1_all.ipk",
"size": 8858, "size": 8857,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -114,7 +114,7 @@
"name": "luci-app-cookie-tracker", "name": "luci-app-cookie-tracker",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-cookie-tracker_1.0.0-r1_all.ipk", "filename": "luci-app-cookie-tracker_1.0.0-r1_all.ipk",
"size": 5657, "size": 5655,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -138,7 +138,7 @@
"name": "luci-app-cve-triage", "name": "luci-app-cve-triage",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-cve-triage_1.0.0-r1_all.ipk", "filename": "luci-app-cve-triage_1.0.0-r1_all.ipk",
"size": 5942, "size": 5941,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -150,7 +150,7 @@
"name": "luci-app-cyberfeed", "name": "luci-app-cyberfeed",
"version": "0.1.1-r1", "version": "0.1.1-r1",
"filename": "luci-app-cyberfeed_0.1.1-r1_all.ipk", "filename": "luci-app-cyberfeed_0.1.1-r1_all.ipk",
"size": 12884, "size": 12882,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -174,7 +174,7 @@
"name": "luci-app-dnsguard", "name": "luci-app-dnsguard",
"version": "1.1.0-r1", "version": "1.1.0-r1",
"filename": "luci-app-dnsguard_1.1.0-r1_all.ipk", "filename": "luci-app-dnsguard_1.1.0-r1_all.ipk",
"size": 12446, "size": 12449,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -186,7 +186,7 @@
"name": "luci-app-dns-provider", "name": "luci-app-dns-provider",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-dns-provider_1.0.0-r1_all.ipk", "filename": "luci-app-dns-provider_1.0.0-r1_all.ipk",
"size": 7166, "size": 7167,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -198,7 +198,7 @@
"name": "luci-app-domoticz", "name": "luci-app-domoticz",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-domoticz_1.0.0-r1_all.ipk", "filename": "luci-app-domoticz_1.0.0-r1_all.ipk",
"size": 7122, "size": 7123,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -210,7 +210,7 @@
"name": "luci-app-exposure", "name": "luci-app-exposure",
"version": "1.0.0-r3", "version": "1.0.0-r3",
"filename": "luci-app-exposure_1.0.0-r3_all.ipk", "filename": "luci-app-exposure_1.0.0-r3_all.ipk",
"size": 11699, "size": 11695,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -222,7 +222,7 @@
"name": "luci-app-gitea", "name": "luci-app-gitea",
"version": "1.0.0-r2", "version": "1.0.0-r2",
"filename": "luci-app-gitea_1.0.0-r2_all.ipk", "filename": "luci-app-gitea_1.0.0-r2_all.ipk",
"size": 16620, "size": 16621,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -234,7 +234,7 @@
"name": "luci-app-glances", "name": "luci-app-glances",
"version": "1.0.0-r2", "version": "1.0.0-r2",
"filename": "luci-app-glances_1.0.0-r2_all.ipk", "filename": "luci-app-glances_1.0.0-r2_all.ipk",
"size": 7017, "size": 7015,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -246,7 +246,7 @@
"name": "luci-app-gotosocial", "name": "luci-app-gotosocial",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "luci-app-gotosocial_0.1.0-r1_all.ipk", "filename": "luci-app-gotosocial_0.1.0-r1_all.ipk",
"size": 8208, "size": 8206,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -258,7 +258,7 @@
"name": "luci-app-haproxy", "name": "luci-app-haproxy",
"version": "1.0.0-r8", "version": "1.0.0-r8",
"filename": "luci-app-haproxy_1.0.0-r8_all.ipk", "filename": "luci-app-haproxy_1.0.0-r8_all.ipk",
"size": 35342, "size": 35339,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -270,7 +270,7 @@
"name": "luci-app-hexojs", "name": "luci-app-hexojs",
"version": "1.0.0-r3", "version": "1.0.0-r3",
"filename": "luci-app-hexojs_1.0.0-r3_all.ipk", "filename": "luci-app-hexojs_1.0.0-r3_all.ipk",
"size": 30451, "size": 30453,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -282,7 +282,7 @@
"name": "luci-app-iot-guard", "name": "luci-app-iot-guard",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-iot-guard_1.0.0-r1_all.ipk", "filename": "luci-app-iot-guard_1.0.0-r1_all.ipk",
"size": 10535, "size": 10533,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -294,7 +294,7 @@
"name": "luci-app-ipblocklist", "name": "luci-app-ipblocklist",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-ipblocklist_1.0.0-r1_all.ipk", "filename": "luci-app-ipblocklist_1.0.0-r1_all.ipk",
"size": 6528, "size": 6529,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -306,7 +306,7 @@
"name": "luci-app-jabber", "name": "luci-app-jabber",
"version": "0", "version": "0",
"filename": "luci-app-jabber_0_all.ipk", "filename": "luci-app-jabber_0_all.ipk",
"size": 9308, "size": 9311,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -318,7 +318,7 @@
"name": "luci-app-jellyfin", "name": "luci-app-jellyfin",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-jellyfin_1.0.0-r1_all.ipk", "filename": "luci-app-jellyfin_1.0.0-r1_all.ipk",
"size": 10486, "size": 10483,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -330,7 +330,7 @@
"name": "luci-app-jitsi", "name": "luci-app-jitsi",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-jitsi_1.0.0-r1_all.ipk", "filename": "luci-app-jitsi_1.0.0-r1_all.ipk",
"size": 5175, "size": 5173,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -342,7 +342,7 @@
"name": "luci-app-ksm-manager", "name": "luci-app-ksm-manager",
"version": "0.4.0-r2", "version": "0.4.0-r2",
"filename": "luci-app-ksm-manager_0.4.0-r2_all.ipk", "filename": "luci-app-ksm-manager_0.4.0-r2_all.ipk",
"size": 18778, "size": 18780,
"category": "system", "category": "system",
"icon": "cpu", "icon": "cpu",
"description": "Kernel memory management", "description": "Kernel memory management",
@ -366,7 +366,7 @@
"name": "luci-app-localrecall", "name": "luci-app-localrecall",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-localrecall_1.0.0-r1_all.ipk", "filename": "luci-app-localrecall_1.0.0-r1_all.ipk",
"size": 8415, "size": 8413,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -378,7 +378,7 @@
"name": "luci-app-lyrion", "name": "luci-app-lyrion",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-lyrion_1.0.0-r1_all.ipk", "filename": "luci-app-lyrion_1.0.0-r1_all.ipk",
"size": 6841, "size": 6837,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -390,7 +390,7 @@
"name": "luci-app-mac-guardian", "name": "luci-app-mac-guardian",
"version": "0.5.0-r1", "version": "0.5.0-r1",
"filename": "luci-app-mac-guardian_0.5.0-r1_all.ipk", "filename": "luci-app-mac-guardian_0.5.0-r1_all.ipk",
"size": 6660, "size": 6667,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -402,7 +402,7 @@
"name": "luci-app-magicmirror2", "name": "luci-app-magicmirror2",
"version": "0.4.0-r6", "version": "0.4.0-r6",
"filename": "luci-app-magicmirror2_0.4.0-r6_all.ipk", "filename": "luci-app-magicmirror2_0.4.0-r6_all.ipk",
"size": 12359, "size": 12358,
"category": "iot", "category": "iot",
"icon": "monitor", "icon": "monitor",
"description": "Smart mirror display", "description": "Smart mirror display",
@ -414,7 +414,7 @@
"name": "luci-app-mailinabox", "name": "luci-app-mailinabox",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-mailinabox_1.0.0-r1_all.ipk", "filename": "luci-app-mailinabox_1.0.0-r1_all.ipk",
"size": 5484, "size": 5482,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -426,7 +426,7 @@
"name": "luci-app-mailserver", "name": "luci-app-mailserver",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-mailserver_1.0.0-r1_all.ipk", "filename": "luci-app-mailserver_1.0.0-r1_all.ipk",
"size": 6515, "size": 6510,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -438,7 +438,7 @@
"name": "luci-app-master-link", "name": "luci-app-master-link",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-master-link_1.0.0-r1_all.ipk", "filename": "luci-app-master-link_1.0.0-r1_all.ipk",
"size": 6305, "size": 6309,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -450,7 +450,7 @@
"name": "luci-app-matrix", "name": "luci-app-matrix",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-matrix_1.0.0-r1_all.ipk", "filename": "luci-app-matrix_1.0.0-r1_all.ipk",
"size": 7524, "size": 7518,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -462,7 +462,7 @@
"name": "luci-app-media-flow", "name": "luci-app-media-flow",
"version": "0.6.4-r1", "version": "0.6.4-r1",
"filename": "luci-app-media-flow_0.6.4-r1_all.ipk", "filename": "luci-app-media-flow_0.6.4-r1_all.ipk",
"size": 25380, "size": 25379,
"category": "media", "category": "media",
"icon": "film", "icon": "film",
"description": "Media streaming", "description": "Media streaming",
@ -474,7 +474,7 @@
"name": "luci-app-metablogizer", "name": "luci-app-metablogizer",
"version": "1.1.0-r1", "version": "1.1.0-r1",
"filename": "luci-app-metablogizer_1.1.0-r1_all.ipk", "filename": "luci-app-metablogizer_1.1.0-r1_all.ipk",
"size": 26205, "size": 26203,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -486,7 +486,7 @@
"name": "luci-app-metabolizer", "name": "luci-app-metabolizer",
"version": "1.0.0-r2", "version": "1.0.0-r2",
"filename": "luci-app-metabolizer_1.0.0-r2_all.ipk", "filename": "luci-app-metabolizer_1.0.0-r2_all.ipk",
"size": 4825, "size": 4822,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -510,7 +510,7 @@
"name": "luci-app-mmpm", "name": "luci-app-mmpm",
"version": "0.2.0-r3", "version": "0.2.0-r3",
"filename": "luci-app-mmpm_0.2.0-r3_all.ipk", "filename": "luci-app-mmpm_0.2.0-r3_all.ipk",
"size": 7969, "size": 7968,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -522,7 +522,7 @@
"name": "luci-app-mqtt-bridge", "name": "luci-app-mqtt-bridge",
"version": "0.4.0-r4", "version": "0.4.0-r4",
"filename": "luci-app-mqtt-bridge_0.4.0-r4_all.ipk", "filename": "luci-app-mqtt-bridge_0.4.0-r4_all.ipk",
"size": 22691, "size": 22688,
"category": "iot", "category": "iot",
"icon": "message-square", "icon": "message-square",
"description": "MQTT bridge", "description": "MQTT bridge",
@ -558,7 +558,7 @@
"name": "luci-app-network-anomaly", "name": "luci-app-network-anomaly",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-network-anomaly_1.0.0-r1_all.ipk", "filename": "luci-app-network-anomaly_1.0.0-r1_all.ipk",
"size": 7646, "size": 7641,
"category": "network", "category": "network",
"icon": "wifi", "icon": "wifi",
"description": "Network configuration", "description": "Network configuration",
@ -570,7 +570,7 @@
"name": "luci-app-network-modes", "name": "luci-app-network-modes",
"version": "0.5.0-r3", "version": "0.5.0-r3",
"filename": "luci-app-network-modes_0.5.0-r3_all.ipk", "filename": "luci-app-network-modes_0.5.0-r3_all.ipk",
"size": 54227, "size": 54225,
"category": "network", "category": "network",
"icon": "wifi", "icon": "wifi",
"description": "Network configuration", "description": "Network configuration",
@ -582,7 +582,7 @@
"name": "luci-app-network-tweaks", "name": "luci-app-network-tweaks",
"version": "1.0.0-r7", "version": "1.0.0-r7",
"filename": "luci-app-network-tweaks_1.0.0-r7_all.ipk", "filename": "luci-app-network-tweaks_1.0.0-r7_all.ipk",
"size": 15947, "size": 15943,
"category": "network", "category": "network",
"icon": "wifi", "icon": "wifi",
"description": "Network configuration", "description": "Network configuration",
@ -594,7 +594,7 @@
"name": "luci-app-nextcloud", "name": "luci-app-nextcloud",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-nextcloud_1.0.0-r1_all.ipk", "filename": "luci-app-nextcloud_1.0.0-r1_all.ipk",
"size": 10351, "size": 10347,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -606,7 +606,7 @@
"name": "luci-app-ollama", "name": "luci-app-ollama",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "luci-app-ollama_0.1.0-r1_all.ipk", "filename": "luci-app-ollama_0.1.0-r1_all.ipk",
"size": 14333, "size": 14337,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -618,7 +618,7 @@
"name": "luci-app-openclaw", "name": "luci-app-openclaw",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-openclaw_1.0.0-r1_all.ipk", "filename": "luci-app-openclaw_1.0.0-r1_all.ipk",
"size": 8412, "size": 8409,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -630,7 +630,7 @@
"name": "luci-app-peertube", "name": "luci-app-peertube",
"version": "0", "version": "0",
"filename": "luci-app-peertube_0_all.ipk", "filename": "luci-app-peertube_0_all.ipk",
"size": 5757, "size": 5755,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -642,7 +642,7 @@
"name": "luci-app-picobrew", "name": "luci-app-picobrew",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-picobrew_1.0.0-r1_all.ipk", "filename": "luci-app-picobrew_1.0.0-r1_all.ipk",
"size": 9535, "size": 9531,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -654,7 +654,7 @@
"name": "luci-app-secubox", "name": "luci-app-secubox",
"version": "0.7.1-r4", "version": "0.7.1-r4",
"filename": "luci-app-secubox_0.7.1-r4_all.ipk", "filename": "luci-app-secubox_0.7.1-r4_all.ipk",
"size": 82095, "size": 82094,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -678,7 +678,7 @@
"name": "luci-app-secubox-crowdsec", "name": "luci-app-secubox-crowdsec",
"version": "1.0.0-r3", "version": "1.0.0-r3",
"filename": "luci-app-secubox-crowdsec_1.0.0-r3_all.ipk", "filename": "luci-app-secubox-crowdsec_1.0.0-r3_all.ipk",
"size": 13916, "size": 13921,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -690,7 +690,7 @@
"name": "luci-app-secubox-mirror", "name": "luci-app-secubox-mirror",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "luci-app-secubox-mirror_0.1.0-r1_all.ipk", "filename": "luci-app-secubox-mirror_0.1.0-r1_all.ipk",
"size": 5847, "size": 5848,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -702,7 +702,7 @@
"name": "luci-app-secubox-netdiag", "name": "luci-app-secubox-netdiag",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-secubox-netdiag_1.0.0-r1_all.ipk", "filename": "luci-app-secubox-netdiag_1.0.0-r1_all.ipk",
"size": 15344, "size": 15342,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -714,7 +714,7 @@
"name": "luci-app-secubox-netifyd", "name": "luci-app-secubox-netifyd",
"version": "1.2.1-r1", "version": "1.2.1-r1",
"filename": "luci-app-secubox-netifyd_1.2.1-r1_all.ipk", "filename": "luci-app-secubox-netifyd_1.2.1-r1_all.ipk",
"size": 36720, "size": 36715,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -726,7 +726,7 @@
"name": "luci-app-secubox-p2p", "name": "luci-app-secubox-p2p",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "luci-app-secubox-p2p_0.1.0-r1_all.ipk", "filename": "luci-app-secubox-p2p_0.1.0-r1_all.ipk",
"size": 46832, "size": 46830,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -750,7 +750,7 @@
"name": "luci-app-secubox-security-threats", "name": "luci-app-secubox-security-threats",
"version": "1.0.0-r4", "version": "1.0.0-r4",
"filename": "luci-app-secubox-security-threats_1.0.0-r4_all.ipk", "filename": "luci-app-secubox-security-threats_1.0.0-r4_all.ipk",
"size": 10656, "size": 10657,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -762,7 +762,7 @@
"name": "luci-app-secubox-users", "name": "luci-app-secubox-users",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-secubox-users_1.0.0-r1_all.ipk", "filename": "luci-app-secubox-users_1.0.0-r1_all.ipk",
"size": 5144, "size": 5141,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox system component", "description": "SecuBox system component",
@ -774,7 +774,7 @@
"name": "luci-app-service-registry", "name": "luci-app-service-registry",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-service-registry_1.0.0-r1_all.ipk", "filename": "luci-app-service-registry_1.0.0-r1_all.ipk",
"size": 39952, "size": 39953,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -786,7 +786,7 @@
"name": "luci-app-simplex", "name": "luci-app-simplex",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-simplex_1.0.0-r1_all.ipk", "filename": "luci-app-simplex_1.0.0-r1_all.ipk",
"size": 7035, "size": 7033,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -798,7 +798,7 @@
"name": "luci-app-streamlit", "name": "luci-app-streamlit",
"version": "1.0.0-r11", "version": "1.0.0-r11",
"filename": "luci-app-streamlit_1.0.0-r11_all.ipk", "filename": "luci-app-streamlit_1.0.0-r11_all.ipk",
"size": 20565, "size": 20567,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -810,7 +810,7 @@
"name": "luci-app-system-hub", "name": "luci-app-system-hub",
"version": "0.5.2-r2", "version": "0.5.2-r2",
"filename": "luci-app-system-hub_0.5.2-r2_all.ipk", "filename": "luci-app-system-hub_0.5.2-r2_all.ipk",
"size": 64292, "size": 64290,
"category": "system", "category": "system",
"icon": "settings", "icon": "settings",
"description": "System management", "description": "System management",
@ -822,7 +822,7 @@
"name": "luci-app-threat-analyst", "name": "luci-app-threat-analyst",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-threat-analyst_1.0.0-r1_all.ipk", "filename": "luci-app-threat-analyst_1.0.0-r1_all.ipk",
"size": 10142, "size": 10143,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -858,7 +858,7 @@
"name": "luci-app-traffic-shaper", "name": "luci-app-traffic-shaper",
"version": "0.4.0-r2", "version": "0.4.0-r2",
"filename": "luci-app-traffic-shaper_0.4.0-r2_all.ipk", "filename": "luci-app-traffic-shaper_0.4.0-r2_all.ipk",
"size": 14587, "size": 14589,
"category": "network", "category": "network",
"icon": "filter", "icon": "filter",
"description": "Traffic shaping and QoS", "description": "Traffic shaping and QoS",
@ -870,7 +870,7 @@
"name": "luci-app-vhost-manager", "name": "luci-app-vhost-manager",
"version": "0.5.0-r5", "version": "0.5.0-r5",
"filename": "luci-app-vhost-manager_0.5.0-r5_all.ipk", "filename": "luci-app-vhost-manager_0.5.0-r5_all.ipk",
"size": 26278, "size": 26282,
"category": "network", "category": "network",
"icon": "server", "icon": "server",
"description": "Virtual host management", "description": "Virtual host management",
@ -882,7 +882,7 @@
"name": "luci-app-voip", "name": "luci-app-voip",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-voip_1.0.0-r1_all.ipk", "filename": "luci-app-voip_1.0.0-r1_all.ipk",
"size": 11040, "size": 11048,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -894,7 +894,7 @@
"name": "luci-app-vortex-dns", "name": "luci-app-vortex-dns",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-vortex-dns_1.0.0-r1_all.ipk", "filename": "luci-app-vortex-dns_1.0.0-r1_all.ipk",
"size": 6074, "size": 6080,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -906,7 +906,7 @@
"name": "luci-app-vortex-firewall", "name": "luci-app-vortex-firewall",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-vortex-firewall_1.0.0-r1_all.ipk", "filename": "luci-app-vortex-firewall_1.0.0-r1_all.ipk",
"size": 5452, "size": 5453,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -918,7 +918,7 @@
"name": "luci-app-wazuh", "name": "luci-app-wazuh",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "luci-app-wazuh_1.0.0-r1_all.ipk", "filename": "luci-app-wazuh_1.0.0-r1_all.ipk",
"size": 11068, "size": 11072,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -930,7 +930,7 @@
"name": "luci-app-wireguard-dashboard", "name": "luci-app-wireguard-dashboard",
"version": "0.7.0-r5", "version": "0.7.0-r5",
"filename": "luci-app-wireguard-dashboard_0.7.0-r5_all.ipk", "filename": "luci-app-wireguard-dashboard_0.7.0-r5_all.ipk",
"size": 42284, "size": 42285,
"category": "vpn", "category": "vpn",
"icon": "shield", "icon": "shield",
"description": "WireGuard VPN dashboard", "description": "WireGuard VPN dashboard",
@ -954,7 +954,7 @@
"name": "luci-theme-secubox", "name": "luci-theme-secubox",
"version": "0.4.8-r1", "version": "0.4.8-r1",
"filename": "luci-theme-secubox_0.4.8-r1_all.ipk", "filename": "luci-theme-secubox_0.4.8-r1_all.ipk",
"size": 121588, "size": 121590,
"category": "theme", "category": "theme",
"icon": "palette", "icon": "palette",
"description": "LuCI theme", "description": "LuCI theme",
@ -966,7 +966,7 @@
"name": "secubox-ai-gateway", "name": "secubox-ai-gateway",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-ai-gateway_1.0.0-r1_all.ipk", "filename": "secubox-ai-gateway_1.0.0-r1_all.ipk",
"size": 13665, "size": 13662,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -978,7 +978,7 @@
"name": "secubox-app", "name": "secubox-app",
"version": "1.0.0-r2", "version": "1.0.0-r2",
"filename": "secubox-app_1.0.0-r2_all.ipk", "filename": "secubox-app_1.0.0-r2_all.ipk",
"size": 11185, "size": 11186,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -990,7 +990,7 @@
"name": "secubox-app-adguardhome", "name": "secubox-app-adguardhome",
"version": "1.0.0-r2", "version": "1.0.0-r2",
"filename": "secubox-app-adguardhome_1.0.0-r2_all.ipk", "filename": "secubox-app-adguardhome_1.0.0-r2_all.ipk",
"size": 2881, "size": 2882,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1002,7 +1002,7 @@
"name": "secubox-app-auth-logger", "name": "secubox-app-auth-logger",
"version": "1.2.2-r1", "version": "1.2.2-r1",
"filename": "secubox-app-auth-logger_1.2.2-r1_all.ipk", "filename": "secubox-app-auth-logger_1.2.2-r1_all.ipk",
"size": 9371, "size": 9376,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1014,7 +1014,7 @@
"name": "secubox-app-crowdsec-custom", "name": "secubox-app-crowdsec-custom",
"version": "1.1.0-r1", "version": "1.1.0-r1",
"filename": "secubox-app-crowdsec-custom_1.1.0-r1_all.ipk", "filename": "secubox-app-crowdsec-custom_1.1.0-r1_all.ipk",
"size": 6946, "size": 6942,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1026,7 +1026,7 @@
"name": "secubox-app-cs-firewall-bouncer", "name": "secubox-app-cs-firewall-bouncer",
"version": "0.0.31-r4_aarch64", "version": "0.0.31-r4_aarch64",
"filename": "secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk", "filename": "secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk",
"size": 5049324, "size": 5049323,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1038,7 +1038,7 @@
"name": "secubox-app-cyberfeed", "name": "secubox-app-cyberfeed",
"version": "0.2.1-r1", "version": "0.2.1-r1",
"filename": "secubox-app-cyberfeed_0.2.1-r1_all.ipk", "filename": "secubox-app-cyberfeed_0.2.1-r1_all.ipk",
"size": 12450, "size": 12449,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1050,7 +1050,7 @@
"name": "secubox-app-device-intel", "name": "secubox-app-device-intel",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-device-intel_1.0.0-r1_all.ipk", "filename": "secubox-app-device-intel_1.0.0-r1_all.ipk",
"size": 13098, "size": 13101,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1062,7 +1062,7 @@
"name": "secubox-app-dns-provider", "name": "secubox-app-dns-provider",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-dns-provider_1.0.0-r1_all.ipk", "filename": "secubox-app-dns-provider_1.0.0-r1_all.ipk",
"size": 8258, "size": 8259,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1074,7 +1074,7 @@
"name": "secubox-app-domoticz", "name": "secubox-app-domoticz",
"version": "1.0.0-r4", "version": "1.0.0-r4",
"filename": "secubox-app-domoticz_1.0.0-r4_all.ipk", "filename": "secubox-app-domoticz_1.0.0-r4_all.ipk",
"size": 7513, "size": 7508,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1098,7 +1098,7 @@
"name": "secubox-app-gitea", "name": "secubox-app-gitea",
"version": "1.0.0-r5", "version": "1.0.0-r5",
"filename": "secubox-app-gitea_1.0.0-r5_all.ipk", "filename": "secubox-app-gitea_1.0.0-r5_all.ipk",
"size": 9436, "size": 9435,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1110,7 +1110,7 @@
"name": "secubox-app-gk2hub", "name": "secubox-app-gk2hub",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "secubox-app-gk2hub_0.1.0-r1_all.ipk", "filename": "secubox-app-gk2hub_0.1.0-r1_all.ipk",
"size": 4060, "size": 4061,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1122,7 +1122,7 @@
"name": "secubox-app-glances", "name": "secubox-app-glances",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-glances_1.0.0-r1_all.ipk", "filename": "secubox-app-glances_1.0.0-r1_all.ipk",
"size": 6142, "size": 6137,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1134,7 +1134,7 @@
"name": "secubox-app-guacamole", "name": "secubox-app-guacamole",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-guacamole_1.0.0-r1_all.ipk", "filename": "secubox-app-guacamole_1.0.0-r1_all.ipk",
"size": 6942, "size": 6941,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1158,7 +1158,7 @@
"name": "secubox-app-hexojs", "name": "secubox-app-hexojs",
"version": "1.0.0-r8", "version": "1.0.0-r8",
"filename": "secubox-app-hexojs_1.0.0-r8_all.ipk", "filename": "secubox-app-hexojs_1.0.0-r8_all.ipk",
"size": 100054, "size": 100059,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1170,7 +1170,7 @@
"name": "secubox-app-ipblocklist", "name": "secubox-app-ipblocklist",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-ipblocklist_1.0.0-r1_all.ipk", "filename": "secubox-app-ipblocklist_1.0.0-r1_all.ipk",
"size": 4701, "size": 4699,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1182,7 +1182,7 @@
"name": "secubox-app-jabber", "name": "secubox-app-jabber",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-jabber_1.0.0-r1_all.ipk", "filename": "secubox-app-jabber_1.0.0-r1_all.ipk",
"size": 13277, "size": 13276,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1194,7 +1194,7 @@
"name": "secubox-app-jellyfin", "name": "secubox-app-jellyfin",
"version": "3.0.0-r1", "version": "3.0.0-r1",
"filename": "secubox-app-jellyfin_3.0.0-r1_all.ipk", "filename": "secubox-app-jellyfin_3.0.0-r1_all.ipk",
"size": 4755, "size": 4753,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1206,7 +1206,7 @@
"name": "secubox-app-jitsi", "name": "secubox-app-jitsi",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-jitsi_1.0.0-r1_all.ipk", "filename": "secubox-app-jitsi_1.0.0-r1_all.ipk",
"size": 8926, "size": 8920,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1242,7 +1242,7 @@
"name": "secubox-app-lyrion", "name": "secubox-app-lyrion",
"version": "2.0.2-r1", "version": "2.0.2-r1",
"filename": "secubox-app-lyrion_2.0.2-r1_all.ipk", "filename": "secubox-app-lyrion_2.0.2-r1_all.ipk",
"size": 8127, "size": 8125,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1254,7 +1254,7 @@
"name": "secubox-app-mac-guardian", "name": "secubox-app-mac-guardian",
"version": "0.5.0-r1", "version": "0.5.0-r1",
"filename": "secubox-app-mac-guardian_0.5.0-r1_all.ipk", "filename": "secubox-app-mac-guardian_0.5.0-r1_all.ipk",
"size": 12097, "size": 12093,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1278,7 +1278,7 @@
"name": "secubox-app-mailinabox", "name": "secubox-app-mailinabox",
"version": "2.0.0-r1", "version": "2.0.0-r1",
"filename": "secubox-app-mailinabox_2.0.0-r1_all.ipk", "filename": "secubox-app-mailinabox_2.0.0-r1_all.ipk",
"size": 7569, "size": 7572,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1290,7 +1290,7 @@
"name": "secubox-app-mailserver", "name": "secubox-app-mailserver",
"version": "2.0.0-r1", "version": "2.0.0-r1",
"filename": "secubox-app-mailserver_2.0.0-r1_all.ipk", "filename": "secubox-app-mailserver_2.0.0-r1_all.ipk",
"size": 5704, "size": 5694,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1302,7 +1302,7 @@
"name": "secubox-app-matrix", "name": "secubox-app-matrix",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-matrix_1.0.0-r1_all.ipk", "filename": "secubox-app-matrix_1.0.0-r1_all.ipk",
"size": 10448, "size": 10451,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1314,7 +1314,7 @@
"name": "secubox-app-metabolizer", "name": "secubox-app-metabolizer",
"version": "1.0.0-r3", "version": "1.0.0-r3",
"filename": "secubox-app-metabolizer_1.0.0-r3_all.ipk", "filename": "secubox-app-metabolizer_1.0.0-r3_all.ipk",
"size": 13979, "size": 13976,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1326,7 +1326,7 @@
"name": "secubox-app-mitmproxy", "name": "secubox-app-mitmproxy",
"version": "0.5.0-r19", "version": "0.5.0-r19",
"filename": "secubox-app-mitmproxy_0.5.0-r19_all.ipk", "filename": "secubox-app-mitmproxy_0.5.0-r19_all.ipk",
"size": 22956, "size": 22957,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1350,7 +1350,7 @@
"name": "secubox-app-nextcloud", "name": "secubox-app-nextcloud",
"version": "1.0.0-r2", "version": "1.0.0-r2",
"filename": "secubox-app-nextcloud_1.0.0-r2_all.ipk", "filename": "secubox-app-nextcloud_1.0.0-r2_all.ipk",
"size": 9675, "size": 9673,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1362,7 +1362,7 @@
"name": "secubox-app-ollama", "name": "secubox-app-ollama",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "secubox-app-ollama_0.1.0-r1_all.ipk", "filename": "secubox-app-ollama_0.1.0-r1_all.ipk",
"size": 5735, "size": 5731,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1374,19 +1374,31 @@
"name": "secubox-app-picobrew", "name": "secubox-app-picobrew",
"version": "1.0.0-r7", "version": "1.0.0-r7",
"filename": "secubox-app-picobrew_1.0.0-r7_all.ipk", "filename": "secubox-app-picobrew_1.0.0-r7_all.ipk",
"size": 5539, "size": 5537,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
"installed": false, "installed": false,
"luci_app": "luci-app-picobrew" "luci_app": "luci-app-picobrew"
} }
,
{
"name": "secubox-app-rezapp",
"version": "1.0.0-r1",
"filename": "secubox-app-rezapp_1.0.0-r1_all.ipk",
"size": 8625,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-rezapp"
}
, ,
{ {
"name": "secubox-app-rustdesk", "name": "secubox-app-rustdesk",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-rustdesk_1.0.0-r1_all.ipk", "filename": "secubox-app-rustdesk_1.0.0-r1_all.ipk",
"size": 4463, "size": 4461,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1422,19 +1434,31 @@
"name": "secubox-app-streamlit", "name": "secubox-app-streamlit",
"version": "1.0.0-r5", "version": "1.0.0-r5",
"filename": "secubox-app-streamlit_1.0.0-r5_all.ipk", "filename": "secubox-app-streamlit_1.0.0-r5_all.ipk",
"size": 16514, "size": 16512,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
"installed": false, "installed": false,
"luci_app": "luci-app-streamlit" "luci_app": "luci-app-streamlit"
} }
,
{
"name": "secubox-app-streamlit-forge",
"version": "1.0.0-r1",
"filename": "secubox-app-streamlit-forge_1.0.0-r1_all.ipk",
"size": 10814,
"category": "secubox",
"icon": "package",
"description": "SecuBox backend service",
"installed": false,
"luci_app": "luci-app-streamlit-forge"
}
, ,
{ {
"name": "secubox-app-tor", "name": "secubox-app-tor",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-tor_1.0.0-r1_all.ipk", "filename": "secubox-app-tor_1.0.0-r1_all.ipk",
"size": 7367, "size": 7369,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1446,7 +1470,7 @@
"name": "secubox-app-voip", "name": "secubox-app-voip",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-app-voip_1.0.0-r1_all.ipk", "filename": "secubox-app-voip_1.0.0-r1_all.ipk",
"size": 11955, "size": 11951,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1470,7 +1494,7 @@
"name": "secubox-app-zigbee2mqtt", "name": "secubox-app-zigbee2mqtt",
"version": "1.0.0-r3", "version": "1.0.0-r3",
"filename": "secubox-app-zigbee2mqtt_1.0.0-r3_all.ipk", "filename": "secubox-app-zigbee2mqtt_1.0.0-r3_all.ipk",
"size": 5539, "size": 5540,
"category": "secubox", "category": "secubox",
"icon": "package", "icon": "package",
"description": "SecuBox backend service", "description": "SecuBox backend service",
@ -1482,7 +1506,7 @@
"name": "secubox-config-advisor", "name": "secubox-config-advisor",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "secubox-config-advisor_0.1.0-r1_all.ipk", "filename": "secubox-config-advisor_0.1.0-r1_all.ipk",
"size": 14847, "size": 14842,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1494,7 +1518,7 @@
"name": "secubox-content-pkg", "name": "secubox-content-pkg",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-content-pkg_1.0.0-r1_all.ipk", "filename": "secubox-content-pkg_1.0.0-r1_all.ipk",
"size": 3909, "size": 3907,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1506,7 +1530,7 @@
"name": "secubox-cookie-tracker", "name": "secubox-cookie-tracker",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-cookie-tracker_1.0.0-r1_all.ipk", "filename": "secubox-cookie-tracker_1.0.0-r1_all.ipk",
"size": 10643, "size": 10639,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1518,7 +1542,7 @@
"name": "secubox-core", "name": "secubox-core",
"version": "0.10.0-r16", "version": "0.10.0-r16",
"filename": "secubox-core_0.10.0-r16_all.ipk", "filename": "secubox-core_0.10.0-r16_all.ipk",
"size": 127204, "size": 127202,
"category": "system", "category": "system",
"icon": "box", "icon": "box",
"description": "SecuBox core components", "description": "SecuBox core components",
@ -1530,7 +1554,7 @@
"name": "secubox-cve-triage", "name": "secubox-cve-triage",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-cve-triage_1.0.0-r1_all.ipk", "filename": "secubox-cve-triage_1.0.0-r1_all.ipk",
"size": 11829, "size": 11826,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1542,7 +1566,7 @@
"name": "secubox-dns-guard", "name": "secubox-dns-guard",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-dns-guard_1.0.0-r1_all.ipk", "filename": "secubox-dns-guard_1.0.0-r1_all.ipk",
"size": 12482, "size": 12480,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1554,7 +1578,7 @@
"name": "secubox-identity", "name": "secubox-identity",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "secubox-identity_0.1.0-r1_all.ipk", "filename": "secubox-identity_0.1.0-r1_all.ipk",
"size": 8090, "size": 8089,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1566,7 +1590,7 @@
"name": "secubox-iot-guard", "name": "secubox-iot-guard",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-iot-guard_1.0.0-r1_all.ipk", "filename": "secubox-iot-guard_1.0.0-r1_all.ipk",
"size": 13363, "size": 13370,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1578,7 +1602,7 @@
"name": "secubox-localrecall", "name": "secubox-localrecall",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-localrecall_1.0.0-r1_all.ipk", "filename": "secubox-localrecall_1.0.0-r1_all.ipk",
"size": 7793, "size": 7798,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1590,7 +1614,7 @@
"name": "secubox-master-link", "name": "secubox-master-link",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-master-link_1.0.0-r1_all.ipk", "filename": "secubox-master-link_1.0.0-r1_all.ipk",
"size": 15034, "size": 15036,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1602,7 +1626,7 @@
"name": "secubox-mcp-server", "name": "secubox-mcp-server",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-mcp-server_1.0.0-r1_all.ipk", "filename": "secubox-mcp-server_1.0.0-r1_all.ipk",
"size": 11428, "size": 11427,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1614,7 +1638,7 @@
"name": "secubox-mirrornet", "name": "secubox-mirrornet",
"version": "0.1.0-r1", "version": "0.1.0-r1",
"filename": "secubox-mirrornet_0.1.0-r1_all.ipk", "filename": "secubox-mirrornet_0.1.0-r1_all.ipk",
"size": 15305, "size": 15303,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1662,7 +1686,7 @@
"name": "secubox-threat-analyst", "name": "secubox-threat-analyst",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-threat-analyst_1.0.0-r1_all.ipk", "filename": "secubox-threat-analyst_1.0.0-r1_all.ipk",
"size": 9866, "size": 9865,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",
@ -1674,7 +1698,7 @@
"name": "secubox-vortex-dns", "name": "secubox-vortex-dns",
"version": "1.0.0-r1", "version": "1.0.0-r1",
"filename": "secubox-vortex-dns_1.0.0-r1_all.ipk", "filename": "secubox-vortex-dns_1.0.0-r1_all.ipk",
"size": 5439, "size": 5441,
"category": "utility", "category": "utility",
"icon": "package", "icon": "package",
"description": "SecuBox package", "description": "SecuBox package",

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