Gitify Contributing Guide
May 10, 2026 ยท View on GitHub
Hi! We're really excited that you're interested in contributing to Gitify!
Before submitting your contribution, please read through the following guide.
We also suggest you read the Project Philosophy in our documentation.
Getting Started
Tip
Optional: If you prefer to use your own OAuth credentials, you can do so by passing them as environment variables when bundling the app. This is optional as the app has some default "development" keys (use at your own discretion).
OAUTH_CLIENT_ID="123" pnpm build
To get started:
Clone the repository and install dependencies:
pnpm install
Copy the .env.template to .env and add update GITHUB_TOKEN with a GitHub Personal Access Token. This is used for fetching the latest GitHub GraphQL API schema for graphql-codegen.
GITHUB_TOKEN=<some personal access token>
Start development mode (includes GraphQL codegen and hot module reload):
pnpm dev
Tests
Tooling is unified through Vite+, which bundles the linter (oxlint), formatter (oxfmt), test runner (Vitest), and dev/build pipeline (Vite).
# Run lint, format, and type checks
pnpm check
# Auto-fix formatting and lint issues
pnpm check:fix
# Run unit tests with coverage
pnpm test
# Update vitest snapshots
pnpm test -u
Code Style & Conventions
- Linting and formatting are configured in
vite.config.ts(thelintandfmtblocks). Please runpnpm checkbefore submitting a PR. - Follow existing file and folder naming conventions.
- Keep commit messages clear and descriptive.
How to Report Bugs or Request Features
If you encounter a bug or have a feature request, please open an issue with clear steps to reproduce or a detailed description of your idea. Check for existing issues before creating a new one.
Releases
The release process is automated. Follow the steps below.
- Verify features: Ensure all features and fixes you want included in the release are merged into
main. - Check dependencies: Review the Renovate Dependency Dashboard for any dependency updates you want to include.
- Create a release branch:
- Name your branch
release/vX.X.X(e.g.,release/v1.2.3). - Run
pnpm version <new-version-number>to bump the version inpackage.jsonand create a version commit/tag. - Update
sonar.projectVersionwithinsonar-project.properties - Commit and push these changes.
- Open a Pull Request (PR) from your release branch.
- GitHub release: GitHub Actions will automatically build, sign, and upload release assets to a new draft release with automated release notes.
- Merge the release branch: Once the PR is approved and checks pass, merge your release branch into
main. - Publish the release:
- Finalize the release notes in the draft release on GitHub.
- Confirm all assets are present and correct.
- Publish the release.
- Update milestones:
- Edit the current Milestone:
- Add a link to the release notes in the description.
- Set the due date to the release date.
- Close the milestone.
- Create a New Milestone for the next release cycle.
- A new homebrew cask will be automatically published (workflow runs ~3 hours)
Design Guidelines
- Use sentence case where possible
- Use GitHub's Octicons for iconography
Project Philosophy
This project is a tool for monitoring new notifications from supported Git forges. It's not meant to be a full-featured forge client. We want to keep it simple and focused on that core functionality. We're happy to accept contributions that help us achieve that goal, but we're also happy to say no to things that don't. We're not trying to be everything to everyone.
Multi-forge support
Gitify supports notifications from multiple Git forges. New forges may be added under the following conditions:
- Adapter-based: the forge is implemented behind the
ForgeAdapterinterface insrc/renderer/utils/forges/. No forge-specific branching outside the adapter module. - Designated maintainer: every forge has at least one named maintainer in
MAINTAINERS.mdwho owns triage and CI for that adapter. - Capability-honest UI: features unsupported by a forge (e.g. mark-as-done) must hide gracefully, not silently no-op.
- No core-platform churn: Octicons, Octokit, and the Primer Design System remain in place. Octokit is scoped to the GitHub adapter; other adapters use plain
fetch.
Currently supported forges: GitHub (Cloud, Enterprise Server, Enterprise Cloud with Data Residency) and Gitea (incl. Forgejo, Codeberg).
Things we won't do
- Operating-system level features
- Do not disturb, including on schedules. https://github.com/gitify-app/gitify/issues/416#issuecomment-1746480130
- Persistent notifications like https://github.com/gitify-app/gitify/issues/281. e.g. macOS has Alerts, instead of Banners, which makes them persistent
- Seeing past notifications. This is a tool for monitoring new notifications, not seeing old ones, which can be seen at https://github.com/notifications.
- Specific UX/UI changes that add options and/or visual complexity for minor workflow improvements. e.g. https://github.com/gitify-app/gitify/issues/358, https://github.com/gitify-app/gitify/issues/411 and https://github.com/gitify-app/gitify/issues/979
- UI for something that isn't core to Gitify, and/or can be trivially done another way. e.g. https://github.com/gitify-app/gitify/issues/476 and https://github.com/gitify-app/gitify/issues/221
- Add a forge adapter without a designated maintainer who will own it long-term.