Guide

Quickstart

The fastest path from nothing to a running, logged-in profile you can watch in your browser.

1. Run Morrow

Two ways to run it — pick one.

With Node, for local development (hot reload via tsx):

shell
cp .env.example .env   # set MORROW_API_KEY
npm install
npm run dev             # http://localhost:3000

Or with Docker, using the published ghcr.io/jekyo/morrow image:

shell
docker run -e MORROW_API_KEY=secret -v morrow-data:/data -p 3000:3000 ghcr.io/jekyo/morrow:latest

The Docker image persists everything under /data — mount a volume there (as above) or profiles disappear when the container is removed. See Self-hosting for the full environment variable reference.

2. Set MORROW_API_KEY

Every Morrow instance is gated by a single API key. It's required at boot — MORROW_API_KEY is required is thrown and the server refuses to start without it. Set it in .env (dev) or as an environment variable (Docker). Every request needs it as Authorization: Bearer $MORROW_API_KEY.

3. Create a profile

From the API:

shell
curl -X POST http://localhost:3000/api/v1/profiles \
  -H "Authorization: Bearer $MORROW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "research-eu", "locale": "de-DE"}'

Or from the dashboard: open http://localhost:3000/, enter your MORROW_API_KEY once (it's kept in the browser's localStorage and sent with every request), then create a profile from the Profiles page.

4. Start it

shell
curl -X POST http://localhost:3000/api/v1/profiles/research-eu/start \
  -H "Authorization: Bearer $MORROW_API_KEY"

This launches the Camoufox browser and, on first start, pins its spoofed fingerprint for every future start.

5. Open the viewer

Open the profile in the dashboard and you'll see the live remote browser streaming as ~10fps JPEG frames. Press Take Control to drive it by hand — log into a site, and that session is written to the profile like any other, so it's still there next time you start it. See Live viewer for the full walkthrough.

Where to next

  • Profiles — persistence, lifecycle, and config in depth.
  • Playwright — attach a stock client to the same browser.
  • Scraping API — one-shot markdown/screenshot/content extraction.
  • MCP — point an AI agent at the same profile.