Frequently asked questions
Still have questions? Email us.
Getting started
Do I need to install anything permanently?
No. Run npx @demotape.dev/cli login once to connect your account, then npx @demotape.dev/cli whenever you want to share. If you prefer shorter commands, install it globally with npm install -g @demotape.dev/cli.
What do I need to create an account?
A GitHub or Google account. That's it. No credit card required to get started.
Does my client need to sign up or install anything?
No. Your client just clicks the link and browses normally. No account, no app, no extension. The viewer includes a small recording indicator, and recording can be disabled if needed.
Sharing & projects
What is a project?
A project is a persistent URL like my-project.demotape.dev that you give to a specific client. You create it once and reuse it. Stop sharing and the URL goes offline. Start sharing again and the same URL comes back.
How does DemoTape know which app to share?
DemoTape detects running services on your machine and selects the most likely app automatically. If multiple apps are running, you can choose which one to share.
Do I need to configure ports?
No. DemoTape detects your app and routes requests automatically. You can still specify a port manually with demotape <port> if needed.
What if my app uses multiple services?
DemoTape supports multi-port apps out of the box. APIs, WebSockets, and other services are routed automatically through the shared URL.
What if it detects the wrong app?
You can override detection by specifying ports directly: demotape 3000 or demotape 3000 8001.
Does it work with any framework?
Yes. DemoTape works with common frameworks like Next.js, Vite, Rails, Django, Laravel, and more. It works with anything that runs on a local port.
What happens to the URL when I stop sharing?
The URL goes offline — your client will see a waiting screen if they try to visit it. The URL is reserved for your project and comes back online the next time you run demotape.
Can I rename my project URL?
Yes, from the dashboard. Renaming creates a new subdomain and deactivates the old one, so make sure to send your client the updated link. You cannot rename a project while it is actively being shared — stop sharing first.
Session recording
How does the recording work? Is it a video?
No video. DemoTape injects a lightweight script that captures DOM changes, mouse movements, clicks, and scrolls as structured events — similar to how browser devtools work. Playback reconstructs exactly what your client saw without recording a single frame of video. It's smaller, faster, and more accurate.
What exactly is recorded?
Mouse movement, clicks, scrolls, keyboard interaction (excluding passwords), page navigation, DOM changes, and console errors with timestamps. Passwords and sensitive input fields are masked automatically.
Do replays show browser errors too?
Yes. DemoTape captures console.error output during the session and shows it on the replay timeline so you can match broken behavior with the exact moment the client hit it.
Can I watch my client browse in real time?
Yes. Open your dashboard while your client is on the link and you'll see a live view of their session as it happens.
How long can a shared session stay live?
Session duration and idle-window limits depend on your plan. See the pricing page for the current limits.
How long are recordings kept?
Retention depends on your plan. See the pricing page for the current replay retention limits.
Port detection & setup
How does port detection work?
DemoTape scans common development ports on your machine and identifies which ones have active HTTP servers. It checks for known framework signatures (like Next.js, Vite, Rails, Django) and picks the most likely candidate. If you have multiple apps running, it will ask you to choose.
What ports does DemoTape scan?
DemoTape checks common development ports including 3000, 3001, 4000, 4200, 5000, 5173, 8000, 8080, and others. It also reads framework config files (like package.json scripts or vite.config) to infer the correct port.
Can I share a specific port?
Yes. Run demotape <ports> to bypass auto-detection and share specific ports directly. Useful if you have multiple services or a non-standard setup.
What about multi-port apps (frontend + API)?
DemoTape routes requests to the right local service automatically. If your frontend is on port 3000 and your API is on port 8080, both work through the same shared URL. API activity also appears in the session's request inspector.
Does it work with Docker or containers?
Yes, as long as the ports are forwarded to your host machine. DemoTape connects to localhost ports, so if your container maps port 3000 to the host, it works the same as a native dev server.
Console & error recording
What console output is captured?
DemoTape captures console.log, console.warn, console.error, console.info, and console.debug calls from the viewer's browser. Each entry includes the message, log level, timestamp, stack trace (for errors), and the page URL where it occurred.
How do console errors appear in the replay?
Console errors show as red markers on the replay timeline. You can click any marker to jump to the exact moment the error occurred. The console panel below the replay shows all captured entries with level filters, search, and timestamps.
Are unhandled exceptions captured too?
Yes. Unhandled JavaScript exceptions and unhandled promise rejections are captured alongside regular console output. Stack traces are preserved so you can trace the error back to the source.
Can I filter console output by level?
Yes. The console panel includes toggles for each log level (error, warn, info, log, debug). You can also search across all console and request entries with the filter input.
Request recording & content capture
How does request recording work?
DemoTape records the requests your app handles during a shared session. You can see the method, path, port, status code, and timing for each request, so it is clear what actually reached your app when something broke.
What request content is captured?
Both request and response bodies are captured during a shared session. Open any request entry in the session console to inspect the data in a detail modal.
Does it capture WebSocket traffic?
WebSocket connections are proxied and routed correctly, but individual WebSocket messages are not captured in the request inspector. HTTP upgrade requests are logged.
Are request bodies stored securely?
Request content is stored alongside session data and follows the same retention policy as your plan. Data is encrypted in transit and stored in isolated storage. Captured content is only accessible to authenticated project owners.
Can I see which request caused a UI bug?
Yes. Request entries appear interleaved with console errors in the session timeline, sorted by timestamp. If an API returned a 500 or an unexpected payload, you can see it right next to the console error it caused and jump to that moment in the replay.
What if a request returns 200 but with the wrong body?
That's exactly why content capture exists. DemoTape logs the full response body, so you can see what the API actually returned — not just the status code. Open the request detail modal to inspect the payload.
Privacy & security
Is my local code exposed?
Only what your client can access through the browser — the same content they'd see if they visited your local server directly. Source code, environment variables, and filesystem are never accessible.
Should I tell my client they're being recorded?
That depends on your jurisdiction and how formal your client process is. DemoTape shows a small recording indicator on the viewer page, and recording can also be disabled if you don't want to capture a session. If you're unsure, add a line to your project brief such as: "I use session recording to understand how clients experience the work."
Is the tunnel connection secure?
Yes. Shared links use HTTPS by default, and traffic between your client's browser and your local server is encrypted in transit.
Billing
What happens if I exceed my project limit?
You won't be able to create new projects until you delete an existing one or upgrade. See the pricing page for the current project limits by plan.
Can I cancel anytime?
Yes. Cancel anytime from your account settings. You keep access until the end of your billing period.
Is there a free trial for Pro?
The free plan is a permanent free tier. See the pricing page for the current differences between Free, Pro, and Team.
Ready to try it?
See how it's priced on the pricing page.