No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


please use the 0.5 release

Build your own database

  • ACID
  • NoSQL
  • networkless
  • automatic index
  • multithread support
  • ordered key/value store

And more...


(use-modules (wiredtiger))

Create the /tmp/wt directory before running the following example:

(define connection (pk (connection-open "/tmp/wt" "create")))
(define session (pk (session-open connection)))

;; create a table
(session-create session "table:nodes" "key_format=i,value_format=S")

;; open a cursor over that table
(define cursor (pk (cursor-open session "table:nodes")))

;; start a transaction and add a record
(session-transaction-begin session "isolation=\"snapshot\"")
(cursor-key-set cursor 42)
(cursor-value-set cursor "The one true number!")
(cursor-insert cursor)
(session-transaction-commit session)

(cursor-reset cursor)
(cursor-next cursor)
(pk (cursor-key-ref cursor))
(pk (cursor-value-ref cursor))
(cursor-close cursor)
(session-close session)
(connection-close connection)

Kesako wiredtiger?

At the very core, it's a configurable ordered key/value store, column aware, with global transactions.


wiredtiger does not work on 32 bits architectures.

It was tested with wiredtiger 2.9.0.

You need to install wiredtiger with the usual cli dance:

git clone
cd wiredtiger
./ && ./configure && make && make install

And then clone guile-wiredtiger:

git clone

There is two modules wiredtiger.scm and wiredtigerz.scm each of which has a documentation file.

You also need a recent version of GNU Guile (tested with 2.0.11). It's available in most GNU/Linux distributions.

How to contribute

Send me a mail.


  • 0.5

    • wiredtiger

      • support raw column
      • support custom collator (unstable)
    • wiredtigerz

      • fix cursor-range (upstream bug)
      • add with-context form which set the *context* fluid. The immediate consequence is that you don't need to spawn yourself sessions and pass them around.
      • add (with-cursor cursor proc) procedure which unwrap the current context and retrieve the named CURSOR. This is useful when you use with-context to avoid to manually retrieve the fluid etc.
  • 0.3

    • add graphitisay which provides graph primitives on top of wiredtiger
    • uav: API change: (uav-update! uid assoc)
    • uav: API change: uav-ref* doesn't include the uid in the returned assoc
    • uav: add a simple database server
    • wiredtigerz: cursor-insert* return row record number when applicable