AtomHTTP
A synchronous-first HTTP client for Python with fully optional async support — designed for simplicity, ergonomics, and production use.
Everything you need
A complete HTTP client with all the features you expect from a modern library
Sync by Default
No event loop needed for everyday HTTP calls
Interceptors & Hooks
Request/response middleware plus onRetry/onRedirect hooks
Progress Tracking
Upload + download realtime callbacks
Cancellation
axios-style AbortController, works sync or async
Auth & TLS
Basic/Bearer auth, mTLS, custom CA bundles
Concurrency Without Async
.all() / .submit() / .map() on a persistent thread pool
Performance
Keep-Alive, compression, connection pooling, retries
Type Hints
Full typing support for IDE autocompletion
How AtomHTTP compares
More features, better performance, and cleaner API than alternatives
| Feature | AtomHTTP | requests | httpx |
|---|---|---|---|
| Sync API (no event loop) | ✓ | ✓ | ✓ |
| Optional Async (same transport) | ✓ | ✗ | ✓ (separate client) |
| Cancellation (AbortController) | ✓ | ✗ | Manual |
| Interceptors | ✓ | ✗ | ✓ |
| Upload Progress | ✓ | ✗ | ✗ |
| Download Progress | ✓ | ✗ | ✗ |
| Streaming FormData Uploads | ✓ (automatic) | Manual | Manual |
| Pagination Helper | ✓ | ✗ | ✗ |
| Concurrency Without Async | ✓ (.all/.submit/.map) | Manual | n/a |
| Type Hints | Full | Partial | ✓ |
Get started in seconds
Simple, intuitive API that feels familiar
from atomhttp import AtomHTTP
client = AtomHTTP(
base_url='https://jsonplaceholder.typicode.com',
timeout=10,
)
response = client.get('/posts/1') # no async/await needed
print(f"Status: {response.status}")
print(f"Title: {response.data['title']}")Ready to build something great?
AtomHTTP is open source and free to use under the MIT license.