Updated: The conventions for the client functions were revised:

  • The replace and store functions have been renamed to put and putBinary.
  • The RETRIEVE command has been replaced by BINARY GET.
  • Existing client implementations are working without changes unless they haven’t been upgraded.

This page describes how to communicate with BaseX from other programming languages.

You can use the following light-weight language bindings to connect to a running BaseX server instance, execute database commands and evaluate XQuery expressions.

Most clients provide two modes:

  • Standard Mode: connecting to a server, sending commands
  • Query Mode: defining queries, binding variables, iterative evaluation

Please see the Server Protocol for more information on the available commands. Currently, we offer bindings for the following programming languages:

BaseX 7.x, BaseX 8.x and later

  • Java: The default implementation
  • C++: contributed by Karim Salama (based on SDL2_net)
  • C++: contributed by Jean-Marc Mercier (based on libboost)
  • C++: contributed by Ben Engbers (based on CMake)
  • C#, contributed by the BaseX Team and Martín Ferrari
  • C, contributed by the BaseX Team
  • Golang: contributed by Christian Baune
  • Erlang: contributed by Zachary Dean
  • node.js: contributed by Andy Bunce
  • Perl, contributed by the BaseX Team
  • PHP: updated by James Ball
  • Python: contributed by Hiroaki Itoh
  • Python, using BaseX REST services: contributed by Luca Lianas
  • R: contributed by Ben Engbers
  • Raku: contributed by Wayland
  • Rust
  • Ruby, contributed by the BaseX Team
  • V, contributed by Erik Peterson

With Version 8.0, authentication has changed. Some language bindings have not been updated yet. The update is rather trivial, though (see here for more details); patches are welcome.

BaseX 7.x (outdated)

  • ActionScript: contributed by Manfred Knobloch
  • Haskell: contributed by Leo Wörteler
  • Lisp: contributed by Andy Chambers
  • node.js: contributed by Hans Hübner (deviating from client API)
  • Qt: contributed by Hendrik Strobelt
  • Rebol: contributed by Sabu Francis
  • Scala: contributed by Manuel Bernhardt
  • Scala (simple implementation)
  • VB, contributed by the BaseX Team

Many of the implementations contain the following files:

  • BaseXClient contains the code for creating a session, sending and executing commands and receiving results. An inner Query class facilitates the binding of external variables and iterative query evaluation.
  • Example demonstrates how to send database commands.
  • QueryExample shows you how to evaluate queries iteratively.
  • QueryBindExample shows you how to bind a variable to your query and evaluates the query iteratively.
  • CreateExample shows how new databases can be created by using streams.
  • AddExample shows how documents can be added to a database by using streams.


Version 10.0
  • Updated: The replace and store functions have been renamed to put and putBinary.
Version 8.0
  • Updated: cram-md5 replaced with digest authentication.

⚡Generated with XQuery