Get Squiggle
Set up Squiggle in your app
Install Squiggle, run squiggle init in your app, wrap your root and rebuild once. Most of the time goes on the rebuild. The trial is 14 days with every feature and no card.
Before you start
What you need
An Apple Silicon Mac with macOS 15 or later. Squiggle drives the iOS simulator from your Mac, and only Apple Silicon can run it.
Xcode, with an iOS simulator. Squiggle tests your app in the simulator. React Native macOS apps work too.
A React Native app you can rebuild. React Native 0.76 or later: an Expo development build or a bare app. Expo Go cannot load the SDK, because it includes native code.
Setup
From install to your first flow
Install Squiggle
Studio, the app you download, includes thesquigglecommand: open Settings and press Install next to Command line. To use only the terminal, install it from npm. Then start the trial: 14 days, every feature, no card.npm install -g @squiggle.sh/clisquiggle activate --trialSet up your app
Run this in your app’s folder. It adds the SDK and the Babel plugin, loads Squiggle before React, and connects your coding agent. It lists every change and asks before writing anything.ClaudeCopilotCodexNonesquiggle init --agent claudeFor Claude Code: also registers Squiggle in .mcp.json and installs the agent kit (skills, subagents and commands) in .claude/.
squiggle init --agent copilotFor GitHub Copilot in VS Code: also registers Squiggle in .vscode/mcp.json.
squiggle init --agent codexFor Codex: also registers Squiggle in ~/.codex/config.toml.
squiggle initSets up the app only. Run it again with --agent when you want one.
Track your screens
The one editinitleaves to you, because it is your own component. Wrap your root so Squiggle knows which screen is showing: waiting for a screen, checking it, and the Screen map all need it. With React Navigation, pass yourNavigationContainerref.import { Squiggle } from '@squiggle.sh/react-native';import { Stack, useNavigationContainerRef } from 'expo-router';export default function RootLayout() { return ( <Squiggle navigationRef={useNavigationContainerRef()}> <Stack /> </Squiggle> );}Rebuild once
The SDK includes native code, so a reload is not enough.squiggle uprelaunches the app with Squiggle attached;initadded it to youriosscript, so from now on that script does both. Bare React Native:npx react-native run-ios.npx expo run:ios && squiggle upCheck the setup
doctorchecks the simulator, the app, screen tracking, source lines and your licence, and tells you how to fix anything that is missing.squiggle doctorRun your first flow
smokeis the flowinitwrote: it checks the app starts. Then record a journey of your own: use the app, press Ctrl-C to stop, and Squiggle drafts the flow from the recording.squiggle flow smokesquiggle record loginsquiggle flow --from-recording .squiggle/recordings/login.sqrec -o .squiggle/flows/login.yaml
Help
If something doesn’t work
Run doctor first
It names what is wrong and how to fix it: an app launched without Squiggle, a missing Babel plugin, untracked screens or an expired trial.
squiggle doctorStill stuck? Send us a bundle
This writes one file with your setup and logs, with secrets removed. Attach it to an email and we can see what you see.
squiggle doctor --bundle