cozo

Cozo LicenseCozo Top LanguageCozo Workflow Status (main branch)Cozo Last CommitCozo Code Size (bytes)Cozo Repository File CountCozo Repository Size

This is an Erlang NIF wrapper for CozoDB, a FOSS embeddable, transactional, relational-graph-vector database, with time travelling capability, perfect as the long-term memory for LLMs and AI.

Support

Todo

Build

This project is using Makefile to extend the capability of rebar3. everything can be easily done with it.

make all
# or
make deps compile

Test

A full test suite is present in test/cozo_SUITE.erl file, using the cozodb tutorial present in the official documentation as template.

make test

Documentation

Generate the project documentation.

make doc

Open the documentation.

open doc/index.html

Usage

Open a shell with make

make shell

If you want to create a totally isolated database in its own process, you can use cozo_db module.

% open a new database in memory
{ok, Pid} = cozo_db:start([]).

% run a query
{ok,#{ <<"headers">> => [<<"_0">>,<<"_1">>,<<"_2">>],
       <<"next">> => null,
       <<"ok">> => true,
       <<"rows">> => [[1,2,3]],
       <<"took">> => 0.001401927
     }
} = cozo_db:run(Pid, "?[] <- [[1, 2, 3]]").

% close the database
ok = cozo_db:stop(Pid).

If you want to create more than one process and you don't care about isolation, you can use cozo module.

% open a new database in memory
{ok, {0, _}} = cozo:open().

% run a query
{ok,#{ <<"headers">> => [<<"_0">>,<<"_1">>,<<"_2">>],
       <<"next">> => null,
       <<"ok">> => true,
       <<"rows">> => [[1,2,3]],
       <<"took">> => 0.001401927
     }
} = cozo:run(Db, "?[] <- [[1, 2, 3]]").

% close the database
ok = cozo:close(Db).

If you want an access to a low level interface, you can also use cozo_nif module.

Examples

Some examples are present in examples directory like a cozo over tcp, you can use with telnet or netcat.

c("examples/cozo_tcp.erl").
{ok, Pid} = cozo_tcp:start().
nc localhost 6543
# ?[] <- [[1,2,3]]

References