Skip to content

Releases: devkyato/OpenNet

OpenNet v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 13:59
32a30b3

OpenNet v0.2.0

OpenNet v0.2.0 adds one boundary I wanted to make explicit: a valid connection
is not automatically permission to use every topic.

I thought about putting identity and permissions directly into ONP/1, but that
would force one authorization model onto small home projects, classroom labs,
and certificate-managed deployments alike. Instead, this release keeps every
ONP/1 byte unchanged and adds an optional policy callback to the Python server.

What is new

  • OpenNetServer(..., authorizer=...) accepts a synchronous or asynchronous
    decision function.
  • Peer.tls_enabled reports whether the connection uses TLS.
  • Peer.tls_peer_certificate exposes the certificate dictionary supplied by
    Python's verified TLS layer.
  • ServerStats.authorization_denials counts fail-closed policy decisions.
  • Arduino receive callbacks reuse the validated frame allocation for payloads
    instead of copying into a second vector.
  • Constrained firmware can instead use a caller-owned receive buffer and
    onMessageView, while poll work, writes, and outstanding ACKs are bounded.
  • CLI file sends are size-checked before reading, server logs hide values by
    default, and repeated --allow-topic-prefix options provide a simple shared
    allowlist.
  • Connection and handler overload paths return bounded ERROR responses before
    closing instead of failing silently.
  • CI, CodeQL, and release workflows pin third-party actions to immutable commit
    IDs.
  • Deterministic network-fault coverage now exercises concurrent sends,
    byte-by-byte frame truncation, fragmented ACK delivery, and 2,240 single-bit
    or seeded-random header mutations.
  • The release workflow now runs native Arduino tests and the ESP32 build before
    packaging a tag.

Oh! The ordering is the important part here. The authorizer runs after strict
frame validation but before duplicate suppression, the application handler, and
the ACK. A denied frame receives a generic ERROR and the connection closes. An
authorizer exception follows the same path without exposing its details. An
accepted frame is ACKed before bounded handler dispatch; handler completion is
an application result rather than a transport-delivery signal.

Compatibility

ONP/1 remains version 1. The 24-byte header, frame kinds, flags, value types,
CRC-32, and Arduino/Python frame bytes are unchanged. ACK emission now follows
the existing transport-acceptance definition consistently; it still uses the
same ONP/1 ACK frame. Existing Python servers do not need to provide an
authorizer, and existing Arduino constructors and onMessage callbacks remain
source-compatible while the bounded alternatives are optional.

The enum wire-facing types remain explicitly one byte, with compile-time checks.
The C++ object size itself remains toolchain-dependent; the documented memory
model separates bounded frame bytes from String, vector, allocator, transport,
and TLS overhead.

Python and Arduino also consume one shared malformed-frame vector set for UTF-8,
JSON, control text, and typed scalar validation. JSON nesting is bounded to 32
arrays/objects in both implementations.

Install

python -m pip install \
  https://github.com/devkyato/OpenNet/releases/download/v0.2.0/opennet_protocol-0.2.0-py3-none-any.whl

Arduino IDE users can install OpenNet-0.2.0.zip. Linux or Raspberry Pi users
can extract OpenNet-linux-0.2.0.tar.gz and run sudo ./install.sh. Check every
download against SHA256SUMS.

Verification

  • 113 Python tests, including authorization, real loopback mutual TLS, control
    backpressure, timeout, concurrency, truncation, and deterministic mutation
    paths.
  • Strict Ruff and mypy checks.
  • Native C++ protocol tests, the main esp32dev firmware build, and all four
    Arduino example compiles.
  • Local documentation links, a fresh-wheel import/CLI smoke test, matching
    release checksums, and reproducible Arduino/Linux bundles.

These tests do not turn into a hardware field claim. The existing measured
loopback numbers remain labeled as v0.1.1 results, and direct BLE GATT remains
unsupported.

For the narrative walkthrough, see
Authorizing topics.
The exact security boundary remains in the
security guide.

OpenNet v0.1.1

Choose a tag to compare

@github-actions github-actions released this 29 Jul 04:03
ed8713f

OpenNet v0.1.1

OpenNet v0.1.1 turns the initial ONP/1 implementation into a usable alpha for
direct ESP32, Raspberry Pi, and backend messaging.

Highlights

  • Reliable Python delivery retries preserve message IDs and mark retransmissions,
    while servers suppress recent duplicates with bounded memory.
  • The opennet CLI can serve, send every supported type, ping, and benchmark.
  • Remote CLI traffic requires TLS unless plaintext is deliberately enabled.
    Verified TLS and mutual TLS are both supported.
  • Arduino now completes partial writes, validates control frames, decodes typed
    values, and works with generic Stream transports such as UART and Bluetooth
    Classic SPP on compatible ESP32 boards.
  • A hardened Linux/systemd bundle provides a simple sudo ./install.sh path.
  • Tutorials, tips, architecture diagrams, protocol comparisons, adoption
    counters, and measured TCP/TLS/load results are included.

Install

python -m pip install \
  https://github.com/devkyato/OpenNet/releases/download/v0.1.1/opennet_protocol-0.1.1-py3-none-any.whl

Arduino IDE users should install OpenNet-0.1.1.zip. Linux/Raspberry Pi users can
extract OpenNet-linux-0.1.1.tar.gz and run sudo ./install.sh. Verify downloads
against SHA256SUMS.

Verification

  • 41 Python tests locally on CPython 3.14.4; CI covers CPython 3.9–3.14.
  • Native C++ protocol suite passed.
  • Telemetry, verified-TLS, and Bluetooth Classic SPP examples compiled for an
    ESP32 Dev Module.
  • Fresh-wheel install, CLI version, live server ping, and typed-send smoke tests.
  • Reproducibility checks for Arduino and Linux bundles.

The measured loopback baseline and exact limitations are documented in
docs/benchmarks.md.
It is not presented as ESP32 or Wi-Fi field performance.

Security and compatibility

CRC-32 is not encryption or authentication. Use verified TLS outside isolated
local tests, use mutual TLS when device identity matters, and authorize topics in
the application. BLE GATT is not directly supported in this release; Bluetooth
Classic SPP requires compatible ESP32 hardware.

See the full changelog
and security guide.

OpenNet v0.1.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 01:28
8e549e2

What's Changed

  • feat: launch the OpenNet ONP/1 cross-platform foundation by @devkyato in #1

New Contributors

Full Changelog: Proxies...v0.1.0

Proxies

Choose a tag to compare

@devkyato devkyato released this 24 Apr 11:48
909710f
Create README.md