elmulator: Python package
A pure-standard-library ELM327 TCP server and scenario validator. No third-party dependencies. Python 3.9+.
Install
pip install elmulator
# or from a checkout of this repo:
pip install -e .
If the elmulator command is not on your PATH after installing (pip prints a warning when the scripts directory is not on PATH), use python -m elmulator instead. It works the same way, for example python -m elmulator self-test.
CLI
elmulator serve SCENARIO [--host H] [--port N] [--echo on|off|scenario] \
[--split a,b,c] [--latency-ms N] [--jitter-ms N] [--seed N]
elmulator validate [PATHS...] # files or dirs; defaults to the bundled examples
elmulator self-test # in-process loopback smoke test
serve prints LISTENING <port> on stdout once bound (--port 0 picks a free port) and logs activity to stderr. Each client gets its own scenario cursor state.
Library
from elmulator import Scenario, serve
import argparse
scenario = Scenario.from_path("scenarios/p0420_basic.scenario.json")
args = argparse.Namespace(host="127.0.0.1", port=0, echo="scenario",
split=None, latency_ms=0, jitter_ms=0, seed=0)
serve(args, scenario) # blocking; pass ready_event/stop_event for threaded use
The matching, echo, splitting, and jitter semantics are identical to the Swift engine; the conformance suite proves byte-for-byte parity.
Test
pip install pytest
pytest -q
Metadata
Release files for elmulator 0.3.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 | |
|---|---|---|---|
| elmulator-0.3.2.tar.gz | 13.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| elmulator-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.8 kB
Release files / elmulator-0.3.2.tar.gz
| Download URL | elmulator-0.3.2.tar.gz |
|---|---|
| Size | 13.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35e577f6e7b58b9151de4203aeb7db4bddf5c9e70eb2579f5b2ee746ab40c26b
|
|
BLAKE2b-256 checksum How to use checksums |
5fb2a37bd29192f5dd2475ef1fffd0e5ea95effabd087396187efa1e85770454
|
| 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 13, 2026.
Transparency logRelease files / elmulator-0.3.2-py3-none-any.whl
| Download URL | elmulator-0.3.2-py3-none-any.whl |
|---|---|
| Size | 15.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3172e6e36f051c0e001573f0abe43135f6e9b84c239dc870be5ad9ce2c3fd250
|
|
BLAKE2b-256 checksum How to use checksums |
e2096021c855900308a67d91efe73b98ede574753414f958c910703bd743e37c
|
| 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 13, 2026.
Transparency log