@base44-preview/metro-plugin
v0.1.0-dev.5cb8a5e
Published
The Metro/Expo plugin for Base44 native-mobile applications
Readme
@base44/metro-plugin
Metro/Expo plugin for Base44 native-mobile applications running in sandboxed preview iframes. It injects the preview runtime that the Base44 builder consumes over postMessage — navigation, mount, HMR, and error signals — the Metro counterpart to @base44/vite-plugin.
Status: scaffold. The
withBase44wrapper is published and stable as an API, but is currently a no-op pass-through. Runtime injection lands in a follow-up (Phase 0). Wiring it into the template now lets behavior arrive via version bumps.
Installation
npm install @base44/metro-pluginUsage
// metro.config.js
const { getDefaultConfig } = require("expo/metro-config");
const { withNativeWind } = require("nativewind/metro");
const { withBase44 } = require("@base44/metro-plugin/metro");
const config = getDefaultConfig(__dirname);
module.exports = withBase44(withNativeWind(config, { input: "./global.css" }));withBase44 is sandbox-gated on MODAL_SANDBOX_ID: outside a Base44 preview sandbox it returns the config untouched, so it's a no-op for local expo start.
Options
withBase44(config, {
navigationNotifier: true, // app_changed_url on expo-router navigation
hmrNotifier: true, // sandbox:beforeUpdate / sandbox:afterUpdate
errorNotifier: true, // forward runtime errors as app_error
});Why Metro, not Vite
The mobile bundler is Metro (Expo orchestrates it). This package plugs into Metro's config API — a withBase44(config) wrapper, exactly like nativewind/metro's withNativeWind. It is not an Expo config plugin (those mutate native project config at prebuild); it is a Metro plugin.
Development
npm install
npm run build # tsc -> dist (CommonJS, so metro.config.js can require it)
npm run test:unit