$npx skillfedfor your agent

synchronicity

Export blocking and async library versions from a single async implementation

Worth itPyPI Released Jun 202653.9M downloads / mopermissive licensePure Python

Decision gist · record as of 2026-08-14

pure-Python wheel — synchronicity-0.12.5-py3-none-any.whl
v0.12.5 · released 2026-06-18 · Python >=3.10 · 1 runtime deps: typing-extensions

Yes. Synchronicity fills a genuine gap in Python async library design—enabling a single codebase to serve both sync and async users without duplication. Low install friction, permissive license, active maintenance, no known vulnerabilities, and top-1000 popularity suggest it is stable and trusted. Install it if you are building a library that needs to support both calling conventions or if you want to avoid the complexity of maintaining parallel sync and async implementations.AI-flagged interpretation of the facts on this page — verify before relying

Before you install

  • Requires Python 3.10 or later.
  • Low install friction with a single lightweight dependency (typing-extensions).
  • Active maintenance with a recent release.

License · maintenance · safety

permissive license (permissive) — Licensed under Apache License 2.0 (permissive), allowing commercial and private use with minimal restrictions.

last release 2026-06-18 (57 days)

0 known vulnerabilities (OSV.dev, 2026-08-14) · 53,917,432 downloads/mo, #549 on PyPI

Verify before relying

pip install synchronicity

from synchronicity import Synchronizer
import asyncio

synchronizer = Synchronizer()

@synchronizer.wrap
async def f(x):
    await asyncio.sleep(1.0)
    return x**2

# Synchronous call blocks until result
ret = f(42)

# Async call via .aio property
async def g():
    ret = await f.aio(42)
    return ret
  • Whether the separate event loop thread adds measurable overhead for high-frequency calls.
  • Thread-safety guarantees when wrapped classes maintain mutable state across sync and async calls.
  • Performance characteristics when wrapping classes with many methods or complex initialization.
Same gist for agents: .md · .json

What it is and what it does

Synchronicity solves the problem of maintaining both synchronous and asynchronous APIs for the same underlying async code without duplicating implementation. It provides a `Synchronizer` class that wraps async functions, generators, and classes, running them on a dedicated event loop in a separate thread. Wrapped functions expose two interfaces: calling them directly blocks until the result is available (synchronous use), while calling the `.aio` property on the wrapper executes them asynchronously on the synchronizer's own event loop.

This is particularly useful for libraries that want to support both blocking and async callers without code duplication, and for preserving state across multiple calls (like a database connection that needs to stay open). The separate event loop design also isolates library execution from user code, preventing one side from blocking the other's event loop—a common pitfall in async Python.

Use it for

  • Build a database client library with persistent connections that works in both sync and async contexts without duplicating connection logic.
  • Wrap async generator functions to expose them as regular generators for synchronous callers while keeping async iteration available.
  • Create a library that supports both blocking scripts and async frameworks from a single async implementation.
  • Dispatch multiple async operations from a blocking context using `_future=True` to resolve them roughly in parallel.
  • Synchronize context manager classes (with `__aenter__` / `__aexit__`) for use in both `with` and `async with` statements.
  • Isolate library async code on its own event loop to prevent accidental blocking calls from locking up user code's event loop.

Worth the install?

AI-flagged interpretation of the facts on this page. Verify before relying on it.

Worth it

Yes.

Synchronicity fills a genuine gap in Python async library design—enabling a single codebase to serve both sync and async users without duplication. Low install friction, permissive license, active maintenance, no known vulnerabilities, and top-1000 popularity suggest it is stable and trusted. Install it if you are building a library that needs to support both calling conventions or if you want to avoid the complexity of maintaining parallel sync and async implementations.

Install

synchronicity on PyPI

Before you install

Low install friction with a single lightweight dependency (typing-extensions). Active maintenance with a recent release.

Requires Python 3.10 or later.

License in practice

Licensed under Apache License 2.0 (permissive), allowing commercial and private use with minimal restrictions.

Quickstart

pip install synchronicity

from synchronicity import Synchronizer
import asyncio

synchronizer = Synchronizer()

@synchronizer.wrap
async def f(x):
    await asyncio.sleep(1.0)
    return x**2

# Synchronous call blocks until result
ret = f(42)

# Async call via .aio property
async def g():
    ret = await f.aio(42)
    return ret

Verify before relying

  • Whether the separate event loop thread adds measurable overhead for high-frequency calls.
  • Thread-safety guarantees when wrapped classes maintain mutable state across sync and async calls.
  • Performance characteristics when wrapping classes with many methods or complex initialization.

Package facts

Licensepermissive license permissive
Python supportSupports the current Python release >=3.10
Install frictionLow. Pure-Python wheel
Runtime dependencies
1 package
typing-extensions
MaintenanceActively maintained 57 days since the last release
First released
Downloads53,917,432 / month, #549 on PyPI 30-day window, as of 2026-08-14
Known vulnerabilitiesNone known OSV.dev, checked 2026-08-14
Classifiers
License :: OSI Approved :: Apache Software LicenseOperating System :: OS IndependentProgramming Language :: Python :: 3

Evidence: synchronicity-0.12.5-py3-none-any.whl

Tags

Capabilities
async to sync wrapperdual sync async interfaceasyncio synchronization librarywrap async functions synchronouslyevent loop thread isolationasync generator to synclibrary dual interface pattern
Topics
async-sync-bridgeevent-loop-isolationlibrary-pattern

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 › “dual sync async interface”

  • synchronicityWraps async functions, generators, and classes to expose both…
  • unasyncTransforms asynchronous Python code into synchronous code during…
  • caldavA CalDAV (RFC4791) client library for Python that lets you create,…

Give your agent the search over MCP, or paste the wish link into any chat.

Similar packages

unasync With conditions
PyPI · Build Tools · released May 2024

Transforms asynchronous Python code into synchronous code during package build, enabling maintainers to generate both async and sync APIs from a single async source.

Apache-2.0pure Python · 3.8+
253.4Kdownloads / mo
unsync With conditions
PyPI · Application Frameworks · released Oct 2021

Decorator-based library that runs async functions in an ambient event loop and regular functions in thread or process pools, returning awaitable futures that combine asyncio and concurrent.futures semantics.

However, dormancy since 2021-10-21 and unspecified Python version support mean you should verify compatibility with your target Python version before committing.

permissive licensebuilds from sourcedormant
77.3Kdownloads / mo
duet With conditions
PyPI · Application Frameworks · released Jul 2023

Duet is a lightweight async library that wraps Future objects to enable async/await syntax around APIs that return futures, such as gRPC, while supporting re-entrant event loops.

Not recommended as a general-purpose async framework.

permissive licensepure Python · 3.9.0+
391.8Kdownloads / mo
asgiref Worth it
PyPI · WWW/HTTP · released Jul 2026

Provides ASGI base libraries including sync-to-async and async-to-sync function wrappers, server base classes, and a WSGI-to-ASGI adapter for bridging synchronous and asynchronous Python web code.

Install it if you're building or migrating to async Python web applications, especially with Django or Channels, or if you need to bridge sync and async code…

BSD-3-Clausepure Python · 3.10+
151.6Mdownloads / mo
janus With conditions
PyPI · Libraries · released Dec 2024

Provides a thread-safe queue with both synchronous and asynchronous interfaces for passing data between classic threaded code and asyncio tasks.

Apache-2.0pure Python · 3.9+
6.7Mdownloads / mo
psutil-home-assistant With conditions
PyPI · Python Modules · released Aug 2022

Wraps psutil to allow multiple independent instances in the same process by isolating global state, solving the library's inherent limitation of maintaining state through global variables.

However, if you only use psutil once per process, this wrapper adds unnecessary indirection—use psutil directly instead.

permissive licensepure Python · 3.8+
568.5Kdownloads / mo

See also futurist · threadloop · greenback · syncer