Getting Started
There are two flows for running a Lynx project against Tamer. Pick one — your selection sticks for the rest of the page. Both flows start by installing the global t4l CLI from npm.
The fastest path. Install the prebuilt Tamer Dev App on your phone or simulator, run t4l start from your project, scan the QR. No Xcode / Android SDK / native build required.
You want to iterate on Lynx UI without touching native code, or you don't have Xcode / Android SDK installed locally.
1. Install the CLI globally
You still need t4l init and t4l start to configure the project and run the dev server. Install the CLI globally with your package manager:
2. Install the prebuilt app
Download from the latest release:
Simulator — download TamerDevApp-Simulator-<version>.zip, unzip, install on a booted simulator:
Device — download TamerDevApp-Device-Unsigned-<version>.zip. The .app ships unsigned to keep the release portable. Re-sign with your own Apple identity, embed a provisioning profile that matches com.nanofuxion.tamerdevapp (or rewrite the bundle id), wrap as IPA, install. Step-by-step in the bundled SIGN-AND-INSTALL.txt.
3. Initialize your Lynx project
From your Lynx project root, run the interactive setup once:
The wizard detects or creates a Lynx app, writes tamer.config.json, installs the selected Tamer package stack, injects pluginTamer() into lynx.config.* when possible, and wires TypeScript ambient component types when a tsconfig.json is present. If the Lynx app is nested, it also configures the root as a workspace and installs from the root so dependencies are shared.
4. Run the dev server
From your Lynx project root:
The dashboard prints a QR. Scan it inside the prebuilt Tamer Dev App — bundles hot-reload over the dev server. Done.
If the configured/default port is already in use, t4l start automatically tries the next port and shows that the active port differs from the configured/default port.
When this flow runs out
Switch to the Dev Client flow if you need any of:
- A custom native module or custom element that isn't shipped in the prebuilt app.
- A different bundle id, app icon, or signing identity (e.g. shipping to TestFlight under your own team).
- A smaller binary that includes only the Tamer packages your app actually uses.
CLI and workspace notes
- Environment files:
t4lloads.envthen.env.localbesidetamer.config.json. Shell / CI exports take precedence. See Commands → Global for the full variable list (ANDROID_KEYSTORE_PASSWORD,APP_STORE_CONNECT_API_KEY_PATH, etc.). - Interactive flows:
t4l initandt4l signingare Ink wizards.t4l startis an Ink dashboard:rrebuild bundle,ltoggle logs,qquit. - TypeScript: With
syncTamerComponentTypesenabled (default in new configs),t4l init/t4l linkcan adjust the Lynx apptsconfig.jsonand generate.tamer/tamer-components.d.ts. Details: Ambient types.
Worth exploring next: tamer-router (back handling), tamer-webview, tamer-local-storage, tamer-dev-client.
Next steps
- Native Modules & Elements — author your own Tamer-compatible native package
- Configuration Reference —
tamer.config.json,tamer.config.ts,lynx.ext.json - Commands — full CLI reference
- tamer-dev-client — Dev launcher API and setup
Lynx ecosystem
Framework agnostic
Tamer4Lynx is conceptually Lynx framework agnostic. Native modules and tooling work with any Lynx binding, including miso-lynx and VueLynx (@lynx-js/vue). Some packages like tamer-router are specifically designed for @lynx-js/react.
