Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Warning: This project is obsolete, and only tested on Haxe 3.0.x branches. Looking for serialization solution in Haxe? Try json-stream!


protoc-gen-haxe is a Protocol Buffers implementation in Haxe.


I am also the author of protoc-gen-as3, which is the best Protocol Buffers implementation in ActionScript 3. I rewritten these code because I want to try the Haxe way to generate code. This table lists main difference between protoc-gen-as (or any other Protocol Buffers implementation) and protoc-gen-haxe:

protoc-gen-as3 protoc-gen-haxe
Cross-platform No. It only runs in Adobe Flash Player or Adobe AIR. Yes. protoc-gen-haxe can run in Flash Players, browsers, servers, and even in Haxe compiler macros.
Run Time Type Information Little, via native Flash API. Yes. By parsing DescriptorProtoSet at runtime, users can access full information from .proto files.
Mutable messages Yes Yes
Readonly messages No Yes
Will unused code be eliminated? No Yes. protoc-gen-haxe separate different features into different classes, unused codes can be easy eliminated by the Haxe compiler.
Can users generate their custom code? No. Users have to create another Protocol Buffers plugin. Yes. Users can use protoc-gen-haxe API in Haxe macros.
Self-hosting No. protoc-gen-as3's compiler is written in Java. Yes. Both compiler and runtime library of protoc-gen-haxe are written in Haxe. Even 20% lines of source code are generated by protoc-gen-haxe itself!
Is it a protoc plugin? Yes. protoc-gen-as3 compiler must be launched by Google's protoc. No. protoc-gen-haxe can directly import binary format DescriptorProtoSet of .proto files.


  1. Download protoc 2.5.
  2. Download and install Haxe 3.
  3. haxelib install protoc-gen-haxe


Step 1: Create sample.proto

// sample.proto

package samplePackage;

message SampleMessage {
  optional string sample_field = 1;

Step 2: Create SampleMain.hx

// SampleMain.hx

import sys.FileSystem;
import com.dongxiguo.protobuf.binaryFormat.LimitableFileInput;
import samplePackage.SampleMessage_Builder;
using samplePackage.SampleMessage_Merger;
using samplePackage.SampleMessage_Writer;

class SampleMain {

  static function save():Void
    var builder = new SampleMessage_Builder();
    builder.sampleField = "Hello, World!";
    var output = File.write("");

  static function load():Void
    var builder = new SampleMessage_Builder();
    var input ="");
    var pbInput = new LimitableFileInput(input, FileSystem.stat("").size);
    trace('builder.sample = ${builder.sampleField}');

  public static function main() {


Step 3: Convert sample.proto to binary format DescriptorProtoSet.

protoc sample.proto --descriptor_set_out=sample.proto.bin

Step 4: Run it!

haxe -lib protoc-gen-haxe --macro "com.dongxiguo.protobuf.commandLine.Importer.importDescroptorFileSet('sample.proto.bin')" -x SampleMain.hx

Now you see your program created in Protocol Buffers format, and then loaded this file.

You may want to see which classes are genrated by protoc-gen-haxe. Just add --gen-hx-classes to your haxe command and look at the hxclasses/ folder it generated .


  • All basic types
  • Nested messages
  • Enumerations
  • Packed and non-packed repeated fields
  • Extensions
  • Unknown fields
  • Run-time type information of services, enums, messages, options, custom options...
  • Macro-time type information of services, enums, messages, options, custom options...

Missing features

  • Text format
  • Group (A deprecated feature since Protocol Buffers 2)

I would like to see somebody's contribution for these missing features.


  • Haxe 3.x
  • Protocol Buffers 2.x


Protocol Buffers compiler and run-time library for Haxe



No packages published
You can’t perform that action at this time.