A BERT-RPC client library for Racket language.

See the full BERT specification at

This library currentli only supports the following BERT-RPC features:

  • call request
  • cast request

Since this library version depends on BERT serialization library, implemented in R^6RS, you've got to require mutable pairs. See examples section below.


Require this library in your project:

(require (planet yasir/racket-bertrpc:1))


Import the library and create an RPC transport:

#lang racket
(require racket/mpair)
(require (prefix-in bertrpc: (planet yasir/racket-bertrpc:1)))

(define transport (bertrpc:from-uri "bert://"))

Make a call:

(bertrpc:call transport 'calc 'add (mlist 40 2))

Note that the underlying BERT-RPC transaction of the above call is:

-> {call, calc, add, [40, 2]}
<- {reply, 42}

In this example, the return value of the call is 42.

Make a cast:

(bertrpc:cast transport 'stats 'incr (mlist))

Note that the underlying BERT-RPC transaction of the above cast is:

-> {cast, stats, incr, []}
<- {noreply}

The return value of the above cast is 'nil for all successful cast calls.


  • Implement timeouts (probably using vyzo/socket PLaneT library).
  • Implement BERT serialization library in Racket and use it instead of the current, which is R^6RS.

Copyright (c) 2011 Yasir M. Arsanukaev. See LICENSE for details.