timing-asgi
ASGI middleware to emit timing metrics with something like statsd
Decision gist · record as of 2026-08-14
Yes, if you need automatic ASGI endpoint timing instrumentation and your license requirements can tolerate an unclear license status. The package is actively maintained, has no dependencies, and integrates cleanly with Starlette and other ASGI frameworks. Verify the license terms with the maintainer before using in a commercial or compliance-sensitive context.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.10 or later; only supports ASGI3 (ASGI2 support ended at version 0.1.2).
- Low friction: zero runtime dependencies, pure Python wheel, and actively maintained with recent commits.
- Requires Python 3.10 or later.
License · maintenance · safety
(unclear) — License status is unclear—no SPDX identifier or raw license text is available in the package metadata, so you cannot verify the terms before use.
last release 2026-02-17 (178 days) · last repo commit 2026-02-17 · 130 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 628,117 downloads/mo, #5,677 on PyPI
Alternatives
Verify before relying
pip install timing-asgi
from timing_asgi import TimingMiddleware, TimingClient
from timing_asgi.integrations import StarletteScopeToName
class PrintTimings(TimingClient):
def timing(self, metric_name, timing, tags):
print(metric_name, timing, tags)
app.add_middleware(
TimingMiddleware,
client=PrintTimings(),
metric_namer=StarletteScopeToName(prefix="myapp", starlette_app=app)
)- Whether the package is licensed under an open-source or proprietary license—metadata does not declare one.
What it is and what it does
Timing-asgi is a middleware layer for ASGI applications that automatically captures timing data for each request as it passes through your application. It measures both wall-clock time and CPU time, then emits these metrics along with HTTP context (status code, method) to a pluggable client interface. The middleware was built at GRID for use with Starlette-based backend services and is designed to feed metrics into statsd-compatible monitoring systems like Datadog.
You integrate it by wrapping your ASGI app with the TimingMiddleware, providing a TimingClient implementation (which can print, send to Datadog, or route metrics anywhere else) and a metric namer that converts ASGI scope information into readable metric names. The middleware handles the instrumentation transparently; your application code remains unchanged.
Use it for
- Emit per-endpoint wall-clock and CPU timing to Datadog or another statsd service for production monitoring.
- Automatically track HTTP request latency by status code and method without modifying route handlers.
- Build a custom metrics client to route timing data to your own monitoring or logging backend.
- Profile ASGI application performance in development by printing timing metrics to stdout or a log file.
- Measure CPU vs. wall-clock time to identify I/O-bound vs. compute-bound bottlenecks in endpoints.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, if you need automatic ASGI endpoint timing instrumentation and your license requirements can tolerate an unclear license status.
The package is actively maintained, has no dependencies, and integrates cleanly with Starlette and other ASGI frameworks. Verify the license terms with the maintainer before using in a commercial or compliance-sensitive context.
Install
timing-asgi on PyPI
Before you install
Low friction: zero runtime dependencies, pure Python wheel, and actively maintained with recent commits. Requires Python 3.10 or later.
Requires Python 3.10 or later; only supports ASGI3 (ASGI2 support ended at version 0.1.2).
License in practice
License status is unclear—no SPDX identifier or raw license text is available in the package metadata, so you cannot verify the terms before use.
Quickstart
pip install timing-asgi
from timing_asgi import TimingMiddleware, TimingClient
from timing_asgi.integrations import StarletteScopeToName
class PrintTimings(TimingClient):
def timing(self, metric_name, timing, tags):
print(metric_name, timing, tags)
app.add_middleware(
TimingMiddleware,
client=PrintTimings(),
metric_namer=StarletteScopeToName(prefix="myapp", starlette_app=app)
)
Verify before relying
- Whether the package is licensed under an open-source or proprietary license—metadata does not declare one.
Package facts
| License | Not declared unclear |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | None |
| Maintenance | Actively maintained 178 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 628,117 / month, #5,677 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Programming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14 |
Evidence: timing_asgi-0.3.2-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “asgi middleware timing metrics”
- timing-asgiTiming-asgi is an ASGI middleware that automatically measures and…
- opentelemetry-instrumentation-asgiProvides ASGI middleware for OpenTelemetry that instruments request…
- opentelemetry-util-httpProvides ASGI and WSGI middleware and HTTP utilities for…
Give your agent the search over MCP, or paste the wish link into any chat.
More Monitoring packages
Wraps any iterable to display a real-time progress bar in the terminal or Jupyter notebook, showing iteration count, elapsed time, and estimated time remaining.
Provides generated Python code for OpenTelemetry semantic conventions, enabling standardized attribute naming and constant definitions for instrumentation and telemetry collection.
Install it if you are using OpenTelemetry and want to follow semantic conventions correctly.
Provides the reference implementation of the OpenTelemetry API for collecting and exporting traces, metrics, and logs from Python applications.
Provides the abstract API and interfaces for OpenTelemetry instrumentation in Python, defining how to emit traces, metrics, and logs without tying code to a specific SDK implementation.
Exports OpenTelemetry observability data to an OpenTelemetry Collector using Protobuf-encoded messages over HTTP.
Install it if you are using OpenTelemetry in Python and need to send data to a Collector over HTTP.
Provides automatic instrumentation commands and programmatic APIs to inject distributed tracing into Python applications without code changes, detecting and instrumenting packages used by your program.
Install it if you need distributed tracing without code changes and have compatible instrumented packages in your environment.
See also opentelemetry-instrumentation-asgi · opentelemetry-util-http · asgi-correlation-id · asgi-lifespan · aiodogstatsd · judoscale · aioprometheus · brotli-asgi · aiohttp-asgi-connector · ipython-autotime