Plugin Ecosystem
Webspresso applications extend through modular plugins with lifecycle hooks (register, onRoutesReady), Express routes, Nunjucks helpers, and CSP directives.
const { createApp } = require('webspresso');
const { adminPanelPlugin, polarPlugin, rateLimitPlugin } = require('webspresso/plugins');
createApp({
db,
plugins: [
rateLimitPlugin(),
adminPanelPlugin({ db }),
polarPlugin({ db }),
],
});
Plugin lifecycle #
| Phase | Hook | Use for |
|---|---|---|
| Register | register(ctx) | Global middleware, Nunjucks filters, named route middleware |
| Routes ready | onRoutesReady(ctx) | Mount Express routes via ctx.addRoute() |
Named middleware registered on ctx.middlewares is available in file routes:
// pages/api/secret.get.js
module.exports = {
middleware: [['basicAuth', { users: { admin: 'secret' } }]],
handler(req, res) { /* ... */ },
};
Official plugins #
| Plugin | Purpose | Guide |
|---|---|---|
adminPanelPlugin | Mithril.js CRUD admin SPA | Admin Panel |
polarPlugin | Polar.sh billing (checkout, webhooks) | Polar Billing |
rateLimitPlugin | Named + global rate limiters | — |
emailPlugin | MJML + Nodemailer | — |
uploadPlugin | Multipart file uploads | — |
fileManagerPlugin | Filesystem media library & asset picker | — |
contentPlugin | Headless CMS | — |
restResourcePlugin | Auto REST CRUD from models | — |
corsPlugin | CORS handler | — |
csrfPlugin | CSRF tokens | — |
basicAuthPlugin | HTTP Basic Auth | — |
redirectPlugin | HTTP redirects | — |
healthCheckPlugin | Liveness probe | — |
realtimePlugin | WebSocket / SSE / Socket.IO | — |
siteAnalyticsPlugin | Self-hosted analytics & retention pruning | — |
auditLogPlugin | Admin audit trail | — |
dataExchangePlugin | Admin CSV/XLSX import/export | — |
swaggerPlugin | OpenAPI + Swagger UI | — |
recaptchaPlugin | reCAPTCHA verification | — |
sitemapPlugin | sitemap.xml / robots.txt | — |
schemaExplorerPlugin | Schema & ER diagram explorer (API & Admin) | — |
xlsxPlugin | Excel XLSX generation, parsing & ORM export | — |
csvPlugin | RFC 4180 CSV generation, parsing & ORM export | — |
Import from require('webspresso/plugins'). Full source lives under plugins/ in the repository.
Composition tips #
- Register
rateLimitPluginbeforepolarPluginwhen using Polar billing rate limits. - Register
uploadPluginbeforeadminPanelPluginfor file upload fields. - Register
adminPanelPluginbefore admin-dependent plugins (dataExchangePlugin,emailPlugin, etc.). - Pass
createApp({ db })when using ORM-backed plugins.