AllStak SDK for Python, Django, Flask, FastAPI, and plain services. Captures exceptions, logs, inbound and outbound HTTP requests, spans, database telemetry, and cron heartbeats.
pip install allstakFramework extras are opt-in so the base install stays minimal:
pip install "allstak[fastapi]" # FastAPI/Starlette helpers
pip install "allstak[flask]" # Flask helpers
pip install "allstak[django]" # Django middleware + integrations
pip install "allstak[sqlalchemy]" # SQLAlchemy query telemetry
pip install "allstak[all]" # everything aboveRequires Python 3.9+. Wheels are universal (py3-none-any). Every release is
built reproducibly under a pinned SOURCE_DATE_EPOCH, validated via
twine check --strict, smoke-installed on Python 3.10/3.11/3.12, and
uploaded via PyPI Trusted Publishers (OIDC) with PEP 740 Sigstore
attestations.
import os
import allstak
allstak.init(
api_key=os.getenv("ALLSTAK_API_KEY"),
environment=os.getenv("APP_ENV", "production"),
release=os.getenv("ALLSTAK_RELEASE"),
)
allstak.log.info("worker started")
allstak.capture_exception(RuntimeError("checkout failed"))After allstak.init(...), FastAPI / Starlette apps are auto-instrumented — no
extra line needed:
import allstak
from fastapi import FastAPI
allstak.init(api_key="ask_live_...")
app = FastAPI() # inbound request telemetry + error capture are already wiredTo attach explicitly (or to set a service name / disable the auto-attach via
allstak.init(..., capture_fastapi=False)):
from fastapi import FastAPI
from allstak.integrations.fastapi import AllStakFastAPI
app = FastAPI()
AllStakFastAPI(app, service="checkout-api")allstak.init(...) auto-attaches the logging bridge (disable with
capture_logs=False), so standard-library logs flow to AllStak with no extra
code. ERROR/CRITICAL records become error events (with the exception + stack
for logger.exception(...)), and lower levels become breadcrumbs:
import logging
logging.getLogger("checkout").error("payment declined")
try:
charge()
except Exception:
logging.getLogger("checkout").exception("charge crashed") # captured with stackfrom flask import Flask
from allstak.integrations.flask import AllStakFlask
app = Flask(__name__)
AllStakFlask(app)Add "allstak" to INSTALLED_APPS and the SDK auto-inserts its request
middleware for you — no manual MIDDLEWARE edit needed:
INSTALLED_APPS = [
# ...
"allstak",
]
ALLSTAK = {
"api_key": "ask_live_...",
"environment": "production",
# "auto_middleware": False, # opt out of auto-insertion
}Prefer to wire it by hand? Add the middleware at the front of the stack
(AllStakDjangoMiddleware is an alias of the same class):
MIDDLEWARE = [
"allstak.integrations.django.AllStakMiddleware",
*MIDDLEWARE,
]with allstak.start_span("checkout.authorize", tags={"provider": "payments"}):
authorize_payment()| Option | Description |
|---|---|
api_key |
Project API key. |
environment |
Deployment environment. |
release |
App version or commit SHA. |
flush_interval_ms |
Background flush interval. |
buffer_size |
Max buffered events. |
The SDK redacts common sensitive headers and fields. Avoid putting secrets in custom metadata.
- No events: confirm
ALLSTAK_API_KEYis set beforeallstak.init(...). - Missing request telemetry: register the framework integration during app startup.
- Short-lived script: call
allstak.get_client().flush()before exit when a client is initialized.
- Report bugs with the GitHub bug report template: https://github.com/AllStak/allstak-python/issues/new/choose
- Open pull requests using the checklist in CONTRIBUTING.md.
- Report security vulnerabilities privately through SECURITY.md.
MIT