Home · Features · Plugin Platform

Extend the platform. Don't fork it.

One folder: a plugin.json manifest plus optional .NET and TypeScript tiers. Drop it in — new REST routes, sidebar tools, workers, and map layer types at next startup.

plugin.json manifest .NET tier (IPlugin) TypeScript / ESM tier /api/plugins/<id>/ Drop-in install No app rebuild

One folder, one manifest

Ship a feature as a self-contained package

plugin.json + optional .NET DLL + optional ESM UI. Drop into plugins directory — discovered at next startup. No app rebuild.

REST routes

Mount under /api/plugins/<id>/… via IPlugin.RegisterRoutes.

Sidebar tools

Declare tools[] — buttons appear under your category automatically.

Map layer types

Register factories — catalog items with your cd_itemtype load through the plugin.

Workers & SSE

StartAsync / StopAsync for loops, sidecar probes, streams.

Deployment

Drop the folder in. Restart. Done.

  • Bundled: <appdir>/plugins/
  • User: %APPDATA%\3DMapExplorer\LocalMapServer\plugins\
  • Plugins:Enabled / AllowedIds enterprise controls
  • In-tree hello-world reference plugin + developer guide
plugins/my-plugin/my-plugin/
  plugin.json          # required
  bin/MyPlugin.dll     # optional .NET
  ui/index.js          # optional ESM

GET /api/plugins            → discovered + active
GET /api/plugins/hello-world/ping
● [plugins] activated my-plugin v1.0.0

Build on the platform your data already lives in.

In-house analysis, partner connector, or custom layer type — one folder, drop in, shows up in the sidebar.