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
      .output.apptsconfig.app.jsonapppageslayoutscomponentscomposablesglobalspluginsmiddlewarescssapp.vueerror.vuemodulesnode_modulespublic.env.gitignorerunable.config.tsserver.tspackage.jsontsconfig.jsontsconfig.node.json

app/components

Create Vue components that are available without manual imports.

Runable detects Vue components in this directory and makes them available in templates.

<!-- app/components/AppLogo.vue -->
<template>
  <strong>Acme</strong>
</template>
<!-- app/pages/index.vue -->
<template>
  <AppLogo />
</template>

You can add multiple sources and control generated names:

export default defineConfig({
  components: [
    "./app/components",
    {
      dirs: "./app/components/ui",
      prefix: "U",
      pathPrefix: false,
    },
  ],
});

Runable writes declarations to .app/components.d.ts. If autocomplete does not reflect a new component, restart runable prepare or the development server.

Define the name inside the component

A name declared in the file replaces the name inferred from its path:

<!-- app/components/button.vue -->
<script setup lang="ts">
defineOptions({
  name: "PrimaryAction",
});
</script>

<template>
  <button type="button"><slot /></button>
</template>

The component is then available as <PrimaryAction />, even though the file is named button.vue. Runable also recognizes the Options API and defineComponent():

export default defineComponent({
  name: "PrimaryAction",
});

The name must be a static string. A componentName function defined in runable.config.ts takes priority. Without a declared or configured name, Runable uses the file name and, depending on pathPrefix, its parent directories.

This detection also applies to components written directly in JavaScript or TypeScript files:

// app/components/layout.ts
export default defineComponent({
  name: "RunableLayout",
  setup() {
    // ...
  },
});

Components provided by Runable

Runable registers several internal components alongside project components:

ComponentPurpose
RunablePageDisplays the current Vue Router route
RunableLinkCreates a navigation link with RouterLink props
RunableLayoutApplies the layout associated with the page
ClientOnlyRenders its content only in the browser
<template>
  <nav>
    <RunableLink to="/projects">Projects</RunableLink>
  </nav>

  <RunablePage />
</template>
Report an issue Edit this page
layouts

Share an interface structure across several pages.

composables

Share auto-imported Vue logic across components and pages.

On this page

  • 1Define the name inside the component
  • 2Components provided by Runable
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