Repository navigation
Conversation
Hintay
force-pushed
the
feat/plugin-system
branch
5 times, most recently
from
October 5, 2026 11:54
9b2b2b5 to
5cbde51
Compare
0xJacky
force-pushed
the
dev
branch
2 times, most recently
from
October 5, 2026 12:57
bfe541e to
317ee7c
Compare
Hintay
force-pushed
the
feat/plugin-system
branch
2 times, most recently
from
October 7, 2026 12:20
ab393f7 to
e2302f7
Compare
Contributor
|
It's very nice and interesting! |
Hintay
force-pushed
the
feat/plugin-system
branch
3 times, most recently
from
October 15, 2026 08:27
7b07d0f to
4cd8345
Compare
Hintay
force-pushed
the
feat/plugin-system
branch
2 times, most recently
from
October 17, 2026 13:28
8afa056 to
4585d48
Compare
…e through pack, inspect and init
… issue submission in the catalog guide
…ckage shared with the developer portal
Hintay
force-pushed
the
feat/plugin-system
branch
from
October 19, 2026 14:19
a930264 to
3eed701
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Nginx UI grew by putting every feature into one binary. Two of them dominate its size and its memory: the DNS providers of lego, which every installation carries even though most issue only HTTP-01 certificates, and the Bleve index behind advanced log indexing, which starts with the host and keeps hundreds of megabytes resident. Features for one vendor or one use case, such as another DNS provider, a notification channel or a backup destination, could only be added by changing the core.
This PR adds a plugin system. A plugin is a signed package that Nginx UI installs from a marketplace, from an uploaded file or from an offline directory, then runs as a separate process with the permissions the user approved. The two heavy features above become the first official plugins, so the host only carries them on the nodes that use them.
What changes for users
-tags=unembed, darwin/arm64), the host is 104 MB with 181 modules, compared with 159 MB and 326 modules ondev. The DNS-01 plugin (59 MB) is installed only where a certificate needs it.Plugins page
System > Plugins has three tabs.
dark_urlfor each image, which is shown in the dark theme, and the light image stands in when there is none.Plugin settings in Preferences > Plugins turn the plugin system and the marketplace on or off, set the default sync policy, allow community plugins, turn automatic updates on, list trusted publishers and set resource limits.
Trust and permissions
plugin.sumssigned with minisign. A release key of the project makes itofficial, a partner key the project vouches for makes itverified, the key of the catalog entry or of a trusted publisher makes itcommunity, anything else isunsigned. Unsigned packages install only in developer mode, community packages only when the operator allows them and after a confirmation.What plugins can provide
Capabilities are features Nginx UI hands to a plugin:
dns01,http(pages and API behind Nginx UI's authentication, including WebSockets),notify,probe(site health checks),mcp(tools for the MCP server),storage(backup destinations),cert.deploy,security.blocklist,upstream.discoveryandlog.sink(nginx access log lines as nginx writes them). A plugin can also add pages, panels, form fields and table columns to the interface through named extension slots, and ship nginx configuration templates and translations without any process at all.The process talks to the host over JSON-RPC on its standard input and output, and may serve the same calls over gRPC on a unix socket (a named pipe on Windows). Through the host API it can use a key-value store, its settings, notifications, scheduled tasks, stored credentials and the nginx configuration, sites and certificates of the node, each behind a permission.
Certificates
Log analytics
Advanced indexing is now the official log analytics plugin. The structured search, the dashboard and the visitor map look and work as before, and the plugin keeps reading the log files of the node directly. Searching the configuration no longer needs a full text index: the host matches configurations with a lightweight in-memory search. A second official plugin, Log Analytics (Preview), built on Tantivy, is offered on the beta channel; the two cannot be enabled together.
For plugin authors
docs/plugin(English, Simplified and Traditional Chinese): overview, quick start, manifest, protocol, lifecycle, permissions, host API, pages and slots, every capability, packaging, signing, catalogs and versioning.nginx-ui plugin initscaffolds a Go or Rust plugin;lintandconformancecheck a plugin before publishing;pack,signandcertifybuild and sign packages;fetchandmarketplace listwork with catalogs;install,enable,disable,uninstallandinspectmanage a node without the web interface.nginxuiorganization:plugin-sdk-go,plugin-sdk-rustand@nginxui/plugin-sdkfor the browser bundle, built from the machine readable contract inplugin-spec.Before merging
Screenshots
Installed plugins
Plugin details: conflicts, trust, permissions and network hosts
Marketplace
Marketplace entry, light and dark: the screenshots follow the theme
Marketplace sources
Plugins across the nodes of a cluster
Plugin preferences, and the trusted publishers whose keys make a package community
Issuing a DNS-01 certificate with the plugin, and a DNS credential rendered from the provider form
Log analytics plugin: dashboard and structured search
DNS-01 for a child node on the main node: HTTPS card, certificate list, certificate page and deletion
Tested
-raceduring development, including the plugin manager, supervisor, transports, signatures, marketplace, cluster sync, capabilities, the log analytics handoff and the certificate delegation.nginx-ui plugin conformancepasses for the Go and Rust SDKs over both transports.bun run typecheckpass for the changed frontend files, and the documentation site builds.