Skip to main content
Mastra 1.0 is available 🎉 Read announcement

Deploy a Mastra Server

Mastra compiles your application into a standalone Node.js server that can run on any platform supporting Node.js, Bun, or Deno.

tip

This guide covers deploying the standalone server generated by mastra build. If you need to integrate Mastra into an existing Express or Hono application, see Server Adapters instead.

Building your application
Direct link to Building your application

Run the build command from your project root:

mastra build

This creates a .mastra directory containing your production-ready server.

info

Read the mastra build reference for all available flags.

Build output
Direct link to Build output

After building, Mastra creates the following structure:

.mastra/
├── .build/ # Intermediate build artifacts (module maps, analysis)
└── output/
├── index.mjs # Server entry point
├── mastra.mjs # Your bundled Mastra configuration
├── tools.mjs # Aggregated tool exports
├── tools/ # Individual tool bundles
├── package.json # Production dependencies
├── node_modules/ # Installed dependencies
├── .npmrc # Copied from your project (if present)
├── public/ # Static assets (if src/mastra/public exists)
└── playground/ # Studio UI (if --studio flag used)

The output directory is self-contained. You can copy it to any server and run it directly.

Running the server
Direct link to Running the server

Start the server using the Mastra CLI:

mastra start

Or run directly with Node.js:

node .mastra/output/index.mjs

The mastra start command provides additional features:

  • Loads environment variables from .env.production and .env
  • Provides helpful error messages for missing modules
  • Handles process signals for graceful shutdown
info

Read the mastra start reference for all available flags.

Build configuration
Direct link to Build configuration

Public folder
Direct link to Public folder

If a public folder exists in your Mastra directory (src/mastra/public), its contents are copied to the output directory during build. These files are served as static assets by the server.

Mastra configuration
Direct link to Mastra configuration

The build process respects configuration in your Mastra instance. For server behavior like CORS, timeouts, and middleware, see server overview. For all available options, see the configuration reference.

Build process
Direct link to Build process

The build follows these steps:

  1. Locates entry file: Finds index.ts or index.js in your Mastra directory.
  2. Discovers tools: Scans for tool files matching {mastraDir}/tools/**/*.{js,ts}, excluding test files.
  3. Analyzes dependencies: Determines which packages to bundle vs. install externally.
  4. Bundles code: Uses Rollup with tree-shaking and optional source maps.
  5. Generates server: Creates a Hono-based HTTP server as index.mjs.
  6. Installs dependencies: Runs npm install in the output directory.
  7. Copies assets: Copies public folder and .npmrc if present.

Environment variables
Direct link to Environment variables

VariableDescription
PORTServer port (default: 4111)
MASTRA_STUDIO_PATHPath to Studio build directory (default: ./playground)
MASTRA_SKIP_DOTENVSkip loading .env files when set
NODE_OPTIONSNode.js options (e.g., --max-old-space-size=4096 for build memory issues)

Server endpoints
Direct link to Server endpoints

The built server exposes endpoints for health checks, agents, workflows, and more:

EndpointDescription
GET /healthHealth check endpoint, returns 200 OK
GET /openapi.jsonOpenAPI specification (if server.build.openAPIDocs is enabled)
GET /swagger-uiInteractive API documentation (if server.build.swaggerUI is enabled)

This list is not exhaustive. To view all endpoints, run mastra dev and visit http://localhost:4111/swagger-ui.

To add your own endpoints, see Custom API Routes.

Troubleshooting
Direct link to Troubleshooting

Memory errors during build
Direct link to Memory errors during build

If you encounter JavaScript heap out of memory errors:

NODE_OPTIONS="--max-old-space-size=4096" mastra build