# 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](build/docker/README.md) (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
--- | --- | --- | --- | --- | --- | --- | --- | ---
autoconf | cmake | Min | Max | Domain | File | Memory | Pipe | Socket | TLS | Framed | http | zlib | Binary | Compact | JSON | Multiplex | Forking | Nonblocking | Simple | Threaded | ThreadPool
ActionScript | 0.3.0 |  |  | ActionScript 3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | ActionScript
C (glib) | 0.6.0 |  |  | 2.48.2 | 2.54.0 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | C (glib)
C++ | 0.2.0 |  |  | C++98 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | C++
C# | 0.2.0 |  |  | .NET 3.5 / mono 3.2.8.0 | .NET 4.6.1 / mono 4.6.2.7 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | C# (.NET)
Cocoa | 0.2.0 |  |  | unknown |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Cocoa
Common Lisp | 0.12.0 |  |  | SBCL 1.4.5 | SBCL 1.4.9 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Common Lisp
Dlang | 0.9.0 |  |  | 2.075.1 | 2.081.0 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | D
Dart | 0.10.0 |  |  | 1.22.1 | 1.24.3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Dart
Delphi | 0.8.0 |  |  | 2010 | unknown |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Delphi
.NET Core | 0.11.0 |  |  | 2.1.4 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | .NET Core
Erlang | 0.3.0 |  |  | 18.3 | 20.0.4 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Erlang
Go | 0.7.0 |  |  | 1.7.6 | 1.10.3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Go
Haskell | 0.5.0 |  |  | 7.10.3 | 8.0.2 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Haskell
Haxe | 0.9.3 |  |  | 3.2.1 | 3.4.4 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Haxe
Java (SE) | 0.2.0 |  |  | 1.8.0_151 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Java SE
Java (ME) | 0.5.0 |  |  | unknown |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Java ME
Javascript | 0.3.0 |  |  | unknown |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Javascript
Lua | 0.9.2 |  |  | 5.1.5 | 5.2.4 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Lua
node.js | 0.6.0 |  |  | 6.x | 8.11.3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | node.js
node.ts | 0.12.0 |  |  | 3.1.6 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | node.ts
OCaml | 0.2.0 |  |  | 4.04.0 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | OCaml
Perl | 0.2.0 |  |  | 5.22.1 | 5.26.0 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Perl
PHP | 0.2.0 |  |  | 7.0.22 | 7.1.8 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | PHP
Python | 0.2.0 |  |  | 2.7.12, 3.5.2 | 2.7.14, 3.6.3 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Python
Ruby | 0.2.0 |  |  | 2.3.1p112 | 2.3.3p222 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Ruby
Rust | 0.11.0 |  |  | 1.17.0 | 1.21.0 |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Rust
Smalltalk | 0.2.0 |  |  | unknown |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  | Smalltalk
Language | Since | autoconf | cmake | Min | Max | Domain | File | Memory | Pipe | Socket | TLS | Framed | http | zlib | Binary | Compact | JSON | Multiplex | Forking | Nonblocking | Simple | Threaded | ThreadPool | Open Issues
Build Systems | Lang/Lib Levels (Tested) | Low-Level Transports | Transport Wrappers | Protocols | Servers