Documentation

Plugin System Overview

Extend Frame-Master with powerful plugins for frontend frameworks, databases, authentication, and more.

🏗️ How Plugins Work

Plugins hook into Frame-Master's server lifecycle and request pipeline.

Server Start → serverStart.main()
Request → before_request → request → after_request
HTML → html_rewrite()
Build → beforeBuild → afterBuild

🔌 What Plugins Can Do

Plugins extend virtually every aspect of Frame-Master.

⚛️

Frontend Frameworks

React, Vue, Svelte SSR

🔐

Auth & Sessions

OAuth, JWT, cookies

🔄

Request Pipeline

Intercept & modify requests

🎨

HTML Transform

Rewrite before sending

🔨

Build Process

Custom configurations

📡

WebSockets

Real-time communication

⚡ Quick Example

A minimal plugin structure.

my-plugin.ts
import type { FrameMasterPlugin } from "frame-master/plugin/types";
export function myPlugin(options = {}): FrameMasterPlugin {
return {
name: "my-plugin",
version: "1.0.0",
priority: 50, // Optional: lower = runs first
serverStart: {
main: async () => console.log("Plugin loaded!"),
},
router: {
before_request: async (master) => {
master.setContext({ startTime: Date.now() });
},
request: async (master) => {
// Handle or intercept requests
},
after_request: async (master) => {
// Modify response headers
},
},
};
}

📦 Using Plugins

Add plugins to your Frame-Master configuration.

frame-master.config.ts
import { defineConfig } from "frame-master";
import reactSSR from "frame-master-plugin-react-ssr";
import session from "frame-master-plugin-session";
export default defineConfig({
plugins: [
reactSSR(),
session({ secret: process.env.SESSION_SECRET }),
],
});

📋 Plugin Properties

Quick reference for plugin configuration.

Required

namestringrequired

Unique plugin identifier

versionstringrequired

Semantic version

Hooks

serverStart{ main?, dev_main? }

Server initialization

router{ before_request?, request?, after_request?, html_rewrite? }

Request processing

build{ buildConfig?, beforeBuild?, afterBuild? }

Build customization

Configuration

prioritynumber

Execution order (lower = first)

Default: undefined

requirement{ frameMasterVersion?, bunVersion?, frameMasterPlugins? }

Dependencies

💡

Full Reference

See the Hooks Reference for complete documentation on all available hooks.

🎯 Next Steps