COOLJAPAN
← All posts

OxiProto 0.1.4 Released — oxiproto-protoc Deletes protoc From Everyone Else's Build Too

OxiProto 0.1.4 ships oxiproto-protoc — a protoc-argv-compatible binary letting any prost-build/tonic-build project skip the C++ compiler entirely by pointing PROTOC at pure Rust. This release also closes an unbounded-recursion decode DoS across all three nested-message paths and removes OxiProto's own last internal protoc dependency. Pure Rust, Apache-2.0.

release oxiproto pure-rust cooljapan noffi protobuf serialization codegen grpc

A protoc-free build for OxiProto’s own consumers was only half the job — every other prost-build and tonic-build project out there was still shelling out to a C++ binary.

Today we released OxiProto 0.1.4 — the COOLJAPAN Pure-Rust Protocol Buffers stack. This release turns OxiProto from “a protoc-free alternative for its own users” into a drop-in protoc replacement that any Rust project can point at, plus it closes a real decode-time denial-of-service gap.

No C++. No -sys crate. No apt-get install protobuf-compiler. oxiproto-protoc speaks the exact argv surface protoc uses for descriptor-set generation, compiles to a single static binary, and runs anywhere Rust does.

Why OxiProto 0.1.4 is a game changer

0.1.3 made OxiProto’s own build protoc-free. That still left real gaps:

OxiProto 0.1.4 ends all of that:

Technical Deep Dive: how oxiproto-protoc replaces protoc for everyone else

1. The argv compatibility layer (oxiproto-cli/src/bin/oxiproto-protoc.rs) parses the exact flags protoc’s callers already send: -I/--proto_path, -o/--descriptor_set_out, --include_imports, --include_source_info, --experimental_allow_proto3_optional, --version, --help. Anything outside the descriptor-set-generation subset — --cpp_out, --plugin, and other codegen flags — is rejected with a clear error instead of silently ignored.

2. The native parser backend — the shim is powered by the same oxiproto-build parser that already handles OxiProto’s own compilation: proto2 and proto3, multi-file import resolution, source_code_info, custom options, and group desugaring.

3. The shared recursion budgetDecodeBuffer::nested() / DecodeBuffer::depth() now expose the depth-budget primitive publicly as oxiproto_core::wire::MAX_DECODE_DEPTH. All three decode paths — DynamicMessage::decode in oxiproto-reflect, DecodeBuffer::skip_field in oxiproto-core, and codegen-generated OxiMessage::merge — now descend through it uniformly, returning WireError::RecursionLimitExceeded instead of risking a stack overflow.

4. Dogfooding completion — with oxiproto-codegen and oxiproto’s own build scripts routed through protox/oxiproto-build::Builder instead of prost-build::compile_protos, the workspace no longer has any internal path that shells out to protoc, directly or indirectly.

Getting Started

Add the runtime and build helper as before:

[dependencies]
oxiproto = "0.1.4"

[build-dependencies]
oxiproto-build = "0.1.4"

New in 0.1.4 — if you maintain (or depend on) a different project that uses prost-build or tonic-build directly, you no longer need a system protoc install for it either:

PROTOC=$(which oxiproto-protoc) cargo build

That single environment variable routes that project’s .proto compilation through OxiProto’s native pure-Rust parser instead of a C++ binary — no changes to that project’s build.rs required.

What’s New in 0.1.4

Added

Changed

Fixed

Security

Full itemized detail is in the CHANGELOG.

Tips

This is the foundation

OxiProto is part of NoFFI — the COOLJAPAN initiative to replace every C/C++/Fortran/-sys FFI dependency in the Rust ecosystem with a clean, memory-safe, 100% Pure Rust implementation. Default features remain 100% Pure Rust — no C, C++, or Fortran, no protobuf-compiler system package needed.

OxiProto depends on nothing else in the ecosystem and sits at the bottom of the stack: it’s the foundation for OxiRPC (gRPC), which already tracks this release, and any future crate that speaks the protobuf wire format.

Repository: https://github.com/cool-japan/oxiproto

Star the repo if you want a protobuf toolchain — and now a protoc replacement for everyone else’s build too — that runs anywhere Rust does. 🦀

The era of vendoring a C++ compiler just to speak protobuf is over. Pure Rust serialization is here — fast, safe, and sovereign.

KitaSan at COOLJAPAN OÜ July 27, 2026

↑ Back to all posts