First off, thank you for considering contributing to NekoCode! It's people like you that make NekoCode such a great tool.
- Code of Conduct
- Getting Started
- How Can I Contribute?
- Development Setup
- Development Workflow
- Coding Standards
- Commit Guidelines
- Pull Request Process
- Reporting Bugs
- Suggesting Enhancements
This project and everyone participating in it is governed by the NekoCode Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to the project maintainers.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/your-username/nekocode.git cd nekocode - Add the upstream remote:
git remote add upstream https://github.com/plsgivemeachane/nekocode.git
- Create a branch for your changes:
git checkout -b feat/my-feature
Before creating bug reports, please check the existing issues to avoid duplicates. When you create a bug report, include as many details as possible:
- Use a clear and descriptive title
- Describe the exact steps to reproduce the problem
- Provide specific examples (e.g., screenshots, error logs)
- Describe the behavior you observed and the behavior you expected
- Include your environment details (OS, NekoCode version, etc.)
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion:
- Use a clear and descriptive title
- Provide a step-by-step description of the suggested enhancement
- Describe the current behavior and explain the expected behavior
- Explain why this enhancement would be useful to most NekoCode users
Look for issues labeled good first issue, help wanted, or bug. Feel free to ask questions in the issue comments before starting work.
- Node.js >= 18
- Bun (package manager — do NOT use npm)
- Git
- Windows: PowerShell 7+ (for build scripts)
# Install dependencies
bun install
# Start the dev server
bun run devNekoCode is an Electron desktop app structured as:
src/main/— Electron main process (IPC, session management, project management, extensions)src/preload/— Electron preload (IPC bridge exposure)src/renderer/— React UI (components, hooks, stores, utils)src/shared/— Types shared between main and renderersrc/tests/— Unit and integration tests
| Technology | Purpose |
|---|---|
| Electron | Desktop app shell |
| React + Tailwind + Radix UI | UI components |
| TypeScript | Type-safe development |
| electron-vite | Build toolchain |
| Bun | Package manager & script runner |
| Vitest | Testing framework |
| ESLint | Linting |
- Create a feature branch from
main - Make your changes following our coding standards
- Write tests for your changes
- Run all checks before committing:
bun run test # Run tests (Vitest) bun run lint # Lint with ESLint bun run type-check # TypeScript type checking bun run package:local # Verify local build works
- Commit using Conventional Commits format
- Push and open a Pull Request
- Use strict TypeScript — no
anytypes unless absolutely necessary - Prefer interfaces over type aliases for object shapes
- Use explicit return types for exported functions
- Keep type definitions in
src/shared/when shared between processes
- Use functional components with hooks
- Follow the custom hooks pattern (
use*naming) - Keep components small and focused
- Use Radix UI primitives — no raw CSS files
- Apply Tailwind utility classes for styling
- NEVER remove existing comments — only add new ones
- Comments should explain "why", not "what"
- Use JSDoc for public APIs and exported functions
- Handle errors explicitly — no silent catches
- No hardcoded secrets or credentials
- Validate inputs at process boundaries (IPC, API calls)
- Always use Bun — never npm or yarn
- Use
bun run <script>for running scripts - Use
bunxinstead ofnpx
We follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
| Type | Description |
|---|---|
feat |
New feature |
fix |
Bug fix |
docs |
Documentation changes |
style |
Code style changes (formatting, whitespace) |
refactor |
Code refactoring without feature/fix changes |
perf |
Performance improvement |
test |
Adding or updating tests |
chore |
Build process or tooling changes |
ci |
CI/CD changes |
feat(chat): add markdown rendering support
fix(session): resolve stale cache on session switch
docs(readme): update installation instructions
test(stream-batcher): add batching edge case tests
- Update documentation if your changes affect behavior
- Add tests for any new functionality
- Ensure all CI checks pass:
bun run testbun run lintbun run type-check
- Keep PRs focused — one logical change per PR
- Write a clear PR description explaining:
- What changes you made
- Why you made them
- How to test them
- Link related issues in the PR description
- Be responsive to code review feedback
Use the same Conventional Commits format:
feat(component): description of change fix(component): description of fix
For every bug fix, you must write a detailed description in the /docs/bugs/ folder documenting:
- The bug description and symptoms
- Root cause analysis
- How the fix resolves the issue
- Steps to verify the fix
Don't hesitate to open an issue with the question label or start a discussion on GitHub. We're happy to help!