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

Modules

Group and distribute a configurable Runable feature.

A module is reusable Runable configuration. It can add components, composables, layouts, plugins, middleware, styles, and even other modules.

Create a local module

modules/analytics/
├── runable.config.ts
└── runtime/
    └── plugin.ts
// modules/analytics/runable.config.ts
import { defineModule } from "runable";

export default defineModule<{ endpoint: string }>({
  meta: { name: "analytics", version: "1.0.0" },
  configKey: "analytics",
  defaults: { endpoint: "/api/events" },
  plugins: ["./runtime/plugin.ts"],

  setup(options) {
    process.env.RUN_ANALYTICS_ENDPOINT ??= options.endpoint;
  },
});

Declare it in the project:

// runable.config.ts
export default defineConfig({
  modules: ["./modules/analytics"],
  analytics: {
    endpoint: "https://events.example.com",
  },
});

configKey identifies where to read consumer options. Runable merges defaults with these options before calling setup().

Add collections without setup

A module can extend Runable configuration directly:

export default defineModule({
  meta: { name: "design-system" },
  components: ["./components"],
  css: ["./styles/index.css"],
});

Paths are resolved from the module directory.

Order several modules

export default defineModule({
  meta: { name: "analytics-ui" },
  dependOn: ["analytics"],
  enforce: "post",
  async setup() {},
});

Groups run in pre, normal, then post order. dependOn imposes order within a group or toward an earlier group. Runable rejects unknown dependencies, cycles, and dependencies on a later group.

Publish a module

Build the module before publishing it. For an installed package, Runable resolves its runable.config from the package's dist directory. Then add its name to the consuming project's modules array.

The modules directory is not scanned automatically

A local module is loaded only when it appears in modules with a relative path.

Report an issue Edit this page
Plugins

Initialize libraries, provide dependencies, and order Vue application startup.

Runtime Configuration

Load typed variables without exposing secrets to the browser.

On this page

  • 1Create a local module
  • 2Add collections without setup
  • 3Order several modules
  • 4Publish a module
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