Extension Types
Each guide below builds one kind of extension. Extension types in Concepts lists the entry-point groups and what each entry point must resolve to; the guides assume that background. A data package normally combines a provider and a router, so start with the provider guide.
Scaffold a project with openbb-cookiecutter
openbb-cookiecutter generates an installable extension project with working examples, tests, and a pyproject.toml that already declares the entry points. Run it without installing it through uv, or install it with pip:
uvx openbb-cookiecutter
pip install openbb-cookiecutter
openbb-cookiecutter
The command prompts for the author, project name, project tag (the distribution name), package name, which extension types to include, and the provider, router, and OBBject names those types use. The extension types are router, provider, charting, obbject, on_command_output, or all. Pass them with -e to skip that prompt. --no-input accepts every default, which includes all extension types, and --extra-context KEY=VALUE overrides a single value:
openbb-cookiecutter -e router provider
openbb-cookiecutter --no-input -o ./extensions -e all --extra-context provider_name=my_source
Interactive runs derive the default project tag and package name from the project name. With --no-input, unspecified values come from the template defaults (extension-template, extension_template, template, template_ext), so pass every name you want to change.
With every type selected, the generated package contains providers/<provider_name>/ with an Example model and an EquityHistorical implementation built on the standard model, routers/<router_name>.py with GET, POST, and provider-backed commands, routers/<router_name>_views.py with a chart view, and obbject/<obbject_name>/ with two accessors and an on-command-output plugin. Unselected types are removed. Because a provider and an OBBject extension each register credentials under their own name, the template refuses to use the same value for provider_name and obbject_name.
From the generated directory, create the environment, build the Python Interface, and run the tests:
uv sync
uv run openbb-build
uv run pytest
uv run openbb-api serves the same commands over the REST API; openbb-platform-api is in the project's dev dependency group. If the project includes the on-command-output plugin, set OPENBB_ALLOW_ON_COMMAND_OUTPUT=true before importing openbb or starting the API.