The unified Python development toolchain¶
Pyfaro is a fast, Rust-built command-line tool: one CLI over uv, Ruff, ty and pytest, from creating a project to running its quality checks and tests.
See it work¶
The same commands as text:
pyfaro create fastapi acme-api # scaffold a typed FastAPI project
cd acme-api
pyfaro sync # create .venv and uv.lock
pyfaro check # format check, lint, type check
pyfaro test # run pytest
pyfaro dev # Uvicorn with reload; Ctrl-C stops the whole tree
Recorded on Linux with 0.5.0-beta.1, from
a script that
types the commands and runs the real binary. The edit that makes the server
reload is made by that script, not typed.
Install¶
The script verifies the download against SHA256SUMS, installs to
~/.local/bin and changes nothing else. Prefer to read it first?
Download, inspect, then run it.
The script verifies the download against SHA256SUMS and installs to
%USERPROFILE%\.local\bin.
Also pipx install pyfaro or pip install pyfaro. No Rust toolchain is
needed; the wheels hold the same pyfaro executable (from 0.5.0b1).
While every release is a pre-release, installers pick the newest one on
their own. See Installation
to pin a version.
Requires Rust 1.90 or newer.
The explicit version is needed while every release is a pre-release.
Download the archive for your platform from
GitHub Releases
(Linux x86_64 and aarch64, macOS arm64 and x86_64, Windows x86_64),
check it against SHA256SUMS, and put pyfaro on your PATH.
Pyfaro needs uv 0.9.26 or newer at runtime and never installs it for you. See Installation for details, upgrading and uninstalling.
What you can do¶
-
Create
Start a library, CLI or FastAPI project, or bring an existing one under Pyfaro with
init. -
Dependencies and environments
syncbuilds the virtual environment and lockfile;addandremoveedit dependencies. -
Run
Run commands inside the project environment, without activating it.
-
Dev server
devruns your FastAPI app with Uvicorn and reload, supervised, and stops the whole process tree on Ctrl-C. -
Tasks
Name the commands you run often in
[tool.pyfaro.tasks]and run them withpyfaro run <task>. -
Quality gate
lint,fmtandtyperun Ruff and ty;checkruns them together. -
Tests
Run the project's pytest suite through one command.
-
Build
buildproduces a source distribution and a wheel throughuv build, with the build backend your project declares. -
Diagnostics
doctorreports on the toolchain;pythonandtoolsinspect interpreters and tool versions.
How it works¶
Pyfaro does not reimplement these tools. It finds your project, then calls the right tool for each job and reports the result.
flowchart LR
you([you]) --> pyfaro[pyfaro]
pyfaro --> uv[uv<br/>environments, locks]
pyfaro --> ruff[Ruff<br/>lint, format]
pyfaro --> ty[ty<br/>type check]
pyfaro --> pytest[pytest<br/>tests]
Read more in How it works. Wondering why not just uv, a Makefile or a task runner? See Why Pyfaro.
Status¶
Beta software
beta The latest published version is
0.5.0-beta.1, the first public beta. Interfaces may still change before
1.0. Commands that are planned but not implemented yet, such as workspaces,
are not documented as available.
Feedback shapes the beta: ask a question or share an idea in GitHub Discussions, report a bug with the bug report form, or tell us how it went.
Where to go next:
- Getting started: install Pyfaro and run your first commands.
- Why Pyfaro: what it adds on top of uv, how it compares with other tools, and what it does not do yet.
- Commands: one tutorial per command.
- Workflows: end-to-end recipes, including a FastAPI app.
- Reference: command line, environment variables, tested versions.