LiveDemo is an open-source (MIT) platform for building interactive product demos. Capture a product flow, edit it into a clickable demo, then share it as a link, embed it on your site, or let an AI agent guide buyers through it.
Looking for an open-source alternative to Navattic, Storylane or Arcade? This repository runs the full LiveDemo stack on your own machine or server with Docker Compose. Self-hosting is free.
- Capture: Chrome extension, Figma plugin, macOS and Windows apps (HTML, screenshot and video demos)
- Edit: steps, popups, pan and zoom, autoplay, call-to-actions, brand design
- AI: AI voiceover, AI text personalization and Agentic Demos, where an AI agent guides the buyer and answers questions (bring your own API keys)
- Share: public link, website embed (iframe), email, GIF and MP4 export
- Analytics: views, completion rate, drop-off, time spent and captured leads
| Option | Cost | Best for |
|---|---|---|
| Self-host (this repo) | Free, MIT license | Teams that want full control over their data and infrastructure |
| LiveDemo Cloud | Free plan for 1 creator, paid plans from $34/mo | Teams that want to start in minutes without running servers |
| Business plan | Custom, from 10 creators | Whitelabel, custom domain and dedicated support, hosted by LiveDemo or by you |
Compare LiveDemo with 26 other demo tools: livedemo.ai/compare
| Repository | Description |
|---|---|
| livedemo-backend | Backend API and consumer |
| livedemo-web-app | Demo editor web app |
| livedemo-chrome-app | Chrome extension for capturing demos |
| livedemo-web-proxy | Web proxy |
| livedemo-ai-api | AI API |
| livedemo-rrweb | Fork of rrweb for recording and replaying the web |
This deployment runs three containers:
- mongo: MongoDB 8 on port
27017, with a persistent local volume - livedemo-backend: backend API on port
3005 - livedemo-web-app: editor web app on port
5000
All images are pulled from Docker Hub (docker.io/livedemo/...), so no local build is required. The containers use host networking (network_mode: host).
- Docker installed and running
- Docker Compose v2+ (
docker composecommand)
Two env files are included as templates in local/envs/. Fill in any secrets or keys you need before starting.
local/envs/backend.env: variables for livedemo-backend
| Variable | Description |
|---|---|
PRIVATE_AUTH_TOKEN |
Auth token for internal service calls |
OPENAI_API_KEY |
OpenAI API key (needed for AI features) |
STRIPE_SECRET_KEY |
Stripe secret key (use sk_test_ for dev) |
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY |
AWS credentials (optional for dev) |
ELEVENLABS_API_KEY |
ElevenLabs key (optional, for AI voiceover) |
MUX_TOKEN_ID / MUX_TOKEN_SECRET |
Mux credentials (optional, for video) |
DB_URIis pre-configured to point to themongocontainer. Do not change it.
local/envs/web-app.env: variables for livedemo-web-app
| Variable | Description |
|---|---|
STRIPE_PUBLISHABLE |
Stripe publishable key (use pk_test_ for dev) |
CAPTCHA_SITE_KEY |
reCAPTCHA site key (optional) |
GOOGLE_FONT_API_KEY |
Google Fonts API key (optional) |
docker compose -f local/docker-compose.yml pulldocker compose -f local/docker-compose.yml up -dThis will:
- Start MongoDB and wait until it passes its health check
- Start
livedemo-backendonce MongoDB is healthy - Start
livedemo-web-apponce the backend is up
| Service | URL |
|---|---|
| Web app | http://localhost:5000 |
| Backend API | http://localhost:3005 |
| MongoDB | mongodb://localhost:27017 |
# View logs for all containers
docker compose -f local/docker-compose.yml logs -f
# View logs for a specific container
docker compose -f local/docker-compose.yml logs -f livedemo-backend
docker compose -f local/docker-compose.yml logs -f livedemo-web-app
# Stop all containers (data is preserved)
docker compose -f local/docker-compose.yml down
# Stop and remove all data volumes (full reset)
docker compose -f local/docker-compose.yml down -v
# Restart a single container
docker compose -f local/docker-compose.yml restart livedemo-backend
# Pull latest images and recreate containers
docker compose -f local/docker-compose.yml pull && docker compose -f local/docker-compose.yml up -dMongoDB data and backend uploaded files are stored in named Docker volumes. Compose prefixes them with the project name, which defaults to local (the folder containing docker-compose.yml):
| Volume | Contents |
|---|---|
local_mongo_data |
MongoDB database files |
local_backend_data |
Demos, stories, and story request files |
To list volumes:
docker volume ls | grep -E 'mongo_data|backend_data'To remove volumes and start fresh:
docker compose -f local/docker-compose.yml down -vContributions are welcome. See CONTRIBUTING.md and the Code of Conduct. Report security issues as described in SECURITY.md.
MIT License (see LICENSE).


