Renderingla

Faber

Agent-ready

If you are an AI agent: start at /llms.txt, then read /agents/index.md and pick a skill from /.well-known/agent-skills/. Humans: use Install and Examples.

Faber is a package-oriented programming language with a Latin behavioural vocabulary, a small regular grammar, and a type-first static type system. Source is compiled through the Radix compiler to reviewable Rust and native binaries. Its defining architectural property is that meaning lives in a semantic core — the HIR (high-level intermediate representation) — rather than in any particular rendering.

The name derives from the Latin word for maker or craftsman. The compiler is named Radix, from the Latin root. The language is developed by Ian Zepp and released under the MIT license.

Download Faber 1.1.1

Current release: Faber 1.1.1 (tag faber-v1.1.1). Prebuilt CLI archives for macOS and Linux; extract the faber-v1.1.1-/faber binary and put it on your PATH.

PlatformArchiveChecksum
macOS arm64 (Apple Silicon)faber-v1.1.1-aarch64-apple-darwin.tar.gzsha256
Linux x64 (glibc)faber-v1.1.1-x86_64-unknown-linux-gnu.tar.gzsha256

Quick install (macOS arm64 example):

curl -fsSL -o faber.tgz \
  https://github.com/faberlang/releases/releases/download/faber-v1.1.1/faber-v1.1.1-aarch64-apple-darwin.tar.gz
curl -fsSL -o faber.tgz.sha256 \
  https://github.com/faberlang/releases/releases/download/faber-v1.1.1/faber-v1.1.1-aarch64-apple-darwin.tar.gz.sha256
expected=$(awk '{print $1}' faber.tgz.sha256)
actual=$(shasum -a 256 faber.tgz | awk '{print $1}')
test "$actual" = "$expected"
tar -xzf faber.tgz
sudo mv faber-v1.1.1-aarch64-apple-darwin/faber /usr/local/bin/
faber --version

All release notes and assets: github.com/faberlang/releases · faber-v1.1.1. Step-by-step: Install guide.

ParadigmPackage-oriented; semantic staging
TypingStatic, type-first; nullable via T ∪ nihil
Glyphs← → ∴ ≡ ∪ ⇥
Designed byIan Zepp
First appeared2024
CompilerRadix (Rust)
LanesApplication (HIR) · Systems (MIR)
Primary targetRust → native binary
Reader locales7 shipped (la, ar, hi, vi, th-TH, zh-Hans, zh-Hant)
Standard libraryNorma (norma:*)
LicenseMIT

Start here

PathWhoWhat
InstallHumanDownload, PATH, first faber check
Quick tourHumanLanguage shape in five minutes
ExamplesHuman + agentReal packages: CLI apps, mailspace, GPU, corpus
/llms.txtAgentMachine index — start here if you are a model
Agent guideAgentHow to learn Faber and ship a package
Agent skillsAgentFocused skill guides (install, language, examples, …)

Overview

Faber is designed around a core insight: the intermediate representation is the truth, and no target or human-language surface is privileged. A Faber program written in Latin keywords can be rendered into Thai, Arabic, or Chinese keywords through the same mechanism that renders it into Rust, Go, or WebAssembly — because the HIR is the authority and every output is a rendering of it.

The language makes three deliberate signal choices that work together:

  • Type-first declarations — shape reads toward binding: textus nomen,

not nomen: textus.

  • Latin behavioural words — declarations, statements, and lifecycle:

functio, genus, fixum, redde, si.

  • Structural glyphs — value flow and type joints: (bind),

(return type), (compact branch), (equality), (union).

The result is source with stable grammatical shape that can be reviewed, transformed, and lowered without losing the reader's sense of intent.

Documentation

SectionDescription
HistoryDevelopment timeline, influences, and release history
FeaturesReader locale, compilation lanes, Latin vocabulary, glyph system, design principles
SyntaxComplete reference: types, functions, control flow, errors, generics, collections
ToolingRadix compiler pipeline, Faber CLI, codegen targets, scripting
EcosystemNorma, Cista, Triga, coreutils, AI Workbench, corpus
CorpusKeyword and construct pages generated from the public corpus
ReferencesEBNF grammar, design documents, repositories

Quick example

A simple function demonstrating key Faber patterns — type-first parameters, glyph return type, nullable union, Latin control words:

functio divide(numerus a, numerus b) → numerus ∪ nihil {
    si b ≡ 0 ∴ redde nihil
    redde a / b
}

Live rendering

The divide function above is rendered in the Latin pack by default. The compiler can render the same program in seven reader locales — Thai, Chinese, Arabic, Hindi, Vietnamese — each remapping keywords and types to that language while glyphs and identifiers remain unchanged. This is not a translation layer applied to the page; it is the same mechanism the compiler uses to produce localized source.

See the reader locale documentation for the full discussion.

Repositories

RepoRole
faberlang/faberPublic user CLI
faberlang/releasesTagged CLI release assets
faberlang/faber-runtimeRuntime types for generated Rust
faberlang/normaStandard library source
faberlang/cistaPackage-store CLI/lib
faberlang/trigaGraphics / geometry library
faberlang/examplesCorpus, tracks, application packages
faberlang/faberlang.devThis documentation site