Runable v1.0.0-alpha.20
Why Runable? Docs Modules Work with AI Blog About Changelog
  • 01Why Runable?
  • 02Docs
  • 03Modules
  • 04Work with AI
  • 05Blog
  • 06About
  • 07Changelog
Vue without a fixed server runtime.
Getting Started Structure Integrations Guide MCP API
  • Getting Started Structure Integrations Guide MCP API
Build the Interface
  • Routing
  • Layouts
  • Middlewares
  • Error Handling
Load and Render
  • Data Fetching
  • SSR and CSR
  • Head and SEO
Extend Runable
  • Auto-imports
  • Plugins
  • Modules
Configure and Ship
  • Runtime Configuration
  • CSS and Assets
  • Production Build
CLI
  • Overview
  • Create
  • Prepare
  • Build
  • MCP
  • AI Skills
  • Inspector

Production build

Generate client and server bundles, then run Runable without a Vite server.

The production build generates the client and, when SSR is enabled, a server bundle. Runable then uses these files without starting the Vite development server.

Simpler equivalent

runable build runs this same loadConfig() + buildProduction() sequence for you. Write your own build script, as shown below, only when you need to run other steps around it.

Create the build script

// scripts/build.ts
import { buildProduction, loadConfig } from "runable";

await loadConfig();
await buildProduction();

Add project commands:

{
  "scripts": {
    "build": "tsx scripts/build.ts",
    "start": "RUNABLE_MODE=production tsx server.ts"
  }
}

Install tsx as a development dependency when your server and script remain in TypeScript.

Understand the output

With the default distdir, Runable writes to .output/:

.output/
├── client/
│   ├── index.html
│   └── assets/
├── server/          # present when ssr: true
└── manifest.js

manifest.js connects the Runable server to the client template and compiled SSR entry point.

Start the existing server

Your server.ts does not change:

import Express from "express";
import { express } from "runable/adapters/express";

const server = Express();

server.get("/api/health", (_req, res) => {
  res.json({ status: "ok" });
});

server.use(express());
server.listen(Number(process.env.PORT ?? 3000));

With RUNABLE_MODE=production, the adapter loads configuration but does not create a Vite server. It serves generated client assets and renders the application from .output. When RUNABLE_MODE is unset, Runable uses development mode.

Prepare deployment

Copy into the production environment:

  • .output/;
  • the server and its runtime dependencies;
  • runable.config.ts or its compiled version;
  • required environment variables.

Always test the startup command with RUNABLE_MODE=production before deployment.

Build before startup

The production server expects .output/manifest.js. If it is missing, run the build or check distdir.

Report an issue Edit this page
CSS and Assets

Load global styles and serve the application's static files.

Overview

The runable command line — scaffold, prepare, and build projects, then connect Runable to AI coding tools.

On this page

  • 1Create the build script
  • 2Understand the output
  • 3Start the existing server
  • 4Prepare deployment
Runable

The Vue framework that brings productive conventions to any backend.

Product

  • Why Runable
  • Documentation
  • Installation
  • Integrations

Project

  • About
  • Blog
  • Changelog
  • Sponsor

Community

  • GitHub
  • Issues
  • Discussions
  • Bluesky

© 2026 Runable. Released under the MIT License.

Open source Built with Vue and Runable