swadhinbiswas 🎨 docs: full WebTUI redesign — 8-bit terminal palette, custom navbar, nerd font icons, catppuccin/everforest/nord themes, terminal landing · 8/8/2026
ac54424
200 lines · 6.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
---
title: JustAPI
description: Python web framework powered by Rust. 766k req/s hello-world. FastAPI-compatible API, zero-config OpenAPI.
template: splash
---

<div class="ja-hero">
  <span is="badge" variant="green"> v2.0.9 · published on PyPI · 8 platforms</span>
  <h1>
    Python writes the logic.<br/>
    <span class="accent">Rust does everything else.</span>
  </h1>
  <p class="ja-hero-sub">
    JustAPI is a Python web framework with a Rust core. One import, zero config —
    routing, TLS, validation, serialization and the server itself run in Rust.
  </p>
  <div class="ja-hero-actions">
    <a href="/getting-started/overview/" is="button" size="large"> Get Started</a>
    <a href="https://github.com/swadhinbiswas/JustAPI" is="button" box="" size="large"> GitHub</a>
  </div>
</div>

## Performance

<div class="ja-stats">
  <div class="ja-stat">
    <div class="ja-stat-value">766k</div>
    <div class="ja-stat-label">req/s hello-world</div>
  </div>
  <div class="ja-stat">
    <div class="ja-stat-value">782k</div>
    <div class="ja-stat-label">req/s JSON echo</div>
  </div>
  <div class="ja-stat">
    <div class="ja-stat-value">2.4x</div>
    <div class="ja-stat-label">faster than Granian</div>
  </div>
  <div class="ja-stat">
    <div class="ja-stat-value">53x</div>
    <div class="ja-stat-label">native async DB</div>
  </div>
  <div class="ja-stat">
    <div class="ja-stat-value">181k</div>
    <div class="ja-stat-label">native CRUD SELECT</div>
  </div>
  <div class="ja-stat">
    <div class="ja-stat-value">12MB</div>
    <div class="ja-stat-label">resident memory</div>
  </div>
</div>

## Quick start

<div class="ja-tabs">
  <div class="ja-tabs-bar">
    <button class="ja-tab-btn" data-tab-btn="pip" data-active="true"> pip</button>
    <button class="ja-tab-btn" data-tab-btn="uv"> uv</button>
    <button class="ja-tab-btn" data-tab-btn="scaffold"> scaffold</button>
  </div>
  <div class="ja-tab-panel" data-tab-panel="pip">
```bash
pip install justapi
python main.py
# ✓ JustAPI running on http://127.0.0.1:8000
```
  </div>
  <div class="ja-tab-panel" data-tab-panel="uv" style="display:none">
```bash
uv pip install justapi
uv run main.py
```
  </div>
  <div class="ja-tab-panel" data-tab-panel="scaffold" style="display:none">
```bash
uvx justapi create my_app
cd my_app && python app/main.py
```
  </div>
</div>

## Minimal app

<div class="ja-terminal">
  <div class="ja-terminal-bar">
    <span class="ja-terminal-dot"></span>
    <span class="ja-terminal-dot"></span>
    <span class="ja-terminal-dot"></span>
    <span class="ja-terminal-title"> main.py</span>
  </div>
  <div class="ja-terminal-body">
    <span class="cm">from</span> justapi <span class="cm">import</span> JustAPIApp<br/>
    <br/>
    app = JustAPIApp()<br/>
    <br/>
    <span class="cm">@app.get</span>(<span class="ok">"/"</span>)<br/>
    <span class="cm">def</span> hello():<br/>
    &nbsp;&nbsp;&nbsp;&nbsp;<span class="cm">return</span> &#123;<span class="ok">"Hello"</span>: <span class="ok">"World"</span>&#125;<br/>
    <br/>
    app.run()<br/>
    <span class="ok"></span> <span class="dim">server started · /docs · /redoc · OpenAPI auto</span>
  </div>
</div>

## Benchmarks

<div class="ja-bars">
  <div class="ja-bar-row ja-bar-row--winner">
    <span class="ja-bar-label">JustAPI</span>
    <div class="ja-bar-track"><div class="ja-bar-fill" data-w="100%"></div></div>
    <span class="ja-bar-value">766k</span>
  </div>
  <div class="ja-bar-row">
    <span class="ja-bar-label">Granian</span>
    <div class="ja-bar-track"><div class="ja-bar-fill" data-w="41%"></div></div>
    <span class="ja-bar-value">314k</span>
  </div>
  <div class="ja-bar-row">
    <span class="ja-bar-label">Robyn</span>
    <div class="ja-bar-track"><div class="ja-bar-fill" data-w="5%"></div></div>
    <span class="ja-bar-value">39k</span>
  </div>
  <div class="ja-bar-row">
    <span class="ja-bar-label">FastAPI</span>
    <div class="ja-bar-track"><div class="ja-bar-fill" data-w="5%"></div></div>
    <span class="ja-bar-value">36k</span>
  </div>
</div>

<blockquote>
  hello-world, 100 concurrent connections, 30s, same hardware — full methodology in <a href="https://github.com/swadhinbiswas/JustAPI/blob/main/BENCHMARKS.md">BENCHMARKS.md</a>
</blockquote>

## Features

<div class="ja-grid">
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Rust core</h3>
    <p>Networking, TLS, routing, serialization run in Rust. Python executes only your logic.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Native async DB</h3>
    <p><code>await app.db.query_async()</code> runs SQL on Rust's tokio runtime — 53× faster on slow queries.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Rust-native SSE</h3>
    <p><code>app.sse_native()</code> streams events with zero Python per event.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Multi-worker</h3>
    <p><code>justapi serve --workers N</code> — 1.88× throughput at 4 workers, auto-scale.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Free-threaded</h3>
    <p>CPython 3.14t wheels — CPU-bound Python scales with cores, 12.4× measured.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Security built-in</h3>
    <p>JWT, rate limiting, CORS, security headers — all in Rust middleware.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Production-ready</h3>
    <p>Circuit breakers, OTel tracing, Prometheus metrics, health checks.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>Type-checked</h3>
    <p><code>py.typed</code> + complete stubs — mypy-clean on user code.</p>
  </div>
  <div class="ja-card">
    <div class="ja-card-icon"></div>
    <h3>FastAPI-compatible</h3>
    <p>Same decorators, Pydantic models, Depends. Migrate with one import.</p>
  </div>
</div>

## Framework comparison

| | FastAPI | JustAPI |
|---|---|---|
| **Server** | uvicorn (Python) | Rust (tokio + hyper) |
| **Hello-world** | ~36k req/s | **~766k req/s** |
| **JSON echo** | ~33k req/s | **~782k req/s** |
| **Native DB SELECT** | Python driver | **181k req/s (×125)** |
| **Memory** | 29 MB | **12 MB** |

<div class="ja-cta">
  <h2>Ready to build something fast?</h2>
  <p>One import. Rust underneath. Zero config.</p>
  <a href="/getting-started/overview/" is="button" size="large"> Get Started</a>
</div>