Contributing to Jan
Thank you for considering contributing to Jan. It’s people like you that make Jan an amazing project for local AI. Jan is an AI assistant that runs 100% offline on your device. Think ChatGPT, but private, local, and under your complete control. If you’re thinking about contributing, you’re already awesome - let’s make AI accessible to everyone, one commit at a time.Quick Navigation
Web App
React UI and user interface logic
Core SDK
TypeScript SDK and extension system
Extensions
Supportive modules for features
Tauri Backend
Rust native system integration
How Jan Works
Jan is a desktop app that runs local AI models. Here’s the architecture:Communication Flow
- JavaScript Layer: Web App imports Core SDK and Extensions as JavaScript modules
- All → Backend: Through Tauri IPC using
await invoke('command', data) - Backend → Plugins: Native Rust integration with direct function calls
- Response Flow: Plugin → Backend → IPC → Requester → UI updates
Real Example: Loading a Model
When you click “Download Llama 3”:- Web App - User clicks download button
- Download Extension - Handles download logic
- Tauri Backend - Downloads file to disk
- LlamaCPP Extension - Prepares model for loading
- LlamaCPP Plugin - Starts llama.cpp process
- Hardware Plugin - Detects GPU, optimizes settings
- Model ready! - User can start chatting
Project Structure
Development Setup
Prerequisites
- Node.js ≥ 20.0.0
- Yarn ≥ 1.22.0
- Rust (for Tauri)
- Make ≥ 3.81
The Easy Way
How to Contribute
Reporting Bugs
Search existing issues
Check GitHub Issues to avoid duplicates
Open a new issue
If not found, create a new issue
Suggesting Features
- Open a new issue with a clear title and description
- Explain why this enhancement would be useful
- Include mockups or examples if possible
- Tag it appropriately (enhancement, feature-request)
Code Contributions
Choose Your Adventure
- Frontend UI
- Core SDK
- Extensions
- Backend
Work on
web-app/ for:- React components
- Chat interface
- Settings pages
- UI/UX improvements
The Process
Make your changes
- Write clean, documented code
- Follow code standards (see below)
- Add tests for new functionality
Commit your changes
Code Standards
TypeScript/JavaScript
- TypeScript required - No plain JavaScript for new code
- ESLint + Prettier - Run
yarn lintbefore committing - Functional components - Use React hooks, not class components
- No
anytypes - Proper typing is required
Rust
- Format code - Run
cargo fmtbefore committing - Clippy checks - Run
cargo clippyand fix warnings - Error handling - Use
Result<T, E>pattern - Documentation - Document all public APIs
Git Conventions
Branches
main- Stable releases onlydev- Development branch (target this for PRs)feature/*- New featuresfix/*- Bug fixesdocs/*- Documentation updates
Commit Messages
Use conventional commits format:feat:- New featurefix:- Bug fixdocs:- Documentation onlystyle:- Code style changes (formatting)refactor:- Code refactoringtest:- Adding testschore:- Maintenance tasks
Testing
Run Tests
Write Tests
- Add tests for all new features
- Ensure existing tests pass
- Aim for high code coverage
Troubleshooting
Common Issues
Build failures
Build failures
Check versions:Clean and rebuild:
Extension not loading
Extension not loading
Verify it’s properly registered and built:
Model not working
Model not working
- Check hardware requirements
- Verify GPU drivers are up to date
- Check system memory availability
Get Help
- Check troubleshooting docs
- Ask in Discord
#🆘|jan-help - Search GitHub Issues
- Post in GitHub Discussions
Component-Specific Guides
For detailed contribution guides:- Web App - React UI
- Core SDK - TypeScript SDK
- Extensions - Extension modules
- Tauri Backend - Rust backend
- Tauri Plugins - Hardware plugins
License
Apache 2.0 - By contributing, you agree that your contributions will be licensed under the Apache 2.0 License. See LICENSE for details.Thank You
We’re building something special - an AI assistant that respects your privacy and runs entirely on your machine. Every contribution, no matter how small, helps make AI more accessible to everyone. Thanks for being part of the journey. Let’s build the future of local AI together!Build from Source
Ready to start? Learn how to build Jan from source