Express is a fast, unopinionated, minimalist web framework for Node.js. The Layer0 serverless environment makes it easy to run apps without managing Node.js servers.

Getting Started

To add Layer0 to your Express app, run the following in the root directory of your express app:

npm i -g @layer0/cli
0 init

Running your app locally

To run your app behind Layer0 locally, run:

0 dev

Deploying your app to Layer0

To deploy your app to Layer0, run:

0 deploy

Overriding the default app location

When you deploy your Express app to Layer0, the Layer0 CLI bundles your app as a single javascript file so that it can be run as a serverless function. By default Layer0 looks for your app in a few common locations:

  • src/server.ts
  • src/server.js
  • src/app.ts
  • src/app.js
  • src/index.ts
  • src/index.js
  • server.js
  • app.js
  • index.js

If it cannot find one of these files, you can specify the path to the app in layer0.config.js:

const { join } = require('path')

// layer0.config.js
module.exports = {
  connector: '@layer0/express',
  express: {
    appPath: join(process.cwd(), 'path', 'to', 'app.js'),

The file you specify in appPath should export an instance of an express app using export default or module.exports.

Serving Static Assets

If your express app serves any static assets, you’ll need to add routes to your Layer0 router to serve them from the edge. For example, to serve all paths under /assets from dist/client/assets:

// routes.js
import { Router } from '@layer0/core'

export default new Router()
  .match('/assets/:path*', ({ cache, serveStatic }) => {
      edge: {
        maxAgeSeconds: 60 * 60 * 365, // cache at the edge for one year
      browser: {
        maxAgeSeconds: 60 * 60 * 365, // cache in the browser for one year - only do this if you include hashes in your client asset filenames
  .fallback(({ renderWithApp }) => renderWithApp()) // serve all unmatched URLs from express

Adding Additional Files Needed during SSR

If your express app expects to be able to read files from the filesystem at runtime, for example an index.html template, you can ensure they are included in the app bundle that is deployed to Layer0’s serverless workers by adding the following to layer0.config.js

module.exports = {
  /* ... */

  includeFiles: {
    // Include index.html in the serverless bundle
    'dist/client/index.html': true,

Transpiling and TypeScript support

Layer0 will automatically transpile JavaScript and TypeScript source code for running on Node.js version 14. If you want to control how source files are compiled, you can transpile your app on your own and point your appPath config to the transpiled version of your app’s main entry point.