From 88a608e590e7b6a888fef49ae3953a3c76446aa7 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Tue, 7 Jul 2026 13:32:40 -0700 Subject: [PATCH 01/13] docs: add Introduction section to Getting Started page --- docs/getting-started.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index f147e0d..4e28ef3 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -13,7 +13,29 @@ jsonLd: "name": "Fastapi Startkit Team" --- -Fastapi Startkit is a modular, provider-driven framework for building robust FastAPI applications with minimal boilerplate. That said, **it doesn't enforce you to use FastAPI at all** — You can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components such as logging, database, configuration, and dependency injection. +## Introduction + +FastAPI is a superb HTTP layer, but it deliberately stops at the request/response boundary. Everything above it — configuration, logging, a database layer, dependency injection, a console for CLI commands, and a predictable way to wire it all together — is left for you to assemble. In practice that means every new service starts by copy-pasting the same bootstrap code, and each team's copy slowly drifts apart. Across a fleet of microservices, that duplicated foundation becomes a maintenance burden of its own. + +Fastapi Startkit is a modular, provider-driven framework that packages those app-level concerns into a single, coherent foundation so you can focus on your domain instead of the plumbing. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components such as logging, database, configuration, and dependency injection. + +An application is composed by **registering providers**. Each provider knows how to register a slice of functionality into the service container and boot it once everything is wired up. You pick the providers you need, hand them to the `Application`, and the framework takes care of the rest: + +```python +from pathlib import Path +from fastapi_startkit import Application +from fastapi_startkit.fastapi import FastAPIProvider + +app: Application = Application( + base_path=Path(__file__).parent.parent, + providers=[ + FastAPIProvider, + # add your own providers here... + ], +) +``` + +Adding a capability is as simple as adding a provider to that list. The sections below walk you through installing the framework and standing up your first application. ## Prerequisites From afb551d424471744b2fe621f4bfb8d8b90424418 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:23:37 -0700 Subject: [PATCH 02/13] docs: reword provider registration to reference the application --- docs/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 4e28ef3..772646d 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -19,7 +19,7 @@ FastAPI is a superb HTTP layer, but it deliberately stops at the request/respons Fastapi Startkit is a modular, provider-driven framework that packages those app-level concerns into a single, coherent foundation so you can focus on your domain instead of the plumbing. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components such as logging, database, configuration, and dependency injection. -An application is composed by **registering providers**. Each provider knows how to register a slice of functionality into the service container and boot it once everything is wired up. You pick the providers you need, hand them to the `Application`, and the framework takes care of the rest: +An application is composed by **registering providers**. Each provider knows how to register a slice of functionality into the application and boot it once everything is wired up. You pick the providers you need, hand them to the `Application`, and the framework takes care of the rest: ```python from pathlib import Path From 31ce1c87a5164030198544ec1be1d97aea1f1036 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:24:58 -0700 Subject: [PATCH 03/13] docs: use full provider list example and link real-world bootstrap --- docs/getting-started.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 772646d..26aeda6 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -24,18 +24,29 @@ An application is composed by **registering providers**. Each provider knows how ```python from pathlib import Path from fastapi_startkit import Application -from fastapi_startkit.fastapi import FastAPIProvider -app: Application = Application( +app = Application( base_path=Path(__file__).parent.parent, providers=[ - FastAPIProvider, - # add your own providers here... + LogProvider, + (DatabaseProvider, DatabaseConfig), + (FastAPIProvider, FastAPIConfig), + McpProvider, + AISkillProvider, + (StorageProvider, StorageConfig), + AppProvider, + PluginProvider, + TerminalProvider, + (ViteProvider, ViteConfig), + InertiaProvider, + (ReverbProvider, BroadcastingConfig), ], ) ``` -Adding a capability is as simple as adding a provider to that list. The sections below walk you through installing the framework and standing up your first application. +A provider can be listed on its own, or paired with a config object as a `(Provider, Config)` tuple when it needs configuration. Adding a capability is as simple as adding a provider to that list. For a real-world example, see the [Keera Agent `bootstrap/application.py`](https://github.com/Keera-Labs/keera-agent/blob/main/bootstrap/application.py#L23-L39). + +The sections below walk you through installing the framework and standing up your first application. ## Prerequisites From d5f1e85847ed2ad53302e11a673428b8a2b60728 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:25:40 -0700 Subject: [PATCH 04/13] docs: drop dependency injection from feature list --- docs/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 26aeda6..dbb19b4 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -15,9 +15,9 @@ jsonLd: ## Introduction -FastAPI is a superb HTTP layer, but it deliberately stops at the request/response boundary. Everything above it — configuration, logging, a database layer, dependency injection, a console for CLI commands, and a predictable way to wire it all together — is left for you to assemble. In practice that means every new service starts by copy-pasting the same bootstrap code, and each team's copy slowly drifts apart. Across a fleet of microservices, that duplicated foundation becomes a maintenance burden of its own. +FastAPI is a superb HTTP layer, but it deliberately stops at the request/response boundary. Everything above it — configuration, logging, a database layer, a console for CLI commands, and a predictable way to wire it all together — is left for you to assemble. In practice that means every new service starts by copy-pasting the same bootstrap code, and each team's copy slowly drifts apart. Across a fleet of microservices, that duplicated foundation becomes a maintenance burden of its own. -Fastapi Startkit is a modular, provider-driven framework that packages those app-level concerns into a single, coherent foundation so you can focus on your domain instead of the plumbing. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components such as logging, database, configuration, and dependency injection. +Fastapi Startkit is a modular, provider-driven framework that packages those app-level concerns into a single, coherent foundation so you can focus on your domain instead of the plumbing. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components such as logging, database, and configuration. An application is composed by **registering providers**. Each provider knows how to register a slice of functionality into the application and boot it once everything is wired up. You pick the providers you need, hand them to the `Application`, and the framework takes care of the rest: From 088788e31f33a49873bb55659f985470199afb88 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:28:46 -0700 Subject: [PATCH 05/13] docs: expand Introduction with motivation and feature highlights --- docs/getting-started.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index dbb19b4..db93b7f 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -15,9 +15,25 @@ jsonLd: ## Introduction -FastAPI is a superb HTTP layer, but it deliberately stops at the request/response boundary. Everything above it — configuration, logging, a database layer, a console for CLI commands, and a predictable way to wire it all together — is left for you to assemble. In practice that means every new service starts by copy-pasting the same bootstrap code, and each team's copy slowly drifts apart. Across a fleet of microservices, that duplicated foundation becomes a maintenance burden of its own. +FastAPI is excellent for quickly building APIs, but it intentionally leaves many application-level concerns to the developer. Things like environment management (including multiple environments), logging, database setup, configuration, CLI commands, plugins, storage, and other infrastructure are things you typically need to design and wire together yourself. -Fastapi Startkit is a modular, provider-driven framework that packages those app-level concerns into a single, coherent foundation so you can focus on your domain instead of the plumbing. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components such as logging, database, and configuration. +In our case, we were building multiple microservices, and we found ourselves repeatedly copying the same bootstrap code between projects. Over time, that became repetitive and harder to maintain consistently. + +Over the past several months, we've been working on FastAPI Startkit, an open-source application framework that brings proven patterns from mature web frameworks into Python and FastAPI. + +The goal is not to replace FastAPI. Instead, it provides a structured foundation for building larger applications while staying modular — you can use only the components you need. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components. + +Some features include: + +- 🏗️ Service container & dependency injection +- ⚙️ Configuration with multi-environment support +- 🪵 Logging +- 🗄️ Async database ORM, migrations & seeders +- 🖥️ CLI console commands +- 🧩 Providers & plugins +- 📦 Storage +- ⚡ FastAPI integration & routing +- 🎨 Frontend integration (Vite & Inertia) An application is composed by **registering providers**. Each provider knows how to register a slice of functionality into the application and boot it once everything is wired up. You pick the providers you need, hand them to the `Application`, and the framework takes care of the rest: From 06a4b01eb191bbe6ae196eda55ff830209285b0e Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:29:53 -0700 Subject: [PATCH 06/13] docs: remove plugins from Introduction --- docs/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index db93b7f..e6ffc23 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -15,7 +15,7 @@ jsonLd: ## Introduction -FastAPI is excellent for quickly building APIs, but it intentionally leaves many application-level concerns to the developer. Things like environment management (including multiple environments), logging, database setup, configuration, CLI commands, plugins, storage, and other infrastructure are things you typically need to design and wire together yourself. +FastAPI is excellent for quickly building APIs, but it intentionally leaves many application-level concerns to the developer. Things like environment management (including multiple environments), logging, database setup, configuration, CLI commands, storage, and other infrastructure are things you typically need to design and wire together yourself. In our case, we were building multiple microservices, and we found ourselves repeatedly copying the same bootstrap code between projects. Over time, that became repetitive and harder to maintain consistently. @@ -30,7 +30,7 @@ Some features include: - 🪵 Logging - 🗄️ Async database ORM, migrations & seeders - 🖥️ CLI console commands -- 🧩 Providers & plugins +- 🧩 Providers - 📦 Storage - ⚡ FastAPI integration & routing - 🎨 Frontend integration (Vite & Inertia) From 297cabf202ecc11954ba4693e32d66eab2a2f1ea Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:31:19 -0700 Subject: [PATCH 07/13] docs: tighten Introduction transition and provider lead-in --- docs/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index e6ffc23..ed9a287 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -19,7 +19,7 @@ FastAPI is excellent for quickly building APIs, but it intentionally leaves many In our case, we were building multiple microservices, and we found ourselves repeatedly copying the same bootstrap code between projects. Over time, that became repetitive and harder to maintain consistently. -Over the past several months, we've been working on FastAPI Startkit, an open-source application framework that brings proven patterns from mature web frameworks into Python and FastAPI. +So we decided to open source it as FastAPI Startkit, an application framework that brings proven patterns from mature web frameworks into Python and FastAPI. The goal is not to replace FastAPI. Instead, it provides a structured foundation for building larger applications while staying modular — you can use only the components you need. That said, **it doesn't enforce you to use FastAPI at all** — you can build entirely headless CLI utilities, cron scripts, or background task workers and still get access to the full suite of infrastructure components. @@ -35,7 +35,7 @@ Some features include: - ⚡ FastAPI integration & routing - 🎨 Frontend integration (Vite & Inertia) -An application is composed by **registering providers**. Each provider knows how to register a slice of functionality into the application and boot it once everything is wired up. You pick the providers you need, hand them to the `Application`, and the framework takes care of the rest: +An application is composed by **registering providers** — you pick the ones you need and hand them to the `Application`: ```python from pathlib import Path From 588a03321f5d84b185ca901fd8eb025df275dcd1 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:32:30 -0700 Subject: [PATCH 08/13] docs: drop dependency injection from service container feature --- docs/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index ed9a287..b878188 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -25,7 +25,7 @@ The goal is not to replace FastAPI. Instead, it provides a structured foundation Some features include: -- 🏗️ Service container & dependency injection +- 🏗️ Service container - ⚙️ Configuration with multi-environment support - 🪵 Logging - 🗄️ Async database ORM, migrations & seeders From df9db354099996992a0be103b1a3e73ea20dca22 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:32:52 -0700 Subject: [PATCH 09/13] docs: rename providers feature to service providers --- docs/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index b878188..68d1d03 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -30,7 +30,7 @@ Some features include: - 🪵 Logging - 🗄️ Async database ORM, migrations & seeders - 🖥️ CLI console commands -- 🧩 Providers +- 🧩 Service providers - 📦 Storage - ⚡ FastAPI integration & routing - 🎨 Frontend integration (Vite & Inertia) From 3758b458dd82114deefe2577ab31fa7d0e2e60e6 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:33:05 -0700 Subject: [PATCH 10/13] docs: remove service container feature bullet --- docs/getting-started.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 68d1d03..9ffd53f 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -25,7 +25,6 @@ The goal is not to replace FastAPI. Instead, it provides a structured foundation Some features include: -- 🏗️ Service container - ⚙️ Configuration with multi-environment support - 🪵 Logging - 🗄️ Async database ORM, migrations & seeders From 101d3d61e1b44b0bcaaed86eb7accacb7a01c0fd Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:33:59 -0700 Subject: [PATCH 11/13] docs: add queue workers with TaskIQ to feature list --- docs/getting-started.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started.md b/docs/getting-started.md index 9ffd53f..e9eb02c 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -31,6 +31,7 @@ Some features include: - 🖥️ CLI console commands - 🧩 Service providers - 📦 Storage +- 🧵 Queue workers with TaskIQ - ⚡ FastAPI integration & routing - 🎨 Frontend integration (Vite & Inertia) From 93291557552fbd507d6ca3d9b8f4d1d5684fc7ac Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:34:34 -0700 Subject: [PATCH 12/13] docs: remove storage feature bullet --- docs/getting-started.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index e9eb02c..8531ebd 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -30,7 +30,6 @@ Some features include: - 🗄️ Async database ORM, migrations & seeders - 🖥️ CLI console commands - 🧩 Service providers -- 📦 Storage - 🧵 Queue workers with TaskIQ - ⚡ FastAPI integration & routing - 🎨 Frontend integration (Vite & Inertia) From 30fc980f1c7dacdfee2765e2d03a7286c88f7191 Mon Sep 17 00:00:00 2001 From: Bedram Tamang Date: Wed, 8 Jul 2026 09:35:41 -0700 Subject: [PATCH 13/13] docs: remove configuration feature bullet --- docs/getting-started.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 8531ebd..7f79f11 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -25,7 +25,6 @@ The goal is not to replace FastAPI. Instead, it provides a structured foundation Some features include: -- ⚙️ Configuration with multi-environment support - 🪵 Logging - 🗄️ Async database ORM, migrations & seeders - 🖥️ CLI console commands