Skip to content

Plugin System ​

Shield CLI extends protocol support through plugins. Each plugin is an independent binary, installed on demand — zero bloat to the main program.

Design Philosophy ​

Shield CLI has built-in support for SSH, RDP, VNC, HTTP, and other common protocols. For databases, message queues, and other services that need a dedicated Web management interface, we use plugins:

  • Install on demand — unused protocols don't increase the main binary size
  • Independent updates — plugin versions are independent of the main program
  • Open extension — anyone can develop and publish Shield plugins

How It Works ​

shield mysql 127.0.0.1:3306 --db-user root
    ↓
Shield looks up the installed mysql plugin
    ↓
Starts the plugin process (independent binary)
    ↓
Plugin launches a local Web database management UI
    ↓
Shield exposes the Web UI to the internet via encrypted tunnel
    ↓
User accesses the full database management platform in the browser

From the Shield server's perspective, the plugin's Web UI is just a regular HTTP application — no server-side adaptation needed.

Available Plugins ​

PluginProtocolsDefault PortDescription
mysqlmysql, mariadb3306MySQL / MariaDB Web management client
postgrespostgres, pg5432PostgreSQL Web management client (coming soon)
sqlserversqlserver, mssql1433SQL Server Web management client (coming soon)

Quick Start ​

bash
# Install plugin
shield plugin add mysql

# Use (interactive credential input)
shield mysql 127.0.0.1:3306

# Use (pass credentials via flags)
shield mysql 127.0.0.1:3306 --db-user root --db-pass mypassword --db-name mydb

After connecting, the browser automatically opens the Web database management interface.

Managing Plugins ​

bash
# List installed plugins
shield plugin list

# Install a plugin
shield plugin add <name>

# Install from a local binary (for development)
shield plugin add <name> --from ./path/to/binary

# Remove a plugin
shield plugin remove <name>

Plugin Communication Protocol ​

Shield communicates with plugins via stdin/stdout JSON — the protocol is extremely simple:

Start Request (Shield to Plugin) ​

json
{
  "action": "start",
  "config": {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "root",
    "pass": "password",
    "database": "mydb"
  }
}

Ready Response (Plugin to Shield) ​

json
{
  "status": "ready",
  "web_port": 19876,
  "name": "MySQL Web Client",
  "version": "0.1.0"
}

Stop Request (Shield to Plugin) ​

json
{"action": "stop"}

Plugin Storage Location ​

PlatformPath
macOS / Linux~/.shield-cli/plugins/
Windows%LOCALAPPDATA%\ShieldCLI\plugins\
~/.shield-cli/plugins/
├── registry.json              # Installed plugins index
├── shield-plugin-mysql        # MySQL plugin binary
└── shield-plugin-postgres     # PostgreSQL plugin binary

Developing Custom Plugins ​

Want to develop a new plugin for Shield? See the Plugin Development Guide.

Next Steps ​