A small read only database Mainly to be used by retroarch


Files specified later in the chain will override earlier ones if the same key exists multiple times.

  • To list out the content of a db libretrodb_tool <db file> list
  • To create an index libretrodb_tool <db file> create-index <index name> <field name>
  • To find an entry with an index libretrodb_tool <db file> find <index name> <value>

# Compiling a single database with c_converter

git clone
cd libretro-super
./ retroarch
cd retroarch
cd libretro-db
c_converter "NAME_OF_RDB_FILE.rdb" "NAME_OF_SOURCE_DAT.dat"

Compiling all databases with

This approach builds and uses the c_converter program to compile the databases

git clone
cd libretro-super
./ retroarch
cd retroarch
cd ..

Lua DAT file converter

To convert a dat file use:

dat_converter <db file> <dat file>

If you want to merge multiple dat files you need to run:

dat_converter <db file> <match key> <dat file> ...

for example:

dat_converter snes.rdb rom.crc snes1.dat snes2.dat

Query examples

Some examples of queries you can use with libretrodbtool:

1) Glob pattern matching Usecase : Search for all games starting with 'Street Fighter' in the 'name' field (glob pattern matching)

‘libretrodb_tool <db file>=""> find "{'name&rsquo;:glob('Street Fighter*')}"`

2) Combined number matching query Usecase: Search for all games released on October 1995.

‘libretrodb_tool <db file>=""> find "{'releasemonth&rsquo;:10,'releaseyear':1995}"`

3) Names only search Usecase: Search for all games released on October 1995, wont print checksums, filename or rom size, only the game name.

‘libretrodb_tool <db file>=""> get-names "{'releasemonth&rsquo;:10,'releaseyear':1995}"`

Writing Lua converters

In order to write you own converter you must have a lua file that implements the following functions:

-- this function gets called before the db is created and should validate the
-- arguments and set up the ground for db insertion
function init(...)
local args = {...}
local script_name = args[1]
-- this is in iterator function. It is called before each insert.
-- the function should return a table for insertion or nil when there are no
-- more records to insert.
function get_value()
return {
key = "value", -- will be saved as string
num = 3, -- will be saved as int
bin = binary("some string"), -- will be saved as binary
unum = uint(3), -- will be saved as uint
some_bool = true, -- will be saved as bool