FREE CHROME EXTENSION

YOUR FRIENDLY
NEIGHBORHOOD
UI TESTER.

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.

OPEN SOURCEAPACHE 2.0NO ACCOUNTLOCALHOST FREE PASS
Bug trackerLive
TitleReporterSeverity

New bug

Delete bug?

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.

WHAT THE SPIDER DOES

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.

TYPES LIKE A PERSON

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.

COMIC ALERTS

BANG! on clicks, THWIP! for webs, OMG! when a button goes missing or gets disabled, BOOM! when a run fails, KPOW! when everything passes.

MULTI-PAGE RUNS

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.

AUTO-RUN & SHARING

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.

CONSENT FIRST

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 VS CYPRESS, PLAYWRIGHT, SELENIUM

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.

Crawly compared with Cypress, Playwright, and Selenium
CriterionCrawlyCypressPlaywrightSelenium
Setup timeUnder 2 min, no build stepnpm install + confignpm install + configDriver install + language SDK
Authoring modelRecord by using your appWrite JavaScript testsWrite JS/TS/Python/.NET testsWrite code in any language
Runs whereYour actual browser tabCypress runner / CIHeadless or headed / CIRemote WebDriver / grid
React controlled inputsNative setters + input eventsSpecial .type() handlingNative, tuned for ReactOften needs workarounds
Shareable format.crawly.json (commit-friendly).cy.js spec files.spec.ts filesLanguage-specific code
Best forFast manual regressions, PM-friendly demosFull app test suites in CICross-browser CI suitesLegacy / cross-language CI
PriceFree, Apache 2.0Free OSS + paid dashboardFree, Apache 2.0Free, Apache 2.0

HOW TO INSTALL CRAWLY

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.

  1. Clone the repository

    Run git clone https://github.com/yemon/crawly in your terminal.

  2. Open the extensions page

    Open chrome://extensions in Chrome, Edge, Brave, Arc, or any Chromium-based browser with Manifest V3 support.

  3. Enable Developer mode

    Turn on the Developer mode toggle in the top-right of the extensions page.

  4. Load unpacked

    Click Load unpacked and select the extension/ folder from the cloned repo.

  5. Pin Crawly

    Pin the Crawly icon to your toolbar so you can start recording with one click.

FREQUENTLY ASKED QUESTIONS

What is Crawly?
Crawly is a free, open source Chrome extension that records your clicks and keystrokes, then replays them on your React or Next.js app with a comic-book spider. It types character by character at 25 ms per key, uses native value setters so React controlled inputs accept every keystroke, and yells “KPOW!” when a run passes or “BOOM!” when it fails.
How do I install Crawly?
Clone the repository from GitHub, open 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.
Does Crawly send my recordings anywhere?
No. Everything stays in 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.
Does Crawly work with React and Next.js controlled inputs?
Yes. Crawly types with native value setters and dispatches real 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.
How is Crawly different from Cypress, Playwright, or Selenium?
Cypress, Playwright, and Selenium are code-first frameworks that live in your test suite and run in CI. Crawly is a zero-config Chrome extension: no 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.
Is Crawly free? What license does it use?
Crawly is free and open source under the Apache License 2.0. You can read the code, fork it, modify it, and use it commercially. The full license text lives in the Apache 2.0 LICENSE file at the root of the GitHub repository.
Does Crawly ask permission before running on my site?
Yes. On 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.
Can a crawl span multiple pages?
Yes. Recording and replay both survive full page loads within the same origin. Every navigation is stamped as a 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.
What is the .crawly.json file?
It is the portable export format for a saved crawl. It contains the origin, path prefix, and every recorded step (clicks, typed values, selects, navigations). You can commit a .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.

COMING SOON

SOON

MCP SERVER

Drive Crawly from Claude or any MCP client. Start runs, read results, and manage your crawls straight from an AI conversation.

SOON

AI FULL-SYSTEM TESTING

Describe a flow in plain words. The spider explores your app, builds the crawl itself, runs it end to end, and reports what broke.

SOON

CODING AGENT HANDOFF

One command sends your coding agent everything it needs: the failing URL, the exact element, and what changed, ready to jump in and fix.

OPEN SOURCE, APACHE 2.0

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