SGI demos from long ago, running in your browser today.
It's a UNIX system. I know this!
This is the original SGI demo source code, compiled for the web using Emscripten and SDL2. Rendering is done via an IRIS GL-to-GLES2/3 rasterizer or a reference software rasterizer forked from the Alice 4 project. Event handling is done by SDL2, with events translated into GL's event system.
Each demo is a separate web page, with its own Javascript + WASM compiled by Emscripten from the original C/C++ source. Native Linux, Mac, and Windows builds are also available. Minimal modifications have been made to the original source, only what is necessary to build them 30+ years later for modern hardware and the browser.
See the copyright doc for thorough copyright considerations, the architecture doc for implementation details, and the latest smoke test for build status.
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Arena | Bounce | Buttonfly | Cedit | Electropaint 1988 | Electropaint 1989 |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Electropaint 1994 | Flight | Flight 3.4 | Gview: the Barcelona Pavilion | Ideas in Motion | Insect |
![]() | ![]() | ![]() | ![]() | ![]() |
| Jello | Logo | Newave | Performer Town | Twilight |
- More IRIS GL demos
- Aux/Tk OpenGL demos
- GLUT OpenGL demos
- Inventor Slotcars, Maze
- Performer Matterhorn, Yosemite
Every platform needs a C compiler, SDL2, Emscripten, bison (buttonfly's menu parser), and Python 3. make then builds every demo twice: natively into demos/<name>/bin/, and for the web into demos/<name>/web/. make native or make browser builds just one of the two, make libs just the libraries (a quick compile check while editing one), and make list prints the demos. To add a demo, see docs/ADD_A_DEMO.md.
- Install Homebrew if you don't have it, then get SDL2 and Emscripten:
brew install SDL2
brew install emscripten- Build:
git clone https://github.com/sgi-demos/sgi-demos.git
cd sgi-demos
make- Install the compiler, SDL2, bison, and Python (Debian and Ubuntu package names):
sudo apt install build-essential libsdl2-dev bison python3-
Install Emscripten with emsdk, following its directions, and add
source /path/to/emsdk/emsdk_env.shto your~/.bashrc. -
Build:
git clone https://github.com/sgi-demos/sgi-demos.git
cd sgi-demos
make-
Install Winget if you don't have it.
-
Install MSYS2 from cmd.exe, in order to get the clang compiler:
winget install MSYS2.MSYS2
setx PATH "%PATH%;C:\msys64\clang64\bin"- Install clang toolchain, SDL2, bison, and Python in MSYS2 CLANG64 shell:
pacman -Syu
pacman -S base-devel mingw-w64-clang-x86_64-toolchain
pacman -S mingw-w64-clang-x86_64-SDL2
pacman -S bison mingw-w64-clang-x86_64-python-
Clone emscripten from Github. Cloning seems to work best with MSYS2 rather than using pacman. Follow the default install directions, not the Windows directions!
-
Add this line to the
~/.bashrcfile in MSYS2 CLANG64 shell:
source /path/to/emsdk/emsdk_env.sh- Build:
git clone https://github.com/sgi-demos/sgi-demos.git
cd sgi-demos
makeA native build runs from its demo's directory, where it finds its data files:
cd demos/jello && ./bin/jelloThe web build runs from any local web server at the repository root; make run-browser -C demos/jello starts one with emrun and opens the demo. Otherwise:
python3 -m http.server 8000then open http://localhost:8000/demos/jello/web/.
Runtime switches, such as IRISGL_RAST=ref (?rast=ref on the web) for the CPU reference rasterizer, are listed in the architecture doc. make smoke runs the headless-browser smoke tests of every web build (see tests/smoke).
- Fix logged issues
- Link each demo's man page from its placard
- Add 'inspect demo' mode to pause, orbit, zoom, pan, fly through demo scene (as a hidden override to the demo's own controls)
- Provide virtual mouse and keyboard for touch devices:
- Only display virtual keys and mouse functions used by the demo; use demo's qdevice() calls to determine this
- Displayed as transparent virtual mouse and key pictures overlaid on demo
- On always for touch devices
- On/off for mouse/keyboard devices, as hints
The sgi-demos code (the IRIS GL implementation, rasterizers, SDL layers, shims, build files, tests, and docs) is Apache License 2.0; see LICENSE and NOTICE. The original SGI demos, headers, and data, and Electropaint, are not covered by that license and retain their original authors' terms; several carry SGI's or the author's permissive notice, the rest are used under fair use. Every original notice is preserved. The full provenance and fair-use record for every demo and library is in docs/COPYRIGHT.md. This project is not affiliated with or endorsed by Hewlett Packard Enterprise, Silicon Graphics, or Tristram Visual.
- Everyone who worked at SGI, for the eye candy and the baller computers.
- The Alice 4 folks, for the inspiration and the GL implementation.
- drvink for the custom MIPS decompiler and ElectroPortis, the Electropaint decompilation, and Brendan Shanks for its clean cross-platform fork
- Claude Fable 5 for gobbling up the to do list at incredible speed.
- Emscripten and SDL teams, for making a web port possible.
- Internet Archive, Bitsavers, WinWorld, IRIXNet, fsck.technology, jrra.zone, and others, for saving the history.

















