Invisibles
Transparent remote method invocation. Same object, same usage, different location.
What It Does
You have an object. You want to move it to another process, another node. The code that uses it doesn't change.
# Local
result = service.add(5, 3)
data = await service.fetch("key")
# Remote - identical
result = proxy.add(5, 3)
data = await proxy.fetch("key")
Sync methods stay sync. Async methods stay async. The proxy matches the remote object's API exactly.
Architecture
Two connection channels, each doing what it's good at:
- Sync connection - reentrant serving pattern, handles sync methods and protocol operations
- Async connection - message pump with asyncio futures, handles async methods natively
Both share a Protocol instance that manages boxing, dispatch, and proxy creation. See docs/architecture.md for details.
Key Concepts
- Service - any Python object exposed remotely, no base class needed
- Connection - per-client RPC channel (sync or async), wraps netkit transport
- Proxy - client-side transparent handle, created automatically during unboxing
- Protocol - shared RPC state: boxing, dispatch, object registry, proxy caching
- Dispatcher - how sync method calls are run (inline, threaded, or shared)
Deployment Scenarios
| Object type | Clients | Execution | Setup |
|---|---|---|---|
| Sync, not thread-safe | Single | Serialized | SyncServer + InlineDispatcher |
| Sync, not thread-safe | Multiple | Serialized | SyncServer + SharedDispatcher |
| Sync, thread-safe | Multiple | Parallel | SyncServer + ThreadedDispatcher |
| Async / Mixed | Any | Async on server loop | SyncServer + AsyncDispatcher |
See docs/scenarios.md for the full matrix.
Python Protocol Support
Works transparently over RPC:
- Method calls (sync and async)
- Attribute access
- Iterators and generators (
for x in proxy) - Async iterators (
async for x in proxy) - Context managers (
with proxy) - Async context managers (
async with proxy) - Operator overloading (
+,-,*,[],in,len, etc.) - Callable objects (
proxy(args)) - Exception propagation (including custom exception classes)
- Nested objects (methods returning objects that are themselves proxied)
Docs
- docs/overview.md - execution model and design rationale
- docs/architecture.md - concepts, flow diagrams, boxing
- docs/scenarios.md - deployment scenarios matrix
- docs/netkit.md - networking layer (vendored)
License
Apache-2.0 - See LICENSE.md
Metadata
Release files for invisibles-py 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| invisibles_py-0.1.2.tar.gz | 97.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| invisibles_py-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 176.0 kB
Release files / invisibles_py-0.1.2.tar.gz
| Download URL | invisibles_py-0.1.2.tar.gz |
|---|---|
| Size | 97.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8e793f733d0619e74591b647dc73c73e3dcb2a6b82128b81c0880a25d9fc609b
|
|
BLAKE2b-256 checksum How to use checksums |
6244020365e4453a8639a0ff3d6dceae5e24f93113c027c223fd1d22204f3009
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.
Transparency logRelease files / invisibles_py-0.1.2-py3-none-any.whl
| Download URL | invisibles_py-0.1.2-py3-none-any.whl |
|---|---|
| Size | 78.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a24473f829a437fca94d963d722235ffcc7b3b88026c9066e8f9fedac98db892
|
|
BLAKE2b-256 checksum How to use checksums |
5440e4a12813c6effc65bb7858dde0d070e183a5d741831d3f4fe24aac360e46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.
Transparency log