Plugin Ecosystem

Webspresso applications extend through modular plugins with lifecycle hooks (register, onRoutesReady), Express routes, Nunjucks helpers, and CSP directives.

JAVASCRIPT
const { createApp } = require('webspresso');
const { adminPanelPlugin, polarPlugin, rateLimitPlugin } = require('webspresso/plugins');

createApp({
  db,
  plugins: [
    rateLimitPlugin(),
    adminPanelPlugin({ db }),
    polarPlugin({ db }),
  ],
});

Plugin lifecycle #

PhaseHookUse for
Registerregister(ctx)Global middleware, Nunjucks filters, named route middleware
Routes readyonRoutesReady(ctx)Mount Express routes via ctx.addRoute()

Named middleware registered on ctx.middlewares is available in file routes:

JAVASCRIPT
// pages/api/secret.get.js
module.exports = {
  middleware: [['basicAuth', { users: { admin: 'secret' } }]],
  handler(req, res) { /* ... */ },
};

Official plugins #

PluginPurposeGuide
adminPanelPluginMithril.js CRUD admin SPAAdmin Panel
polarPluginPolar.sh billing (checkout, webhooks)Polar Billing
rateLimitPluginNamed + global rate limiters—
emailPluginMJML + Nodemailer—
uploadPluginMultipart file uploads—
fileManagerPluginFilesystem media library & asset picker—
contentPluginHeadless CMS—
restResourcePluginAuto REST CRUD from models—
corsPluginCORS handler—
csrfPluginCSRF tokens—
basicAuthPluginHTTP Basic Auth—
redirectPluginHTTP redirects—
healthCheckPluginLiveness probe—
realtimePluginWebSocket / SSE / Socket.IO—
siteAnalyticsPluginSelf-hosted analytics & retention pruning—
auditLogPluginAdmin audit trail—
dataExchangePluginAdmin CSV/XLSX import/export—
swaggerPluginOpenAPI + Swagger UI—
recaptchaPluginreCAPTCHA verification—
sitemapPluginsitemap.xml / robots.txt—
schemaExplorerPluginSchema & ER diagram explorer (API & Admin)—
xlsxPluginExcel XLSX generation, parsing & ORM export—
csvPluginRFC 4180 CSV generation, parsing & ORM export—

Import from require('webspresso/plugins'). Full source lives under plugins/ in the repository.


Composition tips #

  • Register rateLimitPlugin before polarPlugin when using Polar billing rate limits.
  • Register uploadPlugin before adminPanelPlugin for file upload fields.
  • Register adminPanelPlugin before admin-dependent plugins (dataExchangePlugin, emailPlugin, etc.).
  • Pass createApp({ db }) when using ORM-backed plugins.
Created · Updated