⚠️ Deprecated — superseded bymikser-ioThis repository is the legacy 7.x line and is no longer maintained. Last npm release was
7.12.10in June 2022. New work — and every project we ship today — lives inmikser-io, a from-scratch rewrite of the same idea.
- No MongoDB. The legacy 7.x line required Mongo (
≥ 2.4) for the catalog.mikser-iokeeps the catalog and journal in memory and content as plain.md/.ymlfiles on disk — no database to install, version, or back up.- Modern Node + ESM.
mikser-iois Node 18+, pure ESM, async/await throughout. The legacy line predates that whole world; integrations were built around Grunt/Gulp and CallbackHell-era plugin APIs.- Strict 20-phase lifecycle. Plugins hook into named lifecycle phases (initialize → load → import → process → persist → render → finalize). No plugin orchestrator, no glue code between plugins — the journal is the synchronization primitive.
- Live SSE updates out of the box. The
apiplugin exposes the catalog over HTTP with asubscribeSSE stream. Edit a.mdfile → the browser updates without a refresh, no page reload, no wholesale rebuild.- Framework SDKs. First-class clients for Vue 3 (
mikser-io-sdk-vue), React 18+/19 (mikser-io-sdk-react), and Svelte 5 (mikser-io-sdk-svelte) — same surface (useDocument/useDocuments/useMikserRoutes/useMikserStatus) wrapped in each framework's idiom.- Typed at the seam.
mikser-io-plugin-schemasvalidates front-matter against Zod schemas and emits anentities.d.tsfile the SDKs consume — typed entity meta per layout, no hand-maintained types.- Library mode + CLI + server.
npx mikserbuilds;mikser --watchis the dev loop;mikser --serverexposes a live HTTP/SSE API. The same package can also be embedded inside an existing Node app viauseRenderer/useCollection/ lifecycle hooks.- Three deployment shapes. Pure SPA (runtime everything, live everywhere), Hybrid SSG (prerendered public + SPA editor with live preview), or Islands (mikser-rendered HTML + framework islands). The Claude Code plugin scaffolds any of them in one command.
- Documented architecture. Load-bearing decisions live as ADRs in
mikser-io/documentation/decisions/— files-as-source-of-truth, content-layer-not-the-app, plugin-as-factory, compose-via-protocols. You can read them before betting on it.If you're starting a new project, start with
mikser-io. If you have an oldmikserproject still in production, this repo will stay readable but won't receive new releases or fixes.
Mikser is designed for rapid web site development. It works equally well for small web sites and for large multi domain, multi language sites with thousands of pages and very complex generation logic.
- Multi-threaded cluster rendering with incredible performance
- LiveReload with real-time preview no matter if the web site has 10 or 10'000 pages
- Built-in multi-language and multi-domain support
- Pin-point diagnostics that provide accurate error messages
- Easy integration with build systems like Grunt and Gulp, CSS pre-processors like Less and Sass or compilators like Browserify, Babel, CoffeeScript, TypeScript or any onther tool that has CLI
- Support for most of the popular template and markup engines - Pug aka Jade, Eco, Ect, Ejs, Swig, Nunjucks, Twig, Markdown, Textile, YAML, TOML, ArchieML, CSON, JSON5, support for new engines through plug-ins
- Very easy plug-in system with straight forward interface and hot reload
Mikser works well on Windows, Linux and OSX. It can be installed both globally and as a local dependency. It comes with all contrib plugins build-in.
- Node.js ≥ 4.0
- MongoDB ≥ 2.4
- Install Mikser with
npm install -g mikser - Create a folder for your project, run
mikserinside it
var mikser = require('mikser');
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
mikser({
workingFolder: '/var/mikser', // Use custom working folder
app: app, // Use existing Express web server, Default: Mikser will create one
server: true, // Add Mikser middle-ware. Default: true, if set to false Mikser won't start web server
watch: false, // Don't watch file system for changes. Default: true
debug: true, // Enter debug mode. Default: false
environment: 'dev' // Merge some extra configuration from another config file.
}).run();- Create
mikser.jsand put these lines inside - Install mikser as local dependency with
npm install mikser - Start your first Mikser app with
node mikser
After you run Mikser for the first time it will create all the necessary folders inside your project folder and then start watching for changes and auto-generate your web site.
We have have tried many static site generators, they work well for simple web sites, but in real-life scenarios they degrade performance very fast. Here is what we have found, playing around with some of them.
For a simple web site with around 200 pages DocPad takes about 1 minute, Hexo takes 2 minutes and Mikser takes 6 seconds. For a complex web site with 1000 pages and templates that use blocks and partials, Mikser takes about 20 seconds while DocPad and Hexo take almost 30 minutes. We haven't tried Hugo with the same sites, because it lacks plug-ins and it was very hard to extend and reuse existing templates. From the basic web sites we have implemented with it, we found that it has almost the same performance as Mikser, but when the complexity of the generation logic raises it is much slower.
All static site generators that we have tested perform a full regeneration on every run. Mikser has build-in change tracking and only generates the pages that have been affected by the change. Most of the time Mikser is ready for less than 3 seconds, when DocPad and Hexo take 30 minutes to finish.
You can check one of our projects Dialog. It has simple structure with four languages in different domains. The project was originally implemented with DocPad. It took us 3 days to convert it to Mikser and we managed to reuse most of the templates with minor changes.
- Folder structure
- Documents
- Layouts
- External tools
- Development server
- Debugging
- Multi-domain web sites
- Localization
