Integrations

Set up Master CSS in Express

Guide to setting up Master CSS in Express server-rendered templates.

Use progressive rendering when Express owns the HTML response. Express renders the template, @master/css-server injects the first-response CSS, and the Vite runtime asset adopts that CSS in the browser for later dynamic classes.

Open your project

Start from an Express project root.

cd my-express-appnpm init -y

Install Master CSS

Install the server renderer, Vite, and the Vite integration.

npm install express ejs @master/css-server@rcnpm install -D vite @master/css.vite@rc

Configure Vite

Build the browser runtime entry and base stylesheet into public/assets.

import { defineConfig } from 'vite'import masterCSS from '@master/css.vite'export default defineConfig({  plugins: [    masterCSS({ mode: 'runtime', injectRuntime: false })  ],  build: {    outDir: 'public/assets',    emptyOutDir: true,    rollupOptions: {      input: 'src/main.ts',      output: {        entryFileNames: 'app.js',        assetFileNames: 'app[extname]'      }    }  }})

Create the browser entry

Import the Vite-managed runtime and the Master CSS stylesheet.

import '@master/css.vite/runtime'import './app.css'
@import "@master/css";

Render with Master CSS

Render the template first, then pass the full document to @master/css-server.

import express from 'express'import ejs from 'ejs'import { render } from '@master/css-server'const app = express()app.use('/assets', express.static('public/assets'))app.get('/', async (_request, response) => {  const body = await ejs.renderFile('views/index.ejs')  const document = `<!doctype html><html lang="en"><head>  <meta charset="utf-8">  <meta name="viewport" content="width=device-width, initial-scale=1">  <link rel="stylesheet" href="/assets/app.css"></head><body>  ${body}  <script type="module" src="/assets/app.js"></script></body></html>`  response.send(render(document, undefined, {    hydrationManifest: 'inject'  }).html)})app.listen(3000)

Add build scripts

Build or watch the frontend assets beside the Express server.

{  "scripts": {    "build:assets": "vite build",    "watch:assets": "vite build --watch",    "start": "node app.js"  }}

Hello world

Now style your first server-rendered template using Master CSS syntax.

localhost:3000

Hello World

<h1 class="m:2xl italic font:5xl font:heavy text:neutral">  Hello World</h1>

Progressive rendering sends the first response with style#master-css, then the runtime adopts the injected hydration manifest and keeps handling classes added after the initial response. Use Express static rendering when templates contain complete class strings and you want a generated CSS asset instead.


© 2026 Aoyue Design LLC.MIT License
Trademark Policy