Welcome · for everyone

What SnapFire FSR is

FSR is a full-stack runtime for TypeScript applications that runs on Rust, with no JavaScript engine in the serving path.

You write routes, loaders, pages and components in TypeScript. A build step lowers them: the parts that run on the server become data, an intermediate representation the Rust host interprets directly, and the parts that run in the browser become a normal ES module bundle. At runtime the host answers a request by evaluating the lowered loader, rendering the page from the plan and writing HTML. No Node process, no V8, no JavaScript heap on the server.

The two artifacts

Every build produces exactly two things, and understanding the split explains most of FSR's behaviour.

The plan is a JSON file describing your application: every route pattern, every loader body as lowered IR, every component tree, every action signature. The host reads it at boot and builds its routing tables from it. It is data, so it can be checked, diffed, hashed and swapped in place while the process runs.

The bundle is the browser's half: the islands, the client runtime, the vendored dependencies. It is loaded by the browser and nothing else. The server never executes it.

What that buys

Deployment is a binary and a directory. No runtime to install, no version of Node to match, no node_modules on the server.

Rendering is cheap. A page whose loader reads nothing request-specific can be prerendered to a file at build time and answered from disk. Everything else is a Rust function call over interpreted IR, not a JavaScript VM start.

The contract is checked in both directions. The loader's return type is inferred at build time and written back as the page's props type. A page cannot read a field the loader does not return, and the build fails rather than the page.

Reloads keep sessions. The host rebuilds its tables from a new plan and swaps them; requests in flight finish on the old ones and nobody is signed out.

What it refuses to do

FSR will not lower a loader that reaches for something it cannot reason about. There is a name for what is left over when a body cannot be fully lowered, residue, and the build reports it as a diagnostic rather than silently falling back to a JavaScript engine. This is a feature and it is the first thing that will frustrate you. A loader is a description of how to get data, not an arbitrary program.

Where it sits

FSR is one of four pieces in the SnapFire stack: the compiler (snapfirec, which bundles TypeScript without Node), typecheck, web (the browser-side module system) and FSR itself. You can use the compiler without FSR. You cannot usefully use FSR without the compiler, and the build wires it up for you.

The lab

Open the IR inspector on the main site. It shows real TypeScript beside the exact IR the lowerer produced from it, including one sample that is deliberately refused. That page is the shortest honest answer to "what does lowering actually mean".

Built with SnapFire FSR. Pure Rust runtime, zero Node.js on the server.