sigline sigil-per-line structured text — syntax guide

sigline is a plain-text format for notes. You write in your text editor as normal. When a line needs to mean something specific — a warning, a code block, a list item — you start it with a single special character. That character is called the sigil. Everything else is just prose.

sigline files can be converted to semantic HTML or other structured formats.
File extension: .sl  ·  Encoding: UTF-8  ·  Line endings: LF

key: val
Metadata
front matter

Put a short header at the very top of your file to describe the document — its title, the date you wrote it, and any tags you want for searching later. Write one label per line, then leave a blank line and start your document.

title: Backup Rotation Policy
date: 2026-06-22
tags: ops, resilience

# First section starts here...
Optional. If present, must be first. Ends at the first blank line.
# ## ###
Section
<h1> <h2> <h3>

Start a section with one, two, or three # characters followed by a space and your title. One # is a main section. Two is a subsection inside it. Three is a sub-subsection. Three levels is the maximum.

# Installing the Tool
## On Linux
### Using the package manager
Four or more # is a parse error — conversion stops.
>
Lead
<p class="lead">

Use this to open a section with one or two sentences that tell the reader what it covers — like a short abstract. Every line in the lead starts with >. A blank line ends it.

# Backup Strategy

> This section covers how backups are rotated,
> how long they are kept, and what to do when
> storage runs out.

Full explanation continues here...
At most once per section. A second lead in the same section becomes a plain paragraph with a warning.
(text)
Paragraph
<p>

Just write. No special character needed. A blank line starts a new paragraph. This is the default — most of your note will look like this.

This is the first paragraph. Write as much
as you like across as many lines as you want.

A blank line starts the next paragraph.
!
Warning
<aside class="warning">

Use this for anything the reader must not skip — data loss, security problems, irreversible actions. Every line in the block starts with !. A blank line ends the block.

! Do not run this as root.
! It will overwrite /etc without asking.
! There is no undo.
~
Note
<aside class="note">

Use this for helpful extras — tips, reminders, things worth knowing but not dangerous. Every line starts with ~. Use ! when something can go wrong; use ~ for everything softer than that.

~ You can skip this step if the tool is already installed.
~ Run `which myprogram` to check.
|
Blockquote
<blockquote>

Use this when you are quoting someone else's exact words — a specification, a manual, a book. It makes clear that the words are not your own. Every line of the quote starts with |.

According to POSIX:
| If the pathname begins with two successive slashes,
| the behaviour is implementation-defined.
-  1.
List
<ul> / <ol>

Use a hyphen and a space for a bulleted list. Use a number, a period, and a space for a numbered list. A blank line ends the list.

Things to check before deploying:
- All tests are passing
- Configuration file is present
- Disk space is sufficient

Steps to restore from backup:
1. Stop the service
2. Copy the backup file
3. Restart the service
term ::
Definition
<dl> <dt> <dd>

Use this to explain what words mean — for glossaries, option descriptions, or any term that needs a definition. Put the term, then ::, then the meaning. Everything goes on one line. Definitions can be stacked without a blank line between them.

errno :: Error code set by the system when an operation fails.
stdin :: Standard input stream, usually the keyboard.
inode :: Data structure that stores information about a file.
One physical line per definition. Long lines can soft-wrap in the editor — the parser reads to end-of-line.
```lang
Code
<pre><code class="lang-…">

Use this to show code or commands exactly as they should be typed or read. Write three backticks and the language name to open, and three backticks alone on their own line to close. Everything inside is kept exactly as you wrote it — indentation, blank lines, special characters included.

```sh
find /var/log -name "*.log" -mtime +30 -delete
```

```ocaml
let greet name = Printf.printf "Hello, %s\n" name
```
```output
Output
<pre class="output">

Use this to show what appears on screen after running a command — terminal output, log lines, error messages. This is different from code: it is what the system printed, not something the reader types. Use the word output as the tag.

```output
total 48
drwxr-xr-x  5 sergiy  staff  160 Jun 22 09:00 .
-rw-r--r--  1 sergiy  staff   42 Jun 21 14:00 config.toml
```
%%
Comment
omitted from all output

Use this to leave notes for yourself that should never appear in any output — reminders, questions, unfinished sections. Start the line with %%.

%% TODO: double-check the retention numbers below.
%% This section needs a second pass before publishing.

Write URLs directly in your text. They are converted to clickable links automatically. No special syntax is needed.

Full documentation at https://codeberg.org/duras/sigline

The converter checks a small set of rules. Most problems produce a warning and a sensible fallback. One produces an error and stops.

Condition Severity What happens
#### or deeper heading error conversion stops
Second > block in same section warning treated as a plain paragraph
> block outside any section warning treated as a plain paragraph