Releases: tinythings/logjet
0.9.0
Summary
OTLP/HTTP ingest now runs on an async hyper+tokio runtime, replacing the previous synchronous tiny_http implementation. No config migration needed — ingest.protocol: otlp-http works identically; only the underlying transport is different.
Async HTTP Ingest
ingest.max-clients now properly gates concurrent HTTP connections (plain and TLS). gRPC, wire, and plugin ingest paths are unchanged.
Rustls Crypto Provider
Rustls 0.23 requires an explicit crypto provider at startup. ljd now installs the ring provider on boot, guarding against future crate updates that may drop the implicit default.
What's Changed
- Add view tailing by @isbm in #19
- Add CLI query by @isbm in #20
- Fix TUI pop-ups when they get ruined by terminal resize by @isbm in #21
- Extended log view by @isbm in #22
- Plugins loading path by @isbm in #23
- Plugins to multiple ingestors by @isbm in #24
- Multipass! by @isbm in #25
- Extend ABI for different OTel types by @isbm in #26
- Ingestor implementation for Google Perfetto by @isbm in #27
- Cover all perfetto types by @isbm in #28
- Implement ingestor of Perfetto traces using RPC by @isbm in #29
- Add metrics and traces support by @isbm in #30
- Add parquet metrics and traces export by @isbm in #31
- Operation hardening by @isbm in #32
- Implement async HTTP by @isbm in #33
Full Changelog: 0.8.0...0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
logjet 0.4.0
Wire protocol
- CRC32C trailing checksum on every wire frame
- LZ4 per-record compression — ~60% bandwidth savings on typical OTLP payloads
- Auto-skip: incompressible payloads sent raw
- Configurable:
wire.compression = true|falsefor low-power CPUs - Single
write_allfor all wire frames (record, hello, request, ack) - Persistent TCP keep-alive to OTLP collectors with auto-reconnect
Storage
- Multi-record blocks — removed per-record flush, 200ms timed flush
- Zstd codec added (
file.codec = lz4 | zstd | none) — 66% savings on protobuf - BufWriter wrapping for flash-friendly I/O
- Block-aligned writes (4 KiB default) — avoids read-modify-write on eMMC/SD
- Pre-allocated segment files via
fallocate— reduces flash fragmentation - Automatic retention:
file.max-bytesdeletes oldest segments on rotation - Configurable fsync policy:
file.fsync = none | block | interval
OTLP export
- Re-batching on file replay and backpressure export paths
- Merges by Resource+Scope, configurable batch size and timeout
collector.batch-size,collector.batch-timeout-ms
Build
make checkandmake fixnow cover all crates including demos
New demos
demo/compression-bench/— compares none vs LZ4 vs Zstd on real workloads
0.3.0: Add liblogjet for dynamic use
0.2.0: Merge pull request #6 from tinythings/isbm-ljd-rename
Release Notes
What’s New
New: ljx file toolbox
This release introduces ljx, a new standalone CLI for working with .logjet files.
You can now:
- inspect and browse stored data locally
- filter records into new files
- count and summarize records quickly
- split and join
.logjetfiles for offline workflows
New: interactive TUI viewer
ljx view adds an interactive terminal UI for browsing filtered records in real time.
Highlights:
- fast keyboard-driven navigation
- live filtering with string and regex modes
- record detail viewing
- export/save filtered results
Usability Improvements
- Improved typing in the filter field (
qnow types normally while editing). - Refined TUI visuals for better readability and consistency.
Daemon Naming Update
The daemon command is now ljd (previously logjetd).
Docs and demo run scripts have been updated to use ljd.
0.1.0: Merge pull request #1 from tinythings/isbm-add-workflows
0.1.0
Initial public release.
logjet
- append-only
.logjetcontainer format for raw OTLP protobuf payloads - block-based layout with sync marker, per-block CRC32C, and forward resynchronisation
lz4andnoneblock codecs- sequential reader with corruption recovery and replay statistics
- append writer for compact block-oriented storage
logjetd
- OTLP/HTTP ingest
- OTLP/gRPC ingest
- internal wire-protocol ingest
- in-memory ring retention with
buffer.keep - file-mode append-only segment output with size-based rotation
- replay listener with per-client cursor handling
bridgemode for backlog plus live forwardingkeepanddrainupstream modes- persisted bridge resume with upstream stream identity tracking
- TLS on replay and bridge transport
- TLS on OTLP ingest
- HTTPS collector export
- ingest guardrails for payload size and concurrent clients
- ingest overload policy with rate limiting and severity-aware shedding
- bridge backpressure modes:
block,disconnect,drop-newest - replay client caps and replay client timeouts
- file inspection, segment listing, and archive pruning commands
Tooling and docs
- Makefile targets for build, test, integration test, lint, demos, manpage, and cross-builds
- Markdown manpage source and generated manpage
- demo suite covering file, memory, bridge, resume, TLS, overload, corruption recovery, and multi-client flows
- unit tests and child-process daemon integration tests suitable for CI