@gomani/native
v0.10.0
Published
One authoring model, many targets: an installable PWA, a native shell, and a compile-to-native prototype.
Maintainers
Readme
@gomani/native
One authoring model, many targets (P8), escalating deliberately: an installable PWA, a native shell, and a compile-to-native prototype.
1. PWA-first (the default)
A Gomani app is already an installable, offline-capable, cheaply-updatable PWA — zero extra install.
Declare gomani.pwa.json and gomani build emits manifest.webmanifest, injects the install <head>
tags, and versions the service worker:
// gomani.pwa.json
{
"name": "Gomani Interactive",
"display": "standalone",
"themeColor": "#00c853",
"icons": [
{ "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any maskable" },
],
}import { registerPwa } from '@gomani/native/client';
registerPwa({ onUpdate: () => showToast('Update ready — reload') });Updates are cheap — the service worker installs into a fresh versioned cache but migrates unchanged content-hashed assets from the previous one (same URL ⇒ same bytes), so an update fetches only the changed HTML and assets, never a full re-download.
Build-time helpers: generateManifest, validateInstallability, manifestHeadTags.
2. Native shell (the app-store path)
A Capacitor-style wrapper turns the PWA into store artefacts, with an install-size budget on the bundled web assets:
gomani build
gomani native shell # reads gomani.native.json → native/ (www + capacitor.config.json + BUILD.md)packShell / analyzeInstallSize do this programmatically. The signed .apk/.ipa needs the platform
SDKs (Android Studio / Xcode); the emitted BUILD.md has the npx cap steps.
3. Compile-to-native (prototype)
The recommended eventual direction (minimises install size + runtime memory on weak devices). The
prototype proves it: compileToNative lowers a Gomani component tree
to platform-neutral native widgets, no webview:
compileToNative(<div><h2>Karibu</h2><button onClick={pay}>Tap</button></div>);
// <View>
// <Text>Karibu</Text>
// <Button onPress>Tap</Button>
// </View>The bridged native shell (§2) is the recommended path today; compile-to-native stays a proof-of-concept.
