Helps you test how your application behaves under realistic network failures without rewriting application code or introducing an in-app proxy layer.
Core value:
- non-intrusive Linux socket interception through
LD_PRELOAD; - Python-first ergonomics (decorators, policy APIs, CLI workflows);
- deterministic and reproducible fault decisions for CI validation;
- broad fault model coverage across connection, transport, DNS, and payload behavior.
Detailed documentation lives in docs/ and is published at:
Package distribution (PyPI):
High-level architecture
Execution model:
- Python decorators/policies write effective configuration to shared memory.
- Linux interceptor hooks socket syscalls (
send,recv,connect,sendto,recvfrom,getaddrinfo). faultcore_networkevaluates a deterministic runtime-stage graph (R0..R8) with operation-specific applicability.- Runtime applies directives (delay, drop, timeout, error, mutate, reorder, duplicate) and then calls original libc functions when needed.
Quick Start
Install from PyPI:
pip install faultcore
Requirements:
- Python 3.10+
- Rust toolchain
- Linux for network interception
Install development dependencies and build native artifacts:
uv sync --group dev
./build.sh
build.sh expects .venv/bin/python to exist, validates version alignment across
pyproject.toml, faultcore_interceptor/Cargo.toml, and faultcore_network/Cargo.toml,
then stages Linux interceptor artifacts into src/faultcore/_native/<platform-tag>/ before building wheels.
Fast validation path:
sh lint.sh
sh build.sh
sh tests.sh
Long stress path (optional):
sh tests_long.sh
CLI-first execution:
uv run faultcore doctor
uv run faultcore run -- python -c "import socket; print('ok')"
uv run faultcore run --run-json artifacts/run.json -- pytest -q
uv run faultcore report --input artifacts/run.json --output artifacts/report.html
uv run faultcore report --input artifacts/run.json --output artifacts/report.latest.html --max-events 200 --reverse-events
Notes:
faultcore rundefaults to strict mode on Linux and exits with code2when interceptor probing fails.- Use
--no-strictonly for debugging environments where preload activation is intentionally unavailable. - With
--run-json, CLI enables record/replay capture mode automatically when mode is unset/off and writes<run-json>.rr.jsonl.gzwhenFAULTCORE_RECORD_REPLAY_PATHis unset. faultcore reportsupports optional event rendering controls:--max-eventsand--reverse-events.
Manual LD_PRELOAD execution is still available for advanced debugging.
Platform behavior:
- Linux:
faultcore runconfiguresLD_PRELOADautomatically and probes interceptor activation in strict mode. - Non-Linux: decorators and policy APIs are still callable, but interceptor-level network effects are not active.
Minimal usage:
import faultcore
@faultcore.timeout(connect="200ms")
def slow_operation():
return "ok"
@faultcore.rate("10mbps")
def network_operation():
return "ok"
What you can test
It supports failure scenarios that commonly cause production-only bugs:
- latency and jitter;
- packet loss and burst loss;
- bandwidth throttling;
- connection and receive timeouts;
- connection error injection;
- DNS delay, timeout, and NXDOMAIN;
- correlated loss (Gilbert-Elliott style state behavior);
- directional profiles (uplink vs downlink);
- packet duplicate and packet reorder;
- session budget limits (bytes, ops, duration);
- payload mutation in stream operations;
- target-aware rules (hostname/SNI/protocol/address/port based scope);
- record/replay for reproducible failure timelines.
These can be combined in one run to validate retries, idempotency, fallbacks, parser robustness, and resilience logic under stress.
Typical CI use cases
- Validate retry/backoff behavior under timeout + packet loss.
- Validate DNS fallback and graceful degradation under resolver faults.
- Validate stream parser robustness under payload mutation and reorder.
- Reproduce flaky integration failures with record/replay evidence.
- Generate run JSON + HTML report artifacts for post-run analysis.
Documentation Index
Primary docs entrypoint:
docs/index.md- Read the Docs: https://faultcore.readthedocs.io/en/latest/
Core documentation paths:
| Document | Scope |
|---|---|
docs/getting_started.md |
Installation, first run, first decorator |
docs/cli_usage.md |
CLI commands (doctor, run, report) and recommended workflows |
docs/api_reference.md |
Feature-by-feature reference (timeout, rate, latency, jitter, loss, DNS, policy APIs) |
docs/examples.md |
Scenario map and recommended testing patterns |
docs/troubleshooting.md |
Symptom-based troubleshooting and quality gate |
Deep-dive references:
| Document | Scope |
|---|---|
docs/architecture.md |
System architecture with runtime-stage graph and module layout |
docs/policies_and_context.md |
Policy lifecycle and application patterns |
docs/interceptor_and_shm.md |
CLI runtime and SHM/interceptor details |
docs/testing_and_examples.md |
Build/test command details and legacy examples |
docs/shm_protocol.md |
SHM binary layout and consistency protocol |
docs/operations_tuning.md |
Baseline/tuning/stress operational guidance |
Build Documentation (Sphinx + MyST)
Generate HTML docs locally:
uv run sphinx-build -M html docs docs/_build
Open generated site entrypoint:
docs/_build/html/index.html
Publish to PyPI
The project includes a release workflow at .github/workflows/publish-pypi.yml that builds:
- Linux
x86_64wheels - Linux
i686wheels - Linux
aarch64wheels - one source distribution (
sdist)
Release options:
- Push a tag like
v2026.3.8to publish directly to PyPI. - Run the workflow manually (
workflow_dispatch) and choose:pypifor production publishtestpypifor dry-run validation
The wheel build uses cibuildwheel and stages architecture-specific native artifacts with
scripts/build_native_artifacts.sh before each wheel build.
Project Status
- Python package metadata:
pyproject.toml - Public API source of truth:
src/faultcore/__init__.py - Decorator behavior source of truth:
src/faultcore/decorator.py - Unit tests:
tests/unit/ - Integration CLI scripts:
tests/integration/
License
MIT
Release files for faultcore 2026.4.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| faultcore-2026.4.9.tar.gz | 50.6 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| faultcore-2026.4.9-py3-none-manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| faultcore-2026.4.9-py3-none-manylinux2014_i686.whl | Python 3 | none | Linux glibc 2.17+ x86-32 | Details |
| faultcore-2026.4.9-py3-none-manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
Total release size: 1.5 MB
Release files / faultcore-2026.4.9.tar.gz
| Download URL | faultcore-2026.4.9.tar.gz |
|---|---|
| Size | 50.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b6d4dbf6c2be294e22d06bd5c99f06413dec49484a92604eff469b06dd2a12fd
|
|
BLAKE2b-256 checksum How to use checksums |
0064bd93dc3c045602079a8af32fb2729200e9d5900551dac843587cafbb94cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 9, 2026.
Transparency logRelease files / faultcore-2026.4.9-py3-none-manylinux2014_x86_64.whl
| Download URL | faultcore-2026.4.9-py3-none-manylinux2014_x86_64.whl |
|---|---|
| Size | 478.7 kB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
cbf485d09ba98cf38d922d4e7657ad9d21a3a4b885bd0475d74d4b5071f56c95
|
|
BLAKE2b-256 checksum How to use checksums |
1f489cde06faeda790398deee12444625b1fe57f879c7d6e88178f150cd3859c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 9, 2026.
Transparency logRelease files / faultcore-2026.4.9-py3-none-manylinux2014_i686.whl
| Download URL | faultcore-2026.4.9-py3-none-manylinux2014_i686.whl |
|---|---|
| Size | 516.8 kB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
6459db894b022173d242dc295be871b5df9cb4276075cfcfa360b15ac4374f60
|
|
BLAKE2b-256 checksum How to use checksums |
567c61b55905e80e0ccad73a17eac9071df525584119e289d05ca90ee75fadf5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 9, 2026.
Transparency logRelease files / faultcore-2026.4.9-py3-none-manylinux2014_aarch64.whl
| Download URL | faultcore-2026.4.9-py3-none-manylinux2014_aarch64.whl |
|---|---|
| Size | 467.4 kB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
db36244a7dc99ced92c755d7a6617387f0b2ceedc2129ad17212e7341ecb5c40
|
|
BLAKE2b-256 checksum How to use checksums |
08a0a082084753a698a7261717ed7ed467b062206aaf77dcea5c8d1d3b2f862d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Apr 9, 2026.
Transparency log