Thank you for your interest in contributing to Cicada! This guide will help you get started.
- Testing Guide - Running tests, test organization, multi-editor testing
- Architecture Overview - Project structure and design decisions
- Publishing Guide - Distribution and release process (maintainers only)
- Installation Guide - User-facing installation documentation
- Python 3.10+
uvpackage manager- Git
# Clone the repository
git clone https://github.com/wende/cicada.git
cd cicada
# Install in development mode
make dev
# Verify installation
cicada --versiongit checkout -b feature/your-feature-name- Follow the code style guidelines below
- Add tests for new features
- Update documentation as needed
IMPORTANT: Always use make test, never pytest directly.
# Run all tests
make test
# Run specific test file
pytest tests/test_indexer.py
# Run with coverage
pytest --cov=cicada tests/See TESTING.md for comprehensive testing guidelines including:
- Test organization and structure
- Multi-editor testing scenarios
- Coverage requirements
- Manual testing checklist
- Write a clear PR description
- Reference any related issues
- Ensure all tests pass
- Respond to review feedback
- Formatter: Use
blackfor consistent formatting - Type Hints: Include type hints where appropriate
- Docstrings: Use Google-style docstrings for functions and classes
# Format code
black cicada/ tests/
# Check formatting
black --check cicada/ tests/
# Type checking
mypy cicada/- Use clear, descriptive commit messages
- Start with a verb in present tense (e.g., "Add", "Fix", "Update")
- Reference issue numbers when applicable
Examples:
Add support for Erlang language parsing
Fix incremental indexing for large files
Update CLI help text for clarity
Understanding Cicada's architecture will help you contribute more effectively.
- Hybrid Parsing: Tree-sitter (Elixir, Erlang) + SCIP (13 other languages)
- Incremental Indexing: Only reindex changed files using SHA-256 hashing
- Optional Dependencies: cicada-core (required) + cicada-scip (optional)
- MCP Protocol: JSON-RPC server for AI coding assistants
cicada/
├── cicada/ # Main package
│ ├── mcp/ # MCP server implementation
│ ├── languages/ # Language-specific parsers
│ ├── git/ # Git history & PR indexing
│ └── utils/ # Shared utilities
├── packages/ # Monorepo packages
├── codebook/ # User documentation
├── tests/ # Test suite
└── Makefile # Development commands
For detailed architecture information, see ARCHITECTURE.md and codebook/ARCHITECTURE.md.
Minimum coverage targets:
- Core indexer: 80%
- MCP handlers: 75%
- Language parsers: 70%
- Overall project: 70%
| Category | Location | Focus | Speed |
|---|---|---|---|
| Unit | tests/*/test_*.py |
Individual functions | Fast (<1s) |
| Integration | tests/integration/ |
Multiple components | Medium (1-5s) |
| Acceptance | tests/acceptance/ |
CLI commands | Medium (2-10s) |
| Benchmark | tests/benchmark/ |
Performance | Slow (>10s) |
For complete testing documentation, see TESTING.md.
- User-facing features: Add to
codebook/directory - Development guides: Add to root-level (e.g., TESTING.md, ARCHITECTURE.md)
- API documentation: Include in code docstrings
- Use clear, concise language
- Include code examples where appropriate
- Link to related documentation
- Keep README.md indexes up to date
For languages without SCIP indexers:
- Add tree-sitter grammar to
cicada/languages/ - Implement parser in
cicada/languages/<language>/parser.py - Extract modules, functions, and documentation
- Add tests in
tests/<language>/
For languages with existing SCIP indexers:
- Verify SCIP indexer quality with sample projects
- Add language detection to
cicada/languages/scip/converter.py - Test with real-world codebases
- Document in
codebook/LANGUAGE_SUPPORT.md
Estimated effort:
- Tree-sitter: 12-17 days (custom parser implementation)
- SCIP: 4-6 days (universal converter + testing)
For information on publishing releases to PyPI and other distribution channels, see PUBLISHING.md.
Before publishing a new version:
- Run full test suite:
make test - Update
CHANGELOG.mdwith changes - Bump version in
pyproject.toml - Test installation in clean environment
- Verify all links in README work
- Questions: Open a GitHub issue with the
questionlabel - Bug Reports: Use the bug report template
- Feature Requests: Use the feature request template
- Security Issues: Email security@cicada-mcp.dev (if applicable) or open a private security advisory
By contributing to Cicada, you agree that your contributions will be licensed under the same license as the project.
Be respectful and constructive in all interactions. We're here to build great software together.
Thank you for contributing to Cicada! 🎉