⋅𝕭𝖆𝖘𝖆𝖑𝖙⋅

Editing and Formatting

Basalt renders markdown by replacing syntax characters with visual styling. Heading # symbols are hidden and replaced with colored indicators, and block quotes display with a vertical bar instead of > characters.

Basalt supports CommonMark and GitHub Flavored Markdown (GFM) elements through the pulldown_cmark parser.

Headings#

All heading levels (H1-H6) are supported with visual indicators:

# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6

Text content#

Lists#

Both ordered and unordered lists are supported:

- Unordered item
- Another item

1. First item
2. Second item

Task lists#

Checkbox items are rendered with visual indicators:

- [ ] Unchecked task
- [x] Completed task

Tables#

GitHub Flavored Markdown tables are rendered as bordered boxes. Columns size to their content and share any spare width in proportion to each column when the table is too wide to fit, and long cell text wraps to fit the column:

| Feature  | Status | Notes                                  |
| :------- | :----: | -------------------------------------- |
| Borders  | done   | Columns size to their content          |
| Wrapping | done   | Long cell text wraps to fit the column |
table demo

While editing, the table stays rendered and only the row under the cursor reveals its raw markdown. If the table syntax breaks the whole block falls back to raw text so it stays visible and editable.

Code blocks#

syntax-highlighting demo

Fenced code blocks are rendered with a distinct background. When the fence names a language, the code gets syntax highlighting:

```rust
fn main() {
    println!("Hello, world!");
}
```

The language is the first word after the opening fence, as a name (rust, python) or a file extension (rs, py). Basalt highlights Rust, TOML, JSON, Bash, JavaScript, TypeScript, Python, Go, YAML and C. A fence without a language, or with a language outside this list, renders as plain code. The token colours come from the [syntax] table of the active theme.

Callouts#

callouts demo

Callout blocks are rendered with an icon and a coloured label header above the body. A custom title and Obsidian's fold markers (-/+) are supported:

> [!NOTE]
> This is a note callout.

> [!tip] Custom title
> Callouts can have a custom title.

> [!warning]- Foldable
> The `-`/`+` fold markers are accepted (folding itself is not yet interactive).

All Obsidian callout types are recognized (case-insensitive), including their aliases; unknown types fall back to note:

TypeAliases
note
abstractsummary, tldr
info
todo
tiphint, important
successcheck, done
questionhelp, faq
warningcaution, attention
failurefail, missing
dangererror
bug
example
quotecite

The icons follow the active symbol preset and can be overridden per type (callout_note, callout_abstract, …).

Wiki-links and standard markdown links are parsed:

[[Another Note]]
[[Note|Display Text]]
[[Note#Heading]]
[External Link](https://example.com)

Text styling#

While Basalt parses bold, italic and strikethrough syntax, these styles are not yet rendered visually in the terminal:

**bold text**      (parsed but not styled)
*italic text*      (parsed but not styled)
~~strikethrough~~  (parsed but not styled)

Editing notes#

By default, Basalt opens notes in read-only mode. To edit notes, you can either configure an external editor or enable the built-in experimental editor.

External editor#

Configure an external editor command in your Configuration:

[global]
key_bindings = [
  { key = "<leader>e", command = "exec:vi %note_path" },
]

Experimental editor#

Enable the built-in experimental editor in your configuration:

[note_editor]
experimental = true

See Editor (experimental) for details on the built-in editing capabilities and its limitations.