diff --git a/README.md b/README.md index b96eaab..1b80064 100644 --- a/README.md +++ b/README.md @@ -9,70 +9,50 @@ Sign in with your Bluesky account, create wikis, and write in plain markdown wit - Wikilinks and backlinks: link notes with `[[double brackets]]`, backlinks are tracked automatically - Revision history: every edit is a diff, full history is always available - Access control: public or private wikis, with admin/contributor/viewer roles +- Live collaborative editing: several people in one note, cursors included +- Markdown editor with split-pane live preview, image upload via drag-drop/paste +- Obsidian round-trip: import a vault from a zip, export a wiki back out as one +- Search from anywhere with Ctrl+K, across the wikis you can read or within the one you're in - Real-time sync via the ATProto firehose - Data portability: your wikis and notes are ATProto records on your PDS, not locked in -- Markdown editor with split-pane live preview, image upload via drag-drop/paste -- Multilingual UI (English and French) +- Installable as an app, with an offline fallback when the network drops +- Multilingual UI (English, French and Japanese) - Self-hostable: deploy your own instance, fully independent ## Markdown support -Notes are plain markdown: CommonMark and GFM, plus the Obsidian extensions people actually -use. No proprietary format, so a wiki exports into an Obsidian vault or a static site -generator without a rewrite. - -The reverse is true of Obsidian only for the markdown part of a vault. Two of its core -formats are not markdown — Canvas (`.canvas`) and Bases (`.base`, since 1.9) — and neither -imports here; see [Bases and Canvas](#bases-and-canvas) below. +Notes are plain markdown: CommonMark and GFM, plus the Obsidian extensions people actually use. | Feature | Lichen | Obsidian | GitHub (GFM) | |---|:--:|:--:|:--:| -| Tables | ✅ | ✅ | ✅ | -| Strikethrough `~~text~~` | ✅ | ✅ | ✅ | -| Task lists `- [ ]` | ✅ | ✅ | ✅ | -| Alternate task states `- [/]` | ✅ | ✅ | — | -| Footnotes `[^1]` | ✅ | ✅ | ✅ | -| Inline footnotes `^[text]` | ✅ | ✅ | — | -| Highlight `==text==` | ✅ | ✅ | — | -| Callouts `> [!note]` | ✅ | ✅ | ✅ | -| Foldable callouts `> [!note]-` | ✅ | ✅ | — | +| Tables, syntax-highlighted code, math `$…$` | ✅ | ✅ | ✅ | +| Heading anchors, autolinked URLs | ✅ | ✅ | ✅ | +| Strikethrough `~~text~~`, highlight `==text==` | ✅ | ✅ | `~~text~~` only | +| Task lists `- [ ]`, alternate states `- [/]` | ✅ | ✅ | `- [ ]` only | +| Footnotes `[^1]`, inline `^[text]` | ✅ | ✅ | `[^1]` only | +| Callouts `> [!note]`, foldable `> [!note]-` | ✅ | ✅ | not foldable | | Comments `%%hidden%%` | ✅ | ✅ | — | -| Math `$…$` / `$$…$$` | ✅ | ✅ | ✅ | -| Syntax-highlighted code | ✅ | ✅ | ✅ | -| Heading anchors | ✅ | ✅ | ✅ | -| Bare URLs autolinked | ✅ | ✅ | ✅ | -| Wikilinks `[[note]]` | ✅ | ✅ | — | -| Aliases `[[note\|label]]` | ✅ | ✅ | — | -| Heading links `[[note#Heading]]` | ✅ | ✅ | — | +| Wikilinks `[[note]]`, `[[note\|alias]]`, `[[note#Heading]]` | ✅ | ✅ | — | +| Block references `[[note#^id]]` | ✅ ids you type | ✅ auto-minted too | — | | Cross-wiki `[[@handle/wiki/note]]` | ✅ | — | — | | Backlinks | ✅ | ✅ | — | -| Diagrams as code | ✅ `viz-*` blocks | ✅ Mermaid | ✅ Mermaid | -| YouTube embed from a bare URL | ✅ | — | — | -| YouTube embed `![](url)` | ✅ | ✅ | — | +| Transclusion `![[note]]`, PDF / audio embeds `![[file.pdf]]` | — | ✅ | — | +| Image sizing `![alt\|300](…)`, `![300](…)` | ✅ | ✅ | — | +| YouTube embed `![](url)` or a bare URL | ✅ | `![](url)` only | — | | Tweet embed `![](url)` | — plain link, by design | ✅ | — | -| Image sizing `![alt\|300](…)` | ✅ | ✅ | — | -| Image sizing, no alt `![300](…)` | ✅ | ✅ | — | -| PDF / audio embeds `![[file.pdf]]` | — | ✅ | — | -| Transclusion `![[note]]` | — | ✅ | — | -| Block references `[[note#^id]]` | ✅ ids you type | ✅ auto-minted too | — | +| Diagrams as code | ✅ `viz-*` blocks | ✅ Mermaid | ✅ Mermaid | | Tags `#tag` | — | ✅ | — | | YAML frontmatter properties | — hidden, not rendered | ✅ | shown as a table | | Raw HTML | — by design | ✅ | sanitized subset | -Lichen renders diagrams from curated `viz-graph` / `viz-sunburst` blocks rather than -Mermaid: notes come from anyone with contributor access on a shared server, so the -renderers are vetted rather than arbitrary. Raw HTML is off for the same reason. A -Mermaid block from a vault is preserved as a code block, not executed. +Lichen renders diagrams from curated `viz-graph` / `viz-sunburst` blocks rather than Mermaid: notes come from anyone with contributor access on a shared server, so the renderers are vetted rather than arbitrary. Raw HTML is off for the same reason. +A Mermaid block from a vault is preserved as a code block, not executed. ### Bases and Canvas Obsidian's Bases (`.base`) and Canvas (`.canvas`) files are YAML and JSON, not markdown. -Importing a vault keeps every `.md` note and its attachments and skips those files, but no -longer in silence: the import warnings note counts what was skipped, by extension. A vault -organised around Bases views arrives as its underlying notes without the views, and says -so. The note data itself is not lost — a Base is a query over note properties, and the -properties live in each note's frontmatter, which imports intact even though Lichen does -not yet read it as data. +A vault organised around Bases views arrives as its underlying notes without the views — the import warnings note lists what was skipped, so nothing disappears quietly. +The note data itself is not lost — a Base is a query over note properties, and the properties live in each note's frontmatter, which imports intact even though Lichen does not yet read it as data. ## How it works