API Stability Notice

Macroforge is under active development. The API is not yet stable and may change between versions. Some documentation sections may be outdated.

Vite Plugin

The Vite plugin provides build-time macro expansion, transforming your code during development and production builds.

Installation

Bash
npm install -D @macroforge/vite-plugin

Configuration

Add the plugin to your vite.config.ts:

vite.config.ts
import { macroforge } from "@macroforge/vite-plugin";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [
    macroforge()
  ]
});

Options

The vite plugin reads its configuration from a macroforge.config.ts (or .js, .mjs, .cjs) file in your project root. Vite-specific options go under the vite key:

macroforge.config.ts
import { defineConfig } from "macroforge/config";

export default defineConfig({
  // Keep @derive decorators in output (for debugging)
  keepDecorators: false,

  // Vite-specific options
  vite: {
    // Generate .d.ts files for expanded code
    generateTypes: true,

    // Output directory for generated types
    typesOutputDir: ".macroforge/types",

    // Emit metadata files for debugging
    emitMetadata: true,

    // Output directory for metadata files
    metadataOutputDir: ".macroforge/meta",

    // Enable disk cache in dev mode
    devCache: true,
  }
});

Option Reference

OptionTypeDefaultDescription
vite.generateTypesbooleantrueGenerate .d.ts files
vite.typesOutputDirstring.macroforge/typesWhere to write type files
vite.emitMetadatabooleantrueEmit macro metadata files
vite.metadataOutputDirstring.macroforge/metaWhere to write metadata files
vite.devCachebooleantrueEnable disk cache during development
keepDecoratorsbooleanfalseKeep decorators in output

Framework Integration

React (Vite)

vite.config.ts
import { macroforge } from "@macroforge/vite-plugin";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [
    macroforge(),  // Before React plugin
    react()
  ]
});

SvelteKit

vite.config.ts
import { macroforge } from "@macroforge/vite-plugin";
import { sveltekit } from "@sveltejs/kit/vite";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [
    macroforge(),  // Before SvelteKit
    sveltekit()
  ]
});
Note
Always place the Macroforge plugin before other framework plugins to ensure macros are expanded first.

Development Server

During development, the plugin:

  • Watches for file changes
  • Expands macros on save
  • Provides HMR support for expanded code

Production Build

During production builds, the plugin:

  • Expands all macros in the source files
  • Generates type declaration files
  • Strips @derive decorators from output