OpenBB
Audited from github.com/OpenBB-finance/OpenBB
OpenBB (Open Data Platform) is an open-source Python toolkit that connects financial, economic, and alternative data sources behind one interface, usable from Python, a CLI, a REST API, MCP, or a Tauri desktop app.
- Language
- Python
- Running for
- 3 years 5 months
- Team
- 6-20 people
Why this architecture
A Poetry-managed core package with router-based provider extensions keeps roughly thirty data sources independently versioned, while the CLI, FastAPI/Uvicorn REST server, MCP server, and Tauri desktop app all wrap that same core library instead of reimplementing it.
Tech stack by layer
11 technologies · audited Sep 17, 2026- ReactRenders the Tauri desktop app UI.
- TypeScriptLanguage for the desktop renderer, type-checked with tsc before Vite build.
- ViteBundles the desktop app renderer (npm run build runs tsc && vite build).
- Tailwind CSSUtility CSS for the desktop app, configured alongside PostCSS and autoprefixer.
- PythonOnly language reported for the repository; hosts the core openbb package and every provider extension.
- FastAPIopenbb-core depends on a pinned FastAPI version, exposed as a REST server via the openbb-api command.
- Pydanticopenbb-core depends on Pydantic 2 for the data models returned by every provider extension.
- UvicornASGI server that openbb-core depends on to run the FastAPI app started by openbb-api.
- PoetryEvery package in the workspace (core, cli, cookiecutter, each extension) is a separate Poetry project.
- Pandasopenbb-core depends on pandas directly; provider results convert to DataFrames via obb output.to_dataframe().
- TauriWraps the React renderer and a Rust backend into cross-platform desktop binaries.
- Rustdesktop/src-tauri manages the local backend process, updater, and OS integration for the desktop app.
- GitHub ActionsPer-platform workflows (build-desktop-osx64/osxARM/win64.yml, release-desktop.yml) build and release the desktop app.
- Model Context Protocolopenbb-mcp-server is an optional extra of the openbb package, exposing the platform to MCP-based AI agents.
OpenBB architecture diagram
Open SVGDiagram as text
- Python users (obb library) → openbb-core (FastAPI · Pydantic): Python API
- OpenBB CLI (thin wrapper) → openbb-core (FastAPI · Pydantic): commands
- Desktop app (Tauri · React) → openbb-core (FastAPI · Pydantic): local process
- AI agents (MCP) → openbb-core (FastAPI · Pydantic): openbb-mcp-server
- openbb-core (FastAPI · Pydantic) → Provider extensions (~30 packages): route
- Provider extensions (~30 packages) → Data providers (market data APIs): fetch
Key architectural decisions
5 decisions- 01
A single core package plus ~30 separately versioned extensions
openbb_platform/pyproject.toml lists the openbb-core dependency alongside about twenty required provider extensions (openbb-fmp, openbb-sec, openbb-fred, openbb-yfinance, and similar) and roughly a dozen more behind optional extras such as alpha_vantage, cboe, and tmx, so each data source ships and versions independently under one umbrella package.
- 02
The CLI is a thin wrapper around the same library, not a fork
cli/pyproject.toml depends on openbb = { version = "^4.7.2", extras = ["all"] } and adds only CLI-specific packages (prompt-toolkit, rich, pywry), so openbb-cli always tracks the installed openbb library instead of duplicating provider logic.
- 03
REST access is opt-in via a bundled FastAPI/Uvicorn server
openbb-core depends on fastapi and uvicorn directly (openbb_platform/core/pyproject.toml), and the README documents running
openbb-apito start that server on 127.0.0.1:6900 for the OpenBB Workspace UI to connect to, rather than the library requiring a server to function. - 04
The desktop app is a Tauri shell managing a local Python process, not a reimplementation
desktop/src-tauri/Cargo.toml depends on tokio, reqwest, and tokio-tungstenite for process and websocket management around a locally running backend, while desktop/package.json is a plain React + Vite renderer that talks to it through @tauri-apps/plugin-* packages.
- 05
AI-agent access is a separate optional package, not baked into core
openbb-mcp-server is listed as an optional extra (mcp_server = ["openbb-mcp-server"]) in openbb_platform/pyproject.toml, matching the examples/openbbPlatformAsLLMTools.ipynb notebook that shows the platform being consumed as LLM tools.
How OpenBB is built
How OpenBB is structured
OpenBB is a Poetry-managed Python monorepo centered on openbb_platform/, where openbb_platform/core (package name openbb-core) provides the router, data-model, and CLI/build tooling that every other piece depends on. openbb_platform/pyproject.toml defines the top-level openbb meta-package, which pulls in around twenty required provider extensions (openbb-fmp, openbb-sec, openbb-fred, openbb-yfinance, openbb-tiingo, and more, each its own openbb_platform/extensions/<name>/pyproject.toml) plus roughly a dozen optional ones behind Poetry extras such as alpha_vantage, cboe, tmx, and mcp_server. Outside that core, cli/ packages a terminal interface as openbb-cli, and desktop/ packages a Tauri app; both consume the openbb package rather than reimplementing its logic. cookiecutter/ provides a project template (openbb-cookiecutter) for third parties building new extensions.
Frontend
The only frontend in this repository belongs to the desktop app in desktop/. Its package.json lists React 18 and TypeScript, bundled by Vite ("build": "tsc && vite build"), styled with Tailwind CSS 3, and using @tanstack/react-router for routing and react-hook-form with zod resolvers for forms. It also depends on @openbb/ui-pro, a private OpenBB component library, and on the generated @tauri-apps/api and various @tauri-apps/plugin-* packages (dialog, fs, http, updater, opener) to talk to the Rust shell. There is no other browser frontend in this repository; the primary web UI (OpenBB Workspace, referenced throughout the README) is a separate, closed-source product that this open-source repo's REST/MCP servers connect to.
Backend & APIs
openbb_platform/core/pyproject.toml shows openbb-core depending directly on fastapi (pinned to 0.136.3, matching the pin in cli/pyproject.toml), uvicorn, and pydantic (^2.12.3), which is how the library exposes a REST API without every consumer needing to run a server: the README documents installing openbb[all] and running openbb-api to start a FastAPI app under Uvicorn on 127.0.0.1:6900. Each data-provider extension (openbb_platform/extensions/*) registers itself with openbb-core through a Poetry plugin entry point, for example [tool.poetry.plugins."openbb_core_extension"] commodity = "openbb_commodity.commodity_router:router" in the commodity extension, which is how new asset classes plug into the same router without editing core code. Several extensions (crypto, currency, derivatives, economy, equity, etf) also register a matching openbb_charting_extension plugin for chart rendering when the optional openbb-charting package is installed.
Data & persistence
OpenBB does not bundle a database of its own; it is a live data-integration layer over external provider APIs (FMP, SEC, FRED, the Federal Reserve, Tiingo, yfinance, and dozens more, enumerated as separate extension packages under openbb_platform/extensions). Each extension's pyproject.toml depends only on openbb-core plus whatever HTTP client that provider needs; there is no shared persistence layer visible in the audited manifests, and the examples/ Jupyter notebooks show results converted directly to pandas DataFrames (output.to_dataframe()) rather than written to a database.
Build, test & deploy
Every package in the workspace builds independently through Poetry (poetry-core build backend in each pyproject.toml), while the desktop app builds through npm/tsc/vite and then tauri. GitHub Actions is organized per platform and per concern: test-unit-platform.yml and test-unit-cli.yml run Python tests, codeql.yml and general-linting.yml cover static analysis, and build-desktop-osx64.yml, build-desktop-osxARM.yml, build-desktop-win64.yml plus release-desktop.yml build and release the Tauri app per operating system. desktop/vitest.config.ts and desktop/eslint.config.mjs cover the desktop renderer's own unit tests and linting separately from the Python test suite.
Self-hosting notes
Because OpenBB ships as a Python library and CLI rather than a hosted web service, "self-hosting" here means running openbb-api locally or on your own infrastructure to expose the FastAPI server, then pointing OpenBB Workspace (or any REST/MCP client) at that URL, as documented in the README's "Integrating Open Data Platform to the OpenBB Workspace" section. No Dockerfile, Kubernetes manifest, or cloud deployment config appears in the audited file tree, so containerized deployment is left to the operator.
What to copy (and what not to)
The extension-per-provider-package pattern, each with its own Poetry project and a plugin entry point registering into a shared core, is a clean way to let a plugin ecosystem grow without core changes, and is worth copying for any project that aggregates many similar-shaped external integrations. Making the CLI and desktop app thin consumers of the same core library, rather than separate codebases, avoids logic drift between interfaces. What is harder to copy without OpenBB's scale is the sheer number of independently versioned packages (Poetry workspace plus roughly thirty extension pyproject.toml files) that this pattern requires maintaining in lockstep.
Sources & repo audit
- Audited
- Sep 17, 2026
- Commit
- 3e071fc
- License
- NOASSERTION
- openbb_platform/pyproject.toml (openbb meta-package and its ~30 extensions/extras)
- openbb_platform/core/pyproject.toml (FastAPI, Pydantic, Uvicorn core dependencies)
- cli/pyproject.toml (openbb-cli as a thin wrapper over the openbb package)
- desktop/package.json (React, Vite, Tauri plugin, Tailwind renderer deps)
- desktop/src-tauri/Cargo.toml (Rust shell managing the local backend process)
Independent analysis of repository at github.com/OpenBB-finance/OpenBB. Spotted an inaccuracy? Use the claim form to request a correction.
Show this stack on your README or website
[](https://stackitfast.com/project/openbb)Paste it into your README. It shows your current stack and links to this page.
Scaffold it with your agent
Paste this prompt into Claude Code, Cursor, Windsurf or AGY to start a project with OpenBB's architecture.
- 1Copy the promptThe full markdown spec, with every layer and decision.
- 2Open your AI toolClaude Code, Cursor, Windsurf or Copilot, in a new repo.
- 3Paste and scaffoldUse it as the first instruction; review before you ship.
# MISSION: Scaffold "OpenBB" Production Architecture
You are an expert Senior Staff Software Architect and Full-Stack Engineer. Your mission is to scaffold and implement a production-grade, highly reliable, and modular codebase following the proven architecture of **OpenBB**.
---
## 1. PROJECT SPECIFICATIONS & BENCHMARK
- **Reference Architecture**: OpenBB
- **What It Does**: OpenBB (Open Data Platform) is an open-source Python toolkit that connects financial, economic, and alternative data sources behind one interface, usable from Python, a CLI, a REST API, MCP, or a Tauri desktop app.
- **Domain & Category**: Financial Data Platform
- **Production Scale**: 6-20 people
- **Development Mode**: HYBRID
- **Architectural Rationale**: A Poetry-managed core package with router-based provider extensions keeps roughly thirty data sources independently versioned, while the CLI, FastAPI/Uvicorn REST server, MCP server, and Tauri desktop app all wrap that same core library instead of reimplementing it.
- **Live Website Reference**: https://openbb.co
- **Source Repository**: https://github.com/OpenBB-finance/OpenBB
---
## 2. PRODUCTION TECH STACK
- **Full Stack Array**: Python, FastAPI, Pydantic, Poetry, React, TypeScript, Vite, Tauri, Rust, Tailwind CSS, Pandas
- **Primary Language(s)**: Python
- **License of the reference repo**: NOASSERTION
- **Frontend**: React — Renders the Tauri desktop app UI.; TypeScript — Language for the desktop renderer, type-checked with tsc before Vite build.; Vite — Bundles the desktop app renderer (npm run build runs tsc && vite build).; Tailwind CSS — Utility CSS for the desktop app, configured alongside PostCSS and autoprefixer.
- **Backend & APIs**: Python — Only language reported for the repository; hosts the core openbb package and every provider extension.; FastAPI — openbb-core depends on a pinned FastAPI version, exposed as a REST server via the openbb-api command.; Pydantic — openbb-core depends on Pydantic 2 for the data models returned by every provider extension.; Uvicorn — ASGI server that openbb-core depends on to run the FastAPI app started by openbb-api.; Poetry — Every package in the workspace (core, cli, cookiecutter, each extension) is a separate Poetry project.; Pandas — openbb-core depends on pandas directly; provider results convert to DataFrames via obb output.to_dataframe().
- **Infrastructure & deploy**: Tauri — Wraps the React renderer and a Rust backend into cross-platform desktop binaries.; Rust — desktop/src-tauri manages the local backend process, updater, and OS integration for the desktop app.; GitHub Actions — Per-platform workflows (build-desktop-osx64/osxARM/win64.yml, release-desktop.yml) build and release the desktop app.
- **Tooling, testing & ops**: Model Context Protocol — openbb-mcp-server is an optional extra of the openbb package, exposing the platform to MCP-based AI agents.
---
## 3. KEY ARCHITECTURAL DECISIONS (audited from https://github.com/OpenBB-finance/OpenBB @ 3e071fc)
1. **A single core package plus ~30 separately versioned extensions**: openbb_platform/pyproject.toml lists the openbb-core dependency alongside about twenty required provider extensions (openbb-fmp, openbb-sec, openbb-fred, openbb-yfinance, and similar) and roughly a dozen more behind optional extras such as alpha_vantage, cboe, and tmx, so each data source ships and versions independently under one umbrella package.
2. **The CLI is a thin wrapper around the same library, not a fork**: cli/pyproject.toml depends on openbb = { version = "^4.7.2", extras = ["all"] } and adds only CLI-specific packages (prompt-toolkit, rich, pywry), so openbb-cli always tracks the installed openbb library instead of duplicating provider logic.
3. **REST access is opt-in via a bundled FastAPI/Uvicorn server**: openbb-core depends on fastapi and uvicorn directly (openbb_platform/core/pyproject.toml), and the README documents running `openbb-api` to start that server on 127.0.0.1:6900 for the OpenBB Workspace UI to connect to, rather than the library requiring a server to function.
4. **The desktop app is a Tauri shell managing a local Python process, not a reimplementation**: desktop/src-tauri/Cargo.toml depends on tokio, reqwest, and tokio-tungstenite for process and websocket management around a locally running backend, while desktop/package.json is a plain React + Vite renderer that talks to it through @tauri-apps/plugin-* packages.
5. **AI-agent access is a separate optional package, not baked into core**: openbb-mcp-server is listed as an optional extra (mcp_server = ["openbb-mcp-server"]) in openbb_platform/pyproject.toml, matching the examples/openbbPlatformAsLLMTools.ipynb notebook that shows the platform being consumed as LLM tools.
---
## 4. NON-NEGOTIABLE ARCHITECTURAL GUARDRAILS
1. **Monorepo & Modular Separation**:
- Structure as a Turborepo monorepo with strict package boundaries:
- `apps/web`: Application UI, routing, layouts, and server endpoints.
- `packages/ui`: Shared design tokens, CSS variables, and Radix UI primitive components.
- `packages/db`: Database schemas, client singleton, declarative migrations, and seed scripts.
- `packages/config`: Shared TypeScript, ESLint, and build configurations.
2. **Strict Type Safety & Zero `any` Policy**:
- Enable `strict: true`, `noImplicitAny: true`, and `strictNullChecks: true`.
- Validate ALL external inputs, API request bodies, and query parameters with **Zod** schemas before execution.
3. **Frontend & Rendering Guidelines**:
- Utilize Vite 6 with TanStack Router for fully type-safe routing. Manage server state and caching via TanStack Query v5 with optimistic UI updates.
4. **Design System & Aesthetics**:
- Keep every color, radius, shadow and font in a single token file (CSS variables) and consume tokens everywhere; never hardcode hex values in components.
- Prefer crisp 1px borders and one subtle shadow scale over blurry default shadows. Pair one sans-serif for body/headings with one monospace for tags, badges, metrics, and code.
5. **Data Layer & Reliability**:
- Write declarative schema definitions with foreign keys, composite indexes on queried filters, and automated timestamp triggers.
- Use connection pooling and prepared statements for serverless database execution.
---
## 5. STEP-BY-STEP SCAFFOLDING ROADMAP
- **Phase 1: Workspace & Root Config**: Initialize package manager, monorepo configuration (`turbo.json`, `tsconfig.base.json`, `package.json`).
- **Phase 2: Database Schema & Client**: Set up the data layer: client, connection pool, models, and migration scripts.
- **Phase 3: Design Tokens & UI Primitives**: Build accessible `Button`, `Input`, `Card`, `Badge`, and layout wrappers inside `packages/ui`.
- **Phase 4: Core Application Routes & Handlers**: Implement primary authentication, user session handling, and application routes.
- **Phase 5: Quality Assurance & Build Verification**: Run `tsc --noEmit`, ESLint, Prettier, and smoke test suites to ensure zero compilation or runtime errors.
---
## 6. EXECUTION INSTRUCTIONS
1. Review all specifications, architectural guardrails, and stack choices above.
2. Present the full monorepo directory tree structure.
3. Systematically generate the complete, production-ready codebase according to the 5-phase roadmap above — starting with the root workspace setup, followed by the database schema, UI design system package, and full-stack application routes until the repository is fully scaffolded and ready to run.Frequently asked about OpenBB
What is OpenBB built with?
A Python core (openbb-core) built on FastAPI, Pydantic, and Uvicorn, packaged with Poetry, plus an optional Tauri desktop app whose renderer is React, TypeScript, Vite, and Tailwind CSS.
Does OpenBB require a backend server to use?
No. It works as an importable Python package (from openbb import obb), but openbb-core also bundles FastAPI and Uvicorn so openbb-api can expose the same functionality as a local REST server.
Can OpenBB be used with AI agents?
Yes, through the optional openbb-mcp-server extra listed in openbb_platform/pyproject.toml, which exposes OpenBB data through the Model Context Protocol.
What is the OpenBB CLI?
A separate package, openbb-cli, that depends on the full openbb library (extras = ["all"]) and adds a prompt-toolkit and rich-based terminal interface on top of it.
Is there a desktop application for OpenBB?
Yes. The desktop/ directory holds a Tauri app with a Rust shell (desktop/src-tauri) that manages a local backend process, rendered by a React, TypeScript, and Vite frontend.
One email a month: new deep dives and stack trends
New source-audited architectures, head-to-head comparisons and the monthly stack report. No spam, unsubscribe anytime.
Similar architectures
- PostHogHybridProduct Analytics Platform · 20+ peopleShares Python · React · TypeScript
- VectorClassicObservability Data Router & Telemetry Pipeline · 21-100 peopleShares Rust
- VoiceStudioHybridLocal AI Voice Cloning & Speech Studio · 2-5 peopleShares Python · FastAPI · TypeScript
- Tailwind CSSClassicUtility-First CSS Engine & Framework · 1M+ MAUShares TypeScript · Rust · Tailwind CSS
- OpenObserveClassicCloud-Native Observability Engine · 6-20 PeopleShares Rust · TypeScript · Vite
- BrowserSkillClassicBrowser Automation Bridge for AI Agents · 6-20 peopleShares Rust · TypeScript · React