If you want to contribute:
- Open an issue first to discuss
- Wait for maintainer approval
- Only then start coding
Critical bug fixes may be accepted on a case-by-case basis.
Thank you for your interest in contributing to OpenCut! This document provides guidelines and instructions for contributing.
- Node.js (v18 or later)
- Bun
(for
npmalternative) - Docker and Docker Compose
- Rust toolchain (only needed for
apps/desktop)
Note: Docker is optional, but it's essential for running the local database and Redis services. If you're planning to contribute to frontend features, you can skip the Docker setup. If you have followed the steps below in Setup, you're all set to go!
-
Fork the repository
-
Clone your fork locally
-
Navigate to the web app directory:
cd apps/web -
Copy
.env.exampleto.env.local:# Unix/Linux/Mac cp .env.example .env.local # Windows Command Prompt copy .env.example .env.local # Windows PowerShell Copy-Item .env.example .env.local
-
Install dependencies:
bun install -
Start the development server:
bun run dev
Note: Web development uses the published
opencut-wasmpackage by default, so a fresh clone does not need a local WASM build.If you are editing
rust/wasm, runbun run build:wasm, thencd rust/wasm/pkg && bun link, thencd ../../../apps/web && bun link opencut-wasm.
Only needed if you're working on apps/desktop. See apps/desktop/README.md — it's a two-step process: Rust toolchain first via script/setup-rust, then desktop native dependencies via apps/desktop/script/setup.
🎯 Good Areas to Contribute:
- Timeline functionality and UI improvements
- Project management features
- Performance optimizations
- Bug fixes in existing functionality
- UI/UX improvements
- Documentation and testing
- Preview panel enhancements (text fonts, stickers, effects)
- Export functionality improvements
- Preview rendering optimizations
Why? We're currently planning a major refactor of the preview system. The current preview renders DOM elements (HTML), but we're moving to a binary rendering approach similar to CapCut. This new system will ensure consistency between preview and export, and provide much better performance and quality.
The current HTML-based preview is essentially a prototype - the binary approach will be the "real deal." To avoid wasted effort, please focus on other areas of the application until this refactor is complete.
If you're unsure whether your idea falls into the preview category, feel free to ask us directly in discord or create a GitHub issue!
-
Start the database and Redis services:
# From project root docker-compose up -d -
Navigate to the web app directory:
cd apps/web -
Copy
.env.exampleto.env.local:# Unix/Linux/Mac cp .env.example .env.local # Windows Command Prompt copy .env.example .env.local # Windows PowerShell Copy-Item .env.example .env.local
-
Configure required environment variables in
.env.local:Required Variables:
# Database (matches docker-compose.yaml) DATABASE_URL="postgresql://opencut:opencut@localhost:5432/opencut" # Generate a secure secret for Better Auth BETTER_AUTH_SECRET="your-generated-secret-here" NEXT_PUBLIC_SITE_URL="http://localhost:3000" # Redis (matches docker-compose.yaml) UPSTASH_REDIS_REST_URL="http://localhost:8079" UPSTASH_REDIS_REST_TOKEN="example_token" # Development NODE_ENV="development"
Generate BETTER_AUTH_SECRET:
# Unix/Linux/Mac openssl rand -base64 32 # Windows PowerShell (simple method) [System.Web.Security.Membership]::GeneratePassword(32, 0) # Cross-platform (using Node.js) node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" # Or use an online generator: https://generate-secret.vercel.app/32
-
Run database migrations:
bun run db:migrate -
Start the development server:
bun run dev
Working on apps/desktop? See apps/desktop/README.md for setup. Web-only contributors can ignore this entirely.
- Use the bug report template
- Include steps to reproduce
- Provide screenshots if applicable
- Use the feature request template
- Explain the use case
- Consider implementation details
-
Create a new branch:
git checkout -b feature/your-feature-name -
Make your changes
-
Run the relevant checks for the area you touched:
- Web changes: from
apps/web, runbun run lintandbunx biome format --write . - Desktop changes: run
./apps/desktop/script/setupif your environment isn't set up yet
- Web changes: from
-
Commit your changes with a descriptive message
-
Push to your fork and create a pull request
- We use Biome for code formatting and linting
- Run
bunx biome format --write .from theapps/webdirectory to format code - Run
bun run lintfrom theapps/webdirectory to check for linting issues - Follow the existing code patterns
- Fill out the pull request template completely
- Link any related issues
- Ensure CI passes
- Request review from maintainers
- Address any feedback
- Be respectful and inclusive
- Follow our Code of Conduct
- Help others in discussions and issues
Thank you for contributing!