FAQ
Short answers. If yours isn't here, open an issue on GitHub.
Does it ship to production?
No. The Vite plugin only runs in vite dev; vite build output has no Retake code in it. The CLI and the front server are dev tools you start by hand, and they don't change your project's files unless you choose separate code. Uninstall it and nothing is left but the .retake/ folder.
Does it rewrite my files?
Only with Separate code on (timelines keep their own code). Then switching to a timeline puts its code on disk, so your files change under you. With Share code, or before you answer the dock's question, Retake only takes snapshots into .retake/ and never writes your files.
How it's kept safe:
- Every version is a snapshot in
.retake/, and checkouts are journaled: a swap cut short is undone at the next start (the half-switched files are kept as a version too). - When Retake stops, the newest code goes back on disk. After a crash it's put back at the next start.
retake code restoredoes it by hand. - Git's HEAD, index and refs are never touched. No checkout runs while git is busy, and a branch switch pauses swapping until you resume it.
node_modules, framework output (.next,.svelte-kit,.nuxt,next-env.d.ts) and paths in.retake/ignoreare never swapped.- While files switch, the dev server's hot updates are held, so the app never reloads on a half-written tree.
What doesn't it understand yet?
| Not yet | What a note gives instead |
|---|---|
| Canvas and WebGL drawings | Retake sees the canvas element, not what's drawn in it. The note points at the canvas and the moment; your agent edits the per-frame code |
| Spring physics outside Motion | React Spring and GSAP physics replay correctly, but only Motion springs are read as springs. For others the note gives the element, the moment and the values on screen |
| A press with no transition | A :active style that changes at once leaves no animation to record, so the note can't say how the press moved. Presses with a transition are listed |
Which browsers?
Chrome, Edge, Arc, Brave and other Chromium browsers. That's what every test and framework check runs in. Firefox hasn't been tested.
Does it work in Safari?
It isn't tested in Safari, so treat it as unsupported for now. Retake tells its frame apart from the dock page by the Sec-Fetch-* headers browsers send; for browsers that don't send them, the front server falls back to a marker in the frame's URL, but that path hasn't run in a real Safari. Use a Chromium browser for Retake.
What isn't rewound?
Retake rewinds the browser, not your server. Replays answer from the recording instead of calling the server again.
| Not rewound | Why, or what to do |
|---|---|
| Database writes, server sessions, server-action side effects | They happened on your server and stay as they are. Retake suits prototypes whose backends don't remember state |
| Service workers and the Cache API | Service workers are off while Retake is in front |
| Cross-origin iframes | Retake can't run its clock inside another origin's page |
Native import() timing | Vite's lazy routes and Astro islands load when the browser fetches them; they can't be held to their recorded moment |
| Canvas and WebGL pixels in the preview | Dragging shows the DOM; canvas pixels are right once the rebuilt moment swaps in |
Where does my data live?
In a .retake/ folder in your project, on your machine. Nothing is sent anywhere. The folder git-ignores itself.
| Path | What |
|---|---|
session.json | Timelines, bookmarks and notes |
recordings/ | One gzipped recording per timeline: your inputs and what your API answered |
docs/ | Front server: the frame's pages as they came, so a rebuild gets the HTML it was recorded with (the last 200) |
versions/ | Code snapshots, one per version of your code (blobs/ holds the files; code-timelines.json says which is whose timeline's) |
settings.json | Your answer to Separate code or Share code |
server.json | The running server's URL and token, for the MCP server. Removed when it stops |
front.log | With --verbose: every request the front server handled |
Recordings hold what you typed and what your API answered, so treat .retake/ like any local data. Start fresh in the dock clears the timelines, notes and recordings; rm -rf .retake clears everything. --root puts it somewhere else.
Sign-in and OAuth
Sign-in pages from other sites refuse to load inside a frame, and Retake runs your app in one. Sign in at your app's own port first (cookies on localhost are shared across ports), then open Retake's. Retake prints that reminder when it starts. A sign-in redirect that comes back from another site gets the plain page, so the sign-in completes; reload to get the dock back.
The dock covers the bottom of my app
It floats over it, so a cookie banner's buttons or Next's dev badge can end up underneath. Drag the dock's divider down, collapse it with ⌥T, or open the app with ?retake=0 for one load.
Do I need React?
No. Recording, going back and timelines work with any framework or none. Notes name the React component and source line when the app is React in development mode; on anything else they still carry the selector, classes, computed styles, size and moment.
What's the license?
PolyForm Shield 1.0.0. In plain words: use it, change it and share it for anything, at work or at home, except to build a product that competes with Retake. Keep the license and its copyright notice with any copy you share.