> Discover all available pages from the documentation index: https://mastra.ai/llms.txt

# 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](https://mastra.ai/docs/server/server-adapters) instead.

## Building your application

Run the build command from your project root:

```bash
mastra build
```

This creates a `.mastra` directory containing your production-ready server. Read the [`mastra build`](https://mastra.ai/reference/cli/mastra) reference for all available flags.

## Build output

After building, Mastra creates the following structure:

```text
.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

Start the server using the Mastra CLI:

```bash
mastra start
```

Or run directly with Node.js:

```bash
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

Read the [`mastra start`](https://mastra.ai/reference/cli/mastra) reference for all available flags.

## Build configuration

### Build-time configuration

Mastra reads the `bundler`, `deployer`, and `server` options while it builds your application. Keep those options as direct properties of the object passed to `new Mastra()` so the build can extract them.

The following entry-file shape works:

```typescript
import { Mastra } from '@mastra/core/mastra'

export const mastra = new Mastra({
  bundler: {
    externals: ['sharp'],
  },
  server: {
    port: 4111,
  },
})
```

The value of each option can come from a variable, import, or function call. The option itself must remain a direct property. Don't hide build-time options behind a factory call or an object spread:

```typescript
const options = {
  bundler: {
    externals: ['sharp'],
  },
}

// These patterns prevent Mastra from extracting `bundler` during the build.
export const mastra = new Mastra(createMastraOptions())
export const otherMastra = new Mastra({ ...options })
```

When Mastra can't extract an option, it uses the default build behavior for that option. See the [configuration reference](https://mastra.ai/reference/configuration) for the available `bundler`, `deployer`, and `server` settings.

### 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

The build process respects configuration in your Mastra instance. For server behavior like CORS, timeouts, and middleware, see [server overview](https://mastra.ai/docs/server/overview). For all available options, see the [configuration reference](https://mastra.ai/reference/configuration).

## 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

| Variable             | Description                                                                 |
| -------------------- | --------------------------------------------------------------------------- |
| `PORT`               | Server port (default: `4111`)                                               |
| `MASTRA_STUDIO_PATH` | Path to Studio build directory (default: `./playground`)                    |
| `MASTRA_SKIP_DOTENV` | Skip loading `.env` files when set                                          |
| `NODE_OPTIONS`       | Node.js options (e.g., `--max-old-space-size=4096` for build memory issues) |

## Server endpoints

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

| Endpoint                | Description                                                            |
| ----------------------- | ---------------------------------------------------------------------- |
| `GET /health`           | Health check endpoint, returns `200 OK`                                |
| `GET /api/openapi.json` | OpenAPI specification (if `server.build.openAPIDocs` is enabled).      |
| `GET /swagger-ui`       | Interactive API documentation (if `server.build.swaggerUI` is enabled) |

This list isn't exhaustive. To view all endpoints, run `mastra dev` and visit `http://localhost:4111/swagger-ui`.

To add your own endpoints, see [Custom API Routes](https://mastra.ai/docs/server/custom-api-routes).

## Troubleshooting

### Memory errors during build

If you encounter `JavaScript heap out of memory` errors:

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

## Related

- [Server Overview](https://mastra.ai/docs/server/overview): Configure server behavior, middleware, and authentication
- [Server Adapters](https://mastra.ai/docs/server/server-adapters): Use Express or Hono instead of `mastra build`
- [Custom API Routes](https://mastra.ai/docs/server/custom-api-routes): Add custom HTTP endpoints
- [Configuration Reference](https://mastra.ai/reference/configuration): Full configuration options