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

Six steps. squiggle init does most of the setup and shows each change before it makes it; the rest is one wrapper and a rebuild.
  1. Install Squiggle

    Studio, the app you download, includes the squiggle command: 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.
    Terminal
    npm install -g @squiggle.sh/clisquiggle activate --trial
  2. Set 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.
    Terminal
    squiggle init --agent claude

    For Claude Code: also registers Squiggle in .mcp.json and installs the agent kit (skills, subagents and commands) in .claude/.

  3. Track your screens

    The one edit init leaves 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 your NavigationContainer ref.
    app/_layout.tsx
    import { Squiggle } from '@squiggle.sh/react-native';import { Stack, useNavigationContainerRef } from 'expo-router';export default function RootLayout() {  return (    <Squiggle navigationRef={useNavigationContainerRef()}>      <Stack />    </Squiggle>  );}
  4. Rebuild once

    The SDK includes native code, so a reload is not enough. squiggle up relaunches the app with Squiggle attached; init added it to your ios script, so from now on that script does both. Bare React Native: npx react-native run-ios.
    Terminal
    npx expo run:ios && squiggle up
  5. Check the setup

    doctor checks the simulator, the app, screen tracking, source lines and your licence, and tells you how to fix anything that is missing.
    Terminal
    squiggle doctor
  6. Run your first flow

    smoke is the flow init wrote: 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.
    Terminal
    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.

Terminal
squiggle doctor

Still 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.

Terminal
squiggle doctor --bundle