RECORD & REPLAY
Click record, use your app like a human. Crawly captures clicks, typing, selects, and mouse moves, then replays them any time. Selectors prefer data-testid and id, so hashed React class names are no problem.
Crawly is a free, open source Chrome extension that records a flow once, then a tiny comic spider replays it on your React or Next.js app: crawling to fields, typing at 25 ms per key, pouncing on buttons, and yelling KPOW! when everything passes. When your UI changed behind your back, you get an OMG! and a BOOM! instead of a silent green checkmark.
| Title | Reporter | Severity |
|---|
This will permanently remove the bug from the tracker.
Live demo: that is the real extension spider driving a real form on this page. No video, actual DOM clicks and keystrokes, on a loop.
Click record, use your app like a human. Crawly captures clicks, typing, selects, and mouse moves, then replays them any time. Selectors prefer data-testid and id, so hashed React class names are no problem.
Character by character, 25 ms per key, through native setters and real input events. Controlled React inputs accept every keystroke like it came from a keyboard.
BANG! on clicks, THWIP! for webs, OMG! when a button goes missing or gets disabled, BOOM! when a run fails, KPOW! when everything passes.
Runs checkpoint before every step and survive real navigations. Each landing doubles as an assertion: land on the wrong page and the spider panics loudly instead of passing quietly.
Flip AUTO and a crawl runs itself whenever a matching page loads. Export any crawl as .crawly.json, commit it, share it. Imports never get auto-run rights until you say so.
localhost on any port just works. Every other domain gets asked once, in a big comic panel, before the spider records or replays anything. Everything stays in your browser.
Crawly does not try to replace your CI test framework. It sits next to it: a zero-setup way for anyone on the team to record a flow, commit a .crawly.json, and re-run the exact sequence any time. Here is how it compares.
| Criterion | Crawly | Cypress | Playwright | Selenium |
|---|---|---|---|---|
| Setup time | Under 2 min, no build step | npm install + config | npm install + config | Driver install + language SDK |
| Authoring model | Record by using your app | Write JavaScript tests | Write JS/TS/Python/.NET tests | Write code in any language |
| Runs where | Your actual browser tab | Cypress runner / CI | Headless or headed / CI | Remote WebDriver / grid |
| React controlled inputs | Native setters + input events | Special .type() handling | Native, tuned for React | Often needs workarounds |
| Shareable format | .crawly.json (commit-friendly) | .cy.js spec files | .spec.ts files | Language-specific code |
| Best for | Fast manual regressions, PM-friendly demos | Full app test suites in CI | Cross-browser CI suites | Legacy / cross-language CI |
| Price | Free, Apache 2.0 | Free OSS + paid dashboard | Free, Apache 2.0 | Free, Apache 2.0 |
Crawly ships as an unpacked Chrome extension. Total install time is under two minutes, no build step required. A one-click Chrome Web Store install is coming soon.
Run git clone https://github.com/yemon/crawly in your terminal.
Open chrome://extensions in Chrome, Edge, Brave, Arc, or any Chromium-based browser with Manifest V3 support.
Turn on the Developer mode toggle in the top-right of the extensions page.
Click Load unpacked and select the extension/ folder from the cloned repo.
Pin the Crawly icon to your toolbar so you can start recording with one click.
chrome://extensions in your browser, enable Developer mode, click Load unpacked, and select the extension/ folder. See the step-by-step install guide. A one-click Chrome Web Store install is coming soon.chrome.storage.local inside your browser. Crawly makes zero network requests, ships no telemetry, and never uploads a recording. You can export a crawl as a .crawly.json file yourself if you want to share or commit it.input events, which is exactly what React controlled components need to accept each keystroke. Selectors prefer data-testid, id, name, aria-label, and placeholder before falling back to a structural path, so hashed CSS class names from Next.js builds do not break anything.npm install, no config file, no scripts. You record a flow by using your app, then hit RUN. It is aimed at quick manual regression checks and shareable “did the signup flow still work” crawls, not at replacing your framework of choice for CI-scale coverage. See the comparison table.localhost and 127.0.0.1 (any port), Crawly works right away. On every other domain, Crawly shows a comic-panel consent prompt once, per origin, before it will record or replay anything. You can revoke consent for any domain from the popup at any time.nav step that doubles as an assertion: if the app lands on the wrong path during replay, the spider panics with OMG! and BOOM! instead of passing silently..crawly.json to a repo, hand it to a teammate, and import it back into another Crawly install. Values are stored in plain text, so avoid recording real credentials.Drive Crawly from Claude or any MCP client. Start runs, read results, and manage your crawls straight from an AI conversation.
Describe a flow in plain words. The spider explores your app, builds the crawl itself, runs it end to end, and reports what broke.
One command sends your coding agent everything it needs: the failing URL, the exact element, and what changed, ready to jump in and fix.
Crawly is free and open source under the Apache 2.0 license. Read it, fork it, bend it to your team's will. Bug reports and pull requests are welcome, the spider does not bite contributors.
# grab the source
git clone https://github.com/yemon/crawly
# load it unpacked
chrome://extensions > Developer mode > Load unpacked
# share a crawl with your team
signup-flow.crawly.json