Project Status
Tank is MVP code-complete with 461 TypeScript tests and 16 Python tests passing. The most valuable contributions right now are:- Testing the CLI and web app in real workflows
- Opening issues for bugs, edge cases, or missing features
- Improving documentation — clarity, examples, diagrams
- Contributing security analysis rules for the audit system
Getting Started
Prerequisites
- Node.js 24 or later
- pnpm 10 or later (install via
corepack enable) - Python 3.14 or later (for security analysis)
- A Supabase project (for database)
- A GitHub OAuth App (for authentication)
Development Setup
See Local Development Setup for detailed instructions.
How to Contribute
Report a Bug
Use the Bug Report template on GitHub. Include:- Expected behavior — What you thought would happen
- Actual behavior — What actually happened
- Steps to reproduce — How to trigger the bug
- Environment — OS, Node version, Tank version
Suggest a Feature
Open a Feature Request or start a Discussion. Before opening:- Check existing issues to avoid duplicates
- Consider if it fits Tank’s core mission (security-first package management)
Submit Code
Fork the repository
Click “Fork” on the Tank repository.
Create a branch
feat/— New featurefix/— Bug fixdocs/— Documentationchore/— Tooling, configtest/— Testsrefactor/— Code refactoring
Make your changes
Write clear, focused commits following the Commit Message Guidelines.
Pull Request Guidelines
Before Submitting
- Keep PRs focused — One logical change per PR
- Update documentation if your change affects user-facing behavior
- Add tests for new functionality
- Ensure all checks pass before requesting review
- Follow existing patterns — Look at similar files for consistency
PR Description Template
Review Process
- Automated checks run (tests, linting)
- Maintainer reviews code
- Address feedback with new commits
- Once approved, maintainer merges
Commit Messages
We use Conventional Commits:Types
feat— New featurefix— Bug fixdocs— Documentationchore— Tooling, dependencies, configtest— Testsrefactor— Code refactoring (no behavior change)perf— Performance improvementci— CI/CD changesstyle— Formatting (no code change)
Format
Coding Standards
TypeScript/JavaScript
- Strict TypeScript — No
any, no@ts-ignore, noas any - TDD — Write failing tests first (RED → GREEN → REFACTOR)
- ESM only —
"type": "module", norequire() - 2-space indent, LF line endings — Enforced via
.editorconfig - Import paths — Web app uses
@/*alias, CLI uses relative.jsextensions - Test files —
__tests__/*.test.ts(never.spec.ts)
Web App
- Server Components by default —
'use client'only when needed - Tailwind CSS v4 via
@tailwindcss/postcss - Zod for validation — Never trust raw input
- Drizzle ORM — Never raw SQL or Prisma
- react-doctor — React linting (60+ rules)
Python
- Pydantic 2 for all models — Strict validation
- pytest for testing —
test_*.pypattern - Type hints on all functions
Anti-Patterns
Project Structure
Where to Look
| Task | Location | Notes |
|---|---|---|
| Add CLI command | apps/cli/src/commands/ | Export async fn, register in bin/tank.ts |
| Add API endpoint | apps/web/app/api/v1/ | Next.js Route Handler |
| Add UI page | apps/web/app/ | Route groups: (auth), (dashboard), (registry) |
| Modify DB schema | apps/web/lib/db/schema.ts | Run drizzle-kit generate after |
| Add shared type | packages/shared/src/ | Export from index.ts |
| Add UI component | apps/web/components/ui/ | npx shadcn add <component> |
| Modify scanner | python-api/lib/scan/ | 6 stages: stage0–stage5 |
Testing
Running Tests
Writing Tests
TypeScript (Vitest):Test Guidelines
- TDD — Write test first (RED → GREEN → REFACTOR)
- Descriptive names —
should validate permissionsnottest1 - One assertion per test when possible
- Arrange, Act, Assert pattern
- No side effects — Tests should be independent
Code of Conduct
This project follows the Contributor Covenant Code of Conduct. In short:- Be respectful and inclusive
- Focus on constructive feedback
- Assume good intent
- Report unacceptable behavior to [email protected]
License
By contributing, you agree that your contributions will be licensed under the MIT License.Questions?
Open a Discussion — there are no dumb questions.Next Steps
Setup
Set up your local development environment
Architecture
Understand the system design
Testing
Learn how to run and write tests