Technical Stack
Frame is built with:- Backend: Rust (Tauri v2, Edition 2024)
- Frontend: Svelte 5 (TypeScript, Runes API)
- Runtime: Tokio (async I/O)
- Package Manager: Bun (or Node.js)
- Core Engine: FFmpeg & FFprobe (sidecars)
Getting Started
Prerequisites
Before contributing, ensure you have:- Rust: Install from rust-lang.org
- Bun: Install from bun.sh
- Tauri Dependencies: Follow the Tauri setup guide
Local Setup
Setup FFmpeg binaries
Download FFmpeg and FFprobe sidecars:This fetches platform-specific binaries and places them in
src-tauri/binaries/.Project Structure
Understanding the codebase organization:Backend (Rust)
Frontend (Svelte)
Development Workflow
Creating a Feature or Fix
Create a new branch
Branch from Branch naming conventions:
main with a descriptive name:feature/*: New featuresfix/*: Bug fixesrefactor/*: Code refactoringdocs/*: Documentation updates
Commit your changes
Write clear, descriptive commit messages:Commit message format:
feat:New featuresfix:Bug fixesrefactor:Code refactoringdocs:Documentationtest:Testschore:Build/tooling changes
Code Review Process
All contributions go through code review:- Maintainers review for code quality, architecture fit, and test coverage
- Feedback is provided via PR comments
- Address feedback by pushing additional commits
- Once approved, maintainers merge the PR
Coding Standards
Rust (Backend)
- Formatting
- Linting
- Style Guidelines
Use This enforces:
cargo fmt for consistent formatting:- 4-space indentation
- 100-character line width
- Rust standard style guide
Frontend (TypeScript/Svelte)
- Formatting
- Linting
- Type Checking
- Style Guidelines
Use Prettier for formatting:Configuration in
.prettierrc:- 2-space indentation
- Single quotes
- Tailwind class sorting via
prettier-plugin-tailwindcss
FFmpeg Integration
When adding new FFmpeg features:- Validation: Add validation logic in
src-tauri/src/conversion/types.rs(ConversionConfig) - Arguments: Update
src-tauri/src/conversion/args.rsto build FFmpeg args - UI: Add controls in relevant settings tab (
src/lib/components/settings/tabs/) - Documentation: Update inline help text and user-facing docs
Testing & Quality Control
Before submitting a pull request, ensure all checks pass:Run Rust tests
Execute all backend unit tests:Add tests for new functionality in
src-tauri/src/conversion/tests.rs.Manual Testing
Test your changes manually:- Conversion Testing: Test with various media files (different codecs, containers, resolutions)
- Edge Cases: Test with corrupted files, very long videos, high resolutions
- UI Testing: Verify UI responsiveness and accessibility
- Cross-Platform: If possible, test on macOS, Windows, and Linux
Translation Workflow
Frame supports multiple languages. When adding UI text:Extract and sync keys
Run the sync script to propagate new keys:This:
- Adds new keys to all locale files
- Marks them with
TODOprefix (English fallback) - Removes stale keys
Translation Scripts
| Script | Description |
|---|---|
i18n:extract | Extract i18n keys from source code |
i18n:check | Validate locale integrity |
i18n:sync | Preview sync changes (dry run) |
i18n:sync:write | Apply sync changes |
i18n:translate:write | Auto-translate new keys via DeepL |
i18n:translate:rewrite | Re-translate all keys (overwrite existing) |
i18n:sync:auto | Sync + auto-translate in one step |
package.json:14-21
Pull Request Process
Create a pull request
On GitHub, create a PR from your branch to
main.PR Title: Use conventional commit formatProvide a clear description
Include:
- Summary: What does this PR do?
- Motivation: Why is this change needed?
- Changes: List of modified files/modules
- Testing: How did you test this?
- Screenshots: For UI changes
- Related Issues: Link to issue numbers (e.g., “Fixes #123”)
Wait for review
Maintainers will review your PR. This may take a few days.Address feedback by:
- Pushing additional commits to your branch
- Responding to comments
Reporting Issues
If you find a bug or have a feature request:- Search Existing Issues: Check if it’s already reported at github.com/66HEX/frame/issues
- Create a New Issue: If not found, open a new issue
- Provide Details:
- Bug Reports: Include OS, Frame version, FFmpeg logs (from “Logs” view), steps to reproduce
- Feature Requests: Describe the feature, use case, and expected behavior
Issue Templates
- Bug Report
- Feature Request
Code of Conduct
Frame follows the Contributor Covenant Code of Conduct.Our Pledge
We pledge to make participation in our community a harassment-free experience for everyone, regardless of:- Age, body size, disability, ethnicity
- Gender identity and expression
- Level of experience, education, socio-economic status
- Nationality, personal appearance, race, religion
- Sexual identity and orientation
Our Standards
Positive behaviors:- Demonstrating empathy and kindness
- Being respectful of differing opinions and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing for mistakes
- Focusing on what is best for the community
- Sexualized language or imagery, unwelcome advances
- Trolling, insulting/derogatory comments, personal attacks
- Public or private harassment
- Publishing others’ private information without permission
Enforcement
Instances of abusive or harassing behavior may be reported to [email protected]. All complaints will be reviewed and investigated promptly and fairly. Reference:CODE_OF_CONDUCT.md
Financial Support
If you want to support Frame’s development (especially code-signing for macOS and Windows builds), consider sponsoring: Funding Goals:- Apple Developer Program: $99/year for macOS signing and notarization
- Microsoft Code Signing Certificate: $300-700/year for Windows signing
License
By contributing to Frame, you agree that your contributions will be licensed under the GPL-3.0-or-later license. See LICENSE for details.Next Steps
Building from Source
Set up your development environment
Architecture
Understand Frame’s technical architecture