EN /HU | Login

Technologies

Everything named anywhere in this wiki: the languages we write in, the software we run, the libraries we depend on. Libraries are grouped under their language. Nothing comes from a lock file — this is what the wiki talks about, with a link wherever a page exists.

Languages

Language What it is Where we use it
Go Statically typed systems language; cross-compiler and WebAssembly target in the standard toolchain. Ebitengine games, Inkwell, the Updater bot, the wiki fetcher and Countdowner
Ruby Dynamic, object-oriented scripting language. The Catalog API, WarpEngine and the RuBBS gem
Python 3 Scripting language present on practically every host. Every store engine — standard library only, because a Batocera box has python3 and no pip
Rust Memory-safe systems language, built around Cargo crates. Bevy games
Lua Small embeddable scripting language. TIC-80 cartridges and LÖVE games
JavaScript The language of the browser. Phaser games and the renderer of the WarpEngine Client
TypeScript JavaScript with static types, compiled before it ships. The public site's frontend and the WarpEngine Client
GDScript Godot's own Python-flavoured scripting language. Godot projects
C# Godot's second first-class scripting option. Available in Godot
6502 assembly Machine language of the C64's MOS 6510. Blessing of Ra, Rabbit Scooter — C64, the C64 Demo
Free Pascal Compiled Pascal; small self-contained binaries. The Discord thread scheduler
C / C++ What the fantasy console itself is written in. Building the TIC-80 Pro binary from source in the builder image
Java Cross-platform, JVM-hosted language. Running the Unique Tile Finder jar when producing TIC-80 tiles
PHP Server-side scripting language. Grav CMS, which serves this wiki
POSIX sh Lowest common denominator shell, so a curl-piped installer runs where /bin/sh is dash. Every store installer and uninstaller
ERB Ruby's embedded templating syntax. WarpEngine's per-platform CI pipeline templates and RuBBS screen templates
Twig PHP templating language used by Grav. The wiki theme and its JSON API endpoints

Game engines, frameworks and platforms

Technology What it is Notes
Ebitengine 2D game engine for Go; desktop and WebAssembly from one code base. Powers Rabbit Roller
Bevy Data-driven ECS engine in Rust, no visual editor — projects are Cargo crates. First-class WASM support
Godot Open-source 2D/3D engine with a visual editor and headless export. Exports web plus Windows, Linux and a universal macOS build
LÖVE (Love2D) Lightweight Lua framework for 2D games, packaged as a .love archive. Web builds via love.js
Phaser HTML5 2D framework: WebGL/Canvas, physics, tweens, particles. Needs no compilation — the simplest of our pipelines
TIC-80 Fantasy console with editors for code, sprites, maps, sound and music. The Pro version is a commercial itch.io product; our builder image compiles it from source
Commodore 64 The 8-bit home computer, targeted in assembly as a .prg. PAL, raster-polled, no interrupts
Inkwell Our point-and-click framework for Go, a DSL layer over Ebitengine. Implements the SCUMM-era skeleton

In-house engines, services and tools

Project Language What it does
WarpEngine Ruby Mountable Rails engine: retro software catalog, CI pipelines, build endpoints, public JSON API.
RuBBS Ruby Synchronet-style Telnet BBS framework: negotiation, ANSI frame buffer, widgets, themes.
Inkwell Go Point-and-click framework on Ebitengine; every entity is a struct literal in a manager.
warpstore Python Shared core of the store engines: catalog, releases, host matching, state, HTTP — one dependency-free file.
WarpEngine Batocera Store Python Writes a catalog into a Batocera box's ROM folders and merges gamelist.xml.
WarpEngine RetroArch Store Python Renders a catalog as RetroArch .lpl playlists with box art, locally or exported.
WarpEngine Client TypeScript Desktop app showing the catalog as a grid of cards, with the store engine built in.
TTG Batocera Store / TTG RetroArch Store JSON Our own store definitions — a config.json and two wrapper scripts on top of the engines above.
BBS Server Ruby The public Teletype Games BBS on games.teletype.hu:2323, built on RuBBS.
Updater bot Go Polls the wiki, Redmine and Gitea, announces new activity on Discord; a cache prevents repeats.
Status bot Free Pascal Creates a weekly Discord thread at a set time and posts the opening message.
Countdowner Go Countdown timers for deadlines and releases — see Server.
wiki-fetcher Go HTTP hook that commits, rebase-pulls and pushes the wiki repository on a Gitea webhook.
backup-scripts Make + shell Dumps databases, mirrors repositories, prunes old dumps, rsyncs off-site.

Server and infrastructure software

Software What it is Role here
Nginx HTTP server and reverse proxy. Entry point for all traffic, SSL termination — see Server
Traefik HTTP reverse proxy and load balancer with dynamic routing. Routes the containerised services by Host header
Gitea Self-hosted Git: repositories, code review, issues. Our forge at git.teletypegames.org; also hosts a rubygems package registry
Woodpecker CI CI/CD engine integrated with Gitea. Runs every build; its configuration extension fetches the pipeline from WarpEngine
Grav Flat-file CMS; content is markdown on disk. This wiki
Discourse Community discussion platform. Long-form conversations, announcements and support
Redmine Project management and issue tracking. Development tasks, bugs and milestones
Matomo Privacy-friendly self-hosted analytics. Traffic across the public sites
Uptime Kuma Self-hosted uptime monitor with alerts. Availability of every server-side component
Docker & Docker Compose Container runtime and orchestration. Every service on the box, and every CI builder image
MySQL 8 Relational database. The catalog database behind the Catalog API
MariaDB MySQL-compatible relational database. Redmine's database — backed up with its own dump script
PostgreSQL Relational database. The wiki's database — backed up with pg_backup.sh
phpMyAdmin Web UI for inspecting and managing MySQL. Database inspection in the deployment stack
Apache Web server bundled in the Grav container alongside PHP 8.1. Serves the wiki inside its container
Telnet The 1970s remote terminal protocol, IAC negotiation and all. How you reach the BBS
rsync Incremental file synchronisation over SSH. Off-site mirroring of the backups
Discord Chat platform with bots and webhooks. Team communication, and the target of both bots
Google Calendar Shared calendar. Team scheduling — see Communication
YouTube Data API Google's API for channel and video metadata. The public site's latest-video panel

Build, CI and developer tooling

Tool What it is Where it shows up
GNU Make Build automation driven by a Makefile. The common front door of every engine's workflow, the backups and the client
Git Distributed version control. Everything, including the version fallback when metadata.json is absent
Docker builder images Per-platform CI images configured server-side in WarpEngine's ci_platforms. godot-builder, tic80pro, bevy-builder, love-builder, ebitengine-builder, phaser-builder, c64-builder
Ubuntu / Debian / Alpine The base Linux distributions of those images. Ubuntu 24.04 for the TIC-80 Pro build, Debian for the Rust toolchain, Alpine for the light steps
godot-ci Headless Godot editor plus matching export templates, in a container. The base of our godot-builder image
CMake Cross-platform build system generator. Compiling TIC-80 Pro from source
SDL2 Cross-platform graphics, audio and input library. A build dependency of TIC-80
mingw-w64 GCC cross-compiler targeting Windows. Windows builds from the Linux CI image (Bevy's x86_64-pc-windows-gnu)
osxcross Cross-compilation toolchain for macOS targets. The planned route to mac binaries for Bevy and Ebitengine
ACME 6502 cross-assembler. Assembling every C64 project into a .prg
VICE (x64sc) The Commodore 64 emulator. Running C64 builds locally, and the emulator behind Batocera's c64 system
fswatch Filesystem change watcher. The make watch target in every engine's Makefile
jq Command-line JSON processor. Reading metadata.json in pipelines
curl HTTP client. Downloading runtimes and HTML shells, and every upload/publish call
zip / unzip Archive packaging. Building the versioned release ZIPs
sed / awk Stream and text processing. Patching web players, extracting versions, splitting TIC-80 asset sections
mksquashfs / readelf SquashFS packer and ELF inspector. Rebuilding the fused LÖVE AppImage without executing it on an Alpine builder
Homebrew macOS package manager. make deps installs acme and vice with it
Visual Studio Code Editor whose tasks.json we ship per engine. Cmd+Shift+B runs the default build task in every tools repository
jsDelivr Public CDN for npm packages. Where the pinned phaser.min.js is fetched at build time
adb Android Debug Bridge. Pushing an exported RetroArch tree onto a phone
codesign / Gatekeeper Apple's signing tool and its runtime policy. Ad-hoc signing the Godot and WarpEngine Client macOS bundles
sips / ImageMagick / FFmpeg Image and media converters, first one found. Re-encoding catalog box art to the PNG RetroArch insists on
tea The Gitea command-line client. Creating releases and replacing their attachments from a workstation
Steamworks SDK / SteamPipe / steamcmd Valve's SDK, content pipeline and CLI. The Steam publication plan
Mermaid Text-to-diagram syntax rendered in markdown. The architecture diagrams on Server and elsewhere

Content creation tools

Tool What it is Where it shows up
LibreSprite Open-source pixel art editor for sprites and animation; a fork of Aseprite. Sprite work
Pixelorama Cross-platform pixel art editor: layers, frames, custom brushes. Sprite and animation work
IrfanView Windows image viewer with batch and merge functions. Merging images before unifying TIC-80 palettes
Pic-2-Tic Web app that re-maps an image onto a fixed console palette. Applying the PICO-8 palette to merged backgrounds
Unique Tile Finder Java tool that reduces an image to its unique tiles. Producing TIC-80 tiles — needs OpenJDK
RLE image encoder Run-length encoder for TIC-80 images. Compressing TIC-80 images

Distribution platforms and retro hosts

Platform What it is How we reach it
Batocera Plug-and-play retro gaming Linux distro. The Batocera store engine installs into its ROM folders
EmulationStation Batocera's front-end, whose library lives in gamelist.xml. Our metadata and box art are merged into it, never over the user's own entries
RetroArch Frontend for libretro cores: desktop, Android, Steam Deck, handhelds. The RetroArch store engine writes .lpl playlists for it
libretro cores The emulator plugins RetroArch loads. vice_x64_libretro boots our .prg files, tic80_libretro our .tic cartridges
Steam Valve's storefront; entry via Steamworks and the Steam Direct fee. Planned for the point-and-click title — see the publication plan
itch.io Indie storefront. Where TIC-80 Pro and Pixelorama are sold

Libraries by language

Ruby

Library What it does
Ruby on Rails 8 The framework behind the Catalog API and the host of WarpEngine.
warp_engine Our mountable engine gem: catalog domain, CI pipeline server, build endpoints, public API.
bbs (RuBBS) Our Telnet BBS gem: Telnet, ANSI, widgets, themes, markdown, CSV persistence.
ActiveAdmin The admin panel (blaze theme) for the catalog, the image library and the file manager.
Devise Authentication for the admin panel.
Blueprinter Serializers shaping the JSON API responses.
apipie-rails REST API documentation, browsable as Swagger UI at /api/swagger.
RSpec The test framework for the API and the engine.
RuboCop Linting, on the rubocop-rails-omakase preset.
Artii FIGlet big-banner rendering inside RuBBS.

Go

Library What it does
Ebitengine (github.com/hajimehoshi/ebiten/v2) The engine itself: rendering, input, game loop.
Ebiten audio Ebitengine's audio package, backing Inkwell's WAV/OGG/MP3 player at 48 kHz.
Inkwell (git.teletypegames.org/engines/inkwell) Our point-and-click adventure framework, consumed as a plain Go module.
go-steamworks (github.com/Philipp15b/go-steamworks) Steamworks SDK bindings: achievements, cloud, overlay, rich presence.
go:embed Standard-library asset embedding; Rabbit Roller's assets live in the binary.
wasm_exec.js The Go runtime helper shipped with every WebAssembly build.

JavaScript and TypeScript

Library What it does
Phaser The framework itself, pinned per project and fetched from a CDN at build time.
Vue 3 The frontend framework of the public site.
Vite Build tool and dev server for that frontend.
vue-router Client-side routing, one router module per page.
Pinia State stores, one per domain (software, events, members, git, blog, howtos, youtube, ui).
vue-i18n Internationalisation of the frontend.
Tailwind CSS Utility-first styling.
TuiCSS Retro terminal look on top of Tailwind.
ESLint 9 Linting on a flat config, for Vue and TypeScript.
Electron Desktop shell of the WarpEngine Client; contextIsolation on, nodeIntegration off.
electron-builder Packages that client as an AppImage, a deb, an NSIS installer and a portable exe.
Node.js / npm Runtime and package manager for the above; Node 22+ to install the client's dependencies.

Rust

Library What it does
Bevy The ECS engine, a plain Cargo dependency.
wasm-bindgen JS glue for web builds; crate and CLI must be the same version.
Cargo / rustup The build tool and toolchain manager, including the wasm32-unknown-unknown target.

Lua

Library What it does
LÖVE The framework, and the official artifacts our binaries are fused into.
love.js Emscripten LÖVE port; turns a .love into a web build.
luac The Lua compiler, used as a syntax check before packaging.
luacheck Syntax errors and unused variables; gates the TIC-80 pipeline.
LDoc Generates the API documentation packaged with every TIC-80 release.
lua-minify-tic80 Minifies the concatenated source to fit the cartridge.

Python

Library What it does
The standard library, and nothing else A deliberate constraint of warpstore and both store engines: the hosts range from a Batocera box with no pip to a desktop, and neither may be asked to install anything.
http.server The built-in server behind make serve in the Phaser workflow.

Free Pascal

Library What it does
The Free Pascal RTL All the status bot needs: schedule loop and Discord API calls in one binary.