CraftSyntax.uk

The CraftSyntax Manifesto

Little languages for real craft.

Humans use domain-specific languages every day. “Skinny caramel latte” works because customer and barista share the context. A useful computer language can capture the same working knowledge.

CraftSyntax explores the living vocabulary of a craft: its words, distinctions, defaults and habits. A good domain language should sound as if it belongs to its users.

01 / Principle

Begin with the working language.

The first duty of a domain language is to listen. It should begin not with the implementer’s convenience, but with the language that writers, artists, engineers, designers, and other practitioners already use.

02 / Principle

Name real distinctions.

A language names things well when it preserves distinctions that matter in practice: page and panel, location and action, asset and threat, component and connection.

03 / Principle

Keep the source readable.

Source should remain close to the shape of thought. It should be possible to read a document with pleasure, and to understand its intent without deciphering machinery.

04 / Principle

Hide the machinery.

TeX, parsers, databases, and generators are tools, not the subject. The mechanisms underneath should support the language, not dominate it.

05 / Principle

Use defaults intelligently.

A small language becomes humane when it makes sensible assumptions, so that a little input can produce a useful result.

06 / Principle

Permit refinement without clutter.

A language should be brief in the common case and more exact only when the work requires it.

07 / Principle

Make structure meaningful.

Structure is valuable not because it is formal, but because meaning can be checked, compared, transformed, and reused.

08 / Principle

Let tools catch inconsistency.

A compiler should notice broken references, missing states, and impossible combinations early, before they become expensive mistakes.

09 / Principle

Allow draft and strict ways of working.

Early work should tolerate incompleteness. Finished work should insist on coherence.

10 / Principle

Generate more than one view.

One source should be able to yield many useful forms: prose, diagrams, tables, cards, webpages, PDFs, or reports.

11 / Principle

Respect the craft.

A domain language should make its craft more visible, not reduce it to bureaucracy. The purpose is to assist judgement, not replace it.

12 / Principle

Build small languages carefully.

A little language is a piece of intellectual carpentry: modest in scale, precise in joinery, and best judged by how naturally it fits the work.