Looking for the original 1996 DOS version? See the
originalbranch.
An educational programming environment where students control a robot named "Niki" through a Pascal-like language. Includes tvniki (GUI) and nikic (command-line compiler). Originally created in 1996 for DOS, now ported to Free Pascal with UTF-8 support in 2026 — 30 years of teaching programming!
tvNiki teaches programming fundamentals through a simple robot simulation. Niki moves on a grid, collects and places objects, and navigates around walls. Students write programs using basic control structures (IF/THEN/ELSE, WHILE/DO, REPEAT/UNTIL) and procedures.
brew install sttts/tvniki/tvnikiThis installs both tvniki (the GUI) and nikic (the command-line compiler).
Download from GitHub Releases:
tvniki-linux-x86_64.tar.gz- Linux x86_64tvniki-linux-arm64.tar.gz- Linux ARM64
tar xzf tvniki-linux-x86_64.tar.gz
cd tvniki-linux-x86_64
./tvniki# macOS
brew install fpc
# Debian/Ubuntu
sudo apt-get install fpc
# Clone and build
git clone --recursive https://github.com/sttts/tvniki.git
cd tvniki
make./tvniki # Start with empty editor
./tvniki program.pas # Load a program file
./tvniki field.rob # Load a field file./nikic program.pas # Compile to program.nik
./nikic -o output.nik src.pas # Specify output file
./nikic -d program.pas # Include debug infoBoth English and German commands are supported:
| English | German | Description |
|---|---|---|
Forward |
Vor |
Move forward one cell |
Turn_Left |
Drehe_Links |
Turn left 90 degrees |
Pick_Up |
Nimm_Auf |
Pick up object from current cell |
Put_Down |
Gib_Ab |
Place object on current cell |
| English | German | Returns true when... |
|---|---|---|
Front_Clear |
Vorne_Frei |
Cell ahead is free |
Left_Clear |
Links_Frei |
Cell to the left is free |
Right_Clear |
Rechts_Frei |
Cell to the right is free |
Space_Occupied |
Platz_Belegt |
Current cell has an object |
Has_Supply |
Hat_Vorrat |
Robot is carrying objects |
PROGRAM Laby;
PROCEDURE Search;
BEGIN
IF Left_Clear THEN
BEGIN
Turn_Left;
Forward;
END ELSE
IF Front_Clear THEN Forward
ELSE
IF Right_Clear THEN
BEGIN
Turn_Left;
Turn_Left;
Turn_Left;
Forward;
END ELSE
BEGIN
Turn_Left;
Turn_Left;
Forward;
END;
END;
BEGIN
WHILE NOT Space_Occupied DO Search;
END..pas- Program source code.nik- Compiled bytecode.rob- Field/world files (grid layout)
Ctrl-F9- Compile and runAlt-F9- Compile onlyCtrl-F8- Single step (debug mode)Ctrl-F2- Reset/stop programAlt-X/Ctrl-Q- Exit
The disassemble window (Compiler → Disassemble) shows the compiled bytecode with human-readable descriptions:
--> 7 DBG #5 Source line 5
10 CLF Check left free
11 JNC 18 Jump if false to 18
14 TURN Turn left
15 GO Go forward
Features:
- Auto-updates after compilation
- Current execution line highlighted in blue with
-->marker - Shows instruction pointer (IP) and carry flag in the status bar
- Follows execution during run and single-step debugging
tvNiki automatically loads translations based on the LANG environment variable. Supported languages: German (default), English, Spanish, French, Italian, Dutch, Portuguese, Norwegian, Swedish, Icelandic.
LANG=en_US ./tvniki # Run in English
LANG=es_ES ./tvniki # Run in Spanish