# bakefile > An OOP task runner. Write tasks once, reuse everywhere. Like a Makefile, but reusable and in Python. ## Docs - [bakefile](https://bakefile.wisl.dev/getting-started/index.md): An OOP task runner. Write tasks once, reuse everywhere. Like a Makefile, but reusable and in Python. - [Installation](https://bakefile.wisl.dev/getting-started/installation.md): Install bakefile with pip or uv, plus the optional bakelib helpers. - [Quickstart](https://bakefile.wisl.dev/getting-started/quickstart.md): Create a bakefile.py, define tasks as class methods, and run them with bake. - [Why bakefile](https://bakefile.wisl.dev/getting-started/why-bakefile.md): bakefile vs Make, Just, Task, mise, and Invoke. Tasks as Python class methods, typed arguments, validated config, and reusable task libraries. - [Bakebook](https://bakefile.wisl.dev/concepts/bakebook.md): A Bakebook is the class that holds your tasks. Subclass it to share tasks, extend it with Pydantic settings, and decorate methods with @command. - [Commands](https://bakefile.wisl.dev/concepts/commands.md): Tasks are Typer commands. Define them as class methods or standalone functions, with typed arguments that become CLI options. - [Context](https://bakefile.wisl.dev/concepts/context.md): ctx.run() executes CLI commands through subprocess. Control streaming, error handling, working directory, environment, timeout, and dry-run. - [PEP 723 Support](https://bakefile.wisl.dev/concepts/pep723.md): Declare your bakefile.py's dependencies inline with PEP 723 metadata, so a single file carries its own dependencies. - [Logging and Console Output](https://bakefile.wisl.dev/usage/logging.md): console is your task's output and always prints. Logs are diagnostics gated by verbosity, from -v to -vvv, with per-module levels and a JSON format. - [Settings](https://bakefile.wisl.dev/usage/settings.md): Bakebooks extend Pydantic BaseSettings, so configuration is typed class attributes with validation, env-var and .env loading, and export to shell, dotenv, JSON, or YAML. - [bake](https://bakefile.wisl.dev/cli/bake.md): Run tasks from bakefile.py. Chain commands, dry-run, pick a custom bakefile or bakebook, and control logging. - [bakefile](https://bakefile.wisl.dev/cli/bakefile.md): Manage bakefile.py. Init, add-inline, lint, uv-based sync and lock, venv, run, env, and export. - [Spaces](https://bakefile.wisl.dev/bakelib/spaces.md): bakelib Spaces are Bakebooks preconfigured for a project type. Use them as-is, or inherit and override. - [Environments](https://bakefile.wisl.dev/bakelib/environments.md): EnvBakebook and environment mixins give each environment (dev, staging, prod) its own typed bakebook, selected by the ENV variable. - [Refreshable Cache](https://bakefile.wisl.dev/bakelib/cache.md): RefreshableCacheRegistry caches fetched values and refreshes them at runtime when a service rejects the cached one. No Bakebook required. - [Secrets](https://bakefile.wisl.dev/bakelib/secrets.md): SecretUtils wires a RefreshableCacheRegistry into your bakebook and adds the bake secret commands for tracked keys. - [Simple](https://bakefile.wisl.dev/examples/simple.md): A minimal standalone bakefile with PEP 723 inline metadata. No project files, no venv to manage. - [Python Package](https://bakefile.wisl.dev/examples/python-package.md): A pyproject-based Python package managed with PythonSpace. Inherited tasks, one override, one custom task. - [Troubleshooting](https://bakefile.wisl.dev/troubleshooting/index.md): Fixes for common bakefile errors - bakebook not found, wrong bakebook type, load failures, wrong Python, dry-run, and completion.