Thank you for considering contributing to Flicker. We welcome contributions from everyone, whether it's a bug report, feature suggestion, documentation improvement, or code contribution.
- Code of Conduct
- Getting Started
- How Can I Contribute?
- Development Setup
- Pull Request Process
- Style Guidelines
- Community
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to conduct@embrly.ca.
Before you begin, ensure you have the following installed:
- Fork the repository on GitHub.
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/Flicker.git cd Flicker - Add the upstream remote:
git remote add upstream https://github.com/EmberlyOSS/Flicker.git
Before creating a bug report, please check existing issues to avoid duplicates. Use the bug report template and include:
- A clear title describing the issue
- Steps to reproduce the behavior
- Expected vs. actual behavior
- Screenshots, if applicable
- Environment details: OS and version, Flicker version, relevant logs
Use the feature request template. When suggesting a feature:
- Check existing issues to avoid duplicates
- Describe the problem your feature would solve
- Propose a solution if you have one
- Note any alternatives you've considered
- Find an issue to work on, or open one to discuss your idea first.
- Comment on the issue to let others know you're working on it.
- Create a branch for your work.
- Make your changes, following the style guidelines below.
- Test your changes thoroughly (see Development Setup).
- Submit a pull request.
# Install dependencies
bun install
# Run the frontend only (vite dev server)
bun run dev
# Run the full desktop app in development mode
bun run tauri:dev
# Build for production (includes a full TypeScript type check)
bun run tauri:build.
├── src/ # React frontend source
│ ├── components/ # React components
│ ├── hooks/ # Custom React hooks
│ ├── context/ # React context providers
│ ├── utils/ # Shared utility functions
│ ├── types.ts # TypeScript type definitions
│ ├── config.ts # Configuration utilities
│ ├── constants.ts # App constants
│ └── App.tsx # Main app component
├── src-tauri/ # Rust backend source
│ ├── src/
│ │ ├── lib.rs # Tauri command registration
│ │ ├── common/ # Shared logic (upload, config, audit, etc.)
│ │ ├── desktop/ # Windows/macOS/Linux-specific code
│ │ └── mobile/ # Android/iOS-specific code
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri configuration
├── .github/ # Issue templates and CI workflows
└── public/ # Static assets
- Update documentation if your change affects behavior described in it.
- Add tests for new functionality where practical.
- Ensure
bun run tauri:buildsucceeds (this runs the TypeScript build and a Rust compile viabeforeBuildCommand). - Update the README if you've added or changed a user-facing feature.
- Follow the commit message conventions below.
- Request review from a maintainer.
We follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(upload): add multi-file drag-and-drop support
fix(hotkeys): register clipboard-upload hotkey on config change
docs(readme): correct default hotkey table
- Use TypeScript for all new code.
- Follow the existing code style in the file you're editing.
- Use functional components with hooks.
- Keep components small and focused.
- Use meaningful variable and function names.
- Follow standard Rust naming conventions.
- Format with
cargo fmtbefore committing. - Add doc comments for public functions where the purpose isn't obvious from the signature.
- Handle errors explicitly; avoid
unwrap()/expect()outside of tests.
- Use the existing CSS variables (
src/index.css) for theming rather than hardcoded colors. - Prefer Tailwind utility classes; reserve custom CSS classes for shared patterns (glass surfaces, glow effects, etc.) already defined in
index.css.
- Discord: embrly.ca/discord
- Email: hello@embrly.ca
Open a GitHub issue, ask in Discord, or email us — see Community above.
Thank you for contributing to Flicker.