freshcrate
Skin:/
Home > Frameworks > sniffio

sniffio

Sniff out which async library your code is running under

Why this rank:Strong adoptionRelease freshnessHealthy release cadence

Description

.. image:: https://img.shields.io/badge/chat-join%20now-blue.svg :target: https://gitter.im/python-trio/general :alt: Join chatroom .. image:: https://img.shields.io/badge/docs-read%20now-blue.svg :target: https://sniffio.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status .. image:: https://img.shields.io/pypi/v/sniffio.svg :target: https://pypi.org/project/sniffio :alt: Latest PyPi version .. image:: https://img.shields.io/conda/vn/conda-forge/sniffio.svg :target: https://anaconda.org/conda-forge/sniffio :alt: Latest conda-forge version .. image:: https://travis-ci.org/python-trio/sniffio.svg?branch=master :target: https://travis-ci.org/python-trio/sniffio :alt: Automated test status .. image:: https://codecov.io/gh/python-trio/sniffio/branch/master/graph/badge.svg :target: https://codecov.io/gh/python-trio/sniffio :alt: Test coverage ================================================================= sniffio: Sniff out which async library your code is running under ================================================================= You're writing a library. You've decided to be ambitious, and support multiple async I/O packages, like `Trio <https://trio.readthedocs.io>`__, and `asyncio <https://docs.python.org/3/library/asyncio.html>`__, and ... You've written a bunch of clever code to handle all the differences. But... how do you know *which* piece of clever code to run? This is a tiny package whose only purpose is to let you detect which async library your code is running under. * Documentation: https://sniffio.readthedocs.io * Bug tracker and source code: https://github.com/python-trio/sniffio * License: MIT or Apache License 2.0, your choice * Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html * Code of conduct: Contributors are requested to follow our `code of conduct <https://trio.readthedocs.io/en/latest/code-of-conduct.html>`_ in all project spaces. This library is maintained by the Trio project, as a service to the async Python community as a whole. Quickstart ---------- .. code-block:: python3 from sniffio import current_async_library import trio import asyncio async def print_library(): library = current_async_library() print("This is:", library) # Prints "This is trio" trio.run(print_library) # Prints "This is asyncio" asyncio.run(print_library()) For more details, including how to add support to new async libraries, `please peruse our fine manual <https://sniffio.readthedocs.io>`__.

Release History

VersionChangesUrgencyDate
1.3.1Imported from PyPI (1.3.1)Low4/21/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
master@2026-03-06Latest activity on master branchLow3/6/2026
v1.3.1Tag v1.3.1Low2/25/2024
v1.3.0Tag v1.3.0Low9/1/2022
v1.2.0Tag v1.2.0Low10/11/2020
v1.1.0Tag v1.1.0Low4/20/2019
v1.0.0Tag v1.0.0Low8/1/2018

Dependencies & License Audit

Loading dependencies...

Similar Packages

greenbackReenter an async event loop from synchronous code1.3.0
python-socksProxy (SOCKS4, SOCKS5, HTTP CONNECT) client for Pythonv2.8.2
trioA friendly Python library for async concurrency and I/O0.33.0
autobahnWebSocket client & server library, WAMP real-time frameworkv26_7_1
aiosmtplibasyncio SMTP clientv5.1.2

More from pypi

markitdownUtility tool for converting various files to Markdown
fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production
djangoA high-level Python web framework that encourages rapid development and clean, pragmatic design.
flaskA simple framework for building complex web applications.

More in Frameworks

bamlThe AI framework that adds the engineering to prompt engineering (Python/TS/Ruby/Java/C#/Rust/Go compatible)
saas-builderAI-native SaaS framework that builds full-stack apps using autonomous AI agents
djangoA high-level Python web framework that encourages rapid development and clean, pragmatic design.
sglangSGLang is a fast serving framework for large language models and vision language models.