Add the ability to export projects as .opencut JSON files and import them on another device. Export is available from the project context menu and dropdown menu. Import is available via a button in the projects header. The export format includes a version field for future compatibility. Imported projects receive a new ID to avoid collisions. |
||
|---|---|---|
| .github | ||
| .vscode | ||
| apps | ||
| docs | ||
| legacy | ||
| rust | ||
| script | ||
| .dockerignore | ||
| .gitignore | ||
| .npmrc | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
| biome.json | ||
| bun.lock | ||
| docker-compose.yml | ||
| package.json | ||
| tsconfig.json | ||
| turbo.json | ||
| wrangler.jsonc | ||
README.md
|
|
OpenCutA free, open-source video editor for web, desktop, and mobile. |
Sponsors
Thanks to Vercel and fal.ai for their support of open-source software.
Why?
- Privacy: Your videos stay on your device
- Free features: Most basic CapCut features are now paywalled
- Simple: People want editors that are easy to use - CapCut proved that
Features
- Timeline-based editing
- Multi-track support
- Real-time preview
- No watermarks or subscriptions
- Analytics provided by Databuddy, 100% Anonymized & Non-invasive.
- Blog powered by Marble, Headless CMS.
Project Structure
apps/web/– Main Next.js web applicationapps/desktop/– Native desktop app (in progress)src/components/– UI and editor componentssrc/hooks/– Custom React hookssrc/lib/– Utility and API logicsrc/stores/– State management (Zustand, etc.)src/types/– TypeScript types
Getting Started
Prerequisites
- Bun
- Docker and Docker Compose
Note: Docker is optional but recommended for running the local database and Redis. If you only want to work on frontend features, you can skip it.
Setup
-
Fork and clone the repository
-
Copy the environment file:
# Unix/Linux/Mac cp apps/web/.env.example apps/web/.env.local # Windows PowerShell Copy-Item apps/web/.env.example apps/web/.env.local -
Start the database and Redis:
docker compose up -d db redis serverless-redis-http -
Install dependencies and start the dev server:
bun install bun dev:web
The application will be available at http://localhost:3000.
The .env.example has sensible defaults that match the Docker Compose config — it should work out of the box.
Desktop setup
Desktop is opt-in. If you're only working on the web app, skip this entirely.
If you want to get ready for apps/desktop, see apps/desktop/README.md. It's a two-step setup: Rust toolchain first, then desktop native dependencies.
Local WASM development
Only needed if you're editing rust/wasm and want the web app to use your local build instead of the published package.
-
Build the package once from the repo root:
bun run build:wasm -
Register the generated package for linking:
cd rust/wasm/pkg bun link -
Link
apps/webto the local package:cd apps/web bun link opencut-wasm -
Rebuild on changes while you work:
bun dev:wasm
To switch apps/web back to the published package, run:
cd apps/web
bun add opencut-wasm
Self-Hosting with Docker
To run everything (including a production build of the app) in Docker:
docker compose up -d
The app will be available at http://localhost:3100.
Contributing
We welcome contributions! While we're actively developing and refactoring certain areas, there are plenty of opportunities to contribute effectively.
🎯 Focus areas: Timeline functionality, project management, performance, bug fixes, and UI improvements outside the preview panel.
⚠️ Avoid for now: Preview panel enhancements (fonts, stickers, effects) and export functionality - we're refactoring these with a new binary rendering approach.
See our Contributing Guide for detailed setup instructions, development guidelines, and complete focus area guidance.
Quick start for contributors:
- Fork the repo and clone locally
- Follow the setup instructions in CONTRIBUTING.md
- Working on
apps/desktop? Seeapps/desktop/README.mdfor setup - Create a feature branch and submit a PR