secubox-deb/scripts/generate-docs.py
CyberMind-FR a1ea1b38f3 docs(wiki): drop decommissioned Authelia SSO from Modules catalog (128→127)
secubox-authelia (SSO IdP) was decommissioned (#64768978, package removed, gate
now permissive no-op) but still listed in the Modules wiki. Removed from
generate-docs.py MODULES dict + regenerated MODULES/CATEGORIES (EN/FR/DE/ZH).
2026-07-04 07:00:50 +02:00

2288 lines
99 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
SecuBox Documentation Generator
================================
Generates READMEs for all packages and multilingual wiki pages.
Features:
- Auto-discovers all 120+ modules from packages/
- Generates multilingual wiki pages (EN, FR, DE, ZH)
- Integrates screenshots from docs/screenshots/vm/
- Creates category index pages
Usage:
python scripts/generate-docs.py
python scripts/generate-docs.py --include-screenshots
python scripts/generate-docs.py --lang fr
"""
import argparse
from pathlib import Path
from typing import Optional
# ============================================================================
# Module Metadata - All 120+ modules with multilingual descriptions
# ============================================================================
# Absolute base URL for wiki screenshots — the GitHub wiki is a separate repo, so
# images must be referenced via raw.githubusercontent (relative paths 404 there).
SCREENSHOT_RAW_BASE = (
"https://raw.githubusercontent.com/CyberMind-FR/secubox-deb/master/"
"docs/screenshots/vm"
)
MODULES = {
# =========================================================================
# DASHBOARD
# =========================================================================
"hub": {
"name": "SecuBox Hub", "icon": "🏠", "category": "Dashboard",
"description": {
"en": "Central dashboard and control center",
"fr": "Tableau de bord central et centre de contrôle",
"de": "Zentrales Dashboard und Kontrollzentrum",
"zh": "中央仪表板和控制中心"
},
"features": {
"en": ["System overview", "Service monitoring", "Quick actions", "Metrics"],
"fr": ["Vue système", "Surveillance services", "Actions rapides", "Métriques"],
"de": ["Systemübersicht", "Service-Überwachung", "Schnellaktionen", "Metriken"],
"zh": ["系统概览", "服务监控", "快速操作", "指标"]
}
},
"soc": {
"name": "Security Operations Center", "icon": "🛡️", "category": "Dashboard",
"description": {
"en": "SOC with world clock, threat map, tickets",
"fr": "SOC avec horloge mondiale, carte menaces, tickets",
"de": "SOC mit Weltuhr, Bedrohungskarte, Tickets",
"zh": "安全运营中心,包含世界时钟、威胁地图、工单"
},
"features": {
"en": ["World clock", "Threat map", "Ticket system", "P2P intel", "Alerts"],
"fr": ["Horloge mondiale", "Carte menaces", "Tickets", "Intel P2P", "Alertes"],
"de": ["Weltuhr", "Bedrohungskarte", "Ticketsystem", "P2P-Intel", "Warnungen"],
"zh": ["世界时钟", "威胁地图", "工单系统", "P2P情报", "告警"]
}
},
"roadmap": {
"name": "Migration Roadmap", "icon": "📋", "category": "Dashboard",
"description": {
"en": "OpenWRT to Debian migration tracking",
"fr": "Suivi migration OpenWRT vers Debian",
"de": "OpenWRT zu Debian Migration-Tracking",
"zh": "OpenWRT到Debian迁移跟踪"
},
"features": {
"en": ["Progress tracking", "Module status", "Category view"],
"fr": ["Suivi progression", "État modules", "Vue catégories"],
"de": ["Fortschrittsverfolgung", "Modulstatus", "Kategorieansicht"],
"zh": ["进度跟踪", "模块状态", "分类视图"]
}
},
"metrics": {
"name": "System Metrics", "icon": "📈", "category": "Dashboard",
"description": {
"en": "Real-time system metrics dashboard",
"fr": "Tableau de bord métriques système temps réel",
"de": "Echtzeit-Systemmetriken-Dashboard",
"zh": "实时系统指标仪表板"
},
"features": {
"en": ["CPU/Memory", "Network stats", "Disk I/O", "Historical data"],
"fr": ["CPU/Mémoire", "Stats réseau", "I/O disque", "Historique"],
"de": ["CPU/Speicher", "Netzwerkstatistiken", "Disk-I/O", "Verlaufsdaten"],
"zh": ["CPU/内存", "网络统计", "磁盘I/O", "历史数据"]
}
},
"admin": {
"name": "Admin Panel", "icon": "⚙️", "category": "Dashboard",
"description": {
"en": "System administration panel",
"fr": "Panneau d'administration système",
"de": "Systemverwaltungspanel",
"zh": "系统管理面板"
},
"features": {
"en": ["User management", "System config", "Logs", "Diagnostics"],
"fr": ["Gestion utilisateurs", "Config système", "Logs", "Diagnostics"],
"de": ["Benutzerverwaltung", "Systemkonfiguration", "Logs", "Diagnose"],
"zh": ["用户管理", "系统配置", "日志", "诊断"]
}
},
# =========================================================================
# SECURITY
# =========================================================================
"crowdsec": {
"name": "CrowdSec", "icon": "🛡️", "category": "Security",
"description": {
"en": "Collaborative security engine with behavior analysis",
"fr": "Moteur de sécurité collaboratif avec analyse comportementale",
"de": "Kollaborative Sicherheits-Engine mit Verhaltensanalyse",
"zh": "具有行为分析的协作式安全引擎"
},
"features": {
"en": ["Decision management", "Alerts", "Bouncers", "Collections", "Community blocklists"],
"fr": ["Gestion décisions", "Alertes", "Bouncers", "Collections", "Listes communautaires"],
"de": ["Entscheidungsverwaltung", "Warnungen", "Bouncers", "Sammlungen", "Community-Blocklisten"],
"zh": ["决策管理", "告警", "Bouncer", "集合", "社区黑名单"]
}
},
"waf": {
"name": "Web Application Firewall", "icon": "🔥", "category": "Security",
"description": {
"en": "WAF with 300+ OWASP security rules",
"fr": "WAF avec 300+ règles de sécurité OWASP",
"de": "WAF mit 300+ OWASP-Sicherheitsregeln",
"zh": "具有300+条OWASP安全规则的WAF"
},
"features": {
"en": ["OWASP rules", "Custom rules", "CrowdSec integration", "Request logging"],
"fr": ["Règles OWASP", "Règles custom", "Intégration CrowdSec", "Logs requêtes"],
"de": ["OWASP-Regeln", "Eigene Regeln", "CrowdSec-Integration", "Anforderungsprotokollierung"],
"zh": ["OWASP规则", "自定义规则", "CrowdSec集成", "请求日志"]
}
},
"vortex-firewall": {
"name": "Vortex Firewall", "icon": "🔥", "category": "Security",
"description": {
"en": "nftables-based threat enforcement firewall",
"fr": "Pare-feu d'application des menaces basé sur nftables",
"de": "nftables-basierte Bedrohungsdurchsetzungs-Firewall",
"zh": "基于nftables的威胁执行防火墙"
},
"features": {
"en": ["IP blocklists", "nftables sets", "Threat feeds", "Geo-blocking"],
"fr": ["Listes IP", "Sets nftables", "Flux menaces", "Géo-blocage"],
"de": ["IP-Blocklisten", "nftables-Sets", "Bedrohungsfeeds", "Geo-Blocking"],
"zh": ["IP黑名单", "nftables集合", "威胁源", "地理封锁"]
}
},
"hardening": {
"name": "System Hardening", "icon": "🔒", "category": "Security",
"description": {
"en": "Kernel and system hardening for ANSSI CSPN compliance",
"fr": "Durcissement système et noyau pour conformité ANSSI CSPN",
"de": "Kernel- und Systemhärtung für ANSSI CSPN-Konformität",
"zh": "符合ANSSI CSPN的内核和系统加固"
},
"features": {
"en": ["Sysctl hardening", "Module blacklist", "Security score", "AppArmor"],
"fr": ["Durcissement sysctl", "Blacklist modules", "Score sécurité", "AppArmor"],
"de": ["Sysctl-Härtung", "Modul-Blacklist", "Sicherheitsbewertung", "AppArmor"],
"zh": ["sysctl加固", "模块黑名单", "安全评分", "AppArmor"]
}
},
"mitmproxy": {
"name": "MITM Proxy", "icon": "🔍", "category": "Security",
"description": {
"en": "Traffic inspection and WAF proxy with auto-ban",
"fr": "Inspection trafic et proxy WAF avec auto-ban",
"de": "Verkehrsinspektion und WAF-Proxy mit Auto-Ban",
"zh": "具有自动封禁功能的流量检查和WAF代理"
},
"features": {
"en": ["Traffic inspection", "Request logging", "Auto-ban", "SSL interception"],
"fr": ["Inspection trafic", "Logs requêtes", "Auto-ban", "Interception SSL"],
"de": ["Verkehrsinspektion", "Anforderungsprotokollierung", "Auto-Ban", "SSL-Interception"],
"zh": ["流量检查", "请求日志", "自动封禁", "SSL拦截"]
}
},
"auth": {
"name": "Auth Guardian", "icon": "🔐", "category": "Security",
"description": {
"en": "Unified authentication management",
"fr": "Gestion unifiée de l'authentification",
"de": "Einheitliche Authentifizierungsverwaltung",
"zh": "统一认证管理"
},
"features": {
"en": ["OAuth2", "LDAP", "2FA/TOTP", "Session management"],
"fr": ["OAuth2", "LDAP", "2FA/TOTP", "Sessions"],
"de": ["OAuth2", "LDAP", "2FA/TOTP", "Sitzungen"],
"zh": ["OAuth2", "LDAP", "双因素/TOTP", "会话管理"]
}
},
"nac": {
"name": "Network Access Control", "icon": "🛡️", "category": "Security",
"description": {
"en": "Client guardian and NAC with quarantine",
"fr": "Guardian client et NAC avec quarantaine",
"de": "Client-Guardian und NAC mit Quarantäne",
"zh": "具有隔离功能的客户端守护和NAC"
},
"features": {
"en": ["Device control", "MAC filtering", "Quarantine", "VLAN assignment"],
"fr": ["Contrôle appareils", "Filtrage MAC", "Quarantaine", "Assignation VLAN"],
"de": ["Gerätesteuerung", "MAC-Filterung", "Quarantäne", "VLAN-Zuweisung"],
"zh": ["设备控制", "MAC过滤", "隔离", "VLAN分配"]
}
},
"ipblock": {
"name": "IP Block Manager", "icon": "🚫", "category": "Security",
"description": {
"en": "IP and network blocking management",
"fr": "Gestion du blocage IP et réseau",
"de": "IP- und Netzwerksperrverwaltung",
"zh": "IP和网络封锁管理"
},
"features": {
"en": ["IP blocklists", "Network ranges", "Temporary bans", "Import/Export"],
"fr": ["Listes IP", "Plages réseau", "Bans temporaires", "Import/Export"],
"de": ["IP-Blocklisten", "Netzwerkbereiche", "Temporäre Sperren", "Import/Export"],
"zh": ["IP黑名单", "网络范围", "临时封禁", "导入/导出"]
}
},
"mac-guard": {
"name": "MAC Guard", "icon": "🔐", "category": "Security",
"description": {
"en": "MAC address access control",
"fr": "Contrôle d'accès par adresse MAC",
"de": "MAC-Adress-Zugangskontrolle",
"zh": "MAC地址访问控制"
},
"features": {
"en": ["MAC whitelist/blacklist", "Auto-discovery", "Alerts", "VLAN binding"],
"fr": ["Liste MAC blanche/noire", "Auto-découverte", "Alertes", "Liaison VLAN"],
"de": ["MAC-Whitelist/Blacklist", "Auto-Erkennung", "Warnungen", "VLAN-Bindung"],
"zh": ["MAC白名单/黑名单", "自动发现", "告警", "VLAN绑定"]
}
},
"interceptor": {
"name": "Traffic Interceptor", "icon": "📡", "category": "Security",
"description": {
"en": "Network traffic interception and analysis",
"fr": "Interception et analyse du trafic réseau",
"de": "Netzwerkverkehrs-Interception und -Analyse",
"zh": "网络流量拦截和分析"
},
"features": {
"en": ["Packet capture", "Protocol analysis", "Session tracking", "Forensics"],
"fr": ["Capture paquets", "Analyse protocoles", "Suivi sessions", "Forensique"],
"de": ["Paketerfassung", "Protokollanalyse", "Sitzungsverfolgung", "Forensik"],
"zh": ["数据包捕获", "协议分析", "会话跟踪", "取证"]
}
},
"cookies": {
"name": "Cookie Manager", "icon": "🍪", "category": "Security",
"description": {
"en": "Cookie and session security management",
"fr": "Gestion de la sécurité des cookies et sessions",
"de": "Cookie- und Sitzungssicherheitsverwaltung",
"zh": "Cookie和会话安全管理"
},
"features": {
"en": ["Cookie policies", "Session security", "SameSite enforcement", "Audit"],
"fr": ["Politiques cookies", "Sécurité sessions", "Enforcement SameSite", "Audit"],
"de": ["Cookie-Richtlinien", "Sitzungssicherheit", "SameSite-Durchsetzung", "Audit"],
"zh": ["Cookie策略", "会话安全", "SameSite执行", "审计"]
}
},
"threats": {
"name": "Threat Dashboard", "icon": "⚠️", "category": "Security",
"description": {
"en": "Unified threat visualization",
"fr": "Visualisation unifiée des menaces",
"de": "Einheitliche Bedrohungsvisualisierung",
"zh": "统一威胁可视化"
},
"features": {
"en": ["Threat feeds", "Attack timeline", "Severity levels", "Correlation"],
"fr": ["Flux menaces", "Timeline attaques", "Niveaux gravité", "Corrélation"],
"de": ["Bedrohungsfeeds", "Angriffszeitachse", "Schweregrade", "Korrelation"],
"zh": ["威胁源", "攻击时间线", "严重级别", "关联"]
}
},
"threat-analyst": {
"name": "Threat Analyst", "icon": "🔬", "category": "Security",
"description": {
"en": "AI-powered threat analysis",
"fr": "Analyse des menaces assistée par IA",
"de": "KI-gestützte Bedrohungsanalyse",
"zh": "AI驱动的威胁分析"
},
"features": {
"en": ["ML detection", "Behavioral analysis", "IOC extraction", "Reports"],
"fr": ["Détection ML", "Analyse comportementale", "Extraction IOC", "Rapports"],
"de": ["ML-Erkennung", "Verhaltensanalyse", "IOC-Extraktion", "Berichte"],
"zh": ["ML检测", "行为分析", "IOC提取", "报告"]
}
},
"cve-triage": {
"name": "CVE Triage", "icon": "🔴", "category": "Security",
"description": {
"en": "CVE vulnerability tracking and triage",
"fr": "Suivi et triage des vulnérabilités CVE",
"de": "CVE-Schwachstellenverfolgung und -Triage",
"zh": "CVE漏洞跟踪和分类"
},
"features": {
"en": ["CVE database", "Affected packages", "Risk scoring", "Remediation"],
"fr": ["Base CVE", "Paquets affectés", "Score risque", "Remédiation"],
"de": ["CVE-Datenbank", "Betroffene Pakete", "Risikobewertung", "Behebung"],
"zh": ["CVE数据库", "受影响包", "风险评分", "修复"]
}
},
"wazuh": {
"name": "Wazuh SIEM", "icon": "🛡️", "category": "Security",
"description": {
"en": "Wazuh SIEM integration",
"fr": "Intégration SIEM Wazuh",
"de": "Wazuh SIEM-Integration",
"zh": "Wazuh SIEM集成"
},
"features": {
"en": ["Log analysis", "File integrity", "Vulnerability detection", "Compliance"],
"fr": ["Analyse logs", "Intégrité fichiers", "Détection vulnérabilités", "Conformité"],
"de": ["Log-Analyse", "Dateiintegrität", "Schwachstellenerkennung", "Compliance"],
"zh": ["日志分析", "文件完整性", "漏洞检测", "合规"]
}
},
"ossec": {
"name": "OSSEC HIDS", "icon": "🔒", "category": "Security",
"description": {
"en": "OSSEC host-based intrusion detection",
"fr": "Détection d'intrusion basée hôte OSSEC",
"de": "OSSEC-hostbasierte Einbruchserkennung",
"zh": "OSSEC主机入侵检测"
},
"features": {
"en": ["Log analysis", "Rootkit detection", "File integrity", "Active response"],
"fr": ["Analyse logs", "Détection rootkits", "Intégrité fichiers", "Réponse active"],
"de": ["Log-Analyse", "Rootkit-Erkennung", "Dateiintegrität", "Aktive Reaktion"],
"zh": ["日志分析", "Rootkit检测", "文件完整性", "主动响应"]
}
},
"openclaw": {
"name": "OpenClaw Scanner", "icon": "🦞", "category": "Security",
"description": {
"en": "Network vulnerability scanner",
"fr": "Scanner de vulnérabilités réseau",
"de": "Netzwerk-Schwachstellen-Scanner",
"zh": "网络漏洞扫描器"
},
"features": {
"en": ["Port scanning", "Service detection", "Vulnerability checks", "Reports"],
"fr": ["Scan ports", "Détection services", "Vérifications vulnérabilités", "Rapports"],
"de": ["Port-Scanning", "Diensterkennung", "Schwachstellenprüfungen", "Berichte"],
"zh": ["端口扫描", "服务检测", "漏洞检查", "报告"]
}
},
"iot-guard": {
"name": "IoT Guard", "icon": "🔌", "category": "Security",
"description": {
"en": "IoT device security monitoring",
"fr": "Surveillance sécurité appareils IoT",
"de": "IoT-Gerätesicherheitsüberwachung",
"zh": "IoT设备安全监控"
},
"features": {
"en": ["Device fingerprinting", "Anomaly detection", "Isolation", "Firmware checks"],
"fr": ["Empreinte appareils", "Détection anomalies", "Isolation", "Vérif firmware"],
"de": ["Geräte-Fingerprinting", "Anomalieerkennung", "Isolation", "Firmware-Prüfungen"],
"zh": ["设备指纹", "异常检测", "隔离", "固件检查"]
}
},
# =========================================================================
# NETWORK
# =========================================================================
"netmodes": {
"name": "Network Modes", "icon": "🌐", "category": "Network",
"description": {
"en": "Network topology configuration",
"fr": "Configuration topologie réseau",
"de": "Netzwerktopologie-Konfiguration",
"zh": "网络拓扑配置"
},
"features": {
"en": ["Router mode", "Bridge mode", "AP mode", "VLAN"],
"fr": ["Mode routeur", "Mode pont", "Mode AP", "VLAN"],
"de": ["Router-Modus", "Bridge-Modus", "AP-Modus", "VLAN"],
"zh": ["路由模式", "桥接模式", "AP模式", "VLAN"]
}
},
"qos": {
"name": "QoS Manager", "icon": "📊", "category": "Network",
"description": {
"en": "Quality of Service with HTB/VLAN",
"fr": "QoS avec HTB/VLAN",
"de": "QoS mit HTB/VLAN",
"zh": "HTB/VLAN服务质量"
},
"features": {
"en": ["Bandwidth control", "VLAN policies", "802.1p PCP", "Per-user limits"],
"fr": ["Contrôle bande passante", "Politiques VLAN", "802.1p PCP", "Limites utilisateur"],
"de": ["Bandbreitenkontrolle", "VLAN-Richtlinien", "802.1p PCP", "Pro-Benutzer-Limits"],
"zh": ["带宽控制", "VLAN策略", "802.1p PCP", "每用户限制"]
}
},
"traffic": {
"name": "Traffic Shaping", "icon": "📈", "category": "Network",
"description": {
"en": "TC/CAKE traffic shaping",
"fr": "Mise en forme trafic TC/CAKE",
"de": "TC/CAKE Verkehrsformung",
"zh": "TC/CAKE流量整形"
},
"features": {
"en": ["Per-interface QoS", "CAKE algorithm", "Statistics", "Real-time graphs"],
"fr": ["QoS par interface", "Algorithme CAKE", "Statistiques", "Graphes temps réel"],
"de": ["Pro-Schnittstelle QoS", "CAKE-Algorithmus", "Statistiken", "Echtzeit-Graphen"],
"zh": ["每接口QoS", "CAKE算法", "统计", "实时图表"]
}
},
"haproxy": {
"name": "HAProxy", "icon": "", "category": "Network",
"description": {
"en": "Load balancer with TLS 1.3",
"fr": "Load balancer avec TLS 1.3",
"de": "Load Balancer mit TLS 1.3",
"zh": "支持TLS 1.3的负载均衡器"
},
"features": {
"en": ["Backend management", "Stats", "ACLs", "SSL termination", "Health checks"],
"fr": ["Gestion backends", "Stats", "ACLs", "Terminaison SSL", "Health checks"],
"de": ["Backend-Verwaltung", "Statistiken", "ACLs", "SSL-Terminierung", "Health-Checks"],
"zh": ["后端管理", "统计", "ACL", "SSL终止", "健康检查"]
}
},
"cdn": {
"name": "CDN Cache", "icon": "🚀", "category": "Network",
"description": {
"en": "Content delivery cache",
"fr": "Cache de diffusion de contenu",
"de": "Content-Delivery-Cache",
"zh": "内容分发缓存"
},
"features": {
"en": ["Cache management", "Purge", "Statistics", "Edge rules"],
"fr": ["Gestion cache", "Purge", "Statistiques", "Règles edge"],
"de": ["Cache-Verwaltung", "Bereinigung", "Statistiken", "Edge-Regeln"],
"zh": ["缓存管理", "清除", "统计", "边缘规则"]
}
},
"vhost": {
"name": "Virtual Hosts", "icon": "🏗️", "category": "Network",
"description": {
"en": "Nginx virtual host management",
"fr": "Gestion hôtes virtuels Nginx",
"de": "Nginx Virtual Host Verwaltung",
"zh": "Nginx虚拟主机管理"
},
"features": {
"en": ["Site management", "SSL certificates", "Reverse proxy", "Let's Encrypt"],
"fr": ["Gestion sites", "Certificats SSL", "Reverse proxy", "Let's Encrypt"],
"de": ["Site-Verwaltung", "SSL-Zertifikate", "Reverse-Proxy", "Let's Encrypt"],
"zh": ["站点管理", "SSL证书", "反向代理", "Let's Encrypt"]
}
},
"routes": {
"name": "Routing Manager", "icon": "🛤️", "category": "Network",
"description": {
"en": "Static and policy-based routing",
"fr": "Routage statique et basé sur politiques",
"de": "Statisches und richtlinienbasiertes Routing",
"zh": "静态和基于策略的路由"
},
"features": {
"en": ["Static routes", "Policy routing", "Multi-WAN", "Failover"],
"fr": ["Routes statiques", "Routage politique", "Multi-WAN", "Failover"],
"de": ["Statische Routen", "Policy-Routing", "Multi-WAN", "Failover"],
"zh": ["静态路由", "策略路由", "多WAN", "故障转移"]
}
},
"nettweak": {
"name": "Network Tweaks", "icon": "🔧", "category": "Network",
"description": {
"en": "Network kernel parameters tuning",
"fr": "Réglage des paramètres réseau du noyau",
"de": "Netzwerk-Kernelparameter-Tuning",
"zh": "网络内核参数调优"
},
"features": {
"en": ["TCP tuning", "Buffer sizes", "Congestion control", "Profiles"],
"fr": ["Réglage TCP", "Tailles buffer", "Contrôle congestion", "Profils"],
"de": ["TCP-Tuning", "Puffergrößen", "Überlastungskontrolle", "Profile"],
"zh": ["TCP调优", "缓冲区大小", "拥塞控制", "配置文件"]
}
},
"netdiag": {
"name": "Network Diagnostics", "icon": "🔍", "category": "Network",
"description": {
"en": "Network troubleshooting tools",
"fr": "Outils de diagnostic réseau",
"de": "Netzwerk-Diagnosetools",
"zh": "网络故障排除工具"
},
"features": {
"en": ["Ping/Traceroute", "DNS lookup", "Port scan", "Speed test"],
"fr": ["Ping/Traceroute", "Recherche DNS", "Scan ports", "Test vitesse"],
"de": ["Ping/Traceroute", "DNS-Suche", "Port-Scan", "Geschwindigkeitstest"],
"zh": ["Ping/Traceroute", "DNS查询", "端口扫描", "速度测试"]
}
},
"network-anomaly": {
"name": "Network Anomaly", "icon": "📉", "category": "Network",
"description": {
"en": "Network anomaly detection",
"fr": "Détection d'anomalies réseau",
"de": "Netzwerk-Anomalieerkennung",
"zh": "网络异常检测"
},
"features": {
"en": ["Traffic baselines", "Anomaly alerts", "ML detection", "Visualization"],
"fr": ["Baselines trafic", "Alertes anomalies", "Détection ML", "Visualisation"],
"de": ["Verkehrs-Baselines", "Anomalie-Warnungen", "ML-Erkennung", "Visualisierung"],
"zh": ["流量基线", "异常告警", "ML检测", "可视化"]
}
},
"modem": {
"name": "Modem Manager", "icon": "📶", "category": "Network",
"description": {
"en": "3G/4G/5G modem management",
"fr": "Gestion modem 3G/4G/5G",
"de": "3G/4G/5G-Modemverwaltung",
"zh": "3G/4G/5G调制解调器管理"
},
"features": {
"en": ["Connection status", "Signal strength", "SMS", "Failover"],
"fr": ["État connexion", "Force signal", "SMS", "Failover"],
"de": ["Verbindungsstatus", "Signalstärke", "SMS", "Failover"],
"zh": ["连接状态", "信号强度", "短信", "故障转移"]
}
},
# =========================================================================
# DNS
# =========================================================================
"dns": {
"name": "DNS Server", "icon": "🌍", "category": "DNS",
"description": {
"en": "BIND DNS zone management",
"fr": "Gestion zones DNS BIND",
"de": "BIND DNS-Zonenverwaltung",
"zh": "BIND DNS区域管理"
},
"features": {
"en": ["Zone management", "Records", "DNSSEC", "Reverse DNS"],
"fr": ["Gestion zones", "Enregistrements", "DNSSEC", "DNS inverse"],
"de": ["Zonenverwaltung", "Einträge", "DNSSEC", "Reverse-DNS"],
"zh": ["区域管理", "记录", "DNSSEC", "反向DNS"]
}
},
"vortex-dns": {
"name": "Vortex DNS", "icon": "🛡️", "category": "DNS",
"description": {
"en": "DNS firewall with RPZ blocklists",
"fr": "Pare-feu DNS avec listes de blocage RPZ",
"de": "DNS-Firewall mit RPZ-Blocklisten",
"zh": "带RPZ黑名单的DNS防火墙"
},
"features": {
"en": ["Blocklists", "RPZ", "Threat feeds", "DoH/DoT"],
"fr": ["Listes blocage", "RPZ", "Flux menaces", "DoH/DoT"],
"de": ["Blocklisten", "RPZ", "Bedrohungsfeeds", "DoH/DoT"],
"zh": ["黑名单", "RPZ", "威胁源", "DoH/DoT"]
}
},
"meshname": {
"name": "Mesh DNS", "icon": "📡", "category": "DNS",
"description": {
"en": "Mesh network domain resolution",
"fr": "Résolution domaines réseau mesh",
"de": "Mesh-Netzwerk-Domänenauflösung",
"zh": "Mesh网络域名解析"
},
"features": {
"en": ["mDNS/Avahi", "Local DNS", "Service discovery", "Mesh integration"],
"fr": ["mDNS/Avahi", "DNS local", "Découverte services", "Intégration mesh"],
"de": ["mDNS/Avahi", "Lokales DNS", "Diensterkennung", "Mesh-Integration"],
"zh": ["mDNS/Avahi", "本地DNS", "服务发现", "Mesh集成"]
}
},
"dns-guard": {
"name": "DNS Guard", "icon": "🛡️", "category": "DNS",
"description": {
"en": "DNS-based threat protection",
"fr": "Protection basée sur DNS contre les menaces",
"de": "DNS-basierter Bedrohungsschutz",
"zh": "基于DNS的威胁防护"
},
"features": {
"en": ["Malware blocking", "Phishing protection", "Analytics", "Whitelist"],
"fr": ["Blocage malware", "Protection phishing", "Analytiques", "Liste blanche"],
"de": ["Malware-Blockierung", "Phishing-Schutz", "Analysen", "Whitelist"],
"zh": ["恶意软件拦截", "钓鱼防护", "分析", "白名单"]
}
},
"dns-provider": {
"name": "DNS Provider", "icon": "🌐", "category": "DNS",
"description": {
"en": "External DNS provider integration",
"fr": "Intégration fournisseur DNS externe",
"de": "Externe DNS-Anbieter-Integration",
"zh": "外部DNS提供商集成"
},
"features": {
"en": ["Cloudflare", "Route53", "DigitalOcean", "Dynamic DNS"],
"fr": ["Cloudflare", "Route53", "DigitalOcean", "DNS dynamique"],
"de": ["Cloudflare", "Route53", "DigitalOcean", "Dynamisches DNS"],
"zh": ["Cloudflare", "Route53", "DigitalOcean", "动态DNS"]
}
},
"ad-guard": {
"name": "AdGuard", "icon": "🚫", "category": "DNS",
"description": {
"en": "AdGuard Home DNS blocking",
"fr": "Blocage DNS AdGuard Home",
"de": "AdGuard Home DNS-Blockierung",
"zh": "AdGuard Home DNS拦截"
},
"features": {
"en": ["Ad blocking", "Tracking protection", "Parental control", "Statistics"],
"fr": ["Blocage pubs", "Protection tracking", "Contrôle parental", "Statistiques"],
"de": ["Werbungsblockierung", "Tracking-Schutz", "Jugendschutz", "Statistiken"],
"zh": ["广告拦截", "追踪保护", "家长控制", "统计"]
}
},
# =========================================================================
# VPN & PRIVACY
# =========================================================================
"wireguard": {
"name": "WireGuard VPN", "icon": "🔗", "category": "VPN",
"description": {
"en": "Modern VPN with kernel integration",
"fr": "VPN moderne avec intégration noyau",
"de": "Modernes VPN mit Kernel-Integration",
"zh": "具有内核集成的现代VPN"
},
"features": {
"en": ["Peer management", "QR codes", "Traffic stats", "Multi-tunnel"],
"fr": ["Gestion pairs", "QR codes", "Stats trafic", "Multi-tunnel"],
"de": ["Peer-Verwaltung", "QR-Codes", "Verkehrsstatistiken", "Multi-Tunnel"],
"zh": ["节点管理", "二维码", "流量统计", "多隧道"]
}
},
"mesh": {
"name": "Mesh Network", "icon": "🕸️", "category": "VPN",
"description": {
"en": "Mesh networking with Yggdrasil",
"fr": "Réseau mesh avec Yggdrasil",
"de": "Mesh-Netzwerk mit Yggdrasil",
"zh": "使用Yggdrasil的Mesh网络"
},
"features": {
"en": ["Peer discovery", "Routing", "Encryption", "IPv6 overlay"],
"fr": ["Découverte pairs", "Routage", "Chiffrement", "Overlay IPv6"],
"de": ["Peer-Erkennung", "Routing", "Verschlüsselung", "IPv6-Overlay"],
"zh": ["节点发现", "路由", "加密", "IPv6覆盖"]
}
},
"p2p": {
"name": "P2P Network", "icon": "🔗", "category": "VPN",
"description": {
"en": "Peer-to-peer networking",
"fr": "Réseau pair-à-pair",
"de": "Peer-to-Peer-Netzwerk",
"zh": "点对点网络"
},
"features": {
"en": ["Direct connections", "NAT traversal", "Encryption", "DHT"],
"fr": ["Connexions directes", "Traversée NAT", "Chiffrement", "DHT"],
"de": ["Direktverbindungen", "NAT-Traversal", "Verschlüsselung", "DHT"],
"zh": ["直接连接", "NAT穿透", "加密", "DHT"]
}
},
"master-link": {
"name": "MasterLink", "icon": "🔗", "category": "VPN",
"description": {
"en": "SecuBox mesh federation",
"fr": "Fédération mesh SecuBox",
"de": "SecuBox Mesh-Föderation",
"zh": "SecuBox网格联邦"
},
"features": {
"en": ["Box discovery", "Federation", "Shared policies", "Sync"],
"fr": ["Découverte box", "Fédération", "Politiques partagées", "Sync"],
"de": ["Box-Erkennung", "Föderation", "Gemeinsame Richtlinien", "Sync"],
"zh": ["盒子发现", "联邦", "共享策略", "同步"]
}
},
"tor": {
"name": "Tor Network", "icon": "🧅", "category": "Privacy",
"description": {
"en": "Tor anonymity and hidden services",
"fr": "Anonymat Tor et services cachés",
"de": "Tor-Anonymität und versteckte Dienste",
"zh": "Tor匿名和隐藏服务"
},
"features": {
"en": ["Circuits", "Hidden services", "Bridges", "Transparent proxy"],
"fr": ["Circuits", "Services cachés", "Bridges", "Proxy transparent"],
"de": ["Schaltkreise", "Versteckte Dienste", "Bridges", "Transparenter Proxy"],
"zh": ["电路", "隐藏服务", "桥接", "透明代理"]
}
},
"exposure": {
"name": "Exposure Settings", "icon": "🌐", "category": "Privacy",
"description": {
"en": "Unified exposure management",
"fr": "Gestion unifiée de l'exposition",
"de": "Einheitliche Expositionsverwaltung",
"zh": "统一暴露管理"
},
"features": {
"en": ["Tor exposure", "SSL certs", "DNS records", "Mesh access"],
"fr": ["Exposition Tor", "Certificats SSL", "Enregistrements DNS", "Accès mesh"],
"de": ["Tor-Exposition", "SSL-Zertifikate", "DNS-Einträge", "Mesh-Zugang"],
"zh": ["Tor暴露", "SSL证书", "DNS记录", "Mesh访问"]
}
},
"zkp": {
"name": "Zero-Knowledge Proofs", "icon": "🔐", "category": "Privacy",
"description": {
"en": "ZKP Hamiltonian authentication",
"fr": "Authentification ZKP Hamiltonien",
"de": "ZKP Hamiltonian-Authentifizierung",
"zh": "ZKP哈密顿认证"
},
"features": {
"en": ["Proof generation", "Verification", "Key management", "MirrorNet"],
"fr": ["Génération preuves", "Vérification", "Gestion clés", "MirrorNet"],
"de": ["Beweisgenerierung", "Verifizierung", "Schlüsselverwaltung", "MirrorNet"],
"zh": ["证明生成", "验证", "密钥管理", "MirrorNet"]
}
},
"simplex": {
"name": "SimpleX Chat", "icon": "💬", "category": "Privacy",
"description": {
"en": "Privacy-focused messaging",
"fr": "Messagerie axée sur la vie privée",
"de": "Datenschutzorientiertes Messaging",
"zh": "注重隐私的消息"
},
"features": {
"en": ["E2E encryption", "No user IDs", "Self-hosted", "Groups"],
"fr": ["Chiffrement E2E", "Sans identifiants", "Auto-hébergé", "Groupes"],
"de": ["E2E-Verschlüsselung", "Keine Benutzer-IDs", "Selbst gehostet", "Gruppen"],
"zh": ["端到端加密", "无用户ID", "自托管", "群组"]
}
},
"vault": {
"name": "Secret Vault", "icon": "🔐", "category": "Privacy",
"description": {
"en": "Secrets and credentials management",
"fr": "Gestion des secrets et identifiants",
"de": "Geheimnis- und Anmeldedatenverwaltung",
"zh": "密钥和凭据管理"
},
"features": {
"en": ["Encrypted storage", "Access control", "Rotation", "Audit"],
"fr": ["Stockage chiffré", "Contrôle d'accès", "Rotation", "Audit"],
"de": ["Verschlüsselter Speicher", "Zugriffskontrolle", "Rotation", "Audit"],
"zh": ["加密存储", "访问控制", "轮换", "审计"]
}
},
# =========================================================================
# MONITORING
# =========================================================================
"netdata": {
"name": "Netdata", "icon": "📊", "category": "Monitoring",
"description": {
"en": "Real-time system monitoring",
"fr": "Surveillance système temps réel",
"de": "Echtzeit-Systemüberwachung",
"zh": "实时系统监控"
},
"features": {
"en": ["Metrics", "Alerts", "Charts", "Plugins"],
"fr": ["Métriques", "Alertes", "Graphiques", "Plugins"],
"de": ["Metriken", "Warnungen", "Diagramme", "Plugins"],
"zh": ["指标", "告警", "图表", "插件"]
}
},
"dpi": {
"name": "Deep Packet Inspection", "icon": "🔬", "category": "Monitoring",
"description": {
"en": "DPI with netifyd/nDPId",
"fr": "DPI avec netifyd/nDPId",
"de": "DPI mit netifyd/nDPId",
"zh": "使用netifyd/nDPId的DPI"
},
"features": {
"en": ["Protocol detection", "App identification", "Flow analysis", "Statistics"],
"fr": ["Détection protocoles", "Identification apps", "Analyse flux", "Statistiques"],
"de": ["Protokollerkennung", "App-Identifizierung", "Flussanalyse", "Statistiken"],
"zh": ["协议检测", "应用识别", "流量分析", "统计"]
}
},
"netifyd": {
"name": "Netifyd DPI", "icon": "🔬", "category": "Monitoring",
"description": {
"en": "Netifyd deep packet inspection",
"fr": "Inspection paquets profonde Netifyd",
"de": "Netifyd Deep Packet Inspection",
"zh": "Netifyd深度包检测"
},
"features": {
"en": ["Application detection", "Protocol analysis", "Flow stats", "API"],
"fr": ["Détection applications", "Analyse protocoles", "Stats flux", "API"],
"de": ["Anwendungserkennung", "Protokollanalyse", "Flussstatistiken", "API"],
"zh": ["应用检测", "协议分析", "流量统计", "API"]
}
},
"ndpid": {
"name": "nDPId", "icon": "🔬", "category": "Monitoring",
"description": {
"en": "nDPI daemon for traffic analysis",
"fr": "Démon nDPI pour analyse trafic",
"de": "nDPI-Daemon für Verkehrsanalyse",
"zh": "用于流量分析的nDPI守护进程"
},
"features": {
"en": ["Protocol detection", "Flow tracking", "JSON API", "Real-time"],
"fr": ["Détection protocoles", "Suivi flux", "API JSON", "Temps réel"],
"de": ["Protokollerkennung", "Flussverfolgung", "JSON-API", "Echtzeit"],
"zh": ["协议检测", "流量跟踪", "JSON API", "实时"]
}
},
"device-intel": {
"name": "Device Intelligence", "icon": "📱", "category": "Monitoring",
"description": {
"en": "Asset discovery and fingerprinting",
"fr": "Découverte actifs et empreintes",
"de": "Asset-Erkennung und Fingerprinting",
"zh": "资产发现和指纹识别"
},
"features": {
"en": ["ARP scanning", "MAC vendor lookup", "OS detection", "Services"],
"fr": ["Scan ARP", "Recherche vendeur MAC", "Détection OS", "Services"],
"de": ["ARP-Scanning", "MAC-Vendor-Suche", "OS-Erkennung", "Dienste"],
"zh": ["ARP扫描", "MAC厂商查询", "OS检测", "服务"]
}
},
"watchdog": {
"name": "Watchdog", "icon": "👁️", "category": "Monitoring",
"description": {
"en": "Service and container monitoring",
"fr": "Surveillance services et conteneurs",
"de": "Service- und Container-Überwachung",
"zh": "服务和容器监控"
},
"features": {
"en": ["Health checks", "Auto-restart", "Alerts", "Logs"],
"fr": ["Vérifications santé", "Auto-redémarrage", "Alertes", "Logs"],
"de": ["Gesundheitsprüfungen", "Auto-Neustart", "Warnungen", "Logs"],
"zh": ["健康检查", "自动重启", "告警", "日志"]
}
},
"mediaflow": {
"name": "Media Flow", "icon": "🎬", "category": "Monitoring",
"description": {
"en": "Media traffic analytics",
"fr": "Analyse trafic média",
"de": "Medienverkehrsanalyse",
"zh": "媒体流量分析"
},
"features": {
"en": ["Stream detection", "Bandwidth usage", "Protocol analysis", "QoE"],
"fr": ["Détection flux", "Utilisation bande passante", "Analyse protocoles", "QoE"],
"de": ["Stream-Erkennung", "Bandbreitennutzung", "Protokollanalyse", "QoE"],
"zh": ["流检测", "带宽使用", "协议分析", "QoE"]
}
},
"glances": {
"name": "Glances", "icon": "👀", "category": "Monitoring",
"description": {
"en": "System monitoring dashboard",
"fr": "Tableau de bord surveillance système",
"de": "System-Überwachungs-Dashboard",
"zh": "系统监控仪表板"
},
"features": {
"en": ["CPU/Memory", "Disk/Network", "Docker", "Web UI"],
"fr": ["CPU/Mémoire", "Disque/Réseau", "Docker", "Interface web"],
"de": ["CPU/Speicher", "Disk/Netzwerk", "Docker", "Web-UI"],
"zh": ["CPU/内存", "磁盘/网络", "Docker", "Web界面"]
}
},
# =========================================================================
# ACCESS CONTROL
# =========================================================================
"portal": {
"name": "Login Portal", "icon": "🔐", "category": "Access",
"description": {
"en": "Authentication portal with JWT",
"fr": "Portail authentification avec JWT",
"de": "Authentifizierungsportal mit JWT",
"zh": "JWT认证门户"
},
"features": {
"en": ["JWT auth", "Sessions", "Password recovery", "Captive portal"],
"fr": ["Auth JWT", "Sessions", "Récupération mot de passe", "Portail captif"],
"de": ["JWT-Auth", "Sitzungen", "Passwortwiederherstellung", "Captive Portal"],
"zh": ["JWT认证", "会话", "密码恢复", "强制门户"]
}
},
"users": {
"name": "User Management", "icon": "👥", "category": "Access",
"description": {
"en": "Unified identity management",
"fr": "Gestion identité unifiée",
"de": "Einheitliche Identitätsverwaltung",
"zh": "统一身份管理"
},
"features": {
"en": ["User CRUD", "Groups", "Service provisioning", "RBAC"],
"fr": ["CRUD utilisateurs", "Groupes", "Provisioning services", "RBAC"],
"de": ["Benutzer-CRUD", "Gruppen", "Service-Bereitstellung", "RBAC"],
"zh": ["用户CRUD", "", "服务配置", "RBAC"]
}
},
"identity": {
"name": "Identity Provider", "icon": "🪪", "category": "Access",
"description": {
"en": "SAML/OIDC identity provider",
"fr": "Fournisseur d'identité SAML/OIDC",
"de": "SAML/OIDC-Identitätsanbieter",
"zh": "SAML/OIDC身份提供者"
},
"features": {
"en": ["SAML 2.0", "OpenID Connect", "Federation", "SSO"],
"fr": ["SAML 2.0", "OpenID Connect", "Fédération", "SSO"],
"de": ["SAML 2.0", "OpenID Connect", "Föderation", "SSO"],
"zh": ["SAML 2.0", "OpenID Connect", "联邦", "SSO"]
}
},
# =========================================================================
# SERVICES
# =========================================================================
"c3box": {
"name": "Services Portal", "icon": "📦", "category": "Services",
"description": {
"en": "C3Box services portal",
"fr": "Portail services C3Box",
"de": "C3Box-Dienstportal",
"zh": "C3Box服务门户"
},
"features": {
"en": ["Service links", "Status overview", "Quick access", "Categories"],
"fr": ["Liens services", "Vue état", "Accès rapide", "Catégories"],
"de": ["Service-Links", "Statusübersicht", "Schnellzugriff", "Kategorien"],
"zh": ["服务链接", "状态概览", "快速访问", "分类"]
}
},
"gitea": {
"name": "Gitea", "icon": "🦊", "category": "Services",
"description": {
"en": "Git server (LXC)",
"fr": "Serveur Git (LXC)",
"de": "Git-Server (LXC)",
"zh": "Git服务器(LXC)"
},
"features": {
"en": ["Repositories", "Users", "SSH/HTTP", "LFS", "Actions"],
"fr": ["Dépôts", "Utilisateurs", "SSH/HTTP", "LFS", "Actions"],
"de": ["Repositories", "Benutzer", "SSH/HTTP", "LFS", "Actions"],
"zh": ["仓库", "用户", "SSH/HTTP", "LFS", "Actions"]
}
},
"nextcloud": {
"name": "Nextcloud", "icon": "☁️", "category": "Services",
"description": {
"en": "File sync (LXC)",
"fr": "Synchronisation fichiers (LXC)",
"de": "Dateisynchronisierung (LXC)",
"zh": "文件同步(LXC)"
},
"features": {
"en": ["File sync", "WebDAV", "CalDAV", "CardDAV", "Talk"],
"fr": ["Sync fichiers", "WebDAV", "CalDAV", "CardDAV", "Talk"],
"de": ["Dateisync", "WebDAV", "CalDAV", "CardDAV", "Talk"],
"zh": ["文件同步", "WebDAV", "CalDAV", "CardDAV", "Talk"]
}
},
# =========================================================================
# AI
# =========================================================================
"ollama": {
"name": "Ollama", "icon": "🦙", "category": "AI",
"description": {
"en": "Local LLM server",
"fr": "Serveur LLM local",
"de": "Lokaler LLM-Server",
"zh": "本地LLM服务器"
},
"features": {
"en": ["Model management", "API", "Chat", "GPU support"],
"fr": ["Gestion modèles", "API", "Chat", "Support GPU"],
"de": ["Modellverwaltung", "API", "Chat", "GPU-Unterstützung"],
"zh": ["模型管理", "API", "聊天", "GPU支持"]
}
},
"localai": {
"name": "LocalAI", "icon": "🤖", "category": "AI",
"description": {
"en": "OpenAI-compatible local API",
"fr": "API locale compatible OpenAI",
"de": "OpenAI-kompatible lokale API",
"zh": "兼容OpenAI的本地API"
},
"features": {
"en": ["OpenAI API", "Multiple models", "Embeddings", "Image generation"],
"fr": ["API OpenAI", "Modèles multiples", "Embeddings", "Génération images"],
"de": ["OpenAI-API", "Mehrere Modelle", "Embeddings", "Bildgenerierung"],
"zh": ["OpenAI API", "多模型", "嵌入", "图像生成"]
}
},
"ai-gateway": {
"name": "AI Gateway", "icon": "🚪", "category": "AI",
"description": {
"en": "AI model API gateway",
"fr": "Passerelle API modèles IA",
"de": "AI-Modell-API-Gateway",
"zh": "AI模型API网关"
},
"features": {
"en": ["Rate limiting", "Load balancing", "Caching", "Logging"],
"fr": ["Limitation débit", "Équilibrage charge", "Cache", "Logs"],
"de": ["Ratenbegrenzung", "Lastverteilung", "Caching", "Protokollierung"],
"zh": ["速率限制", "负载均衡", "缓存", "日志"]
}
},
"ai-insights": {
"name": "AI Insights", "icon": "💡", "category": "AI",
"description": {
"en": "AI-powered security insights",
"fr": "Aperçus sécurité assistés par IA",
"de": "KI-gestützte Sicherheitseinblicke",
"zh": "AI驱动的安全洞察"
},
"features": {
"en": ["Anomaly detection", "Recommendations", "Predictions", "Reports"],
"fr": ["Détection anomalies", "Recommandations", "Prédictions", "Rapports"],
"de": ["Anomalieerkennung", "Empfehlungen", "Vorhersagen", "Berichte"],
"zh": ["异常检测", "建议", "预测", "报告"]
}
},
"localrecall": {
"name": "LocalRecall", "icon": "🧠", "category": "AI",
"description": {
"en": "Local RAG memory system",
"fr": "Système mémoire RAG local",
"de": "Lokales RAG-Gedächtnissystem",
"zh": "本地RAG记忆系统"
},
"features": {
"en": ["Vector storage", "Semantic search", "Document indexing", "API"],
"fr": ["Stockage vecteurs", "Recherche sémantique", "Indexation documents", "API"],
"de": ["Vektorspeicher", "Semantische Suche", "Dokumentenindizierung", "API"],
"zh": ["向量存储", "语义搜索", "文档索引", "API"]
}
},
"mcp-server": {
"name": "MCP Server", "icon": "🔌", "category": "AI",
"description": {
"en": "Model Context Protocol server",
"fr": "Serveur Model Context Protocol",
"de": "Model Context Protocol-Server",
"zh": "模型上下文协议服务器"
},
"features": {
"en": ["Tool integration", "Context management", "Multi-model", "API"],
"fr": ["Intégration outils", "Gestion contexte", "Multi-modèle", "API"],
"de": ["Tool-Integration", "Kontextverwaltung", "Multi-Modell", "API"],
"zh": ["工具集成", "上下文管理", "多模型", "API"]
}
},
# =========================================================================
# EMAIL
# =========================================================================
"mail": {
"name": "Mail Server", "icon": "📧", "category": "Email",
"description": {
"en": "Postfix/Dovecot mail server",
"fr": "Serveur mail Postfix/Dovecot",
"de": "Postfix/Dovecot-Mailserver",
"zh": "Postfix/Dovecot邮件服务器"
},
"features": {
"en": ["Domains", "Mailboxes", "DKIM", "SpamAssassin", "ClamAV"],
"fr": ["Domaines", "Boîtes mail", "DKIM", "SpamAssassin", "ClamAV"],
"de": ["Domänen", "Postfächer", "DKIM", "SpamAssassin", "ClamAV"],
"zh": ["域名", "邮箱", "DKIM", "SpamAssassin", "ClamAV"]
}
},
"webmail": {
"name": "Webmail", "icon": "💌", "category": "Email",
"description": {
"en": "Roundcube/SOGo webmail",
"fr": "Webmail Roundcube/SOGo",
"de": "Roundcube/SOGo-Webmail",
"zh": "Roundcube/SOGo网页邮箱"
},
"features": {
"en": ["Web interface", "Address book", "Calendar", "Mobile"],
"fr": ["Interface web", "Carnet adresses", "Calendrier", "Mobile"],
"de": ["Web-Oberfläche", "Adressbuch", "Kalender", "Mobil"],
"zh": ["Web界面", "通讯录", "日历", "移动端"]
}
},
"smtp-relay": {
"name": "SMTP Relay", "icon": "📤", "category": "Email",
"description": {
"en": "SMTP relay and smarthost",
"fr": "Relais SMTP et smarthost",
"de": "SMTP-Relay und Smarthost",
"zh": "SMTP中继和智能主机"
},
"features": {
"en": ["Relay", "Authentication", "Rate limiting", "Logging"],
"fr": ["Relais", "Authentification", "Limitation débit", "Logs"],
"de": ["Relay", "Authentifizierung", "Ratenbegrenzung", "Protokollierung"],
"zh": ["中继", "认证", "速率限制", "日志"]
}
},
"jabber": {
"name": "Jabber/XMPP", "icon": "💬", "category": "Email",
"description": {
"en": "XMPP messaging server",
"fr": "Serveur messagerie XMPP",
"de": "XMPP-Messaging-Server",
"zh": "XMPP消息服务器"
},
"features": {
"en": ["Chat", "Groups", "File transfer", "Federation"],
"fr": ["Chat", "Groupes", "Transfert fichiers", "Fédération"],
"de": ["Chat", "Gruppen", "Dateiübertragung", "Föderation"],
"zh": ["聊天", "群组", "文件传输", "联邦"]
}
},
# =========================================================================
# MEDIA
# =========================================================================
"jellyfin": {
"name": "Jellyfin", "icon": "🎬", "category": "Media",
"description": {
"en": "Media server",
"fr": "Serveur média",
"de": "Medienserver",
"zh": "媒体服务器"
},
"features": {
"en": ["Video streaming", "Live TV", "Transcoding", "Mobile apps"],
"fr": ["Streaming vidéo", "TV en direct", "Transcodage", "Apps mobiles"],
"de": ["Video-Streaming", "Live-TV", "Transcoding", "Mobile Apps"],
"zh": ["视频流", "直播电视", "转码", "移动应用"]
}
},
"lyrion": {
"name": "Lyrion Music", "icon": "🎵", "category": "Media",
"description": {
"en": "Music streaming server",
"fr": "Serveur streaming musique",
"de": "Musik-Streaming-Server",
"zh": "音乐流媒体服务器"
},
"features": {
"en": ["Music library", "Playlists", "Radio", "Multi-room"],
"fr": ["Bibliothèque musique", "Playlists", "Radio", "Multi-pièces"],
"de": ["Musikbibliothek", "Playlists", "Radio", "Multi-Room"],
"zh": ["音乐库", "播放列表", "电台", "多房间"]
}
},
"webradio": {
"name": "Web Radio", "icon": "📻", "category": "Media",
"description": {
"en": "Internet radio streaming",
"fr": "Streaming radio Internet",
"de": "Internet-Radio-Streaming",
"zh": "网络电台流媒体"
},
"features": {
"en": ["Radio stations", "Recording", "Schedule", "Favorites"],
"fr": ["Stations radio", "Enregistrement", "Programmation", "Favoris"],
"de": ["Radiosender", "Aufnahme", "Zeitplan", "Favoriten"],
"zh": ["电台", "录制", "计划", "收藏"]
}
},
"photoprism": {
"name": "PhotoPrism", "icon": "📸", "category": "Media",
"description": {
"en": "AI-powered photo management",
"fr": "Gestion photos assistée par IA",
"de": "KI-gestützte Fotoverwaltung",
"zh": "AI驱动的照片管理"
},
"features": {
"en": ["Face recognition", "Auto-tagging", "Search", "Albums"],
"fr": ["Reconnaissance faciale", "Auto-tagging", "Recherche", "Albums"],
"de": ["Gesichtserkennung", "Auto-Tagging", "Suche", "Alben"],
"zh": ["人脸识别", "自动标签", "搜索", "相册"]
}
},
"peertube": {
"name": "PeerTube", "icon": "📺", "category": "Media",
"description": {
"en": "Federated video platform",
"fr": "Plateforme vidéo fédérée",
"de": "Föderierte Videoplattform",
"zh": "联邦视频平台"
},
"features": {
"en": ["Video hosting", "Federation", "Live streaming", "Comments"],
"fr": ["Hébergement vidéo", "Fédération", "Live streaming", "Commentaires"],
"de": ["Video-Hosting", "Föderation", "Live-Streaming", "Kommentare"],
"zh": ["视频托管", "联邦", "直播", "评论"]
}
},
"torrent": {
"name": "Torrent", "icon": "🌊", "category": "Media",
"description": {
"en": "BitTorrent client",
"fr": "Client BitTorrent",
"de": "BitTorrent-Client",
"zh": "BitTorrent客户端"
},
"features": {
"en": ["Downloads", "RSS", "Remote control", "Bandwidth limits"],
"fr": ["Téléchargements", "RSS", "Contrôle distant", "Limites bande passante"],
"de": ["Downloads", "RSS", "Fernsteuerung", "Bandbreitenlimits"],
"zh": ["下载", "RSS", "远程控制", "带宽限制"]
}
},
"newsbin": {
"name": "Newsbin", "icon": "📰", "category": "Media",
"description": {
"en": "Usenet/NNTP client",
"fr": "Client Usenet/NNTP",
"de": "Usenet/NNTP-Client",
"zh": "Usenet/NNTP客户端"
},
"features": {
"en": ["NZB downloads", "Auto-processing", "Search", "Categories"],
"fr": ["Téléchargements NZB", "Traitement auto", "Recherche", "Catégories"],
"de": ["NZB-Downloads", "Auto-Verarbeitung", "Suche", "Kategorien"],
"zh": ["NZB下载", "自动处理", "搜索", "分类"]
}
},
# =========================================================================
# PUBLISHING
# =========================================================================
"publish": {
"name": "Publishing Platform", "icon": "📰", "category": "Publishing",
"description": {
"en": "Unified publishing dashboard",
"fr": "Tableau de bord publication unifié",
"de": "Einheitliches Veröffentlichungs-Dashboard",
"zh": "统一发布仪表板"
},
"features": {
"en": ["Multi-platform", "Scheduling", "Analytics", "Templates"],
"fr": ["Multi-plateforme", "Planification", "Analytiques", "Templates"],
"de": ["Multi-Plattform", "Planung", "Analysen", "Vorlagen"],
"zh": ["多平台", "计划", "分析", "模板"]
}
},
"droplet": {
"name": "Droplet", "icon": "💧", "category": "Publishing",
"description": {
"en": "File upload and publish",
"fr": "Upload et publication fichiers",
"de": "Datei-Upload und Veröffentlichung",
"zh": "文件上传和发布"
},
"features": {
"en": ["File upload", "Share links", "Expiration", "Password protection"],
"fr": ["Upload fichiers", "Liens partage", "Expiration", "Protection mot de passe"],
"de": ["Datei-Upload", "Freigabelinks", "Ablauf", "Passwortschutz"],
"zh": ["文件上传", "分享链接", "过期", "密码保护"]
}
},
"metablogizer": {
"name": "Metablogizer", "icon": "📝", "category": "Publishing",
"description": {
"en": "Static site publisher with Tor",
"fr": "Éditeur site statique avec Tor",
"de": "Statischer Site-Publisher mit Tor",
"zh": "带Tor的静态站点发布器"
},
"features": {
"en": ["Static sites", "Tor publishing", "Templates", "Markdown"],
"fr": ["Sites statiques", "Publication Tor", "Templates", "Markdown"],
"de": ["Statische Sites", "Tor-Veröffentlichung", "Vorlagen", "Markdown"],
"zh": ["静态站点", "Tor发布", "模板", "Markdown"]
}
},
"hexo": {
"name": "Hexo Blog", "icon": "✏️", "category": "Publishing",
"description": {
"en": "Static blog generator",
"fr": "Générateur blog statique",
"de": "Statischer Blog-Generator",
"zh": "静态博客生成器"
},
"features": {
"en": ["Markdown", "Themes", "Plugins", "Deploy"],
"fr": ["Markdown", "Thèmes", "Plugins", "Déploiement"],
"de": ["Markdown", "Themes", "Plugins", "Deploy"],
"zh": ["Markdown", "主题", "插件", "部署"]
}
},
"gotosocial": {
"name": "GoToSocial", "icon": "🐘", "category": "Publishing",
"description": {
"en": "ActivityPub social server",
"fr": "Serveur social ActivityPub",
"de": "ActivityPub-Social-Server",
"zh": "ActivityPub社交服务器"
},
"features": {
"en": ["Mastodon compatible", "Federation", "Media", "Privacy"],
"fr": ["Compatible Mastodon", "Fédération", "Média", "Vie privée"],
"de": ["Mastodon-kompatibel", "Föderation", "Medien", "Datenschutz"],
"zh": ["兼容Mastodon", "联邦", "媒体", "隐私"]
}
},
"cyberfeed": {
"name": "CyberFeed", "icon": "📡", "category": "Publishing",
"description": {
"en": "RSS/Atom feed aggregator",
"fr": "Agrégateur flux RSS/Atom",
"de": "RSS/Atom-Feed-Aggregator",
"zh": "RSS/Atom订阅聚合器"
},
"features": {
"en": ["Feed management", "Categories", "Search", "Export"],
"fr": ["Gestion flux", "Catégories", "Recherche", "Export"],
"de": ["Feed-Verwaltung", "Kategorien", "Suche", "Export"],
"zh": ["订阅管理", "分类", "搜索", "导出"]
}
},
# =========================================================================
# APPS
# =========================================================================
"streamlit": {
"name": "Streamlit", "icon": "🎨", "category": "Apps",
"description": {
"en": "Streamlit app platform",
"fr": "Plateforme apps Streamlit",
"de": "Streamlit-App-Plattform",
"zh": "Streamlit应用平台"
},
"features": {
"en": ["App hosting", "Deployment", "Management", "Logs"],
"fr": ["Hébergement apps", "Déploiement", "Gestion", "Logs"],
"de": ["App-Hosting", "Bereitstellung", "Verwaltung", "Logs"],
"zh": ["应用托管", "部署", "管理", "日志"]
}
},
"streamforge": {
"name": "StreamForge", "icon": "", "category": "Apps",
"description": {
"en": "Streamlit app development",
"fr": "Développement apps Streamlit",
"de": "Streamlit-App-Entwicklung",
"zh": "Streamlit应用开发"
},
"features": {
"en": ["Templates", "Code editor", "Preview", "Deploy"],
"fr": ["Templates", "Éditeur code", "Aperçu", "Déploiement"],
"de": ["Vorlagen", "Code-Editor", "Vorschau", "Deploy"],
"zh": ["模板", "代码编辑器", "预览", "部署"]
}
},
"repo": {
"name": "APT Repository", "icon": "📦", "category": "Apps",
"description": {
"en": "APT repository management",
"fr": "Gestion dépôt APT",
"de": "APT-Repository-Verwaltung",
"zh": "APT仓库管理"
},
"features": {
"en": ["Package management", "GPG signing", "Multi-distro", "Uploads"],
"fr": ["Gestion paquets", "Signature GPG", "Multi-distro", "Uploads"],
"de": ["Paketverwaltung", "GPG-Signierung", "Multi-Distro", "Uploads"],
"zh": ["包管理", "GPG签名", "多发行版", "上传"]
}
},
# =========================================================================
# IOT
# =========================================================================
"domoticz": {
"name": "Domoticz", "icon": "🏠", "category": "IoT",
"description": {
"en": "Home automation",
"fr": "Domotique",
"de": "Hausautomation",
"zh": "家庭自动化"
},
"features": {
"en": ["Devices", "Scenes", "Scripts", "History"],
"fr": ["Appareils", "Scènes", "Scripts", "Historique"],
"de": ["Geräte", "Szenen", "Skripte", "Verlauf"],
"zh": ["设备", "场景", "脚本", "历史"]
}
},
"homeassistant": {
"name": "Home Assistant", "icon": "🏡", "category": "IoT",
"description": {
"en": "Home automation hub",
"fr": "Hub domotique",
"de": "Hausautomations-Hub",
"zh": "家庭自动化中心"
},
"features": {
"en": ["Integrations", "Automations", "Dashboard", "Voice"],
"fr": ["Intégrations", "Automatisations", "Tableau de bord", "Voix"],
"de": ["Integrationen", "Automatisierungen", "Dashboard", "Sprache"],
"zh": ["集成", "自动化", "仪表板", "语音"]
}
},
"zigbee": {
"name": "Zigbee Gateway", "icon": "📡", "category": "IoT",
"description": {
"en": "Zigbee2MQTT gateway",
"fr": "Passerelle Zigbee2MQTT",
"de": "Zigbee2MQTT-Gateway",
"zh": "Zigbee2MQTT网关"
},
"features": {
"en": ["Device pairing", "MQTT", "Groups", "OTA updates"],
"fr": ["Appairage appareils", "MQTT", "Groupes", "Mises à jour OTA"],
"de": ["Gerätekopplung", "MQTT", "Gruppen", "OTA-Updates"],
"zh": ["设备配对", "MQTT", "群组", "OTA更新"]
}
},
"mqtt": {
"name": "MQTT Broker", "icon": "📡", "category": "IoT",
"description": {
"en": "Mosquitto MQTT broker",
"fr": "Broker MQTT Mosquitto",
"de": "Mosquitto MQTT-Broker",
"zh": "Mosquitto MQTT代理"
},
"features": {
"en": ["Topics", "ACL", "TLS", "WebSocket"],
"fr": ["Topics", "ACL", "TLS", "WebSocket"],
"de": ["Topics", "ACL", "TLS", "WebSocket"],
"zh": ["主题", "ACL", "TLS", "WebSocket"]
}
},
# =========================================================================
# COMMUNICATION
# =========================================================================
"matrix": {
"name": "Matrix Server", "icon": "💬", "category": "Communication",
"description": {
"en": "Matrix/Synapse chat server",
"fr": "Serveur chat Matrix/Synapse",
"de": "Matrix/Synapse-Chat-Server",
"zh": "Matrix/Synapse聊天服务器"
},
"features": {
"en": ["E2E encryption", "Federation", "Bridges", "Calls"],
"fr": ["Chiffrement E2E", "Fédération", "Bridges", "Appels"],
"de": ["E2E-Verschlüsselung", "Föderation", "Bridges", "Anrufe"],
"zh": ["端到端加密", "联邦", "桥接", "通话"]
}
},
"jitsi": {
"name": "Jitsi Meet", "icon": "📹", "category": "Communication",
"description": {
"en": "Video conferencing",
"fr": "Visioconférence",
"de": "Videokonferenzen",
"zh": "视频会议"
},
"features": {
"en": ["Video calls", "Screen share", "Recording", "Lobby"],
"fr": ["Appels vidéo", "Partage écran", "Enregistrement", "Lobby"],
"de": ["Videoanrufe", "Bildschirmfreigabe", "Aufnahme", "Lobby"],
"zh": ["视频通话", "屏幕共享", "录制", "等候室"]
}
},
"voip": {
"name": "VoIP Server", "icon": "📞", "category": "Communication",
"description": {
"en": "Asterisk/FreePBX VoIP",
"fr": "VoIP Asterisk/FreePBX",
"de": "Asterisk/FreePBX VoIP",
"zh": "Asterisk/FreePBX VoIP"
},
"features": {
"en": ["Extensions", "Trunks", "IVR", "Voicemail"],
"fr": ["Extensions", "Trunks", "IVR", "Messagerie vocale"],
"de": ["Extensions", "Trunks", "IVR", "Voicemail"],
"zh": ["分机", "中继", "IVR", "语音信箱"]
}
},
"turn": {
"name": "TURN Server", "icon": "🔄", "category": "Communication",
"description": {
"en": "TURN/STUN relay server",
"fr": "Serveur relais TURN/STUN",
"de": "TURN/STUN-Relay-Server",
"zh": "TURN/STUN中继服务器"
},
"features": {
"en": ["NAT traversal", "WebRTC", "TLS", "Statistics"],
"fr": ["Traversée NAT", "WebRTC", "TLS", "Statistiques"],
"de": ["NAT-Traversal", "WebRTC", "TLS", "Statistiken"],
"zh": ["NAT穿透", "WebRTC", "TLS", "统计"]
}
},
# =========================================================================
# SYSTEM
# =========================================================================
"system": {
"name": "System Hub", "icon": "⚙️", "category": "System",
"description": {
"en": "System configuration and management",
"fr": "Configuration et gestion système",
"de": "Systemkonfiguration und -verwaltung",
"zh": "系统配置和管理"
},
"features": {
"en": ["Settings", "Logs", "Services", "Updates"],
"fr": ["Paramètres", "Logs", "Services", "Mises à jour"],
"de": ["Einstellungen", "Protokolle", "Dienste", "Updates"],
"zh": ["设置", "日志", "服务", "更新"]
}
},
"backup": {
"name": "Backup Manager", "icon": "💾", "category": "System",
"description": {
"en": "System and LXC backup",
"fr": "Sauvegarde système et LXC",
"de": "System- und LXC-Backup",
"zh": "系统和LXC备份"
},
"features": {
"en": ["Config backup", "LXC snapshots", "Restore", "Scheduling"],
"fr": ["Sauvegarde config", "Snapshots LXC", "Restauration", "Planification"],
"de": ["Config-Backup", "LXC-Snapshots", "Wiederherstellung", "Planung"],
"zh": ["配置备份", "LXC快照", "恢复", "计划"]
}
},
"config-advisor": {
"name": "Config Advisor", "icon": "📋", "category": "System",
"description": {
"en": "Configuration recommendations",
"fr": "Recommandations de configuration",
"de": "Konfigurationsempfehlungen",
"zh": "配置建议"
},
"features": {
"en": ["Security audit", "Best practices", "Optimization", "Reports"],
"fr": ["Audit sécurité", "Bonnes pratiques", "Optimisation", "Rapports"],
"de": ["Sicherheits-Audit", "Best Practices", "Optimierung", "Berichte"],
"zh": ["安全审计", "最佳实践", "优化", "报告"]
}
},
"reporter": {
"name": "Reporter", "icon": "📊", "category": "System",
"description": {
"en": "System reporting and analytics",
"fr": "Rapports et analytiques système",
"de": "Systemberichterstattung und -analyse",
"zh": "系统报告和分析"
},
"features": {
"en": ["Reports", "Scheduling", "Export", "Email"],
"fr": ["Rapports", "Planification", "Export", "Email"],
"de": ["Berichte", "Planung", "Export", "E-Mail"],
"zh": ["报告", "计划", "导出", "邮件"]
}
},
"mirror": {
"name": "Mirror Manager", "icon": "🪞", "category": "System",
"description": {
"en": "APT mirror management",
"fr": "Gestion miroir APT",
"de": "APT-Mirror-Verwaltung",
"zh": "APT镜像管理"
},
"features": {
"en": ["Mirror sync", "Bandwidth", "Scheduling", "Cache"],
"fr": ["Sync miroir", "Bande passante", "Planification", "Cache"],
"de": ["Mirror-Sync", "Bandbreite", "Planung", "Cache"],
"zh": ["镜像同步", "带宽", "计划", "缓存"]
}
},
"cloner": {
"name": "System Cloner", "icon": "📀", "category": "System",
"description": {
"en": "System image cloning",
"fr": "Clonage image système",
"de": "System-Image-Klonen",
"zh": "系统镜像克隆"
},
"features": {
"en": ["Disk imaging", "Clone to USB", "Restore", "Compression"],
"fr": ["Image disque", "Clone USB", "Restauration", "Compression"],
"de": ["Disk-Imaging", "Clone auf USB", "Wiederherstellung", "Kompression"],
"zh": ["磁盘镜像", "克隆到USB", "恢复", "压缩"]
}
},
"eye-remote": {
"name": "Eye Remote", "icon": "👁️", "category": "System",
"description": {
"en": "Remote management interface",
"fr": "Interface de gestion à distance",
"de": "Remote-Verwaltungsoberfläche",
"zh": "远程管理界面"
},
"features": {
"en": ["USB gadget", "Serial console", "Boot media", "Recovery"],
"fr": ["Gadget USB", "Console série", "Média boot", "Récupération"],
"de": ["USB-Gadget", "Serielle Konsole", "Boot-Medium", "Wiederherstellung"],
"zh": ["USB设备", "串口控制台", "启动媒体", "恢复"]
}
},
"rtty": {
"name": "RTTY Console", "icon": "🖥️", "category": "System",
"description": {
"en": "Remote terminal access",
"fr": "Accès terminal distant",
"de": "Remote-Terminal-Zugriff",
"zh": "远程终端访问"
},
"features": {
"en": ["Web terminal", "SSH", "File transfer", "Recording"],
"fr": ["Terminal web", "SSH", "Transfert fichiers", "Enregistrement"],
"de": ["Web-Terminal", "SSH", "Dateiübertragung", "Aufnahme"],
"zh": ["Web终端", "SSH", "文件传输", "录制"]
}
},
# =========================================================================
# ADDED 2026-06-26 (#742) — modules discovered but previously undocumented
# =========================================================================
# authelia removed 2026-07 — secubox-authelia SSO IdP decommissioned (#64768978,
# package removed; nginx gate is now a permissive no-op). Do not re-add.
"avatar": {
"name": "Avatar Manager", "icon": "🧑", "category": "Apps",
"description": {
"en": "Identity and avatar manager",
"fr": "Gestionnaire d'identité et d'avatar",
"de": "Identitäts- und Avatar-Manager",
"zh": "身份与头像管理器"
},
"features": {
"en": ["Identity profiles", "Avatar generation", "Per-user assets"],
"fr": ["Profils d'identité", "Génération d'avatar", "Ressources par utilisateur"],
"de": ["Identitätsprofile", "Avatar-Generierung", "Pro-Benutzer-Assets"],
"zh": ["身份档案", "头像生成", "按用户资源"]
}
},
"certs": {
"name": "Certificate Manager", "icon": "📜", "category": "Security",
"description": {
"en": "ACME / TLS certificate manager",
"fr": "Gestionnaire de certificats ACME / TLS",
"de": "ACME-/TLS-Zertifikatsverwaltung",
"zh": "ACME / TLS 证书管理器"
},
"features": {
"en": ["ACME issuance", "Renewal", "SAN / wildcard", "Inventory"],
"fr": ["Émission ACME", "Renouvellement", "SAN / wildcard", "Inventaire"],
"de": ["ACME-Ausstellung", "Erneuerung", "SAN / Wildcard", "Inventar"],
"zh": ["ACME 签发", "续期", "SAN / 通配符", "清单"]
}
},
"fmrelay": {
"name": "FM Relay", "icon": "📻", "category": "Media",
"description": {
"en": "rtl_fm to Icecast MP3 mount with live RDS metadata",
"fr": "rtl_fm vers mount MP3 Icecast avec métadonnées RDS live",
"de": "rtl_fm zu Icecast-MP3-Mount mit Live-RDS-Metadaten",
"zh": "rtl_fm 转 Icecast MP3 挂载,含实时 RDS 元数据"
},
"features": {
"en": ["SDR FM capture", "Icecast stream", "RDS metadata", "Station presets"],
"fr": ["Capture FM SDR", "Flux Icecast", "Métadonnées RDS", "Préréglages stations"],
"de": ["SDR-FM-Empfang", "Icecast-Stream", "RDS-Metadaten", "Senderspeicher"],
"zh": ["SDR FM 采集", "Icecast 流", "RDS 元数据", "电台预设"]
}
},
"grafana": {
"name": "Grafana", "icon": "📊", "category": "Monitoring",
"description": {
"en": "Security metrics dashboards",
"fr": "Tableaux de bord métriques de sécurité",
"de": "Sicherheitsmetrik-Dashboards",
"zh": "安全指标仪表板"
},
"features": {
"en": ["Time-series dashboards", "Alerting", "Data sources", "Panels"],
"fr": ["Tableaux time-series", "Alertes", "Sources de données", "Panneaux"],
"de": ["Zeitreihen-Dashboards", "Alarmierung", "Datenquellen", "Panels"],
"zh": ["时序仪表板", "告警", "数据源", "面板"]
}
},
"health": {
"name": "Hub Health", "icon": "❤️", "category": "Dashboard",
"description": {
"en": "Service health and status board",
"fr": "Tableau santé et état des services",
"de": "Service-Gesundheits- und Statusübersicht",
"zh": "服务健康与状态面板"
},
"features": {
"en": ["Service health", "Socket checks", "Uptime", "Degradation alerts"],
"fr": ["Santé services", "Vérifs socket", "Uptime", "Alertes dégradation"],
"de": ["Service-Gesundheit", "Socket-Prüfungen", "Uptime", "Degradationswarnungen"],
"zh": ["服务健康", "套接字检查", "运行时间", "降级告警"]
}
},
"ksm": {
"name": "KSM Optimizer", "icon": "🧠", "category": "System",
"description": {
"en": "Kernel same-page memory optimization dashboard",
"fr": "Tableau d'optimisation mémoire KSM (kernel same-page)",
"de": "KSM-Speicheroptimierungs-Dashboard (Kernel Same-Page)",
"zh": "内核同页内存KSM优化仪表板"
},
"features": {
"en": ["Page sharing stats", "Memory saved", "Tuning", "Per-VM view"],
"fr": ["Stats partage de pages", "Mémoire économisée", "Réglage", "Vue par VM"],
"de": ["Page-Sharing-Statistik", "Gesparter Speicher", "Tuning", "Pro-VM-Ansicht"],
"zh": ["页共享统计", "节省内存", "调优", "按虚拟机视图"]
}
},
"magicmirror": {
"name": "MagicMirror", "icon": "🪞", "category": "Apps",
"description": {
"en": "MagicMirror smart-display management",
"fr": "Gestion de l'affichage intelligent MagicMirror",
"de": "MagicMirror-Smart-Display-Verwaltung",
"zh": "MagicMirror 智能显示管理"
},
"features": {
"en": ["Module layout", "Widgets", "Themes", "Remote control"],
"fr": ["Disposition modules", "Widgets", "Thèmes", "Contrôle distant"],
"de": ["Modul-Layout", "Widgets", "Themes", "Fernsteuerung"],
"zh": ["模块布局", "小部件", "主题", "远程控制"]
}
},
"metabolizer": {
"name": "Metabolizer", "icon": "🧪", "category": "Monitoring",
"description": {
"en": "Log processor and analyzer",
"fr": "Processeur et analyseur de logs",
"de": "Log-Prozessor und -Analysator",
"zh": "日志处理与分析器"
},
"features": {
"en": ["Log parsing", "Pattern analysis", "Pipelines", "Enrichment"],
"fr": ["Parsing de logs", "Analyse de motifs", "Pipelines", "Enrichissement"],
"de": ["Log-Parsing", "Musteranalyse", "Pipelines", "Anreicherung"],
"zh": ["日志解析", "模式分析", "管道", "丰富化"]
}
},
"metoblizer": {
"name": "Metoblizer", "icon": "🗄️", "category": "Monitoring",
"description": {
"en": "Centralized log aggregator",
"fr": "Agrégateur de logs centralisé",
"de": "Zentralisierter Log-Aggregator",
"zh": "集中式日志聚合器"
},
"features": {
"en": ["Log collection", "Central store", "Search", "Retention"],
"fr": ["Collecte de logs", "Stockage central", "Recherche", "Rétention"],
"de": ["Log-Sammlung", "Zentraler Speicher", "Suche", "Aufbewahrung"],
"zh": ["日志收集", "中央存储", "搜索", "保留"]
}
},
"metacatalog": {
"name": "Metacatalog", "icon": "📇", "category": "Services",
"description": {
"en": "Service catalog and registry",
"fr": "Catalogue et registre de services",
"de": "Servicekatalog und -registry",
"zh": "服务目录与注册表"
},
"features": {
"en": ["Service registry", "Discovery", "Metadata", "Catalog UI"],
"fr": ["Registre services", "Découverte", "Métadonnées", "UI catalogue"],
"de": ["Service-Registry", "Discovery", "Metadaten", "Katalog-UI"],
"zh": ["服务注册", "发现", "元数据", "目录界面"]
}
},
"picobrew": {
"name": "PicoBrew", "icon": "🍺", "category": "IoT",
"description": {
"en": "Homebrew / fermentation controller",
"fr": "Contrôleur de brassage / fermentation",
"de": "Homebrew-/Fermentationssteuerung",
"zh": "自酿 / 发酵控制器"
},
"features": {
"en": ["Temperature control", "Recipes", "Fermentation log", "Sensors"],
"fr": ["Contrôle température", "Recettes", "Journal fermentation", "Capteurs"],
"de": ["Temperatursteuerung", "Rezepte", "Fermentationslog", "Sensoren"],
"zh": ["温度控制", "配方", "发酵日志", "传感器"]
}
},
"podcaster": {
"name": "Podcaster", "icon": "🎙️", "category": "Media",
"description": {
"en": "Modern podcast manager",
"fr": "Gestionnaire de podcasts moderne",
"de": "Moderner Podcast-Manager",
"zh": "现代播客管理器"
},
"features": {
"en": ["Feed management", "Episodes", "Transcoding", "RSS publish"],
"fr": ["Gestion des flux", "Épisodes", "Transcodage", "Publication RSS"],
"de": ["Feed-Verwaltung", "Episoden", "Transcodierung", "RSS-Veröffentlichung"],
"zh": ["订阅源管理", "剧集", "转码", "RSS 发布"]
}
},
"redroid": {
"name": "ReDroid", "icon": "🤖", "category": "Apps",
"description": {
"en": "Android-in-container runtime",
"fr": "Runtime Android en conteneur",
"de": "Android-im-Container-Laufzeit",
"zh": "容器中的 Android 运行时"
},
"features": {
"en": ["Android container", "ADB", "App install", "Screen view"],
"fr": ["Conteneur Android", "ADB", "Installation d'apps", "Vue écran"],
"de": ["Android-Container", "ADB", "App-Installation", "Bildschirmansicht"],
"zh": ["Android 容器", "ADB", "应用安装", "屏幕查看"]
}
},
"rezapp": {
"name": "RezApp", "icon": "📦", "category": "Services",
"description": {
"en": "Application deployment and management",
"fr": "Déploiement et gestion d'applications",
"de": "Anwendungsbereitstellung und -verwaltung",
"zh": "应用部署与管理"
},
"features": {
"en": ["App deploy", "Lifecycle", "Config", "Status"],
"fr": ["Déploiement d'apps", "Cycle de vie", "Config", "État"],
"de": ["App-Deploy", "Lebenszyklus", "Konfiguration", "Status"],
"zh": ["应用部署", "生命周期", "配置", "状态"]
}
},
"rustdesk": {
"name": "RustDesk", "icon": "🖥️", "category": "Access",
"description": {
"en": "Self-hosted remote desktop relay",
"fr": "Relais de bureau distant auto-hébergé",
"de": "Selbstgehostetes Remote-Desktop-Relay",
"zh": "自托管远程桌面中继"
},
"features": {
"en": ["Relay server", "ID server", "Sessions", "Self-hosted"],
"fr": ["Serveur relais", "Serveur d'ID", "Sessions", "Auto-hébergé"],
"de": ["Relay-Server", "ID-Server", "Sitzungen", "Selbstgehostet"],
"zh": ["中继服务器", "ID 服务器", "会话", "自托管"]
}
},
"saas-relay": {
"name": "SaaS Relay", "icon": "🔌", "category": "Network",
"description": {
"en": "SaaS / API proxy relay",
"fr": "Relais proxy SaaS / API",
"de": "SaaS-/API-Proxy-Relay",
"zh": "SaaS / API 代理中继"
},
"features": {
"en": ["API proxy", "Rate limiting", "Routing", "Credentials vault"],
"fr": ["Proxy API", "Limitation de débit", "Routage", "Coffre identifiants"],
"de": ["API-Proxy", "Ratenbegrenzung", "Routing", "Anmeldedaten-Tresor"],
"zh": ["API 代理", "限流", "路由", "凭据保险库"]
}
},
"security-posture": {
"name": "Security Posture", "icon": "🎯", "category": "Security",
"description": {
"en": "Honest board-truthful security scorecard",
"fr": "Carte de score de sécurité honnête (vérité board)",
"de": "Ehrliche, board-wahrheitsgemäße Sicherheits-Scorecard",
"zh": "诚实的、基于真实状态的安全评分卡"
},
"features": {
"en": ["Scorecard", "Control checks", "Gaps", "Trend"],
"fr": ["Scorecard", "Vérifs de contrôles", "Écarts", "Tendance"],
"de": ["Scorecard", "Kontrollprüfungen", "Lücken", "Trend"],
"zh": ["评分卡", "控制检查", "差距", "趋势"]
}
},
"sentinelle": {
"name": "SENTINELLE-GSM", "icon": "📡", "category": "Security",
"description": {
"en": "Passive rogue-BTS sensor (MIND layer)",
"fr": "Capteur passif de fausse BTS (couche MIND)",
"de": "Passiver Rogue-BTS-Sensor (MIND-Schicht)",
"zh": "被动式伪基站传感器MIND 层)"
},
"features": {
"en": ["IMSI-catcher detection", "Cell survey", "Anomaly alerts", "Passive RF"],
"fr": ["Détection IMSI-catcher", "Relevé cellules", "Alertes anomalies", "RF passif"],
"de": ["IMSI-Catcher-Erkennung", "Zell-Survey", "Anomalie-Warnungen", "Passives HF"],
"zh": ["IMSI 捕集器检测", "基站勘测", "异常告警", "被动射频"]
}
},
"threatmesh": {
"name": "ThreatMesh", "icon": "🕸️", "category": "Security",
"description": {
"en": "Sovereign threat-intel mesh (CrowdSec CAPI replacement)",
"fr": "Mesh de threat-intel souverain (remplace CrowdSec CAPI)",
"de": "Souveränes Threat-Intel-Mesh (CrowdSec-CAPI-Ersatz)",
"zh": "主权威胁情报网格(替代 CrowdSec CAPI"
},
"features": {
"en": ["P2P intel sharing", "Sovereign feed", "Confidence gating", "Blocklist sync"],
"fr": ["Partage intel P2P", "Feed souverain", "Filtrage par confiance", "Sync blocklist"],
"de": ["P2P-Intel-Sharing", "Souveräner Feed", "Vertrauens-Gating", "Blocklist-Sync"],
"zh": ["P2P 情报共享", "主权源", "置信度门控", "黑名单同步"]
}
},
"toolbox": {
"name": "ToolBoX (Cabine)", "icon": "🧰", "category": "Security",
"description": {
"en": "Captive AP + consented MITM privacy analyzer",
"fr": "AP captif + analyseur MITM de vie privée consenti",
"de": "Captive-AP + einvernehmlicher MITM-Datenschutz-Analysator",
"zh": "强制门户 AP + 知情同意的 MITM 隐私分析器"
},
"features": {
"en": ["Captive portal", "R0-R4 levels", "Tracker exposure", "Tor egress"],
"fr": ["Portail captif", "Niveaux R0-R4", "Exposition trackers", "Sortie Tor"],
"de": ["Captive Portal", "R0-R4-Stufen", "Tracker-Aufdeckung", "Tor-Ausgang"],
"zh": ["强制门户", "R0-R4 等级", "追踪器暴露", "Tor 出口"]
}
},
"vm": {
"name": "VM Manager", "icon": "💻", "category": "System",
"description": {
"en": "Virtualization management",
"fr": "Gestion de la virtualisation",
"de": "Virtualisierungsverwaltung",
"zh": "虚拟化管理"
},
"features": {
"en": ["VM lifecycle", "Console", "Snapshots", "Resource limits"],
"fr": ["Cycle de vie VM", "Console", "Snapshots", "Limites ressources"],
"de": ["VM-Lebenszyklus", "Konsole", "Snapshots", "Ressourcenlimits"],
"zh": ["虚拟机生命周期", "控制台", "快照", "资源限制"]
}
},
"yacy": {
"name": "YaCy", "icon": "🔎", "category": "Network",
"description": {
"en": "Peer-to-peer search engine",
"fr": "Moteur de recherche pair-à-pair",
"de": "Peer-to-Peer-Suchmaschine",
"zh": "点对点搜索引擎"
},
"features": {
"en": ["P2P index", "Crawler", "Private search", "Federation"],
"fr": ["Index P2P", "Crawler", "Recherche privée", "Fédération"],
"de": ["P2P-Index", "Crawler", "Private Suche", "Föderation"],
"zh": ["P2P 索引", "爬虫", "私密搜索", "联邦"]
}
},
}
LANGUAGES = {
"en": {"name": "English", "flag": "🇬🇧"},
"fr": {"name": "Français", "flag": "🇫🇷"},
"de": {"name": "Deutsch", "flag": "🇩🇪"},
"zh": {"name": "中文", "flag": "🇨🇳"},
}
def check_screenshot_exists(module_id: str, screenshots_dir: Path) -> bool:
"""Check if screenshot exists for module."""
return (screenshots_dir / f"{module_id}.png").exists()
def generate_package_readme(module_id: str, module_info: dict, lang: str = "en", include_screenshot: bool = True) -> str:
"""Generate README for a package."""
name = module_info["name"]
icon = module_info["icon"]
category = module_info["category"]
desc = module_info["description"].get(lang, module_info["description"]["en"])
features = module_info["features"].get(lang, module_info["features"]["en"])
labels = {
"en": {"features": "Features", "install": "Installation", "config": "Configuration", "api": "API Endpoints", "screenshot": "Screenshot", "license": "License"},
"fr": {"features": "Fonctionnalités", "install": "Installation", "config": "Configuration", "api": "Points d'accès API", "screenshot": "Capture d'écran", "license": "Licence"},
"de": {"features": "Funktionen", "install": "Installation", "config": "Konfiguration", "api": "API-Endpunkte", "screenshot": "Screenshot", "license": "Lizenz"},
"zh": {"features": "功能", "install": "安装", "config": "配置", "api": "API端点", "screenshot": "截图", "license": "许可证"},
}
L = labels.get(lang, labels["en"])
readme = f"""# {icon} {name}
{desc}
**Category:** {category}
"""
if include_screenshot:
readme += f"""## {L['screenshot']}
![{name}](../../docs/screenshots/vm/{module_id}.png)
"""
readme += f"""## {L['features']}
"""
for feature in features:
readme += f"- {feature}\n"
readme += f"""
## {L['install']}
```bash
# Add SecuBox repository
curl -fsSL https://apt.secubox.in/install.sh | sudo bash
# Install package
sudo apt install secubox-{module_id}
```
## {L['config']}
Configuration file: `/etc/secubox/{module_id}.toml`
## {L['api']}
- `GET /api/v1/{module_id}/status` - Module status
- `GET /api/v1/{module_id}/health` - Health check
## {L['license']}
LicenseRef-CMSD-1.0 (Source-Disclosed License) — CyberMind © 2024-2026.
See [LICENCE-CMSD-1.0.md](../../LICENCE-CMSD-1.0.md).
"""
return readme
def generate_wiki_page(lang: str, include_screenshots: bool = True, screenshots_dir: Optional[Path] = None) -> str:
"""Generate wiki page for a language."""
labels = {
"en": {
"title": "SecuBox Modules",
"subtitle": "Complete module documentation",
"overview": "Overview",
"modules": "Modules",
"category": "Category",
"description": "Description",
"screenshot": "Screenshot",
"total": "Total modules",
"features": "Features",
},
"fr": {
"title": "Modules SecuBox",
"subtitle": "Documentation complète des modules",
"overview": "Aperçu",
"modules": "Modules",
"category": "Catégorie",
"description": "Description",
"screenshot": "Capture d'écran",
"total": "Total des modules",
"features": "Fonctionnalités",
},
"de": {
"title": "SecuBox Module",
"subtitle": "Vollständige Moduldokumentation",
"overview": "Übersicht",
"modules": "Module",
"category": "Kategorie",
"description": "Beschreibung",
"screenshot": "Screenshot",
"total": "Module insgesamt",
"features": "Funktionen",
},
"zh": {
"title": "SecuBox模块",
"subtitle": "完整的模块文档",
"overview": "概述",
"modules": "模块",
"category": "类别",
"description": "描述",
"screenshot": "截图",
"total": "模块总数",
"features": "功能",
},
}
L = labels.get(lang, labels["en"])
# Language selector
lang_links = " | ".join([f"[{LANGUAGES[l]['flag']} {LANGUAGES[l]['name']}](MODULES-{l.upper()}.md)" for l in LANGUAGES])
wiki = f"""# {L['title']}
*{L['subtitle']}*
**{L['total']}:** {len(MODULES)}
{lang_links}
---
## {L['overview']}
| {L['modules']} | {L['category']} | {L['description']} |
|--------|----------|-------------|
"""
for mid, info in MODULES.items():
desc = info["description"].get(lang, info["description"]["en"])
wiki += f"| {info['icon']} **{info['name']}** | {info['category']} | {desc} |\n"
wiki += f"""
---
## {L['modules']}
"""
# Group by category
by_category = {}
for mid, info in MODULES.items():
cat = info["category"]
if cat not in by_category:
by_category[cat] = []
by_category[cat].append((mid, info))
for category, modules_list in sorted(by_category.items()):
wiki += f"### {category}\n\n"
for mid, info in modules_list:
desc = info["description"].get(lang, info["description"]["en"])
features = info["features"].get(lang, info["features"]["en"])
wiki += f"""#### {info['icon']} {info['name']}
{desc}
**{L['features']}:** {', '.join(features)}
"""
# Add screenshot if exists. Use an ABSOLUTE raw.githubusercontent URL
# (not a relative path): the GitHub wiki is a SEPARATE repo, so a
# relative screenshots/vm/ path would 404 there. This matches the
# convention already used by the published wiki/ pages.
if include_screenshots:
if screenshots_dir and check_screenshot_exists(mid, screenshots_dir):
wiki += (f"![{info['name']}]"
f"({SCREENSHOT_RAW_BASE}/{mid}.png)\n\n")
wiki += "---\n\n"
return wiki
def generate_category_index(lang: str = "en") -> str:
"""Generate category index page."""
labels = {
"en": {"title": "Module Categories", "count": "modules"},
"fr": {"title": "Catégories de Modules", "count": "modules"},
"de": {"title": "Modul-Kategorien", "count": "Module"},
"zh": {"title": "模块分类", "count": "个模块"},
}
L = labels.get(lang, labels["en"])
# Count by category
categories = {}
for info in MODULES.values():
cat = info["category"]
if cat not in categories:
categories[cat] = 0
categories[cat] += 1
md = f"# {L['title']}\n\n"
for cat, count in sorted(categories.items(), key=lambda x: -x[1]):
md += f"- **{cat}**: {count} {L['count']}\n"
return md
def main():
parser = argparse.ArgumentParser(description="Generate SecuBox documentation")
parser.add_argument("--include-screenshots", action="store_true", help="Include screenshots in docs")
parser.add_argument("--lang", help="Generate for specific language only")
parser.add_argument("--readme-only", action="store_true", help="Generate package READMEs only")
parser.add_argument("--wiki-only", action="store_true", help="Generate wiki pages only")
args = parser.parse_args()
base_dir = Path(__file__).parent.parent
packages_dir = base_dir / "packages"
docs_dir = base_dir / "docs"
wiki_dir = docs_dir / "wiki"
screenshots_dir = docs_dir / "screenshots" / "vm"
wiki_dir.mkdir(parents=True, exist_ok=True)
languages = [args.lang] if args.lang else list(LANGUAGES.keys())
if not args.wiki_only:
print(f"Generating package READMEs for {len(MODULES)} modules...")
created = 0
for module_id, module_info in MODULES.items():
pkg_dir = packages_dir / f"secubox-{module_id}"
if pkg_dir.exists():
readme_path = pkg_dir / "README.md"
has_screenshot = check_screenshot_exists(module_id, screenshots_dir)
readme = generate_package_readme(
module_id, module_info, "en",
include_screenshot=args.include_screenshots and has_screenshot
)
readme_path.write_text(readme)
created += 1
print(f" Created {created} READMEs")
if not args.readme_only:
print(f"\nGenerating multilingual wiki pages ({', '.join(languages)})...")
for lang in languages:
wiki_path = wiki_dir / f"MODULES-{lang.upper()}.md"
wiki = generate_wiki_page(
lang,
include_screenshots=args.include_screenshots,
screenshots_dir=screenshots_dir
)
wiki_path.write_text(wiki)
print(f" Created {wiki_path.name}")
# Category index
for lang in languages:
index_path = wiki_dir / f"CATEGORIES-{lang.upper()}.md"
index = generate_category_index(lang)
index_path.write_text(index)
print(f" Created {index_path.name}")
print(f"\nDone! Total modules: {len(MODULES)}")
if __name__ == "__main__":
main()