Skip to content

Plugins

Overview

StarkOne ships with a core feature set and extends via plugins. Plugins are installed on demand. When a plugin is disabled, its API endpoints return 403 Plugin Not Enabled and its sidebar entries are hidden.

Plugin state is stored in the SQLite database. The panel itself does not need to restart when a plugin is enabled or disabled - the middleware check is evaluated per-request.

Listing Plugins

GET /api/plugins
Authorization: Bearer <token>   # superuser required

Response:

{
  "data": [
    {
      "id": "postgresql",
      "name": "PostgreSQL",
      "enabled": true,
      "description": "PostgreSQL database management"
    },
    ...
  ]
}

Enabling / Disabling a Plugin

# Enable
POST /api/plugins/postgresql/enable

# Disable
POST /api/plugins/postgresql/disable

Both return { "data": { "enabled": true } }.

Available Plugins

Plugin ID Name Description
postgresql PostgreSQL PostgreSQL database management + pgAdmin
mongodb MongoDB MongoDB database management
proxysql ProxySQL MySQL load balancer / read-write split
haproxy HAProxy Layer 4/7 load balancer
dnslb DNS Load Balancer dnsdist-based DNS load balancing
uptime Uptime Monitor HTTP/ICMP uptime monitoring
init-script Init Script Record and replay panel actions as init scripts
sharelink ShareLink Secure file sharing via expiring links
m365-backup M365 Backup Microsoft 365 mailbox backup to S3
pm2 PM2 Node.js process manager integration
nginx-acl Nginx ACL Advanced nginx access control lists
netprobe NetProbe Network debugging toolkit
logvault LogVault Centralised log search and storage
advanced-network Advanced Network BGP, GRE/VXLAN tunnels, Keepalived VRRP
wireguard-vpn VPN Manager WireGuard VPN + Headscale + IPSec
powerdns PowerDNS PowerDNS authoritative nameserver
mail-server Mail Server Integrated mail server (Postfix/Dovecot)
multi-panel Multi-Panel Manage multiple StarkOne servers from one UI

Plugin Architecture

Each plugin's backend is conditionally activated via the middleware.RequirePlugin(db, "plugin-id") middleware in the route registration. If the plugin is not enabled in the database, the middleware short-circuits the request with:

{
  "error": {
    "code": "plugin_not_enabled",
    "message": "Plugin 'postgresql' is not enabled"
  }
}

Plugins that install external services (PostgreSQL, MongoDB, HAProxy) manage their own install/uninstall lifecycle through dedicated API endpoints.