Changelog

What’s new in Squiggle: every feature, every fix and every speed-up, newest first. The desktop app, the CLI, the MCP server and the SDK all ship on one version number, so a release here is a release everywhere — update once and you have all of it.

0.2.011 October 2026

Desktop app

  • Newagentic flows: a step can be a goal an agent drives. Flows has Scripted and Agentic tabs, shows how many agent steps each flow has recorded, and edits an agent step's prompt, verifier and recording. Intent runs moved here too, replacing the Agents screen
  • Newthe Runtime Inspector: a component tree beside four views of the selection — Details, Graph, Perf and Screen map
  • NewInspector Details: a component's props, hooks and state, its context and stores, renders, accessibility, style and structure, read live from the app
  • Newedit a prop or a hook's state from the Inspector and the app on the simulator changes with it, until it reloads
  • Newpick a component by pointing at it on the device mirror; where several are stacked under the pointer, the scroll wheel walks through them and a click lists them all
  • NewFollow in app: selecting a component in the tree or the graph brings it on screen, navigating to its screen and scrolling it into view
  • Newopen the line that writes an element, or where its component is defined, in your editor
  • Newthe Inspector's Graph draws the live component graph as a tree or a force layout, with pan, zoom and the lineage of whatever you hover
  • Newthe Screen map: your app's screens and the taps between them, drawn as a roadmap with each navigator's screens grouped under its name, the screen the app is on ringed, and every screen's picture
  • NewCrawl the app from the Screen map: it presses each control in turn, maps every screen a press opens and photographs it, signing in with the values your flows type. Crawl from here starts on one screen, and the map fills in as it goes
  • NewGo to screen: pick a screen from the map or the menu, and Go there drives the app along the known path to it
  • Newfrom any screen on the map, start a scripted flow that taps its way there, or an agentic flow that starts there
  • Newthe Screen map shows which screens no flow reaches, filters to the screens reachable from where the app is, and adds the screens you open yourself
  • NewReplay, redesigned around what went wrong: Studio keeps the five seconds before a crash, error, stall or spike as an incident, and the player opens on it with a screenshot and a report you can copy
  • Newfrom an incident, explain the component it blames, open the run in Performance or Analytics, or make a regression flow from it
  • NewReplay's event list says what was tapped, swiped or scrolled, where, and what it led to, and its timeline has metric lanes for frames, activity, memory and latency, each with a legend
  • NewDrive device: scrubbing a recording, pressing an event or playing it drives the app on the simulator to the same moment
  • Newrecordings are named the way you would describe them, and you switch between them without leaving the player
  • Newa gallery for screenshots and screen recordings, with a swipeable, zoomable viewer. Screen recordings are H.264 or HEVC video
  • Newsimulator tools and real device skins
  • Newcompact mode: a small simulator-only window with its own toolbar, which you customise and reorder, and a row of live graphs
  • Newinstalling the app installs the squiggle command too: it links itself into your terminal, and offers to add it to your PATH when your shell cannot find it. Settings → Command line removes it
  • FixStudio no longer runs out of memory while the device mirror streams
  • Fixclicks on a menu or tooltip land on it rather than the control underneath, overlays open beside their control, and buttons keep working after compact mode
  • Fixthe simulator mirror takes input with no app connected, and an overlay over it no longer passes clicks through to the simulator
  • Fixre-running a flow from History uses the settings the run was recorded with
  • Fixthe notification bell reports failed runs (flows, benches, crawls, recordings, agent runs) and stays quiet about a command you typed in a terminal, which already showed its error
  • PerfStudio's idle CPU dropped from 22% to 6% of a core, and the device mirror costs about 20 points of a core less
  • Perfflows run from Studio at the same speed as from the terminal
  • Perfa 2,000-node graph pans and zooms at 60 fps, and switching tree and force layouts takes a tenth of the time
  • Perfmemory stays flat in a long session: an hour at 60 renders a second holds 11.6 MB instead of 90.7 MB, and a two-hour recording writes 130 MB instead of 968 MB
  • PerfStudio uses 43% less CPU while other tools read the app through it

CLI

  • Newdrive react-native-macos apps as well as iOS: --platform macos on every device command, and install-macos-agent.sh, shipped beside the binary, puts the agent in your app
  • Newsquiggle flow --record saves the run as a video, and an agent can attach it to a pull request
  • Newsquiggle probe reads live values from the running app's JavaScript over Metro
  • Newsquiggle crawl writes screen memory as it goes, and crawl --changed revisits only the screens a change touches
  • Newa failed step says why and what to do next, and --log <level> streams the run's events as it goes
  • Newsquiggle init --agent claude|copilot|codex registers the MCP server with the agent you use, for Claude Code, Copilot or Codex
  • Newsquiggle bench --pr <N> posts the result as a sticky comment on the pull request
  • Fixscroll no longer crashes the simulator, and it actually scrolls
  • Fixa tap on an element off screen is refused instead of landing on whatever is there
  • Fixback-to-back flow runs pass: no screens left open by the previous run, and each run starts from where its flow expects to
  • Fixa run that launched your app gives up on one that never connects, and says why
  • Fixsquiggle flows takes flow files as well as directories, and squiggle agent run <name> finds a program by name
  • Fixa react-native-macos app is driven in the background, and an action that did nothing is reported as a failure rather than a success
  • Perfsquiggle --version answers in about 20 ms

Agents & MCP

  • Breakingtool names drop the squiggle_ prefix your client already adds, so mcp__squiggle__squiggle_tap is now mcp__squiggle__tap. Update any permission grant that names a tool. squiggle_exec is now probe_read
  • Newrun_flow runs agentic flows: your agent drives each agent step once, and every run after that replays it without a model
  • Newfilmstrip reads a recording's frames, for defects the graph cannot see
  • Newdescribe and find see native views, such as an Expo Router native tab bar, that tap could already reach
  • Newan action returns the screen it just changed, so the next step needs no second look
  • Newevery tool has a display title in your client
  • Newevery element knows the line that writes it: describe {fields: 'source'} shows it, and find {callSite} shows what a line renders
  • Newinspect reads a component's live props, hooks and state
  • Fixno tool call waits forever, and one that hangs no longer blocks the rest
  • Fixinput_text waits for the field to take focus, so the tap after it lands
  • FixStudio and the CLI take port 7777 back from an idle MCP server
  • Fixa flow's secrets never reach the model, the run report or the recording
  • Fixthe agent kit's hooks and slash commands run your installed squiggle, and its plugin.json starts the server with squiggle mcp. The kit no longer carries a Stop hook that only applied to Squiggle's own repository. Regenerate the kit after upgrading
  • Perfa tap with its observation returns in 110–185 ms, and choosing the target takes 7 ms instead of 300
  • Perfperf_sql and saved queries answer within a 24 KB budget with a truncation note, instead of reading the whole table first

Flows & device

  • Breakinga step key that nothing reads is a parse error with its line number. It used to be ignored, and surfaced later as a selector that would not match
  • Newagent: steps: a goal an agent drives, checked by a verifier you write, recorded beside the flow as .agent.json and replayed from then on
  • Newdeclared routes, with route hints for agent steps
  • Newa flow can declare that it fails by design, or that it runs some other way
  • Newa flow's config: block carries the run settings it needs (scroll mode, settle and step timing, autoScroll, strictAssert), so a suite runs every flow the way it was written to run
  • Newa recorded tap names the control it pressed
  • Fixan app launched without the agent is relaunched with it before a run, instead of running slower without it
  • Fix"keep software keyboard: off" keeps it off, and a run never takes over another app on its device
  • Perfa login flow runs in about a quarter of the time: the median went from 10.9 s at 0.1.0 to 2.7 s, and 2.3 s with --direct-scroll
  • Perfsquiggle flow starts about 1.4 s sooner, and reconnects after a relaunch in 1.0 s instead of 6.2 s
  • Perfa suite spends less time resetting between flows, and its shards pull from one queue ordered by each flow's last duration

Performance

  • Newwhat Studio derives live (dead zones, scrolls, gesture tracks, the touch heatmap) is stored in perf.db, so your agent can query it
  • Perfthe metric store keeps older samples at coarser resolution, so a store that had grown to 1.5 GB now takes about 30 MB. Product reads take under 2 ms, and writes are 4× cheaper

SDK

  • NewLegend State stores are instrumented by the Babel plugin, alongside Zustand, MMKV, AsyncStorage and SQLite
  • Perfthe SDK does less work on your app's JavaScript thread, and sends about 31% fewer bytes per frame. Encoding a frame takes 122 ns instead of 360, and an app nobody connects to no longer holds 2.3 MB of memory for it

Website

  • Newtry Studio in your browser at squiggle.sh/studio, against a live demo app, with a guided tour of 21 chapters across every screen
  • Newdocs pages open on live slices of it, and every page's header opens Studio over the page you are on
  • Newon a phone, Studio plays its own tour, sized to read, with a chapter menu

Everything else

  • Perfa crawl of the example app's 18 screens takes 46 s instead of 94 s, and never leaves the app
  • Perfchecking the assertions of 421 recordings takes 3.9 s instead of 209 s, and seeking a recording is about 3.4× faster

Public beta

0.1.016 August 2026

Welcome to Squiggle. This is the first public release, and the whole idea fits in a sentence: your app already knows what it is doing — its component tree, its state, its navigation, its network, its frame times — and until now nothing was asking. Squiggle puts a small SDK inside the running app, streams all of that into one queryable model, and then QA, performance, product analytics and agents stop being four tools that disagree and become four views over the same thing.

That model is the design, not a feature of it. A flow selector resolves against it, so a renamed button re-resolves instead of going red. A slow frame and the render that caused it are two queries over the same data. An agent reads it instead of screenshots — which is why a login journey runs end to end at zero model turns, and why every claim it makes carries the session and event it came from, for you to check rather than believe.

What you install. Six pieces, one version number, one licence. Start with the SDK: everything else is a view over the graph, and nothing produces a graph until the app is instrumented.

@squiggle.sh/react-native
the SDK, and the only Squiggle code that goes inside your app. bun add @squiggle.sh/react-native, then one side-effecting import at the top of index.js. No provider, no config file, no account: the native accelerator and its single peer come along with it, idle cost is approximately zero while nothing is attached, and it checks no licence — the thing that has to be trusted enough to ship in your bundle asks nothing of you.
@squiggle.sh/babel-plugin
a devDependency, and strictly optional. It is the difference between a component name and a clickable source location, and — with MMKV v4 — between storage spans and none.
@squiggle.sh/cli
npm install -g @squiggle.sh/cli. Sixty-three commands from one typed tree, with an exit-code contract CI can branch on: squiggle init wires the SDK into an existing app, squiggle up relaunches it with the agent attached and proves it, squiggle flow runs a journey, and --json is on everything that returns data.
The desktop app
the DMG on the download page, for Apple Silicon. The Studio, the Runtime Inspector, the Performance Center and the Agent Center, plus the same squiggle binary bundled inside the app, so installing one installs both. One licence and one project store across the two.
The MCP server
already in the CLI, so there is nothing else to install. squiggle init --mcp merges the entry into your .mcp.json — your other servers survive untouched — and your agent gets seventy-five tools over one warm session, where a second question costs almost nothing.
The agent kit
squiggle agent kit --install writes skills, a subagent per mode, hooks and slash commands into your agent, so it learns how to drive your app once instead of being told each time.
A licence
squiggle activate --trial gives you fourteen days with no card. After that a licence verifies offline, on the machine, and CI takes a token instead.

What beta means here. Everything below this line works and is being used daily; beta is about the shape, not the parts. The SDK's public API is what we will be slowest to change, because it lives in your bundle. The CLI's flags, the MCP tool names and the flow vocabulary are where a breaking change is most likely before 1.0 — and every one of them will land here, on this page, with the version that made it.

Desktop app

  • Newone-click simulator bring-up, and a live canvas you can drive your app from
  • Newthe Runtime Inspector — eleven node kinds, the causality edges between them, and a render-flame tree you can scrub
  • Newsix overlay modes on the canvas, and a grid that watches several devices at once
  • Newthe Performance Center: flamegraphs, heap diffs, network waterfalls and baselines, side by side
  • Newinteraction analytics — a heatmap that knows which component was under the finger, not just where the pixel was

CLI

  • Newsixty-three commands from one typed tree, with an exit-code contract CI can branch on
  • Newsquiggle init wires the SDK into an existing Expo or bare app in one step, and is safe to run twice
  • Newsquiggle up relaunches your app with the agent attached — and proves it, rather than hoping
  • New--json on every command that returns data, so a run is pipeable into whatever you already have

Agents & MCP

  • Newan MCP server with seventy-five tools over one warm session, so a second question costs almost nothing
  • Newa runtime that executes a compiled plan and wakes the model only at the decisions that need one — a login journey runs end to end at zero model turns
  • Newevery claim an agent makes carries the session and event it came from, so you can check it instead of believing it
  • Newsquiggle agent kit --install drops the skills into your agent, so it knows how to drive the app without being told each time

Flows & device

  • Newflows in YAML, with selectors that name what a control _means_ rather than where it sits — a moved button re-resolves instead of going red
  • Newrecord a session and replay it offline, as many times as you like, against the same assertions
  • Newthree delivery planes, chosen per step, so a run is as fast as it can safely be

Product analytics

  • Newfunnels with time-to-convert, cohort retention, feature affinity and release annotations — over the same events everything else reads

SDK

  • Newone install and one import. A Babel plugin and an Expo config plugin do the rest, and nothing ships to your users

Licensing

  • Newa fourteen-day trial with no card, and a licence that verifies offline once activated