CrowdSec security engine integration for
ServerKit — surfaces active decisions
and recent alerts, bans/unbans IPs or CIDR ranges, and manages centralized
allowlists (feature-detected for CrowdSec versions that support them), all via
cscli on the host. Adds a CrowdSec page (/crowdsec) to the panel. When
CrowdSec isn't installed the page shows install guidance instead — ServerKit
never auto-installs it.
Installs from the ServerKit Marketplace (registry: serverkit-extensions).
plugin.json # extension manifest (routes, nav, SDK + panel gates)
backend/ # Flask blueprint + cscli wrapper service
frontend/ # runtime-ESM bundle source (vite lib build)
runtime-entry.jsx # entry: injects inline CSS, exports CrowdSecPage
components/ # CrowdSecPage + local ports/stand-ins:
ui/ # verbatim ports of the host's Radix wrappers
primitives.jsx # EmptyState stand-in (host classes)
styles/crowdsec.css # page styles (host CSS custom properties)
scripts/build-zip.* # release packaging (dist/serverkit-crowdsec-<version>.zip)
tests/ # backend tests (run from a panel checkout — see tests/README.md)
The frontend is a runtime-ESM extension: it builds to a single
frontend/dist/index.mjs that the panel blob-imports at runtime — no panel
rebuild needed. React, react-router and serverkit-sdk are externalized and
resolved to the panel's own singletons via its import map; everything else
(lucide-react icons, the Radix dialog/select primitives) is bundled.
cd frontend
npm install
npm run build # writes frontend/dist/index.mjsLoad it into a dev panel with Marketplace → Plugins → Upload Zip, or:
./scripts/build-zip.sh # or scripts/build-zip.ps1 on Windows
# → dist/serverkit-crowdsec-<version>.zipFor API details and the contribution model see docs/EXTENSIONS.md in the main repo.
Fully automated — no manual zips:
- Bump
versioninplugin.jsonand push tomain(or push avX.Y.Ztag). - The Create Release workflow builds the bundle, zips it, creates the GitHub release with the zip attached, then downloads the published asset and upserts this extension's entry (version, URL, sha256) in serverkit-extensions.
One-time setup: add a REGISTRY_TOKEN secret (fine-grained PAT with
contents:write on serverkit-extensions) so the registry sync can push.
Without it the release still ships; only the registry update skips.
MIT — see LICENSE.