cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 🍃
charm leaflet readability golang

Leaflet Rich Text and Blocks#

Document Structure#

Leaflet documents consist of blocks—discrete content units:

Text Blocks: Paragraphs of formatted text Header Blocks: Section titles (level 1-6) Code Blocks: Syntax-highlighted code with language annotation Quote Blocks: Blockquotes for citations List Blocks: Ordered or unordered lists Rule Blocks: Horizontal rules for visual separation

Text Formatting#

Text within blocks can have inline formatting called facets:

Bold: **bold text** → Bold facet Italic: *italic text* → Italic facet Code: `inline code` → Code facet Links: [text](url) → Link facet with URL Strikethrough: ~~struck~~ → Strikethrough facet

Multiple formats can be combined:

**bold and *italic* text with [a link](https://example.com)**

Code Blocks#

Code blocks preserve language information for syntax highlighting:

```python
def hello():
    print("Hello, leaflet!")
```

Converts to a code block with language="python".

Supported languages: Any language identifier is preserved, but rendering depends on leaflet.pub's syntax highlighter support.

Blockquotes#

Markdown blockquotes become quote blocks:

> This is a quote from another source.
> It can span multiple lines.

Nested blockquotes are flattened (leaflet doesn't support nesting).

Lists#

Both ordered and unordered lists are supported:

- Unordered item 1
- Unordered item 2
  - Nested item

1. Ordered item 1
2. Ordered item 2
   1. Nested ordered item

Nesting is preserved up to leaflet's limits.

Horizontal Rules#

Markdown horizontal rules become rule blocks:

---

Use for section breaks.

Images and Media#

Current status: Image support is not yet implemented in the Noteleaf-to-leaflet converter.

Future plans: Images will be uploaded to blob storage and embedded in documents with image blocks.

Workaround: For now, images in markdown are either skipped or converted to links.