Skip to main content

eggress Python bindings

Python bindings for the eggress proxy framework, powered by PyO3 and the Rust embed API.

Installation (local development)

pip install maturin
cd crates/eggress-python
rm -f ../../target/wheels/eggress-*.whl   # stale wheels break the install glob below
maturin build --target x86_64-apple-darwin   # adjust target for your platform
pip install --force-reinstall target/wheels/eggress-*.whl

Prebuilt wheels

Prebuilt wheels are published to PyPI for:

  • Linux x86_64 and aarch64 (manylinux)
  • macOS x86_64 and arm64
  • Windows x86_64

The wheel uses the Python stable ABI (abi3-py39), so one wheel per platform supports all declared Python versions (3.9–3.13). Other platforms can install from the source distribution (requires Rust toolchain).

Supported Python versions: 3.9, 3.10, 3.11, 3.12, 3.13.

Quick start

from eggress import EggressService

with EggressService.from_toml("""
    version = 1
    [[listeners]]
    name = "socks"
    bind = "127.0.0.1:0"
    protocols = ["socks5"]
""").start() as handle:
    addr = handle.bound_addresses["socks"]
    print(f"SOCKS5 listening on {addr}")
    print(handle.metrics_text())

Async usage

import asyncio
from eggress import EggressService

async def main():
    async with await EggressService.from_toml(TOML).astart() as handle:
        print("Listening on", await handle.bound_addresses)

asyncio.run(main())

API

  • EggressConfig.from_toml(toml) / EggressConfig.from_file(path) — parse config
  • EggressService(config) / EggressService.from_toml(toml) — create service
  • service.start() — start proxy, returns EggressHandle
  • handle.bound_addresses — dict of listener name -> address
  • handle.status() — generation, readiness, uptime, connections
  • handle.metrics_text() — Prometheus metrics
  • handle.reload_toml(toml) — hot-reload config
  • handle.shutdown() — graceful shutdown (idempotent; safe to call twice)
  • Context manager support: with service.start() as handle: ...

Always use explicit lifecycle management. Prefer context managers or explicit handle.shutdown() in a finally block. Do not rely on Python garbage collection to shut down the service — object destruction is a best-effort fallback, not the lifecycle API.

pproxy Compatibility

Eggress provides a pproxy compatibility surface validated against pproxy==2.7.9 and bounded by the canonical capability manifest. Legacy cipher implementations and unsupported native transports fail explicitly rather than being silently substituted:

  • URI Translation: translate_pproxy_args() converts pproxy CLI arguments to eggress TOML
  • Same Protocols: HTTP, SOCKS4/4a, SOCKS5, Shadowsocks (AEAD), Trojan
  • Same Schedulers: Round-robin, least-connections, first-available
  • Enhanced Features: Hot-reload, structured errors, context managers

See docs/python/PPROXY_EMBEDDED_USAGE_PATTERNS.md for migration guidance.

pproxy drop-in API

from eggress import PPProxyService, start_pproxy, check_pproxy_args

# Check compatibility before starting
report = check_pproxy_args(["-l", "socks5://:1080", "-r", "http://proxy:8080"])
print(f"Tier: {report.tier}, OK: {report.ok}")

# Start from pproxy args
with start_pproxy(["-l", "socks5://127.0.0.1:0"]) as handle:
    print(handle.bound_addresses)

# Start from local URI
with PPProxyService.from_uri("socks5://127.0.0.1:0") as handle:
    print(handle.bound_addresses)

# Start from TOML
with PPProxyService.from_toml(toml_str) as handle:
    print(handle.bound_addresses)

The optional eggress-pproxy-compat distribution additionally provides python -m pproxy, a pproxy console script, and the top-level pproxy package backed by the same compatibility entry point. pproxy.server helper calls reuse the existing protocol/proxy adapters, while pproxy.sysproxy delegates system-proxy apply/rollback to the native backend where the platform supports it. See the namespace strategy below before installing it.

API Contract (Phase C1)

A machine-readable contract of the bounded pproxy adapter is maintained at python/compat/pproxy_api_contract.json. The exact upstream installed-package inventory is maintained separately in compat/pproxy-2.7.9/namespace-baseline.json and the active parity manifest. Use scripts/pproxy_surface_probe.py with isolated oracle and wheel interpreters to compare module names, top-level exports, tracked signatures, async classification, and class bases. Importability is not a claim that private pproxy internals are functionally reproduced.

Classification summary

Tier Count Examples
adapted_target 3 Connection, Server, Rule → PPProxyService
intentional_non_parity 1 DIRECT sentinel
internal_observed 87 Protocol classes, cipher classes, server internals

Validation

# Regenerate the contract
python3.11 python/compat/extract_api.py

# Run 56 contract validation tests
python3.11 -m pytest tests/compat/test_pproxy_api_contract.py -v

# Run 46 behavioral probes
python3.11 python/compat/behavioral_probes.py

Namespace strategy

The optional eggress-pproxy-compat distribution installs a bounded top-level pproxy package containing the documented connection/server factories and protocol/cipher submodules. The canonical eggress distribution retains eggress.pproxy and eggress.start_pproxy() for translation and managed-service workflows. Do not install the compatibility distribution alongside upstream pproxy in the same environment. See docs/python/PPROXY_NAMESPACE_STRATEGY.md for the compatibility boundary.

Migrating from pproxy

from eggress import start_pproxy

# Same arguments you'd pass to pproxy
with start_pproxy(["-l", "socks5://:1080", "-r", "http://proxy:8080"]) as handle:
    print(handle.bound_addresses)

Or inspect the translation first:

from eggress import translate_pproxy_args

result = translate_pproxy_args(["-l", "socks5://:1080", "-r", "http://proxy:8080"])
print(result.toml)         # generated eggress TOML
print(result.warnings)     # partial-behavior notes
print(result.unsupported)  # unsupported features

Error model

Exception Meaning
EggressError Base exception
ConfigError TOML parsing or validation error
StartupError Listener bind or readiness timeout
ReloadError Config reload failure
ShutdownError Runtime shutdown error
UnsupportedFeatureError Feature not supported
InternalError Unexpected internal error

Limitations

  • GIL is released for blocking Rust calls
  • Requires Python >= 3.9
  • Listener bind changes require restart (not reloadable)
  • No logging initialization unless configured in TOML

Non-parity with pproxy

Distinguish runtime capability, service-facade exposure, and dedicated Python convenience API (see docs/PYTHON_BINDINGS.md and architecture/python-bindings.md):

  • Shadowsocks TCP uses standard SIP003 AEAD framing (wire-compatible with shadowsocks-rust/ssserver/sslocal); multi-hop TCP chains and UDP through composed SOCKS5/Shadowsocks hop chains are supported (see docs/CAPABILITIES.md)
  • Generic RuntimeConfig/EggressConfig::from_toml supports Shadowsocks/Trojan listener sections; Python convenience paths focus on SOCKS5/HTTP inbound plus TCP/UDP upstream Shadowsocks in the current release
  • Legacy stream ciphers (aes-ctr, aes-cfb, rc4-md5, etc.) behind opt-in legacy-crypto (compatibility-only)
  • SSH upstreams behind opt-in ssh (upstream-only); Unix-domain listeners supported by the runtime (UnixListenerConfig, configure via TOML/EggressConfig); transparent redir:// supported on Linux
  • Linux pproxy daemon mode (--daemon) behind opt-in pproxy-daemon
  • Standalone UDP relay (-ul, mode standalone_pproxy_udp) supported
  • Multiple remotes default to round-robin (matches pproxy behavior)
  • Direct fallback requires explicit config

Release files for eggress 1.0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eggress 1.0.10
File Size Uploaded
eggress-1.0.10.tar.gz 1.1 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for eggress 1.0.10
File
eggress-1.0.10-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details
eggress-1.0.10-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
eggress-1.0.10-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details
eggress-1.0.10-cp39-abi3-musllinux_1_2_armv7l.whl CPython 3.9 abi3 Linux musl 1.2+ ARMv7l Details
eggress-1.0.10-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details
eggress-1.0.10-cp39-abi3-manylinux_2_28_armv7l.whl CPython 3.9 abi3 Linux glibc 2.28+ ARMv7l Details
eggress-1.0.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
eggress-1.0.10-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
eggress-1.0.10-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
eggress-1.0.10-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 52.3 MB

Release files / eggress-1.0.10.tar.gz

Download URL eggress-1.0.10.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
f8c9c2e4411cd1363dd1f121a86b772fa4166e94f96e4711d62232b58ccbd8f9
BLAKE2b-256 checksum
How to use checksums
b2b69af758cd83fb682aa88a85e9bafba817c49e4cc9aa0d7c2d9426d4b15b58
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-win_arm64.whl

Download URL eggress-1.0.10-cp39-abi3-win_arm64.whl
Size 5.1 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
109c4a1b5d95f99b318437c384f6ccfab7b3d40fa667e920ec4aa86fb50922b5
BLAKE2b-256 checksum
How to use checksums
4cb9c98a6e646ef2d51de8d5290414e4248403290081d3e82399c1e8ae87885e
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-win_amd64.whl

Download URL eggress-1.0.10-cp39-abi3-win_amd64.whl
Size 5.4 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b157b545fe5b73f8283b7a029581207708347e495c2b03869cab5cc931f0fd50
BLAKE2b-256 checksum
How to use checksums
97f25601da2e0553b2a601372dfeec2c5566ec7ae0f561eadbbd5b44181c21b6
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL eggress-1.0.10-cp39-abi3-musllinux_1_2_x86_64.whl
Size 5.5 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
f72479a63b27c02956ab7d3f2010e0ab80a7b4244ea668a6bbdcd112f4023027
BLAKE2b-256 checksum
How to use checksums
624f5002ad149bcbe4bfa404e718d7dfad0f258410ec8913dc04adebe6da841f
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-musllinux_1_2_armv7l.whl

Download URL eggress-1.0.10-cp39-abi3-musllinux_1_2_armv7l.whl
Size 5.1 MB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
20a8bccad2149221820d089bf86673d40f201d59ab5fd299a845bc3b2d486f9b
BLAKE2b-256 checksum
How to use checksums
e6bc76467ddbdf04a61e3e9091a7311c21b529294c46c3f063fb0a1239bebb7f
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL eggress-1.0.10-cp39-abi3-musllinux_1_2_aarch64.whl
Size 5.1 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
6da9ef7ebb7ef3086dc7697b60eeb93c1bb3a8abd241a30344ff2783aaffe5e2
BLAKE2b-256 checksum
How to use checksums
9dfa95c13e57677860cc3688df3f036bf64fbed62ee6ba9bfb6422dd190aa848
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-manylinux_2_28_armv7l.whl

Download URL eggress-1.0.10-cp39-abi3-manylinux_2_28_armv7l.whl
Size 4.8 MB
Tags CPython 3.9 Linux glibc 2.28+ ARMv7l abi3
SHA-256 checksum
How to use checksums
6165772095ea94e52a714a691a1386d7a8c2a8ecba628b142d7e138dbf29d51e
BLAKE2b-256 checksum
How to use checksums
0c77d4696a5234c9131b745c69729642c4550ee69c1dd9ad45c929e239122e88
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL eggress-1.0.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.3 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
e48926b40fb0789a6c550adeab4a903b3db62489bf15db3212fd246346c3c6fb
BLAKE2b-256 checksum
How to use checksums
d31a6a5a80bff47dfe7a1017af126af4104b1bcde04e3123c61a2718bfff5206
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL eggress-1.0.10-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.0 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
b2077384d9a39cb44964bcb44f24cd76c3dce83ab498fbdb7fe6b5031198df9a
BLAKE2b-256 checksum
How to use checksums
3f6628f1982b564b3d3759c62e375cc80f220c8e16f4da923df2110097fa2d9d
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-macosx_11_0_arm64.whl

Download URL eggress-1.0.10-cp39-abi3-macosx_11_0_arm64.whl
Size 4.8 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
206feeb3bf3762d4d5ab62e0d3092f112bf5374dfefeea4db32240e99b7f1651
BLAKE2b-256 checksum
How to use checksums
ee757afbc56f7e6dcde8a695e01e3f3c925494887145977d07a7e097118dd0ce
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 Sep 24, 2026.

Transparency log

Release files / eggress-1.0.10-cp39-abi3-macosx_10_12_x86_64.whl

Download URL eggress-1.0.10-cp39-abi3-macosx_10_12_x86_64.whl
Size 5.1 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
142382910a889c68da8b26a332821d4d66f0bb0e3d0c90c1deff35defe2fa33f
BLAKE2b-256 checksum
How to use checksums
a94d4a473c6dba46aa49eafd6698580e4a61ee427566ca51b1041e26da4ab541
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 Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.10 This release

11 release files

1.0.9

11 release files

1.0.8

11 release files

1.0.7

6 release files

1.0.6

6 release files

1.0.5

6 release files

1.0.4

6 release files

1.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page