Home Documentation Templates Examples Showcase GitHub ↗
Theme

Design philosophy

Why Nift?

Because a web project already has an enormous ecosystem. Nift does not need to replace it. It only needs to make composition, tracking and rebuilding simpler.

Nift is small because the web ecosystem is already enormous.

Browsers understand HTML, CSS and JavaScript. npm and Bun manage packages. TypeScript compiles types. Vite and bundlers build frontend assets. Go, Node and Python run servers. Databases store data. Hosting platforms deploy files. Nift can be useful without pretending those things need a Nift-specific replacement.

The four jobs at the centre

01

Track

Give the outputs you care about stable tracked names and let Nift know which content/template relationship produces them.

02

Compose

Put shared structure in templates and partials. Put page-specific markup in content. Reuse the pieces without inventing a component runtime.

03

Resolve

Use project-aware paths and metadata instead of scattering fragile assumptions about directory depth throughout shared markup.

04

Rebuild

Record the dependency graph and rebuild the outputs affected by a change instead of treating every edit like a clean-room rebuild.

Adoption should not require surrender.

Some tools are most useful when the project becomes a project *of that framework*. Nift can be useful while remaining only one layer inside a repository.

your project
  ├─ HTML / CSS
  ├─ TypeScript / JavaScript
  ├─ React / Vue / Svelte (if useful)
  ├─ Vite / bundlers
  ├─ Go / Node / Python backend
  ├─ database / auth / APIs
  ├─ deployment tooling
  └─ Nift
       ├─ tracked outputs
       ├─ templates / partials
       ├─ project-aware paths
       └─ dependency-aware builds

Ordinary web code is a feature.

A Nift page can remain HTML. A stylesheet can remain CSS. Browser behaviour can remain JavaScript. Your backend can remain Go. That makes projects easier to inspect with standard tools and reduces how much Nift-specific knowledge has to survive across years of maintenance.

Powerful simplicity helps humans.

A small surface is easier to remember, document, debug and teach. The important abstractions remain visible: this page uses this template; this template inputs this partial; this link points to this tracked output.

Powerful simplicity helps AI coding assistants too.

An assistant can learn Nift's useful core from a short context file and then spend most of its context window reasoning about the actual website. It does not need to translate every CSS/HTML/backend decision into a large framework-specific API before it can contribute.

Fast should mean more than benchmark numbers.

Nift is written in C++ and supports multithreaded builds, but the workflow advantage is especially visible in incremental development. Change one page and rebuild what changed. Change a shared partial and rebuild the pages that depend on it. Avoid repeatedly waking every part of a large toolchain for unrelated edits.

Fast full builds

A native compiled build tool keeps overhead low when the project genuinely needs to rebuild everything.

Fast incremental builds

During normal development, the dependency graph lets the amount of work stay closer to the size of the change.

Small project footprint

Nift does not require a runtime dependency tree merely to turn templates/content into deployable HTML.

One native executable

The core tool is easy to reason about operationally: install Nift and point it at a project rather than bootstrapping a whole framework runtime.

What Nift deliberately does not try to own

Need TypeScript?      use TypeScript.
Need React?           use React.
Need Tailwind?        use Tailwind.
Need image tooling?   use image tooling.
Need a Go server?     use Go.
Need Postgres/Auth?   use Postgres / Supabase / your choice.
Need deployment?      deploy public/ where it belongs.

The result

Nift provides the glue without trying to become the universe.

That is not an excuse for missing features. It is the boundary: Nift should be excellent at the small set of project-aware build problems it owns, and easy to compose with specialist tools for everything else.