Thank you for considering contributing to Gemini Nexus! π
Whether it's a bug report, feature suggestion, documentation improvement, or code contribution β all help is welcome.
- Code of Conduct
- Getting Started
- Development Setup
- Making Changes
- Commit Guidelines
- Pull Request Process
- Code Style
- Reporting Issues
This project is governed by our Code of Conduct. By participating, you are expected to uphold this code.
-
Fork the repository on GitHub
-
Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/GeminiNexus.git cd GeminiNexus -
Add the upstream remote:
git remote add upstream https://github.com/evandrodevbr/GeminiNexus.git
- Node.js v20 or higher
- npm (this project uses
package-lock.json) - Git
# Install dependencies
npm install
# Start the app in development mode
npm start| Command | Description |
|---|---|
npm start |
Start the app in development mode (Electron + Vite HMR) |
npm run lint |
Run ESLint |
npm run format |
Check formatting with Prettier |
npm run format:write |
Auto-format code with Prettier |
npm run type-check |
Run TypeScript type check |
npm test |
Run unit tests with Vitest |
npm run test:e2e |
Run E2E tests with Playwright |
npm run test:all |
Run all tests (unit + E2E) |
npm run make |
Build production installers |
src/
βββ components/ # React UI components (Radix-based primitives in ui/)
βββ hooks/ # Custom React hooks
βββ ipc/ # Electron IPC + database handlers
βββ layouts/ # Layout components (MainLayout + sidebar)
βββ localization/ # i18n translation resources
βββ routes/ # TanStack Router pages (index, usage, proxy, settings)
βββ server/ # NestJS backend (proxy gateway service)
βββ services/ # Service layer
βββ types/ # TypeScript type definitions + Zod schemas
βββ utils/ # Utility functions
-
Create a branch from
main:git checkout -b feat/your-feature-name # or git checkout -b fix/your-bug-fix -
Make your changes, then commit:
git add . git commit -m "feat: add amazing new feature"
-
Keep your branch up to date:
git fetch upstream git rebase upstream/main
We follow Conventional Commits. Commits are analyzed by semantic-release to automatically determine version bumps and generate changelogs.
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
| Type | Description | Release |
|---|---|---|
feat |
A new feature | minor |
fix |
A bug fix | patch |
perf |
Performance improvement | patch |
refactor |
Code change (no bug fix or feature) | patch |
docs |
Documentation only | no release |
style |
Formatting, whitespace | no release |
test |
Adding or fixing tests | no release |
chore |
Build process, tooling | no release |
ci |
CI/CD changes | no release |
Add BREAKING CHANGE: in the footer or ! after the type to trigger a major release:
feat!: remove legacy plaintext storage
BREAKING CHANGE: all accounts must re-authenticate after upgrade.
feat(proxy): add Anthropic /v1/messages endpoint
fix(usage): handle SQL SUM(null) in empty date ranges
docs(readme): add Chinese and Spanish translations
ci: normalize Node.js to v20 across all workflows
-
Run the quality checks:
npm run lint npm run format:write npm run type-check npm test -
Update documentation if you changed functionality
-
Add tests for new features
- My code follows the project's style guidelines
- I have performed a self-review of my code
- I have commented hard-to-understand areas
- I have updated related documentation
- My changes generate no new warnings
- I have added tests that prove my fix or feature works
- All existing tests pass locally
- PRs require at least one maintainer approval
- CI must pass (lint, type-check, unit tests)
- Squash-merge is preferred for clean history
- Use TypeScript for all new code β avoid
any - Use Zod for runtime validation
- Prefer
lodash-esnamed imports over native utilities - Use
@/alias forsrc/imports
- Functional components with hooks only
- Use Radix UI primitives for accessible components
- TypeScript interfaces for props
- Follow existing component structure (
components/ComponentName.tsx)
- Tailwind CSS v4 utility classes
- Use
clsx+tailwind-mergefor conditional classes - Follow the Gemini Nexus design tokens (
rounded-xl,border-white/[0.06])
// 1. React and core libraries
import React, { useEffect } from 'react';
// 2. External dependencies (alphabetical)
import { useTranslation } from 'react-i18next';
// 3. Internal imports (using @ alias)
import { Card } from '@/components/ui/card';Create a bug report with:
- Clear title describing the issue
- Steps to reproduce the behavior
- Expected vs actual behavior
- Screenshots if applicable
- Environment details (OS, app version, Node.js version)
Suggest a feature with:
- Clear description of the feature
- Use case β why is this needed?
- Possible implementation ideas (optional)
Your contributions make Gemini Nexus better for everyone. Thank you for your time!
If you have questions, feel free to open a discussion or reach out to the maintainers.