Skip to main content
taxisdb and mumps and yottadb

Installation and First Run

InstallVersion 1.0.0

This guide shows you how to install TaxisDB on Ubuntu on top of YottaDB

Step 1: Installing YottaDB

This is a full Installation of YottaDB including all plugins, if you want to customize your installation visit

Official Installation Guide of YottaDB
How to Install Octo

# Install prerequisite packages

# Ubuntu/Debian
sudo apt update
sudo apt install file binutils libelf-dev libicu-dev nano

# For Octo installation
sudo apt install bison build-essential ca-certificates cmake curl file flex git libconfig-dev libelf-dev libicu-dev libreadline-dev libssl-dev pkg-config

# For all plugins installation
sudo apt install libsodium-dev libcurl4-openssl-dev tcsh libgcrypt20-dev libgpg-error-dev libgpgme-dev gdb

# Download ydbinstall.sh script
wget https://download.yottadb.com/ydbinstall.sh
chmod +x ydbinstall.sh

# Install YottaDB with ALL plugins
sudo ./ydbinstall.sh --installdir /home/user/YottaDB --utf8 --verbose --allplugins --user user --group user

YottaDB Environment Setup

The following environment variables must be set for Octo to operate properly:

  • ydb_dist
  • ydb_gbldir
  • ydb_routines
  • ydb_xc_ydbposix
    The environment variables ydb_distydb_gbldirydb_routines, and ydb_xc_ydbposix can initially be set by sourcing ydb_env_set in your YottaDB installation directory.
# provides a detailed report on the YottaDB build, e.g.
yottadb -version

# Add the installdir of yottadb to the path
export PATH="$HOME/bin:/home/user/YottaDB:$PATH"

# Add the following line to the .bashrc
# to source the ydb_env_set each time we start a bash shell
# ydb_env_set uses reasonable defaults to set up a YottaDB application development environment that includes plugins conforming to the YottaDB standard (such as the POSIX plugin and Octo).
source /home/user/YottaDB/ydb_env_set

# The default environment is created under $ydb_dir, defaulting to `$HOME/.yottadb`

# defaulting to `$HOME/.yottadb` unless the environment variable `ydb_dir` points to another location,
# set this to define a directory for the environment set and managed by `ydb_env_set`. If it is not set, `ydb_env_set` uses `$HOME/.yottadb`.
echo $ydb_dir

# Points to the directory where YottaDB is installed.
echo $ydb_dist

# Points to a global directory file. A global directory file maps global variables (the hierarchical key-value relationships of the YottaDB database) to database files in the filesystem.
echo $ydb_gbldir

# Tells a process where to find application code written in M. It is not required by applications that do not invoke M code.
echo $ydb_routines

# Local repository for YottaDB databases
ln -s .yottadb/r2.02_x86_64/g/ YottaDB.data

When ydb_env_set is sourced, it provides a default execution environment (global directory and a default multi-region database) if none exists, and recovers an existing environment if needed. If neither ydbdirnorydb_dir nor gtmdir are defined, by default it creates the database in $HOME/.yottadb. The structure of the default environment is shown below, with routines in the r subdirectories, object code in the o and o/utf8 subdirectories. Databases are in the g subdirectory.

.yottadb
├── r
├── r1.36_x86_64
│   ├── g
│   │   ├── %ydbaim.dat
│   │   ├── %ydbaim.mjl
│   │   ├── %ydbocto.dat
│   │   ├── %ydbocto.mjl
│   │   ├── yottadb.dat
│   │   ├── yottadb.gld
│   │   └── yottadb.mjl
│   ├── o
│   │   └── utf8
│   └── r
└── V6.3-014_x86_64 -> r1.36_x86_64

For more information refer to YottaDB Environment Setup

YottaDB CLI

How to start a YottaDB process

user@Z440:~/$ ydb

Investigate the path where you can run MUMPS code.

echo $ydb_routines

Test your installation

Create this M script at $HOME/.yottadb/r/env.m

init
  WRITE !,"= YottaDB Environment Snapshot =",!
  WRITE "YottaDB Release: ",$ZYRELEASE,!
  WRITE "GT.M Version:    ",$ZVERSION,!
  WRITE "Build Date:      ",$ZRELDATE,!
  WRITE "Char Set:        ",$ZCHSET,!
  WRITE "PID:             ",$JOB,!
  WRITE "Mode:            ",$ZMODE,!
  WRITE "CWD:             ",$ZDIRECTORY,!
  WRITE "Global Dir:      ",$ZGBLDIR,!
  WRITE "Routines Path:   ",$ZROUTINES,!
  WRITE "Principal Dev:   ",$PRINCIPAL,!
  WRITE "Actual Dev:      ",$ZIO,!
  WRITE "Last Error:      ",$ZSTATUS,!
  ZSYSTEM "echo 'ydb_dist  = '$ydb_dist"
  ZSYSTEM "echo 'ydb_gbldir= '$ydb_gbldir"
  ZSYSTEM "echo 'ydb_rout  = '$ydb_routines"
  QUIT

Then run it inside the ydb cli

YDB> DO init^env   ; or D <subroutine>^<filename>
YDB> HALT          ; or simply enter h to exit the console

YottaDB GUI Server

How to start the web management application of YottaDB

yottadb -run %ydbgui --readwrite
Starting Server at port 9080 in directory /home/user/YottaDB/plugin/etc/ydbgui at logging level 0 in readwrite mode

Step 2: Install TaxisDB

Download source code from
Install under your $HOME/.yottadb/r

First Run

Open YDB console and run

YDB> DO ^start

This will create the global directory structure (GLD) of TaxisDB on your machine. A new TaxisBase, i.e. the TaxisDB database will be created and then the script will run a few tests to populate database with some examples.

Expected Output

You should get a similar output

YDB>D ^start

*********************************************************************************
*  TaxisDBdatabase engine licensed under SSPL v1.0                         *
*  TaxisBaseknowledge base  licensed under ODbL v1.0 + DBCL v1.0             *
*                                                                               *
*  Copyright © 2026 Athanassios Hatzis - athanassios@healis.eu                  *
*  All rights reserved except as granted by the applicable copy-left licenses   *
*                                                                               *
*  THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND.                *
*                                                                               *
*                                                                               *
*  WARNING: Existing data was found in TaxisDB   database                       *
*  A new TaxisDB will be generated and all existing data                        *
*  currently stored will be PERMANENTLY DELETED and cannot be recovered         *
*                                                                               *
*********************************************************************************

Type YES to continue, or anything else to abort: YES

Confirmed. Proceeding with bootstrap...

<------ Create Objects obj.claudio_arrau and obj.tom_hanks ------>

======
obj.claudio_arrau
======
  659be4427174eo4ibnti  sys.attr.key                       obj.claudio_arrau
  659be4427174eo4ibnti  sys.attr.label                     Claudio Arrau @en
  659be4427174eo4ibnti  sys.attr.name                      claudio_arrau
  659be4427174eo4ibnti  sys.attr.alias                     ClaudioArrau
  659be4427174eo4ibnti  sys.attr.description               Chilean pianist (1903-1991) @en
  659be4427174eo4ibnti  sys.attr.wikipage                  https://en.wikipedia.org/wiki/Claudio_Arrau
  659be4427174eo4ibnti  sys.attr.wikipage                  https://es.wikipedia.org/wiki/Claudio_Arrau
  659be4427174eo4ibnti  sys.attr.wikipage                  https://de.wikipedia.org/wiki/Claudio_Arrau
  659be4427174eo4ibnti  sys.attr.homepage                  https://arrauhouse.org/content/homepage.htm
  659be4427174eo4ibnti  sys.attr.isa                       sys.type.obj

======
obj.tom_hanks
======
  659be4427195axrpan37  sys.attr.key                       obj.tom_hanks
  659be4427195axrpan37  sys.attr.label                     Tom Hanks @en
  659be4427195axrpan37  sys.attr.name                      tom_hanks
  659be4427195axrpan37  sys.attr.alias                     TomHanks
  659be4427195axrpan37  sys.attr.alias                     %TomHanks
  659be4427195axrpan37  sys.attr.description               American actor and filmmaker (born 1956) @en
  659be4427195axrpan37  sys.attr.wikipage                  https://en.wikipedia.org/wiki/Tom_Hanks
  659be4427195axrpan37  sys.attr.wikipage                  https://fr.wikipedia.org/wiki/Tom_Hanks
  659be4427195axrpan37  sys.attr.wikipage                  https://el.wikipedia.org/wiki/Τομ_Χανκς
  659be4427195axrpan37  sys.attr.isa                       sys.type.obj


=== Build Schema for a Movie Entity Type ===
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299

<------ Create Movie Seven ------>

======
tt0011100
======
  659be44279a520wb8zgm  sandbox.movie.title                Seven @en
  659be44279a520wb8zgm  sandbox.movie.genre                thriller
  659be44279a520wb8zgm  sandbox.movie.genre                mystery
  659be44279a520wb8zgm  sandbox.movie.releaseYear          1995
  659be44279a520wb8zgm  sandbox.movie.imdbid               tt0011100


=== Build Schema for a Person Entity Type ===
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299

<------ Create Person p.athan ------>

======
p.athan
======
  659be4427f5a9bmovxki  sys.attr.key                       p.athan
  659be4427f5a9bmovxki  sandbox.person.name                athan
  659be4427f5a9bmovxki  sandbox.person.age                 56
  659be4427f5a9bmovxki  sandbox.person.email               athan@example.com


=== Build Schema for a DLC Item Type ===
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299
ResolveIsaRef: resolving isa value 'sys.type.attr' for aid=299

<------ Create DLC Item 042 ------>

======
042
======
  659be4428594bvncu5ef  sandbox.dlc.id                     042
  659be4428594bvncu5ef  sandbox.dlc.checkup                Dilithium Crystals on 1st January 2013 @en
  659be4428594bvncu5ef  sandbox.dlc.count                  100
  659be4428594bvncu5ef  sandbox.dlc.txdate                 2013-01-01

======
042
======
                   eid     aid      tx          valkey  OP

  659be4428594bvncu5ef    1009    7407     K3F1.018875  ( + )
  659be4428594bvncu5ef    1010    7407     K3F2.018876  ( + )
  659be4428594bvncu5ef    1011    7407     K3F3.018877  ( + )
  659be4428594bvncu5ef    1012    7407     K3F4.018878  ( + )

You can also see the user messages, at the INFO debug level, that have been recorded during the fist run

YDB> ZWRITE ^TXLOG  ; or zwr ^TXLOG

YDB>zwr ^TXLOG
^TXLOG(2110458,1,1)="2026-08-23T22:19:42.335238 | apiWFL | INFO | StageRecordEND >>> staged <<< Total Records: 1"
^TXLOG(2110458,1,2)="2026-08-23T22:19:42.335616 | apiWFL | INFO | StageRecordEND >>> staged <<< Total Records: 2"
^TXLOG(2110458,1,3)="2026-08-23T22:19:42.335631 | API | INFO | Stage: processed 2 record(s) — 2 record(s) staged for ns=sandbox isBulkLoad=0"
^TXLOG(2110458,1,4)="2026-08-23T22:19:42.346839 | API | INFO | Transact: committed 2 records, tx=7401"
^TXLOG(2110458,1,5)="2026-08-23T22:19:42.352340 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 1"
^TXLOG(2110458,1,6)="2026-08-23T22:19:42.353727 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 2"
^TXLOG(2110458,1,7)="2026-08-23T22:19:42.357061 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 3"
^TXLOG(2110458,1,8)="2026-08-23T22:19:42.358384 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 4"
^TXLOG(2110458,1,9)="2026-08-23T22:19:42.361668 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 5"
^TXLOG(2110458,1,10)="2026-08-23T22:19:42.367585 | SAPI | INFO | Transact: committed 5 records, Total datoms written: 36, tx counter: 7402"
^TXLOG(2110458,1,11)="2026-08-23T22:19:42.368524 | apiWFL | INFO | StageRecordEND >>> staged <<< Total Records: 1"
^TXLOG(2110458,1,12)="2026-08-23T22:19:42.368539 | API | INFO | Stage: processed 1 record(s) — 1 record(s) staged for ns=sandbox isBulkLoad=0"
^TXLOG(2110458,1,13)="2026-08-23T22:19:42.373565 | API | INFO | Transact: committed 1 records, tx=7403"
^TXLOG(2110458,1,14)="2026-08-23T22:19:42.376809 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 1"
^TXLOG(2110458,1,15)="2026-08-23T22:19:42.378255 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 2"
^TXLOG(2110458,1,16)="2026-08-23T22:19:42.381500 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 3"
^TXLOG(2110458,1,17)="2026-08-23T22:19:42.385050 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 4"
^TXLOG(2110458,1,18)="2026-08-23T22:19:42.391136 | SAPI | INFO | Transact: committed 4 records, Total datoms written: 20, tx counter: 7404"
^TXLOG(2110458,1,19)="2026-08-23T22:19:42.391902 | apiWFL | INFO | StageRecordEND >>> staged <<< Total Records: 1"
^TXLOG(2110458,1,20)="2026-08-23T22:19:42.391919 | API | INFO | Stage: processed 1 record(s) — 1 record(s) staged for ns=sandbox isBulkLoad=0"
^TXLOG(2110458,1,21)="2026-08-23T22:19:42.396745 | API | INFO | Transact: committed 1 records, tx=7405"
^TXLOG(2110458,1,22)="2026-08-23T22:19:42.401102 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 1"
^TXLOG(2110458,1,23)="2026-08-23T22:19:42.402427 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 2"
^TXLOG(2110458,1,24)="2026-08-23T22:19:42.405695 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 3"
^TXLOG(2110458,1,25)="2026-08-23T22:19:42.409394 | sapiWFL | INFO | StageRecord: Succeeded — Total Records: 4"
^TXLOG(2110458,1,26)="2026-08-23T22:19:42.416236 | SAPI | INFO | Transact: committed 4 records, Total datoms written: 27, tx counter: 7406"
^TXLOG(2110458,1,27)="2026-08-23T22:19:42.417427 | apiWFL | INFO | StageRecordEND >>> staged <<< Total Records: 1"
^TXLOG(2110458,1,28)="2026-08-23T22:19:42.417452 | API | INFO | Stage: processed 1 record(s) — 1 record(s) staged for ns=sandbox isBulkLoad=0"
^TXLOG(2110458,1,29)="2026-08-23T22:19:42.422746 | API | INFO | Transact: committed 1 records, tx=7407"
^TXLOG(2110458,1,"CFG","LEVEL")=20
^TXLOG(2110458,1,"CFG","OUTPUT")=0
^TXLOG(2110458,1,"CFG","SEQ")=29
^TXLOG(2110458,1,"CFG","STARTED at")="2026-08-23T22:19:42.333942"
^TXLOG(2110458,1,"CFG","TRACE")=0
^TXLOG(2110458,"CURRENT")=1
^TXLOG(2110458,"SESSIONS")=1

If you managed to get this output then everything works as expected and TaxisDB has been successfully installed on your machine.

TaxisDB keywords

The next thing you can do is to inspect all TaxisDB keywords and commands that have been added into YDB console environment. The first command to use is X PKW or EXECUTE PKW this is a shortcut alias for the full command which is DO Print^keywords. Here is the full list

YDB>X PKW

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ALL KEYWORDS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

KEYWORD                            ALIAS
-----------------------------------------------------------------


=============
  Executable Commands
=============

+                                  A
-                                  R
DO Load^keywords                   KW
DO PrintSchema^sapi("sandbox")     PS
DO PrintTBoxState^sapi             TBS
DO Print^keywords                  PKW
DO Setup^logger("CRITICAL",1,0)    CRITICAL
DO Setup^logger("DEBUG",1,0)       DEBUG
DO Setup^logger("ERROR",1,0)       ERROR
DO Setup^logger("INFO",1,0)        INFO
DO Setup^logger("WARNING",1,0)     WARNING
DO Transact^api                    TA
DO Transact^sapi                   TS

=============
  location
=============

location.cvt.geo                   GEO

=============
  obj
=============

obj.claudio_arrau                  ClaudioArrau

obj.tom_hanks                      TomHanks
                                   %TomHanks

=============
  sandbox
=============

sandbox.dlc.checkup                checkup
sandbox.dlc.count                  count
sandbox.dlc.id                     dlcid
sandbox.dlc.txdate                 txdate

sandbox.movie.genre                genre
sandbox.movie.imdbid               imdb
sandbox.movie.releaseYear          ry
sandbox.movie.title                title
sandbox.movie.tmdbid               tmdb

=============
  sys
=============

sys.attr.abbr                      abbr
sys.attr.alias                     alias
sys.attr.cardinality               cardin
sys.attr.description               doc
sys.attr.display                   display
sys.attr.entattribute              entattr
sys.attr.entspec                   entspec
sys.attr.entvalidationfn           entvalidfn
sys.attr.example                   eg
sys.attr.exptype                   exptype
sys.attr.extid.code                code
sys.attr.homepage                  home
sys.attr.id                        id
sys.attr.indexed                   ndx
sys.attr.isa                       isa
sys.attr.key                       key
sys.attr.label                     label
sys.attr.name                      name
sys.attr.notes                     notes
sys.attr.range                     range
sys.attr.required                  req
sys.attr.resolvedby                rby
sys.attr.unique                    unq
sys.attr.usage                     use
sys.attr.validationfn              validfn
sys.attr.wikipage                  wiki

sys.enum.cardinality               CARDINALITY
sys.enum.cardinality.many          MANY
sys.enum.cardinality.one           ONE
sys.enum.unique                    UNIQUE
sys.enum.unique.insert             UNQINSERT
sys.enum.unique.upsert             UNQUPSERT

sys.type.assoc                     ASSOC
sys.type.attr                      ATYPE
sys.type.cvt                       CVT
sys.type.enum                      ENUM
sys.type.obj                       OBJ
sys.type.type                      TYPE
sys.type.val                       DTYPE

sys.val.alias                      ALIAS
sys.val.boolean                    BOOLEAN
sys.val.date                       DATE
sys.val.datetime                   DATETIME
sys.val.double                     DOUBLE
sys.val.fn                         FN
sys.val.geohash                    GEOHASH
sys.val.gps                        GPS
sys.val.integer                    INT
sys.val.keyword                    KEYWORD
sys.val.langstr                    LANGSTR
sys.val.name                       NAME
sys.val.point                      POINT
sys.val.pointz                     POINTZ
sys.val.ref                        REF
sys.val.string                     STRING
sys.val.time                       TIME
sys.val.timestamp                  TIMESTAMP
sys.val.url                        URL
sys.val.uuid4                      UUID4

YDB>

Aliases, i.e. TaxisDB keywords, is a very powerful and user friendly feature. Here is a quick demonstration:

YDB> D PE^api(TomHanks) ; or full command is: DO PrintEntity^api("obj.tom_hanks")

======
obj.tom_hanks
======
  659be4427195axrpan37  sys.attr.key                       obj.tom_hanks
  659be4427195axrpan37  sys.attr.label                     Tom Hanks @en
  659be4427195axrpan37  sys.attr.name                      tom_hanks
  659be4427195axrpan37  sys.attr.alias                     TomHanks
  659be4427195axrpan37  sys.attr.alias                     %TomHanks
  659be4427195axrpan37  sys.attr.description               American actor and filmmaker (born 1956) @en
  659be4427195axrpan37  sys.attr.wikipage                  https://en.wikipedia.org/wiki/Tom_Hanks
  659be4427195axrpan37  sys.attr.wikipage                  https://fr.wikipedia.org/wiki/Tom_Hanks
  659be4427195axrpan37  sys.attr.wikipage                  https://el.wikipedia.org/wiki/Τομ_Χανκς
  659be4427195axrpan37  sys.attr.isa                       sys.type.obj

The idea is to use keyword handles to access entities, i.e. TaxisDB objects, in a user friendly, memorable way and at the same time avoid quoted strings.

Next Steps