Fornax

· [active] · rust · llm · desktop
github.com/heath0xFF/fornax →

Fornax was born out of necessity for literally no one but myself, and really, not even necessity.

why?

Local models continue to get better and better and can run on more and more hardware. I run ollama on nearly all my machines.

There are a ton of really good open source chat clients for local models. Shit, even Ollama ships with it’s on UI for chatting. But, I wanted my own. For no other reason than I wanted on. So, I built Fornax with Claude.

It serves no other purpose than being a performance focused chat client for myself.

design decisions

I did some initial research and found egui which is a pure Rust gui framework with zero system dependencies beyond a GPU driver. It also runs well on both Arch & macOS (my two OS’s) without any additional compilation.

Persistence is done witih sqlite via rusqlite. Again, no system dependencies.

Kept it as simple as possible with a single chat pane (i.e. no multi-panel shit) for speed. Went with only Apple silicon for macOS because that’s what I use.

on 2026-04-09 I added in support for openrouter. Most of my agentic coding experience has been nearly entirely with Claude Code and Claude Opus. So, I gave myself the ability to use openrouter to be able to use different models for different things, especially as they start to have their own strengths and weaknesses.


The Big rewrite

I’ve been watching 0xSero on twitter build and use vLLM Studio, and I have been really enjoying the UI. So, I wanted to bring that to Fornax (hChat at the time). Coincidentally, I also was on my last 24 hours of my Claude Max plan (I decided to downgrade to the Pro plan), and figured what a better time than to just let Claude Code rip through the project and rewrite it?

First, to get a modern interface, I rewrote the frontend with Tauri. The backend is still Rust. One of the first features I implemented was a built in artifact viewer, similar to what the Claude Desktop app does. Models love to reply with raw HTML, SVG, Markdown, etc. So, the built in artifact renderer allows you to view the rendered artifcat without leaving the app.

Another major addition is the fornax-agent that runs on the DGX Spark. This agent’s purpose is to read nvidia-smi (power/temp/util) and /proc/meminfo (unified VRAM) and report back with the stats it reads. This allows for resource utilization to be reported in the app.

The next big thing to add was benchmarking. Now, within Fornax, you can send multiple rounds of concurrent requests with acustom prompt to your selected backend

Definitely give it a look and make a PR! :D