If you've seen Jurassic Park, you've seen fsn: the 3D file browser Lex uses to lock the raptors out of the control room. It was a real program, written at SGI for IRIX workstations, and its source code never left the building. What the rest of us got, a few years later, was fsv, a GTK+/OpenGL clone by Daniel Richard G. that lays out your directories as geometry you can fly around in.
I wanted it on my Mac. The problem: fsv is a GTK3 + OpenGL application, Apple deprecated OpenGL back in 2019, and I did not fancy an XQuartz-flavoured build of a 3D flythrough. So it got a real port instead. The code lives at github.com/w3cdotorg/fsv (the metal-port branch, which is the default one), with prebuilt binaries on the Releases page.
What changed under the hood
The renderer is now SDL3’s GPU API (Metal on macOS, Vulkan-capable elsewhere), with the shaders ported to modern GLSL and compiled offline to MSL and SPIR-V. The GTK interface was rebuilt in Dear ImGui (menu bar, docked directory tree and file list, colour setup, properties dialogs), and the core of fsv (filesystem scanning, geometry layout, camera math) was extracted into a headless library with its own little CLI and unit tests. Picking is done the modern way, with a colour-ID offscreen readback, so hovering and right-clicking resolve the actual node under the cursor. And while the SDL/Metal frontend is the point of all this, the legacy GTK/OpenGL one still builds and runs on Linux; CI keeps it honest on every push.
Along the way, a surprise: nvstore.c, the settings-persistence backend, turned out to be a complete stub upstream ("ALL THIS HAS YET TO BE IMPLEMENTED!"), on both frontends. fsv has been silently discarding every colour-setup change since the nineties. It now writes ~/.fsvrc for real.
The FSN mode
The original SGI program was never released, but it left traces: screenshots, a 1992 README, and two SGI patents (US5555354 for the flight navigation, US5861885 for the selection spotlight). From those, the port grew a fourth visualisation mode (--fsn, or Vis → FSN) recreating the film’s look: gradient sky over the green ground plane, directory pedestals whose height tracks subtree size, file boxes coloured by age with the classic legend bar at the bottom, and white wires connecting parent to child. Middle-drag flies the camera around, patent-style. Double-clicking a pedestal warps down onto it; double-clicking a file opens it with the default app, which is exactly how Lex locked that door.
Building it
Everything comes from Homebrew:
$ brew install glib cglm meson ninja pkgconf sdl3
$ git clone https://github.com/w3cdotorg/fsv.git && cd fsv
$ meson setup builddir
$ ninja -C builddir
$ ./builddir/src/sdl/fsv ~/some/directory
That is the whole build. packaging/macos/make-bundle.sh wraps the binary into a double-clickable .app, and there is an Xcode project (packaging/xcode) for those who would rather hit Cmd-B. The prebuilt binaries from the Releases page still expect Homebrew’s glib and sdl3 at runtime (the dylibs are not bundled yet; it is in the TODO), so brew install glib sdl3 first, or the loader will complain.
On Linux, the classic GTK frontend builds with the usual libgtk-3-dev / Mesa dev packages (meson setup builddir -Dfrontend=gtk). The new SDL frontend works there too, provided you have SDL3 ≥ 3.2 (most distributions do not package it yet; Ubuntu gets it in 25.10).
How it was made
Full disclosure: the port was done in pair with Claude, Anthropic’s coding agent, task-by-task. Every step, decision, dead end and bug found along the way is written down in docs/PORTING.md, which ended up being a document I enjoy re-reading more than some of the code. The leftover rough edges (including the rewrite of the MapV treemap layout that the original author was already wishing for in his 1999 TODO) are collected in TODO.md.
That’s it! If you take it for a spin, or if you remember fsn from an actual Indigo, let me know in the comments (or on the GitHub issues).




