Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ export default defineConfig({
{ text: 'Process', link: '/docs/process' },
{ text: 'Broadcasting', link: '/docs/broadcasting' },
{ text: 'JSON:API Resources', link: '/docs/jsonapi' },
{ text: 'Performance & Benchmarks', link: '/docs/benchmarks' },
]
},
{
Expand Down
36 changes: 19 additions & 17 deletions .vitepress/theme/components/CoreModules.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script setup>
import { Globe, Terminal, Activity, CircleCheck } from 'lucide-vue-next'
import { Globe, Terminal, Bot, CircleCheck } from 'lucide-vue-next'
</script>

<template>
Expand Down Expand Up @@ -51,27 +51,29 @@ import { Globe, Terminal, Activity, CircleCheck } from 'lucide-vue-next'
</div>
</div>

<!-- Module 3: Observability Stack -->
<!-- Module 3: AI & Agents -->
<div class="bg-surface-container-lowest p-10 flex flex-col gap-8 hover:bg-brand-teal/[0.02] transition-colors group">
<div class="space-y-4">
<div class="w-10 h-10 bg-brand-teal/10 rounded flex items-center justify-center text-brand-teal group-hover:scale-110 transition-transform">
<Activity :size="20" />
<Bot :size="20" />
</div>
<h3 class="font-headline-md text-headline-md font-semibold text-on-surface tracking-[-0.01em]">Observability Stack</h3>
<p class="text-body-sm font-body-sm text-on-surface-variant">Native integration with Prometheus, Grafana, and OpenTelemetry for deep inspection of application state.</p>
<h3 class="font-headline-md text-headline-md font-semibold text-on-surface tracking-[-0.01em]">AI &amp; Agents</h3>
<p class="text-body-sm font-body-sm text-on-surface-variant">Build AI-native services and autonomous agents on the async core — register LLM providers, orchestrate tools, and stream responses through the same container and provider pattern that powers the rest of your app.</p>
</div>
<div class="mt-auto space-y-4">
<div class="h-24 w-full bg-surface-container-low rounded border border-outline-variant flex items-end p-2 gap-1 overflow-hidden group-hover:border-brand-teal/30 transition-colors">
<div class="bg-brand-teal/20 h-[60%] w-full rounded-t-sm"></div>
<div class="bg-brand-teal/40 h-[80%] w-full rounded-t-sm"></div>
<div class="bg-brand-teal h-[95%] w-full rounded-t-sm animate-pulse"></div>
<div class="bg-brand-teal/30 h-[40%] w-full rounded-t-sm"></div>
<div class="bg-brand-teal/20 h-[70%] w-full rounded-t-sm"></div>
<div class="bg-brand-teal/50 h-[85%] w-full rounded-t-sm"></div>
</div>
<div class="flex justify-between text-[10px] text-outline font-label-sm uppercase">
<span>Request Throughput</span>
<span class="text-brand-teal font-bold">STABLE</span>
<div class="mt-auto">
<div class="bg-surface-container-low rounded border border-outline-variant p-3 space-y-3 group-hover:border-brand-teal/30 transition-colors">
<div class="flex justify-end">
<span class="text-[11px] font-label-sm text-on-surface bg-brand-teal/10 rounded-lg rounded-br-none px-3 py-1.5 max-w-[80%]">Summarize today's orders</span>
</div>
<div class="flex items-start gap-2">
<div class="w-6 h-6 shrink-0 bg-brand-teal/10 rounded flex items-center justify-center text-brand-teal">
<Bot :size="14" />
</div>
<span class="text-[11px] font-label-sm text-on-surface-variant bg-surface-container rounded-lg rounded-bl-none px-3 py-1.5 max-w-[80%]">
42 orders · $3,180 total
<span class="inline-flex ml-1 h-2 w-2 rounded-full bg-brand-teal animate-pulse align-middle"></span>
</span>
</div>
</div>
</div>
</div>
Expand Down
16 changes: 0 additions & 16 deletions .vitepress/theme/components/HeroSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -207,22 +207,6 @@
<Terminal :size="18"/>
</a>
</div>

<!-- Stats -->
<div class="grid grid-cols-3 gap-8 pt-8 border-t border-outline-variant">
<div>
<div class="text-headline-md font-headline-md font-semibold text-brand-teal tracking-[-0.01em]">99.9%</div>
<div class="text-label-sm font-label-sm text-on-surface-variant uppercase mt-1">Uptime SLA</div>
</div>
<div>
<div class="text-headline-md font-headline-md font-semibold text-brand-teal tracking-[-0.01em]">&lt;20ms</div>
<div class="text-label-sm font-label-sm text-on-surface-variant uppercase mt-1">P99 Latency</div>
</div>
<!-- <div>-->
<!-- <div class="text-headline-md font-headline-md font-semibold text-brand-teal tracking-[-0.01em]">12k+</div>-->
<!-- <div class="text-label-sm font-label-sm text-on-surface-variant uppercase mt-1">Stars</div>-->
<!-- </div>-->
</div>
</div>

<!-- Right Column: Code Editor -->
Expand Down
68 changes: 39 additions & 29 deletions .vitepress/theme/components/PerformanceBenchmarks.vue
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ import { Gauge, Shield, ArrowRight } from 'lucide-vue-next'
<h2 class="font-headline-xl text-headline-xl font-bold tracking-[-0.04em]">
Built for scale.
<br/>
<span class="text-brand-teal text-glow">Optimized for speed.</span>
<span class="text-brand-teal text-glow">Same request path.</span>
</h2>
<p class="text-white/70 font-body-lg text-body-lg max-w-xl">
The Startkit isn't just a collection of libraries; it's a battle-tested architecture designed to handle thousands of concurrent requests with sub-millisecond overhead.
The Startkit is a thin, provider-driven layer over FastAPI. Every request still runs on the same Starlette and uvicorn hot path as hand-written FastAPI — the framework adds its wiring at boot, not on the request path.
</p>
</div>

Expand All @@ -32,17 +32,17 @@ import { Gauge, Shield, ArrowRight } from 'lucide-vue-next'
<Gauge :size="20" class="text-brand-teal" />
</div>
<div class="space-y-1">
<h4 class="font-headline-md text-headline-md font-semibold text-white tracking-[-0.01em]">Zero-copy Processing</h4>
<p class="text-white/90 text-body-sm font-body-sm max-w-md">Leveraging memory-efficient serialization for lightning-fast data throughput across all system boundaries.</p>
<h4 class="font-headline-md text-headline-md font-semibold text-white tracking-[-0.01em]">Measured, not marketed</h4>
<p class="text-white/90 text-body-sm font-body-sm max-w-md">Every number here comes from the public <a href="https://github.com/fastapi-startkit/web-frameworks" class="text-brand-teal hover:underline">web-frameworks</a> harness — a reproducible benchmark you can run yourself against a raw FastAPI baseline.</p>
</div>
</li>
<li class="flex items-start gap-6 group/item">
<div class="mt-1 w-10 h-10 rounded bg-brand-teal/10 border border-brand-teal/20 flex items-center justify-center shrink-0 group-hover/item:bg-brand-teal/30 transition-colors">
<Shield :size="20" class="text-brand-teal" />
</div>
<div class="space-y-1">
<h4 class="font-headline-md text-headline-md font-semibold text-white tracking-[-0.01em]">Encrypted Pipelines</h4>
<p class="text-white/90 text-body-sm font-body-sm max-w-md">Hardware-accelerated TLS termination and internal secret management for uncompromising security at scale.</p>
<h4 class="font-headline-md text-headline-md font-semibold text-white tracking-[-0.01em]">Honest baseline</h4>
<p class="text-white/90 text-body-sm font-body-sm max-w-md">The baseline is raw FastAPI itself — an overhead delta, not an apples-to-oranges comparison against an unrelated stack.</p>
</div>
</li>
</ul>
Expand All @@ -52,54 +52,64 @@ import { Gauge, Shield, ArrowRight } from 'lucide-vue-next'
<div class="relative">
<div class="absolute -inset-10 bg-brand-teal/20 blur-[100px] rounded-full opacity-40"></div>
<div class="relative bg-slate-900/60 border border-brand-teal/20 p-10 rounded-xl backdrop-blur-xl shadow-[0_0_50px_rgba(5,150,105,0.1)]">
<div class="flex justify-between items-center mb-12">
<div class="flex justify-between items-center mb-4">
<div class="flex items-center gap-3">
<div class="w-2 h-2 rounded-full bg-brand-teal animate-pulse"></div>
<div class="font-label-md text-label-md text-white/90 uppercase tracking-widest">Performance Benchmark</div>
</div>
<div class="text-brand-teal text-[10px] font-bold border border-brand-teal/40 px-2 py-0.5 rounded uppercase tracking-tighter">Real-time</div>
<div class="text-brand-teal text-[10px] font-bold border border-brand-teal/40 px-2 py-0.5 rounded uppercase tracking-tighter">Overhead delta</div>
</div>

<div class="space-y-10">
<!-- FastAPI Startkit -->
<p class="text-white/50 text-[11px] mb-12 tracking-wide">Relative to raw FastAPI · uvicorn · oha · concurrency 64</p>

<div class="space-y-8">
<!-- GET / -->
<div class="space-y-3">
<div class="flex justify-between text-[11px] font-label-sm uppercase tracking-wider text-outline-variant">
<span class="text-white font-bold">FastAPI Startkit</span>
<span class="text-brand-teal font-bold">94,203 req/s</span>
<div class="flex justify-between text-[11px] font-label-sm uppercase tracking-wider">
<span class="text-white font-bold">GET /</span>
<span class="text-white/80 font-bold">−2.9%</span>
</div>
<div class="h-2 w-full bg-white/5 rounded-full overflow-hidden border border-white/5">
<div class="h-full bg-gradient-to-r from-brand-teal/50 to-brand-teal w-[95%] shadow-[0_0_15px_rgba(5,153,139,0.5)] transition-all duration-1000"></div>
<div class="h-full bg-gradient-to-r from-brand-teal/50 to-brand-teal w-[97%] shadow-[0_0_15px_rgba(5,153,139,0.5)] transition-all duration-1000"></div>
</div>
</div>

<!-- Django -->
<!-- GET /user/{id} -->
<div class="space-y-3">
<div class="flex justify-between text-[11px] font-label-sm uppercase tracking-wider text-white/60">
<span>Django Gunicorn</span>
<span class="text-white/60">12,180 req/s</span>
<div class="flex justify-between text-[11px] font-label-sm uppercase tracking-wider">
<span class="text-white font-bold">GET /user/&#123;id&#125;</span>
<span class="text-white/80 font-bold">−1.5%</span>
</div>
<div class="h-2 w-full bg-white/5 rounded-full overflow-hidden">
<div class="h-full bg-white/10 w-[20%]"></div>
<div class="h-2 w-full bg-white/5 rounded-full overflow-hidden border border-white/5">
<div class="h-full bg-gradient-to-r from-brand-teal/50 to-brand-teal w-[98%] shadow-[0_0_15px_rgba(5,153,139,0.5)] transition-all duration-1000"></div>
</div>
</div>

<!-- Express -->
<!-- POST /user -->
<div class="space-y-3">
<div class="flex justify-between text-[11px] font-label-sm uppercase tracking-wider text-white/60">
<span>Express.js Cluster</span>
<span class="text-white/60">41,500 req/s</span>
<div class="flex justify-between text-[11px] font-label-sm uppercase tracking-wider">
<span class="text-white font-bold">POST /user</span>
<span class="text-white/80 font-bold">−17.3%</span>
</div>
<div class="h-2 w-full bg-white/5 rounded-full overflow-hidden">
<div class="h-full bg-white/20 w-[45%]"></div>
<div class="h-2 w-full bg-white/5 rounded-full overflow-hidden border border-white/5">
<div class="h-full bg-gradient-to-r from-brand-teal/40 to-brand-teal/80 w-[83%] transition-all duration-1000"></div>
</div>
</div>
</div>

<div class="mt-14 pt-8 border-t border-white/10">
<button class="w-full text-brand-teal font-label-sm text-[10px] uppercase tracking-[0.2em] hover:text-white transition-colors flex items-center justify-center gap-2 group/btn">
<p class="mt-10 text-white/70 text-body-sm font-body-sm leading-relaxed">
The GET routes run <span class="text-brand-teal font-semibold">within a few percent</span> of raw FastAPI. The wider <span class="text-white font-semibold">POST /user</span> gap is FastAPI 0.139's <code class="text-brand-teal">include_router</code> resolution — reproducible in plain FastAPI, not framework per-request code.
</p>

<p class="mt-4 text-white/40 text-[10px] leading-relaxed">
Source: web-frameworks · relative, same-host comparison — not official benchmark figures.
</p>

<div class="mt-10 pt-8 border-t border-white/10">
<a href="/docs/benchmarks" class="w-full text-brand-teal font-label-sm text-[10px] uppercase tracking-[0.2em] hover:text-white transition-colors flex items-center justify-center gap-2 group/btn">
View Technical Methodology
<ArrowRight :size="14" class="group-hover/btn:translate-x-1 transition-transform" />
</button>
</a>
</div>
</div>
</div>
Expand Down
Loading