webdev-console-plugins
Official plugins for NKS WebDev Console: 16 .NET 9 projects covering web servers, PHP, databases, certificates and deployment. Each is released on its own and installed by the app at runtime.
webdev-console-plugins is the repository of official plugins for NKS WebDev Console, a local PHP development environment. Every service the application starts or controls has its own project here. There are 16 projects, and each is built, versioned and released separately.
An Apache fix does not wait for a new app release
When one service changes behaviour, say Apache needs more time on a busy start or the Cloudflare API starts answering with error 429, an application shipped as one bundle needs a new installer for three operating systems. Here it is enough to bump the version in the affected plugin's plugin.json. After a push, GitHub Actions detects which manifests changed, builds only those plugins, packs them into a ZIP and releases them under a tag such as nks.wdc.apache-v1.0.23.
Since 23 April 2026, 85 releases of individual plugins have gone out this way. On 2 November alone Apache received four fixes in a row (1.0.20 to 1.0.23), PostgreSQL two, MySQL and Cloudflare one each, and the remaining twelve plugins stayed unchanged. The WebDev Console daemon learns about new versions from the catalogue service, which adds a SHA-256 checksum to every ZIP.
What each plugin takes care of
- Web servers. Apache 2.4 generates virtual hosts and validates the configuration before starting. Nginx generates server blocks and validates its configuration; Caddy writes the Caddyfile.
- PHP, Composer and Node.js. The PHP plugin keeps versions 5.6 to 8.4 side by side, through
php-cgi.exeon Windows and PHP-FPM on Linux and macOS, and assigns each site its version, extensions and Xdebug. Composer runs under the PHP version of the site. The Node.js plugin runsnpm start,npm run devor a custom command for a site and waits until the server opens its port. - Databases. MySQL 8 and MariaDB create their data directory and a configuration from a template on first start, and protect the root password with DPAPI on Windows. MySQL also has a panel for creating, dropping and exporting databases. PostgreSQL works with
initdb,pg_ctlandpg_isready. - Redis and Mailpit. Redis runs without persistence to disk by default and shuts down with
SHUTDOWN NOSAVE. Mailpit catches outgoing mail from sites on port 1025 and shows it in a web interface on port 8025, so sign-up or password reset flows can be tried without anything actually being sent. - Certificates and hosts. The SSL plugin uses mkcert to install a local certificate authority once and then issues certificates for individual domains, including wildcard names such as
*.myapp.loc. The hosts plugin writes only inside its own delimited block and asks for administrator rights only when the file actually changes. It keeps five backups before each write and flushes the DNS cache after a change. - Cloudflare. Runs
cloudflaredand routes DNS records to the tunnel through the Cloudflare API. Since version 1.0.5 it retries requests that end in a timeout, error 429 or a 5xx. - Deployment. NksDeploy deploys Nette applications without downtime through the nksdeploy PHP tool and streams progress to the application window as NDJSON events. LocalRsync publishes a site to a local directory via rsync and serves as a template for other deployment methods.
How to write your own plugin
A plugin is a .NET 9 class library that implements the IWdcPlugin interface from the NKS.WebDevConsole.Plugin.SDK package. The interface has three methods: Initialize for registering services, StartAsync and StopAsync. A plugin registers its own REST endpoints and the daemon exposes them under /api/plugin/<id>/, together with authentication, rate limiting and an access log. It describes its part of the window declaratively and builds configuration files from Scriban templates.
A plugin does not touch the daemon's database directly, only through the context, and shares nothing with other plugins except the SDK types. The repository has three documents for this: an API reference, the plugin.json manifest schema and a walkthrough that builds a sample HelloPlugin step by step. During development the daemon is pointed at a working copy with the NKS_WDC_PLUGINS_DEV_DIR variable.
Verified by building
The screenshot above is a Release build of all 16 projects on 6 November 2026: Windows, .NET SDK 9.0.320, Plugin.SDK package 0.5.8, 36 seconds in total.

wdc plugins in the installed WebDev Console 0.5.8 lists all 16 plugins at the versions from the repository.There are no unit tests in this repository; they live with the daemon in the main application repository. CI here checks the structure of the projects and manifests and builds each plugin separately.
What is still missing
The plugin libraries are not signed, so the SHA-256 checksum from the catalogue is the only check of authenticity. The SDK package is on GitHub Packages, where GitHub requires a token with the read:packages scope even for a public package. CI gets around it by downloading the .nupkg from the latest application release. The repository does not yet mark PostgreSQL and the two deployment plugins as stable, and the deployment plugins are at version 0.1.0.
Who it is for
- WebDev Console users who want a fix for one service now rather than with the next application release.
- Developers who need a service the catalogue does not offer. A community plugin gets its own namespace instead of
nks.wdc.*.
Getting started
Application users build nothing: the plugins come with the installation and newer versions install from the catalogue at runtime. From source:
git clone https://github.com/nks-hub/webdev-console-plugins.git
cd webdev-console-plugins
export NUGET_GH_USERNAME=<github-user> NUGET_GH_TOKEN=<token with read:packages>
dotnet restore
dotnet build -c Release
The built plugin is in NKS.WebDevConsole.Plugin.<Name>/bin/Release/net9.0/. It needs the .NET 9 SDK and WebDev Console daemon 0.2.0+.
Source code
The C# code is on GitHub in the nks-hub/webdev-console-plugins repository under the MIT licence. Built ZIPs of the individual plugins are on GitHub Releases.