Markup Language
Mudlark uses a simple system: start any line with a special character to tell it what that line is. The right side uses these to organize your notes. You can change which characters do what in Settings.
Prefix reference
| Prefix | Type | Description | Example |
|---|---|---|---|
# | Heading | Creates a section heading. Everything below it gets grouped under this heading. | # Project Notes |
+ | Task | Adds a task to your todo list. Tasks show up at the top of their section. | + Buy groceries |
- | Done | Checks off a task by name. You only need to type enough to identify it. | - buy gr |
! | Highlight | Marks something important you want to stand out. | ! Ship by Friday |
? | Question | An open question you haven’t answered yet. | ? Should we change the deadline? |
" | Quote | A quotation or something someone said. | " The only way to do great work... |
* | Bullet | A bullet point. Put several in a row to make a list. | * First point |
@ | Media | Shows an image or video from a file path or web address. | @ /path/to/image.png |
- | Remove | Removes any item or section by name with a type prefix, e.g. - ?query, - !name, or - #section. | - !ship |
% | Numbered | A numbered list item. Numbers are assigned automatically. | % Step one |
` | Code | A line of code. Add a language hint for coloring (e.g. `swift or `c# Title `). | ` const x = 42 |
& | Table | Creates a table row. Use pipes to separate columns. The first row becomes the header. | & Name | Age | City |
= | Math | Calculates a math expression or converts between units. Supports variable assignment and built-in constants (pi, e). | = 100 km to mi |
: | Timer | Starts a countdown timer. Notifies when done. Supports multi-phase timers (e.g. 5m work, 5m rest). | : 25m |
; | Looping Timer | Like a timer, but restarts automatically when it reaches zero. | ; 25m |
$ | Stock | Tracks a live stock price. Use $TICKER in math lines to calculate with market values. | $ AAPL |
> | Move | Moves content into the current section by name. | > +fix | Home |
/ | Comment | A private note that only shows in the editor, not the right side. | / reminder to self |
~ | Divider | Draws a horizontal rule. Completions and moves cannot cross it. Add text to center a label on the rule. | ~ Chapter 2 |
^ | Find | Highlights matching text. Add a pipe to replace it. Add a type prefix to search within a specific type. Use @ heading to scope to a section. | ^ search | replace |
\ | Escape | Makes the rest of the line plain text, bypassing all prefix parsing. | \ + Not a task |
Inline formatting
Within any line, you can add bold and italic formatting using asterisks. This works inside any prefix type.
*italic text*
**bold text**
***bold and italic***
Formatting markers are stripped in the rendered view and in fuzzy matching, so **bold** matches bold when checking off tasks or searching.
Smart matching
When you check off a task with - or move something with >, you don’t need to type the full name. Each word you type just needs to match the beginning of a word in the original, in order.
+ go get groceries
- go g ← matches (“go” → “go”, “g” → “get”)
+ go get groceries
- go gr ← matches (“go” → “go”, “gr” → “groceries”, skips “get”)
This also works with filenames and paths. A file like images/daisy-pants-stereo.jpg is broken up at slashes, dots, and dashes, so - @pants is enough to match it.
If nothing matches, or if multiple items match, nothing happens. The editor turns the line green when it finds a match, or red when it can’t.
Removing things
The - character does different things depending on what it matches.
Checking off tasks
On its own, - looks for a matching task and marks it done.
+ Buy groceries
- buy gr ← checks off “Buy groceries”
Removing other items
Add a type prefix after the dash to remove a specific kind of item. This works with any type that produces visible content on the right side.
? Should we change the deadline?
- ?deadline ← removes the question
! Ship by Friday
- !ship ← removes the highlight
@ images/photo.jpg
- @photo ← removes the image
Removing sections
Use - #name to remove an entire section and everything in it.
# Old Ideas
+ some task
! some highlight
- #old ← removes the section and all its contents
Multi-line blocks
Wrap several lines between two matching characters to group them. Each line inside becomes its own item of that type.
!
Ship the feature
Update the docs
Tell the team
!
Block-capable types: + ! ? " * % ` @ : ; & $ = /
Named blocks
Give a block a title by writing the character followed by a name. Named blocks show up as groups on the right side, and you can check off, remove, or move the whole group at once.
+ Shopping List
milk
eggs
bread
+
- Shopping marks all items done. > +Shopping moves the entire block.
Tables
Start a line with & and use pipes to separate columns. The first row becomes the header; additional & rows form the body.
& Name | Age | City
& Alice | 30 | London
& Bob | 25 | Paris
Consecutive & rows are grouped into a single table on the right side. A heading above the table gives it a title.
Finding and replacing
The ^ character searches everything above it. Add a pipe to replace matches, a type prefix to target a specific type, or @ heading to scope the search to a specific section.
^ search ← highlights all matches
^ search | replace ← replaces all matches
^ +task | replacement ← only searches tasks
^ search | replace @ Notes ← scoped to the “Notes” section
Math
The = character evaluates math expressions, converts units, and supports variable assignment.
= 42 * 1.21 ← 50.82
= 100 km to mi ← 62.14
= x = 5 ← assigns 5 to x
= x * 2 ← 10
Variables are scoped to the current math block. Built-in constants like pi and e are always available.
Moving things around
The > character moves content between sections. You can move a single item, everything under a heading, or send things to a specific section.
> +fix ← moves a task matching “fix” here
> Work ← moves everything from the “Work” section here
> +fix | Home ← moves a task to the “Home” section
Special characters
| Input | Behavior |
|---|---|
| ~ | Divider. Horizontal rule that blocks completions and moves from crossing |
| \ | Escape. Treats the next character as regular text |
| > +query | Moves a matching task into the current section |