This page on GitHub

Apache Thrift Language Support

Last Modified: 2018-12-17

Guidance For: 0.12.0 or later

Thrift supports many programming languages and has an impressive test suite that exercises most of the languages, protocols, and transports that represents a matrix of thousands of possible combinations. Each language typically has a minimum required version as well as support libraries - some mandatory and some optional. All of this information is provided below to help you assess whether you can use Apache Thrift with your project. Obviously this is a complex matrix to maintain and may not be correct in all cases - if you spot an error please inform the developers using the mailing list.

Apache Thrift has a choice of two build systems. The autoconf build system is the most complete build and is used to build all supported languages. The cmake build system has been designated by the project to replace autoconf however this transition will take quite some time to complete.

The Language/Library Levels indicate the minimum and maximum versions that are used in the continuous integration environments (Appveyor, Travis) for Apache Thrift. Other language levels may be supported for each language, however tested less thoroughly; check the README file inside each lib directory for additional details. Note that while a language may contain support for protocols, transports, and servers, the extent to which each is tested as part of the overall build process varies. The definitive integration test for the project is called the "cross" test which executes a test matrix with clients and servers communicating across languages.

Language Since Build Systems Lang/Lib Levels (Tested) Low-Level Transports Transport Wrappers Protocols Servers Open Issues
autoconfcmake MinMax Domain File Memory Pipe Socket TLS  Framed http  zlib  BinaryCompact JSON Multiplex ForkingNonblockingSimpleThreadedThreadPool
ActionScript 0.3.0 YesYes FLEX SDK 4.6 Yes Yes Yes ActionScript
C (glib) 0.6.0 YesYes YesYesYesYes Yes YesYesYes Yes C (glib)
C++ 0.2.0 YesYes C++98 (through 0.12.0)C++11 (after 0.12.0) YesYesYesYesYesYes YesYesYes YesYesYesYes YesYesYesYes C++
C# 0.2.0 Yes .NET 3.5 / mono 4.6.1 / mono YesYesYesYes YesYes YesYesYesYes YesYesYes C# (.NET)
Cocoa 0.2.0 unknown YesYesYesYes YesYes YesYesYes Yes Cocoa
Common LISP 0.12.0 Yes SBCL 1.4.5SBCL 1.4.15 YesYes Yes YesYesYes Yes Common LISP
Dlang 0.9.0 Yes YesYesYesYesYes YesYesYes YesYesYes YesYesYesYes D
Dart 0.10.0 Yes Yes YesYes YesYesYesYes Dart
Delphi 0.8.0 2010unknown Yes YesYes YesYesYesYes Yes Delphi
.NET Core 0.11.0 Yes YesYesYesYes YesYes YesYesYesYes Yes .NET Core
Erlang 0.3.0 Yes 18.320.0.4 YesYesYesYes YesYes YesYesYesYes Yes Erlang
Go 0.7.0 Yes YesYesYes YesYesYes YesYesYesYes Yes Go
Haskell 0.5.0 YesYes YesYesYesYes YesYes YesYesYes YesYes Haskell
Haxe 0.9.3 Yes YesYes YesYes YesYesYesYes Yes Haxe
Java (SE) 0.2.0 YesYes 1.8.0_1511.8.0_191 YesYesYesYes YesYesYes YesYesYesYes YesYesYesYes Java SE
Java (ME) 0.5.0 unknown YesYesYes Yes YesYes Java ME
Javascript 0.3.0 Yes unknown YesYes Yes YesYes Javascript
Lua 0.9.2 Yes YesYes YesYes YesYesYes Yes Lua
node.js 0.6.0 Yes 6.x8.x YesYesYes YesYes YesYesYesYes Yes node.js
node.ts 0.12.0 Yes 3.1.6 YesYes Yes Yes node.ts
OCaml 0.2.0 4.04.0 Yes Yes Yes YesYes OCaml
Perl 0.2.0 Yes YesYesYesYes YesYes YesYesYes YesYes Perl
PHP 0.2.0 Yes YesYesYes YesYes YesYesYesYes YesYes PHP
Python 0.2.0 YesYes 2.7.12,, 3.6.7 YesYes YesYes YesYesYesYes YesYesYes Python
Ruby 0.2.0 Yes 2.3.1p1122.5.1p57 YesYesYesYes YesYes YesYesYesYes YesYesYesYes Ruby
Rust 0.11.0 Yes YesYes Yes YesYesYes Yes Rust
Smalltalk 0.2.0 unknown Yes Yes Smalltalk
Swift 0.12.0 Yes 4.2.1 YesYesYesYes YesYes YesYesYes Yes Swift
Language Since autoconfcmake MinMax Domain File Memory Pipe Socket TLS  Framed http  zlib  BinaryCompact JSON Multiplex ForkingNonblockingSimpleThreadedThreadPool Open Issues
Build Systems Lang/Lib Levels (Tested) Low-Level Transports Transport Wrappers Protocols Servers