Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


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

kontraktor 4

What is kontraktor ?

  • A boilerplate free and consistent abstraction for asynchronous remote communication powered by a distributed actor-model
  • One important application of this abstraction are SPA WebApplications enabling Java to back modern SPA javascript client frameworks like React.js, Polymer.js, .. (transpilation, packaging, optimization). Different to webpack/browserify etc. kontraktor does this on the fly (when running in prod mode) without an extra build step using pure java. see IntrinsicReact example
  • separates network transport (TCP, WebSockets, Http) and message encoding (fast-serialization, json, ..) from application code.
  • asynchronous, non-blocking,high performance
  • production proven


Code Examples, Related Blogpost's

React Example

What can I use it for ?

  • build modern microservice systems (java (JVM), nodejs) beyond the Limits of REST. Asynchronous, event sourced, independent of encoding and network transport (choose from TCP, WebSockets, Http-(Long Poll), json or binary encoding).
  • power modern SPA apps with a java based webserver

Credits: kontraktor makes use of many awesome open source libraries such as

  • undertow, (io.undertow) see
  • jsoup (org.jsoup) - real world html parser
  • httpasyncclient (org.apache.httpcomponents)
  • npm-semver, (com.github.yuchi)
  • fast-classpath-scanner (io.github.lukehutch)
  • org.apache.commons, slf4j-api, minimal-json (com.eclipsesource.minimal-json), junit


Kontraktor consists of several modules. For sake of simplicity all module versions are kept in sync with kontraktor core.

Kontraktor Core

Actors + TCP Remoting

  • transform regular java code (satisfying some conventions) into remoteable actors.
  • no boilerplate required
  • TCP remoting included (2 implementations: SyncIO and AsyncIO)
  • general messaging optimizations: batching, binary queues (reduce GC load + save heap by queuing raw bytes instead of object's).

Core Documentation [in progress]


Kontraktor Http

Adds WebSockets, Http LongPoll for actor-remoting, JavaScript interop. Uses Undertow as underlying webserver

  • npm modules to (a) implement a kontraktor actor (=service) using nodejs and (b) to connect a kontraktor service from nodejs
  • server push via adaptive longpolling (polling automatically turns off if no pending callback / promise is present)
  • support for websockets
  • advanced bundling and inlining of resources (js, css, html) webpack style. Instead of introducing a build step, kontraktor bundles and caches your stuff dynamically upon first request (production mode).
  • session handling fundamentals

JavaScript, Http-Documentation [in progress]

Instrinsic React/JSX Documentation [in progress]


kontraktor-http 4 javascript nodejs. npm modules


defines fundamentals: remote actor refs, en/decoding of Java-serialized objects, KPromise


Can be used from a browser (attention then: needs to be added using a <script> tag, not babel/browserify'ish using 'require'). Can be used from nodejs to connect services/actors implemented in java or javascript


write an ES6 class and make it accessible to other (kontraktor) processes using websockets. Some limitations: no actor proxies, only websockets supported.


old (es5) implementation of kontraktor-client. somewhat messy, but production-proven


(Minimalistic standalone Http-LongPoll client [legacy apps, Android] ), requires Java 7, Apache 2.0 Licensed




Older Blogposts (samples are of OLD 2.0, 3.0 version, might need rewrite/changes (mostly Future => IPromise):