Skip to content

Getting Started¤

Before you start, it’s important to familiarize yourself with Hop3’s core values and objectives. Please take a moment to read the core values of Hop3 outlined in our README. Understanding these principles will help you make meaningful contributions that align with the project’s goals.

Development Environment¤

Using uv and poetry¤

uv and poetry should be installed on your system. We’ll get rif of poetry soon but we’re not there yet.

The easiest way to create a development environment is to use the following:

make develop
. venv/bin/activate # (or activate.fish for fish shell)

This creates a virtual environment in .env using uv and installs the dependencies using poetry.

Using only poetry¤

At the moment, it should still be possible to use only poetry to create a development environment. To do so, run the following command:

poetry shell
poetry install
inv install

Using Nix¤

If you are using Nix, you can use the provided shell.nix file to create a development environment. To do so, run the following command:

nix-shell

Tooling¤

The projects uses several tools to ensure code quality and consistency. These tools are configured in the pyproject.toml file, the setup.cfg file, and tool-specific files like ruff.toml for Ruff.

Main tools¤

We’re using the following tools. These are pretty much standard in the Python ecosystem:

  • ruff: Linter and all-purpose tool
  • black: Code formatter
  • isort: Import sorter
  • flake8: Linter
  • mypy: Static type checker
  • bandit: Security linter
  • safety: Software supply chain checker
  • poetry: Dependency management
  • invoke: Task runner
  • make: Task runner
  • pre-commit: Git hooks
  • pytest: Testing framework
  • nox: Testing automation
  • mkdocs: Documentation generator
  • mkdocs-material: Documentation theme

Additionally, we use the following tools for specific tasks:

  • uv: Virtual environment manager
  • fish: Shell (optional, but some Makefile commands depende on it)

Running Tools¤

We use two task runners to run the tools: make and inv.

Typing make help and inv -l will show you the available commands.

Why both? Because make is more common and inv is more powerful. We use make for common tasks and inv for more complex ones, specially those that need to be executed in all subprojects (due to the monorepo nature of the project).