
Deploy Cap | (Just Updated) Loom Alternative Whose Storage Keys Are Yours
Screen recording whose S3 keys are per-deploy, not shared by everyone
mediaserver
Just deployed
cap-web
Just deployed
minio
Just deployed
/data
mysql
Just deployed
/var/lib/mysql
Deploy and Host Cap on Railway
Cap is the open-source Loom alternative: record your screen (and camera and mic), get a shareable link in seconds, and keep every recording on infrastructure you own. This template runs the full Cap stack — web app, media server, MySQL, and S3-compatible object storage — on your own Railway project, with a fresh set of storage credentials generated for your deploy and nobody else's.
About Hosting Cap
The template deploys four services: cap-web (the Next.js app and API, the only public service), mediaserver (Cap's FFmpeg transcoding worker, private), mysql (application database, on a volume), and minio (S3-compatible storage for recordings, on a volume). Every image is pinned by digest, so a redeploy gives you the same build you verified rather than whatever latest moved to overnight. Database credentials, the NextAuth secret, the media-server webhook secret, the 32-byte database encryption key, and both MinIO root credentials are generated per deploy as Railway secrets — they are not baked into this template and no other deploy shares them. The web app talks to MySQL and MinIO over Railway's private network; browsers get presigned upload and playback URLs on MinIO's own public domain. On first boot the app runs its database migrations and creates its storage bucket itself, so there is nothing to provision by hand. Sign-in works out of the box without SMTP: request a login link and the six-digit code is printed to the cap-web deploy logs. Add SMTP variables later if you want real email delivery.
Why Deploy Cap on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Cap on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
- Storage credentials that are yours — MinIO's root user and password are generated per deploy, so the bucket holding your recordings is not reachable with credentials published in a template.
- Transcoding that actually runs — the media server is wired to the web app over the private network with a shared webhook secret, so trims, thumbnails, and MP4 conversion complete instead of failing silently.
- Private database — MySQL stays on the private network; there is no public TCP proxy exposing the root account.
- A working encryption key — Cap requires a 32-byte key for password-protected shares, API keys, and integrations; this template generates one of the correct length.
- Pinned and health-checked — every image is pinned by digest and every service has a healthcheck, so a bad boot is a failed deploy rather than a green one.
Common Use Cases
- Async standups and product demos — record once, share a link, skip the meeting.
- Customer support and bug reports — capture the actual screen instead of describing it.
- Internal documentation and onboarding — build a library of short walkthroughs that stays inside your own infrastructure.
Dependencies for Cap Hosting
- MySQL 8 (included in this template) with a volume at
/var/lib/mysql. - MinIO, S3-compatible object storage (included) with a volume at
/data. - Cap's media server (included) for transcoding.
Deployment Dependencies
Implementation Details
Sign-in is passwordless. Request a link on the login page and read the six-digit code from the cap-web service logs (🔐 VERIFICATION CODE). To send real email instead, set SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, and SMTP_FROM on cap-web.
Recordings are stored in the cap bucket on the bundled MinIO service and served to browsers through presigned URLs on its public domain. To use an external S3 bucket instead, point CAP_AWS_ACCESS_KEY, CAP_AWS_SECRET_KEY, CAP_AWS_BUCKET, CAP_AWS_REGION, and S3_PUBLIC_ENDPOINT at it and remove the MinIO service.
Template Content
mediaserver
ghcr.io/capsoftware/cap-media-serverPORT
cap-web
ghcr.io/capsoftware/cap-webminio
minio/miniomysql
mysqlMYSQL_DATABASE
