uv has two CLI surfaces. uv pip ... is the drop-in pip replacement — every pip flag works. uv add / uv run / uv sync is the modern uv-native workflow — what you'll use for new projects.
uv init <name> creates a new project (pyproject.toml + .python-version + initial src layout). uv add <pkg> adds a dep — automatically creates the venv if needed, installs the package, updates uv.lock. uv add --dev <pkg> adds a dev dep. uv remove <pkg> removes one (and CLEANLY removes orphaned transitive deps, unlike pip).
uv run <cmd> runs a command in the project's venv — automatically activates the venv first, then runs. No more source .venv/bin/activate. uv run pytest, uv run python main.py, uv run flask --app server run all just work.
uv python install <version> installs a managed Python — replaces pyenv. uv python pin <version> pins this project to that version (writes .python-version). uv sync reproduces the project's exact state from uv.lock.
uvx <tool> is uv's npx / pipx run — runs a tool without installing it permanently. uvx ruff check ., uvx black . — try a tool without committing. uv tool install <tool> installs a tool globally (replaces pipx install).