Contributing to OpenScribe
March 24, 2026 · View on GitHub
Thanks for your interest in contributing to OpenScribe.
OpenScribe is an MIT-licensed, local-first, open-source AI medical scribe. The goal is to provide transparent, auditable infrastructure rather than a closed SaaS product.
Project Philosophy
- Local-first by default
- Explicit data boundaries
- No telemetry or analytics
- Provider-agnostic, modular design
- AI output is always a draft requiring human review
Ways to Contribute
You do NOT need clinical experience to contribute.
High-priority contribution areas:
- Error handling and edge cases
- Test coverage (unit + integration)
- Documentation and developer onboarding
- Accessibility and UX improvements
- LLM provider adapters
- Transcription backend adapters
- Pipeline evaluation and validation
Getting Started
Initial Setup
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/OpenScribe.git cd OpenScribe - Install dependencies:
pnpm install - Set up environment:
pnpm run setup # Then edit apps/web/.env.local with your API keys - Start the dev server:
pnpm dev # Web app pnpm dev:desktop # Desktop app
Making Changes
- Create a feature branch:
git checkout -b feature/descriptive-name - Make changes in clear, focused commits
- Add or update tests where applicable
- Run tests:
pnpm test # All tests pnpm test:llm # LLM tests pnpm test:note # Note generation tests - Run linter:
pnpm lint - Submit a Pull Request
Code Standards
- TypeScript with explicit types
- No implicit
any - Prefer small, composable modules
- Follow existing folder structure
- Avoid introducing analytics, tracking, or telemetry
- Include JSDoc comments for public APIs
- Write tests for new functionality
Project Structure
apps/web/– Next.js frontend + API routespackages/pipeline/– Audio ingest, transcription, assembly, evaluationpackages/ui/– Shared React componentspackages/storage/– Encrypted storage + encounter managementpackages/llm/– Provider-agnostic LLM clientpackages/shell/– Electron main processconfig/– Shared configuration files
See architecture.md for detailed architecture documentation.
Testing
- Write tests for new features and bug fixes
- Place tests in
__tests__directories or*.test.tsfiles - Use the Node.js built-in test runner
- Mock external API calls in unit tests
- Include both success and error cases
Staying Updated
Keep your fork in sync with the main repository:
git pull origin main # Pull latest changes
pnpm install # Update dependencies
# If you encounter issues after updating:
rm -rf node_modules pnpm-lock.yaml && pnpm install
Issues and Discussions
- Open an Issue for bugs or concrete tasks
- Use Discussions for architecture or design questions
- If unsure, start with a Discussion
- Check the Trello board for current priorities
Good First Issues
Issues labeled good first issue are intentionally scoped for new contributors
and include context and guidance.
Pull Request Process
- Update documentation if you're changing functionality
- Add tests for new features
- Ensure all tests pass
- Update the README.md if needed
- Reference any related issues in your PR description
- Be responsive to feedback during review
Questions?
- Open a Discussion for general questions
- Tag @sammargolis for maintainer attention
- Join conversations in existing Issues
By contributing, you agree that your contributions will be licensed under the MIT License.