Thanks for your interest in contributing to Govyn! This document covers the process for submitting changes and reporting issues.
- Node.js 20+
- Python 3.10+ (for the Python SDK)
- npm
# Clone the repo
git clone https://github.com/govynAI/govyn.git
cd govyn
# Install Node dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Start dev server (auto-reload)
npm run devcd python-sdk
pip install -e ".[dev]"
pytestfeat/description— New featuresfix/description— Bug fixesdocs/description— Documentation changes
TypeScript (proxy):
- ESLint configuration is provided — run
npm run lintbefore submitting - Use
npm run typecheckto verify type safety - Prefer explicit types over
any - Use early returns to reduce nesting
Python (SDK):
- Follow PEP 8
- Use type hints on all public APIs
- Keep dependencies minimal — the SDK should be lightweight
Use conventional commits:
feat: add rate limiting to policy engine
fix: correct token count for streaming responses
docs: update quickstart with Docker instructions
test: add budget enforcer edge cases
- All changes should include tests
- Proxy tests:
npm test(Vitest) - Python SDK tests:
cd python-sdk && pytest - Don't break existing tests
- Fork the repository and create your branch from
main - Make your changes with tests
- Ensure all tests pass (
npm testandcd python-sdk && pytest) - Run linting (
npm run lint) - Update documentation if you changed user-facing behavior
- Open a PR with a clear title and description
## What
Brief description of the change.
## Why
What problem does this solve?
## How
High-level approach taken.
## Testing
How was this tested?
- PRs require at least one approval before merging
- CI must pass (lint, typecheck, tests)
- Keep PRs focused — one logical change per PR
Open an issue with:
- What happened — Clear description of the bug
- What you expected — What should have happened instead
- How to reproduce — Steps, config, and environment details
- Environment — Node version, OS, Govyn version
Open an issue with:
- Problem — What are you trying to do?
- Proposed solution — How you'd like it to work
- Alternatives considered — Other approaches you thought about
govyn/
├── src/ # Proxy server source (TypeScript)
│ ├── providers/ # OpenAI, Anthropic, custom provider adapters
│ ├── proxy.ts # Core proxy logic
│ ├── budget-enforcer.ts
│ ├── loop-detector.ts
│ ├── policy-engine.ts
│ └── cli.ts # CLI entry point
├── python-sdk/ # Python SDK (govynai)
│ ├── govynai/ # Package source
│ └── tests/ # SDK tests
├── configs/ # Example configurations
├── templates/ # Init wizard templates
└── tests/ # Proxy tests
By contributing, you agree that your contributions will be licensed under the MIT License.