Wit

Writing text

Type sentences. Separate paragraphs with a blank line. That is a complete Wit document — everything on this page is what to add when plain prose isn't enough.

Paragraphs

A blank line starts a new paragraph. A single newline inside a block is a soft wrap: HTML collapses it to a space, so the sentence flows on.

The reactor logged a coolant spike at 03:12.

Two operators were on shift; neither
had left the control room.

That renders two paragraphs — the first line, then the two soft-wrapped lines as a single flowing paragraph. One blank line or several makes no difference, and extra blank lines never produce empty paragraphs. A "blank" line counts even if it holds only spaces or tabs, so text pasted from an editor that leaves trailing whitespace still splits correctly.

Leading indentation, line length, and line endings (CRLF, CR, LF) carry no meaning — they are normalised before paragraphs are split. Wit has no Markdown-style block syntax, so a line that opens with -, *, >, or 1. is literal prose, not a list or quote. Punctuation is never reserved: em-dashes, apostrophes, ampersands, and percent signs render as themselves, and quotes stay straight (no smart-quote substitution).

Bold and italic

Two inline marks: asterisks for bold, underscoresfor italic. Each wraps a run of text and can span several words.

The lens held _the last of the evening light_, and the flame *never wavered*.

A mark only fires when the character flanks the text from the outside. Pressed against a digit or a letter it stays literal, which is why arithmetic and identifiers are safe with emphasis left on:

The product 5*6*7 and the path file_name_here both stay plain text.

Nest them with bold on the outside: *_both_* gives bold-and-italic. The reverse, _*x*_, leaves the inner asterisks literal — the parser resolves the outer mark first, and italic-outside consumes its span before the inner bold is seen.

Inline mark nodes

For anything past bold and italic, call the mark by name. Each is an inline node mapping to the same-named HTML element:

@codecode@    inline code: commands, identifiers, paths
@uu@       underline (reads as a link online — use sparingly)
@ss@       strike-through: retractions, "was X, now Y"
@subsub@     subscript: chemical formulae, footnote marks
@supsup@     superscript: exponents, ordinals, note refs
@markmark@    highlight: draw the eye to a phrase
@smallsmall@   small print, fine print
@br         a hard line break inside one paragraph

In a single run:

source
Call @code shutdown() code@ to scram; water is H@sub 2 sub@O, the area is
4@sup 2 sup@, an @s old figure s@ became a @mark new one mark@, with
@small caveats small@ in the footnotes.
result

Call shutdown() to scram; water is

sub 2

O, the area is 42, an old figure became a new one, with caveats in the footnotes.

@br is self-closing and needs no body. A lone newline is a soft break; use @br for a real one — an address block, a line of verse, a signature:

source
Ada Lovelace @br
12 Analytical Way @br
London
result

Ada Lovelace
12 Analytical Way
London

Markdown output has no reliable inline break, so @br degrades to a space there. Keep to HTML or PDF when hard breaks matter.

Comments

A comment is a note that never reaches the reader — stripped before any output. A tilde followed by a space starts a line comment to end-of-line:

~ verify the coolant spike time against the incident log

The reactor logged a spike at 03:12.

Two tildes open a block comment; the fence ~~/ closes it. It can vanish mid-sentence or span many lines:

The bell ~~ TODO: confirm the year ~~/ rang on the hour.

~~
Draft note: this passage may move to chapter two.
Ask the editor before cutting it.
~~/

Only the exact closing fence ends a block, so a home path like ~/Documents or a lone doubled tilde inside the block is safe content.

Escaping edge characters

Six characters lead a structural reader: @, #, |, *, _, and ~. A backslash keeps any of them literal — the backslash is dropped, the character stays.

source
Email me at ada\@example.org today.
Write \#tag for a literal hash, C\# for the key.
The range is 4\|8 amps, a literal \*asterisk\*, and \~ leads a line.
result

Email me at ada@example.org today. Write #tag for a literal hash, C# for the key. The range is 4|8 amps, a literal *asterisk*, and ~ leads a line.

The escape is only needed when the character is glued to a letter (or leads a line, for # and ~). A character before a space or a digit is already safe: "Meet me @ home", "in @2024", "it took ~6 hours", and "x ~ y" all render as typed, no backslash required. Most prose needs no escapes at all.

See also

  • Structure — headings, lists, blocks, and how nodes nest.
  • Components — the node form behind every mark, and defining your own.
  • Mental model — the one node shape and the five layers above prose.