Est. 2004 Beginner

BlitzMax

Mark Sibly's 2004 rebuild of Blitz BASIC as a real language — classes, modules, garbage collection and cross-platform compilation, wrapped around a graphics command set you can still use in three lines.

Created by Mark Sibly (Blitz Research Ltd)

Paradigm Imperative, Procedural, Object-Oriented, Modular, Reflective
Typing Static and strong; types declared with a : suffix, optional Strict and SuperStrict modes that require explicit declaration, garbage-collected object references
First Appeared 2004
Latest Version Official: v1.51, released 21 September 2015 — the release Blitz Research published as open source; a v1.52 update appears in the open-source repository afterwards. Community: BlitzMax NG, still publishing builds as of July 2026

BlitzMax is what Mark Sibly built when he decided that the BASIC dialect behind Blitz3D had gone as far as it could. The classic Blitz language was superb for your first thousand lines and awkward by your ten-thousandth: no classes, no inheritance, no module system, no way to carve a large program into pieces that did not know about each other. BlitzMax, first released for Mac OS X in December 2004, keeps the thing that made Blitz worth using — a graphics and audio command set built into the language, so a window with a sprite in it is three lines away — and puts a real language underneath it.

It is worth being precise about the relationship, because old forum threads are not: BlitzMax is not a new version of BlitzBasic. It is a separate language and a separate compiler, sharing family resemblance and a vendor. Code does not port across without work, and notably BlitzMax never had Blitz3D’s built-in 3D engine, which is why a substantial part of the Blitz3D community simply never followed Sibly across.

History and Origins

Blitz Research Ltd was Sibly’s one-man company in Auckland, founded in 2000 to bring his Amiga-era Blitz BASIC compiler to Windows. That line — BlitzBasic in 2000, Blitz3D in 2001, BlitzPlus in 2003 — was successful on its own terms and structurally stuck. It was Windows-only, it compiled through hand-written x86 assembly generation, its 3D layer was built on DirectX 7, and its type system stopped at records with a built-in linked list.

BlitzMax was the answer to all four problems at once, and it started on the platform the earlier products had never touched. Version 1.00 shipped on 10 December 2004 for Mac OS X, with the Win32 release dated 11 May 2005 in the official version notes and the Linux compiler reported as arriving the same month. That ordering was deliberate signalling: this was the cross-platform Blitz, and it proved it by being born somewhere other than Windows.

The changes ran deep. The type system gained classes, inheritance, abstract and final types, methods and interfaces-by-convention. The command set was reorganised into modulesBRL.* for Blitz Research’s own libraries, Pub.* for wrapped third-party C code — that you could read, modify and recompile, since all of the standard modules shipped as source. The graphics layer, Max2D, was reshaped around OpenGL so it could work identically across the three platforms, with a Direct3D driver added from v1.10 and made the Windows default. And strings became Unicode internally, using 16-bit characters, giving BlitzMax markedly better non-ASCII handling than the earlier Blitz dialects — though the release notes show Unicode support being repeatedly revised well into the 1.3x series.

Design Philosophy

Keep the on-ramp, remove the ceiling. The core bet is that you should not have to choose between a language that gets you drawing in five minutes and a language you can build a 50,000-line game in. Graphics 800,600 still works with no imports, no build configuration and no initialisation ritual. But when the project grows, there are classes to put behind it, modules to split it into, and a garbage collector so that object lifetimes stop being your problem.

Compile to native code, everywhere. BlitzMax produces real executables for each target — not bytecode, not an interpreter, and (in the original implementation) not a wrapper around someone else’s runtime. The practical claim BlitzMax made was never that it matched hand-tuned C, and no published benchmark suite establishes where it actually landed; drawing calls run in the modules’ native routines, while arithmetic written in BlitzMax itself was generally reported by users to trail well-optimised C. The claim was that the language was fast enough that your game design, not your compiler, set the limits — and shipping commercial titles like the Eschalon trilogy on three platforms from one source tree is at least consistent with that.

Optional strictness. BlitzMax lets you choose your own discipline per file. Plain mode behaves like BASIC always did, Strict requires variables to be declared, and SuperStrict additionally requires every declaration to state its type. It is a small feature with an outsized effect: the same language serves a beginner typing x = 5 and a team that wants the compiler to catch a typo in a field name.

Ship the source. Every standard module came as readable BlitzMax and C source. This was unusual for a commercial product in 2004, and it is the single reason BlitzMax survived its vendor: when Blitz Research stopped, the community already knew the code.

Key Features

Types with real object orientation. The classic Blitz Type record grows into a class, with Extends, Method, Function, Abstract, Final and Super:

SuperStrict

Type TEntity Abstract
	Field x:Double, y:Double

	Method Update() Abstract

	Method Draw()
		DrawRect(x, y, 8, 8)
	End Method
End Type

Type TBullet Extends TEntity
	Field dy:Double = -8

	Method Update()
		y :+ dy
	End Method
End Type

Local b:TEntity = New TBullet
b.x = 320 ; b.y = 240
b.Update()

Note the modern touches: :Type suffixes instead of BASIC sigils, . for field access instead of Blitz3D’s backslash, and compound assignment (:+, :*).

A module system with Framework. Import pulls in a module; Framework says only pull in this module and what it depends on, which is how you keep a small program’s executable small:

SuperStrict
Framework BRL.GLMax2D
Import BRL.PNGLoader

Garbage collection. From v1.12 onward, object memory is collected automatically. The earlier Blitz model — an explicit FlushMem at the top of your main loop — was retired, which is one of the more visible discontinuities between old and new BlitzMax code you will find in forum archives.

Reflection. Added in v1.26 (2007), BRL.Reflection lets a running program enumerate types, fields and methods and invoke them by name. It is the machinery behind BlitzMax’s generic serialisation and scripting bridges, and a genuinely uncommon capability in this corner of the language world.

Threads and Lua. Threading arrived through BRL.Threads in v1.32, with threaded builds switching to the Boehm-Demers-Weiser collector — thread-safe, and by Blitz Research’s own note a little slower than the standard GC. Lua bindings had been contributed as community modules earlier and were folded in as Pub.Lua, with a higher-level BRL.MaxLua added in the same 1.32 release, letting games embed a scripting layer — the combination TVTower uses.

Max2D, and the deliberate absence of Max3D. The 2D API is complete and familiar: SetGraphicsDriver, LoadImage, DrawImage, SetBlend, SetRotation, Flip. There is no official 3D. Sibly worked on a Max3D project that never shipped as a finished product, and the gap was filled by the community’s MiniB3D and later OpenB3D. This is the most common reason a Blitz3D user gave for staying put.

MaxGUI and MaxIDE. MaxGUI is a cross-platform native-widget module — Win32 on Windows, Cocoa on macOS, FLTK on Linux — so BlitzMax could write ordinary desktop applications, not only games. MaxIDE, the bundled editor, is itself written in BlitzMax using MaxGUI, which was the point.

Extern for C interop. Declaring external C functions is a first-class part of the language, and it is how Pub.* wraps things like FreeType, OpenAL, zlib and ENet. The extensive third-party module ecosystem — SDL, SQLite, wxWidgets, Cairo, database drivers — is almost all built on Extern.

Evolution

MilestoneWhenWhat changed
v1.0010 December 2004Initial release, Mac OS X only
Windows and Linux compilersMay 2005The cross-platform promise delivered
v1.122005Automatic garbage collection by default; FlushMem removed
v1.18around 2006Native x86 code generation for Intel Macs
v1.26around 2007Reflection
v1.30 / v1.32around 2008MaxGUI as a separate module; threaded builds and a thread-safe GC; BRL.MaxLua
v1.5121 September 2015Final official release; source opened under zlib (a v1.52 update follows in the open repository)
BlitzMax NG2016 onwardCommunity fork; C back end, 64-bit, ARM, new targets

The official arc bends around Monkey, announced in 2011. Monkey X reused a great deal of BlitzMax’s syntax but generated source for other languages and platforms rather than compiling directly, chasing mobile and web targets that BlitzMax’s native-compilation model could not reach. Sibly’s attention went there, and BlitzMax updates thinned out into maintenance — Lion compatibility, Xcode compatibility, toolchain refreshes — until the release under the zlib licence in September 2015 drew a line under the commercial product.

What happened next is more interesting than most post-vendor stories. BlitzMax NG, driven principally by Bruce A. Henderson, re-engineered the compiler’s back end so that bcc emits C and lets GCC or Clang do code generation. That one change unstuck everything the original architecture had pinned down: 64-bit builds, ARM and AArch64, Apple Silicon, Raspberry Pi, and further targets including Android and Emscripten in varying states of completeness. It also added language features the official compiler never had. NG is not bit-compatible with legacy BlitzMax — code sometimes needs adjusting, particularly around string and pointer types — but it is where the language actually lives now, and it was still publishing weekly builds in 2026.

Mark Sibly died in early December 2024. The tributes came from Amiga veterans, from indie developers whose first shipped game was a Blitz project, and from BASIC enthusiasts who regarded the Blitz line as the last serious commercial BASIC compiler. Three languages in eleven years — BlitzBasic, BlitzMax, Monkey — each built to solve the previous one’s structural problem, is an unusually honest engineering record for a one-person company.

Current Relevance

BlitzMax is dormant as a commercial product and quietly alive as an open-source one. Nobody is starting a studio on it in 2026, and the honest recommendation for a new cross-platform 2D game is Godot, LÖVE, raylib or MonoGame. But the specific things BlitzMax still offers are real:

  • The toolchain is free, open and maintained. Legacy BlitzMax is on GitHub under the zlib licence; BlitzMax NG ships builds for Windows, Linux x64, macOS x64 and arm64, and both 32- and 64-bit Raspberry Pi.
  • It runs on Apple Silicon and ARM SBCs. A language whose original compiler emitted 32-bit x86 assembly now targets AArch64, because the community rebuilt the back end rather than let the platform list decay.
  • Large open-source codebases exist to learn from. TVTower in particular is a substantial, actively developed BlitzMax project you can read end to end.
  • The module ecosystem is unusually broad for a language this size — SDL, raylib bindings, SQLite, networking, physics — much of it maintained inside the bmx-ng organisation.
  • Legacy code still compiles. Studios and hobbyists sitting on decade-old BlitzMax projects can keep building them, which is not something most abandoned commercial languages can say.

The realistic profile of a BlitzMax user today is someone maintaining an existing project, someone who wants a compiled, statically typed, batteries-included language for 2D games without adopting an engine, or someone in the retro-development scene who simply likes it.

Why It Matters

BlitzMax is the clearest case in the BASIC family of a language growing up without losing its manners. Almost every attempt to make BASIC serious has done it by making BASIC unrecognisable, or by bolting an IDE and a framework onto it and hoping. BlitzMax added classes, modules, garbage collection, reflection, threads and Unicode, and you can still open a graphics window and draw a sprite in three lines. That combination — trivially approachable at the surface, structurally sound underneath — is rarer than it sounds, and it is what a lot of modern “beginner-friendly but real” language design is still reaching for.

It also made an argument about cross-platform development that landed early. In 2004, shipping a small commercial game simultaneously on Windows, Mac and Linux meant either a lot of C++ and a lot of porting or not bothering. BlitzMax’s answer was one source tree and three native compilers, and the Eschalon trilogy is proof it worked for a real studio with real deadlines. The mainstream solution that eventually won — a big cross-platform engine — is a different shape entirely, but BlitzMax got to the destination first with a fraction of the machinery.

And it is a case study in why open-sourcing matters more than it seems at the time. Blitz Research released BlitzMax under the zlib licence in 2015, roughly when the commercial product stopped mattering. Eleven years later, that decision is the only reason the language runs on Apple Silicon, on 64-bit Linux, and on Raspberry Pi hardware that did not exist when Sibly wrote the compiler. The vendor stopped; the language did not. Most hobbyist languages of the 2000s took their compilers with them into the dark, and BlitzMax’s continued existence is a direct consequence of one licence choice made on the way out.

Timeline

2000
Mark Sibly founds Blitz Research Ltd in Auckland, New Zealand, and ships BlitzBasic for Windows — the ancestor BlitzMax would eventually replace
2004
BlitzMax v1.00 is released on 10 December for Mac OS X — the first Blitz dialect to target a Unix-like platform, and a new language rather than a new version of the classic Blitz BASIC dialect
2005
Compilers for Microsoft Windows and Linux follow in May, making BlitzMax the first genuinely cross-platform Blitz product; v1.10 on 9 June adds a Direct3D 7 Max2D driver and makes it the new default on Windows, with the OpenGL driver still selectable via SetGraphicsDriver
2005
Version 1.12 switches on automatic garbage collection by default, retiring the manual FlushMem model inherited from the earlier Blitz runtime
2006
Version 1.18 generates native x86 code on Intel-based Macs, following Apple's transition away from PowerPC; the bundled tools themselves still ran as PowerPC apps under Rosetta
2007
Version 1.26 adds a reflection module to the compiler and runtime, letting programs inspect types, fields and methods at run time — unusual for a BASIC-family language
2007
Basilisk Games releases Eschalon: Book I on 19 November for Windows, with Mac OS X and Linux builds following shortly after — a commercial isometric RPG built in BlitzMax and shipped on all three of its target platforms
2008
Version 1.30 moves MaxGUI out into a separately imported module; v1.32 adds threaded builds via BRL.Threads, using the Boehm-Demers-Weiser collector in place of the standard GC when threading is enabled
2011
Sibly announces Monkey (later Monkey X), a successor language that reuses much of BlitzMax's syntax but transpiles to other languages and platforms instead of compiling directly; official BlitzMax development slows from this point
2015
BlitzMax is released as open source under the zlib licence on 21 September, alongside the final official release, v1.51; BlitzPlus (April 2014) and Blitz3D (August 2014) had already been opened the year before
2016
Around this point BlitzMax NG, a community fork led by Bruce A. Henderson ("Brucey"), begins rebuilding the compiler to emit C rather than assembly, opening the door to 64-bit and non-x86 targets
2024
Mark Sibly dies in early December after a period of ill health, prompting tributes across the Amiga, indie game, and BASIC communities
2026
BlitzMax NG is still publishing its weekly builds — as of July 2026 covering Windows x86 and x64, Linux x64, macOS x64 and arm64, and 32- and 64-bit Raspberry Pi — more than twenty years after the original Mac OS X release

Notable Uses & Legacy

Eschalon: Book I, II and III (Basilisk Games)

Thomas Riegsecker's isometric, turn-based RPG trilogy is the most-cited commercial BlitzMax project; Book I's engine is documented as BlitzMax, and the later books were built on the same lineage. Book I shipped on 19 November 2007 for Windows with Mac OS X and Linux builds following, Book II on 12 May 2010 for Windows with Mac and Linux builds two weeks later, and Book III in February 2014. Near-simultaneous releases on all three desktop platforms from a very small studio is exactly the argument BlitzMax was making: one source tree, three native executables, no engine licence.

Grey Alien Games and the BlitzMax Game Framework

Jake Birkett built a commercial framework of BlitzMax source files — resolution handling, state management, save systems, particle effects — and licensed it to other developers, while using it for his own casual titles. Birkett, who has said he picked BlitzMax as the best language he had found for making games quickly, also co-developed Fairway Solitaire with John Cutter as a contractor for Big Fish Games during the same period; the BlitzMax connection is best read as applying to that desktop-era work rather than to later mobile versions of the franchise. It is the clearest evidence that BlitzMax was doing paid production work in the mid-2000s casual games market.

GridWars

Marco Incitti's freeware Geometry Wars tribute, first released on 21 December 2005, was written in BlitzMax, with builds distributed for Windows and Mac OS X. It became widely enough played that Bizarre Creations contacted Incitti citing the effect on Geometry Wars sales and asked him to take it down; the download link was pulled in August 2006 — a strange sort of compliment, and a demonstration that a hobbyist BASIC could produce a twin-stick shooter fast and slick enough to be mistaken for the commercial original.

TVTower

A long-running open-source tribute to the 1994 management game Mad TV, written by Ronny Otto (GWRon) in BlitzMax, Lua and a little C, with builds for Windows, macOS and Linux. It is one of the largest publicly readable BlitzMax codebases in existence and is actively developed against BlitzMax NG — useful both as a game and as a worked example of structuring a big project in the language.

MiniB3D and OpenB3D

BlitzMax shipped without any equivalent of Blitz3D's built-in 3D engine, and the community filled the hole itself. MiniB3D is an open-source OpenGL engine that reimplements much of the Blitz3D command set on top of BlitzMax; OpenB3D continued that work with a C++ core and a BlitzMax wrapper. For years these were how BlitzMax users did 3D at all.

BlitzMax NG

The community fork maintained by Bruce A. Henderson is itself the most consequential thing built with and for the language. By rewriting the back end to emit C and hand off to GCC/Clang, it moved BlitzMax off its 32-bit x86 assembly foundation onto 64-bit x86, ARM and AArch64, including Apple Silicon Macs and Raspberry Pi boards, with weekly builds still appearing in 2026.

Language Influence

Influenced By

Influenced

Monkey X

Running Today

Run examples using the official Docker image:

docker pull
Last updated: