Open-source, self-hosted alternative to Loom. Record your screen, share a link, keep your data.
Your recordings live on your own Firebase project — no third-party servers, no vendor lock-in.
thari (தறி) — Tamil for loom. Design inspired by Bhavani Jamakkalam.
Desktop App Firebase (yours) Web Viewer
+-----------+ upload video +-------------------+ fetch +-----------+
| Electron | ──────────────────>| Cloud Storage | | Next.js |
| + React | insert meta | Firestore |<───────────| + Plyr |
| | ──────────────────>| Cloud Functions |───────────>| |
+-----------+ deploy func +-------------------+ serve +-----------+
- Record — Open the desktop app, pick a screen/window/tab, hit record
- Store — Video uploads to your Firebase project with a shareable short link
- Watch — Anyone with the link watches via the web viewer, which fetches directly from your Firebase
No central server sits between the recorder and the viewer.
- Screen + Camera PiP — Capture your screen with a draggable camera overlay
- Self-hosted — All data stays in your Firebase project (free tier includes 5 GB storage)
- Instant sharing — Shareable link copied to clipboard the moment you stop recording
- Emoji reactions — Viewers leave timestamped reactions that appear on the video timeline
- Playback controls — Speed adjustment, PiP, fullscreen via Plyr
- One-click setup — Paste a service account key and the app provisions everything
| Component | Technology |
|---|---|
| Desktop app | Electron 33, React 19, Tailwind CSS 4, electron-vite 3 |
| Web viewer | Next.js 16, Plyr, Tailwind CSS 4 |
| Cloud functions | Firebase Functions v5, Node.js 20 |
| Packaging | electron-builder 25 (DMG + ZIP for macOS) |
| CI/CD | GitHub Actions (release on tag push) |
- Node.js 20+
- A Firebase project on the Blaze (pay-as-you-go) plan
- A service account key JSON for that project
Download the latest DMG from the Releases page — pick Apple Silicon (M1/M2/M3/M4) or Intel depending on your Mac.
macOS Gatekeeper note: The app is not yet code-signed. macOS may show "OpenLoom is damaged and can't be opened". To fix this, run the following after dragging the app to
/Applications:xattr -cr /Applications/OpenLoom.app
On first launch the setup wizard will ask for your service account key. It then:
- Verifies Firestore and Cloud Storage access
- Detects or creates a storage bucket
- Deploys the Cloud Function that serves the public API
cd webviewer
npm install
npm run devRuns on http://localhost:3001. Video links follow the pattern /v/{projectId}/{shortCode}.
├── desktop/ Electron desktop app
│ ├── src/main/ Main process (Firebase Admin, IPC)
│ ├── src/preload/ Context bridge
│ ├── src/renderer/ React UI (recording, library, settings)
│ └── cloud-functions/ Reference copy of deployed function source
├── webviewer/ Next.js web viewer + landing site
│ ├── app/ App Router pages
│ ├── app/v/[...slug]/ Video player route
│ └── lib/ API client, types, mock data
├── .github/workflows/ CI/CD (release.yml)
├── ARCHITECTURE.md Detailed technical architecture
└── firebase.md Firebase services & permissions guide
cd desktop
npm run releaseProduces DMG and ZIP installers for macOS (arm64 + x64) in desktop/release/.
Tag a version and push:
git tag v0.1.0
git push origin v0.1.0The workflow builds the installers and publishes them as a GitHub Release.
The web viewer is configured for Netlify:
cd webviewer
npm run buildThe netlify.toml at the repo root handles build settings. Alternatively, deploy the static export from webviewer/.next to any static host.
- ARCHITECTURE.md — Process architecture, recording pipeline, data flow
- firebase.md — Firebase/GCP services, permissions, provisioning details
PRs and issues are welcome. This project is in early development (v0.1.0).
- Fork the repo
- Create a feature branch
- Make your changes
- Open a pull request
MIT — Anenth Guru