Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Server-side rendering/prerendering for Mavo apps, using Google's puppeteer, following their SSR guide, which also motivates why we want to do server-side rendering quite well.

In brief: typical Mavo apps are served with no content; the content is rendered entirely in JavaScript in the client's browser. This may prevent search engines from indexing Mavo apps (although Google does successfully index many Mavo apps). It may also stop many sites' preview features from working on Mavo apps, or users with slower browsers from viewing the app. Server-side rendering does exactly what it sounds like; initial rendering happens on the server, before search engines and users see it, so that the initial content will be visible to them. The Mavo app will still be interactive (after roughly the same amount of time loading in the browsers, and assuming this doesn't have any bugs).

This implementation is still fairly experimental, but we hope it is useful!


Install Node (at least version 8) and npm. Run

$ npm install

to install dependencies. Then, if your Mavo site is in the folder /path/to/your/site, you can run the simplest server like this:

$ node server.js serve /path/to/your/site

Then visit the SSR server that's printed in your browser. This server will render every page in headless Chrome before serving it.

You can pass in a directory where the server will cache rendered versions of any requested pages in with the option --cache:

$ node server.js serve /path/to/your/site --cache mycache

Then, as requests come in, mavo-ssr will cache any responses it serves as plain HTML files in the mycache directory, and will serve files from the cache instead of rerendering them. (The cache is currently never invalidated, but we hope to add this feature some day.)

If you want, you can serve your website primarily through mavo-ssr just by running server.js as described above and specifying a port number with --port, although this is not recommended for production use since it's just running an extremely simple express.js server. You can also use mavo-ssr as a prerendering tool by serving with a cache, then just manually visiting each page in your site and statically serving the files that were output into the cache directory instead.

Other settings are described if you run node server.js or node server.js serve --help.


Server side rendering for Mavo (WIP)



No releases published


No packages published