> [!IMPORTANT]
> **Note for contributors:** When branching out, create a new branch from the `dev` branch.

# 🎉 Welcome to **cognee**!

We're excited that you're interested in contributing to our project!
We want to ensure that every user and contributor feels welcome, included and supported to participate in cognee community.
This guide will help you get started and ensure your contributions can be efficiently integrated into the project.

## 🌟 Quick Links

- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Discord Community](https://discord.gg/bcy8xFAtfd)
- [Issue Tracker](https://github.com/topoteretes/cognee/issues)
- [Cognee Docs](https://docs.cognee.ai)

## 1. 🚀 Ways to Contribute

You can contribute to **cognee** in many ways:

- 📝 Submitting bug reports or feature requests
- 💡 Improving documentation
- 🔍 Reviewing pull requests
- 🛠️ Contributing code or tests
- 🌐 Helping other users
- 📇 Adding an entry to the [Integrations Hub or Use-Case Gallery](docs/contributing/add-catalog-entry.md)

## 📫 Get in Touch

There are several ways to connect with the **cognee** team and community:

### GitHub Collaboration
- [Open an issue](https://github.com/topoteretes/cognee/issues) for bug reports, feature requests, or discussions
- Submit pull requests to contribute code or documentation
- Join ongoing discussions in existing issues and PRs

### Community Channels
- Join our [Discord community](https://discord.gg/bcy8xFAtfd) for real-time discussions
- Participate in community events and discussions
- Get help from other community members

### Direct Contact
- Email: vasilije@cognee.ai
- For business inquiries or sensitive matters, please reach out via email
- For general questions, prefer public channels like GitHub issues or Discord

We aim to respond to all communications within 2 business days. For faster responses, consider using our Discord channel where the whole community can help!

## Issue Labels

To help you find the most appropriate issues to work on, we use the following labels:

- `good first issue` - Perfect for newcomers to the project
- `bug` - Something isn't working as expected
- `documentation` - Improvements or additions to documentation
- `enhancement` - New features or improvements
- `help wanted` - Extra attention or assistance needed
- `question` - Further information is requested
- `wontfix` - This will not be worked on

Looking for a place to start? Try filtering for [good first issues](https://github.com/topoteretes/cognee/labels/good%20first%20issue)!


## 2. 🛠️ Development Setup

### Required tools
* [Python](https://www.python.org/downloads/)
* [uv](https://docs.astral.sh/uv/getting-started/installation/)
* pre-commit: `uv run pip install pre-commit && pre-commit install`

### Fork and Clone

1. Fork the [**cognee**](https://github.com/topoteretes/cognee) repository
2. Clone your fork:
```shell
git clone https://github.com/<your-github-username>/cognee.git
cd cognee
```
In case you are working on Vector and Graph Adapters
1. Fork the [**cognee-community**](https://github.com/topoteretes/cognee-community) repository
2. Clone your fork:
```shell
git clone https://github.com/<your-github-username>/cognee-community.git
cd cognee-community
```

### Create a Branch

Create a new branch for your work:
```shell
git checkout -b feature/your-feature-name
```

## 3. 🎯 Making Changes

1. **Code Style**: Follow the project's coding standards
2. **Documentation**: Update relevant documentation
3. **Tests**: Add tests for new features
4. **Commits**: Write clear commit messages

### Running Tests

Copy `.env.template` to `.env` and provide your OPENAI_API_KEY as LLM_API_KEY

```shell
uv run python cognee/tests/test_library.py
```

### Minimal Docker Compose Try-out

If you want a quick local smoke test before changing code, bring up the default API server with Docker Compose:

```shell
cp .env.template .env
# edit .env and set LLM_API_KEY
docker compose up
```

Useful optional profiles:

```shell
docker compose --profile ui up        # frontend on http://localhost:3000
docker compose --profile mcp up       # MCP server on http://localhost:8001
docker compose --profile postgres up  # Postgres/PGVector
docker compose --profile neo4j up     # Neo4j
```

See the [Run with Docker](README.md#run-with-docker) section in the README for more details.

### Running Simple Example

Copy `.env.template` to `.env` and provide your OPENAI_API_KEY as LLM_API_KEY

Make sure to run ```shell uv sync ``` in the root cloned folder or set up a virtual environment to run cognee

```shell
uv run python examples/guides/simple_cognee_example.py
```

## 4. 📤 Submitting Changes

1. Make sure that `pre-commit` and hooks are installed. See `Required tools` section for more information. Try executing `pre-commit run` if you are not sure.
3. Push your changes:
```shell
git add .
git commit -s -m "Description of your changes"
git push origin feature/your-feature-name
```

2. Create a Pull Request:
   - Go to the [**cognee** repository](https://github.com/topoteretes/cognee) or [cognee community repository](https://github.com/topoteretes/cognee-community)
   - Click "Compare & Pull Request" and open a PR against dev branch
   - Fill in the PR template with details about your changes
   - You MUST provide screenshots of unit and integration tests passing on your machine. We can't merge PRs otherwise

### Changelog Entries

If maintainers ask for a changelog entry, add it under the `Unreleased` section of `CHANGELOG.md`.

- Use `Added` for new capabilities
- Use `Changed` for behavior or documentation updates
- Use `Fixed` for bug fixes

Example entry:

```markdown
## Unreleased

### Fixed
- Clarify the minimal Docker Compose setup for first-time contributors.
```

> **Reviewers are auto-routed.** Cognee uses a [`CODEOWNERS`](.github/CODEOWNERS)
> file to request reviews automatically based on the directories your PR touches.
> No manual ping required — the right person will get notified when you open the PR.

## 5. 📜 Developer Certificate of Origin (DCO)

All contributions must be signed-off to indicate agreement with our DCO:

```shell
git config alias.cos "commit -s"  # Create alias for signed commits
```

When your PR is ready, please include:
> "I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin"

## 6. 🤝 Community Guidelines

- Be respectful and inclusive
- Help others learn and grow
- Follow our [Code of Conduct](CODE_OF_CONDUCT.md)
- Provide constructive feedback
- Ask questions when unsure

## 7. 📫 Getting Help

- Open an [issue](https://github.com/topoteretes/cognee/issues)
- Join our Discord community
- Check existing documentation

Thank you for contributing to **cognee**! 🌟
