nuckty
RU
All sections →

nuckty

Every static site generator is terrible. This one is simply a little less terrible.

nuckty is a static site generator for documentation and content projects with a programmable build pipeline. A build produces pages, assets, pre-compressed copies of selected files, and hosting configuration. The directory can be published to a compatible server.

Why nuckty

The sitemap as an explicit tree

The site structure is described in a single file, sitemap.yml: URLs, headings, page metadata, and navigation. Adding a Markdown file alone does not publish a page through the core build; review the registered content before release. Published URLs are separate from source paths. Templates use these data during the build.

A programmable build pipeline

The build pipeline has fixed phases, named stages, and before/after hooks. Extensions add stages and hooks; replacing a core stage by registering its name again is not supported.

Extensions are the only mechanism

The core ships with no blocks and no pages: even the HTML page wrapper comes from an extension. Extensions wire everything through a single entry point — blocks, commands, build stages, markdown constructs. You install exactly what you need.

One engine for content and layout

Markdown becomes a BEMJSON tree. The same nu engine processes content and document blocks. The current HTML stage serializes content first, then passes it to the document handler in a raw node.

Compression at build time

At build time, the engine creates Brotli Q11 and Gzip 9 copies of selected nonempty files in brotli/ and gzip/. The server selects a prepared copy using Accept-Encoding; the build generates the corresponding nginx and Apache configuration.

Image format selection at a single URL

For a raster image, the build copies the original and available AVIF/WebP variants, prepared separately. The server selects an available format at one logical URL using Accept. The build does not require both variants.

Minimal HTML

The engine minimizes HTML: it omits supported optional end tags and unnecessary quotes without adding formatting indentation. Newlines in text and raw are preserved. Document validity depends on templates and raw HTML; validate the actual artifact.

FTP deployment via a manifest

The nuckty deploy-ftp command compares a local manifest (file sizes and hashes) against the state of the server and uploads only the files that changed. That is enough for the simplest shared hosting with FTP: no SSH, no rsync, no git on the server.

Multiple sites from one repository

One repository can build several sites at once — for example, language versions on separate domains. The engine constructs matching routes on related hosts, without checking page existence, and passes hreflang data to the block. How exactly to render <link rel=alternate> is the author's call.

Link resolution

Authors link to .md files; the engine maps them to sitemap URLs. A missing relative .md target or an ambiguous target in a nonempty sitemap fails the build. Unknown heading fragments may be preserved, so also check links in the finished site.

Russian typography

For Russian-language sites there is a typography extension — it keeps a dash from breaking the line: it inserts a non-breaking space before an em dash and a regular one after. All without manual markup; an English-language site does not need the extension.

Where to go next

  • Getting started — installation and the first site build.
  • How to use it — the data model, templates, sitemap, build pipeline.
  • The output — build results: HTML, assets, compression, hosting.
  • Extensions — the ecosystem extension catalog.
  • Why this way — architectural decisions and their rationale.