Skip to content

Releases: harlanlewis/birta-writer

v2026.801.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 12:04
4ca13b5

Birta Writer 2026.801.0

Highlights

WYSIWYG Markdown editing with byte-faithful round-trips
Open a .md file as rich text and save standard Markdown back. Untouched lines are preserved exactly, and constructs the editor can't re-emit byte-for-byte (reference links, wikilinks, callout markers, tight lists, Notion asides) are pinned to their saved bytes—editing one part of a file never rewrites another.

Offline by default, with full network control in your hands
Every feature that could contact the network sits behind a single master switch that ships off. The moment you do something that would use the network, a quiet prompt appears; dismissing it stops the prompt for the session. Enabling takes effect immediately in every open editor with no reload needed. Images are always saved locally and never uploaded; remote loads are blocked; opened URLs are allowlisted; and the editor has no path to send document content off the machine.

Block handles, menus, and keyboard editing at every nesting depth
Every block has a gutter handle—click it for a menu (turn into another type, duplicate, copy, move, delete) or drag to reorder. Open the same menu from the keyboard with ⌘. / Ctrl+.. Select whole blocks with an Escape ladder or Shift+↑/↓; move them with Alt+↑/↓, duplicate with ⇧⌥↑/↓, delete with ⌘⇧K. The block menu and keyboard chords work inside callouts, quotes, directives, and nested lists alike.

Living calculations that update when their inputs change
Type an expression followed by => (rent / budget * 100 =>, 3 km in mi =>) and the answer is offered for Tab, written as plain text. Expressions can reference named variables defined earlier in the document, use functions and constants (sqrt, trig, log), superscript exponents, and offline unit conversions across length, mass, time, volume, temperature, area, data, and more. Edit the expression or a definition above it and every dependent result updates in place. Delete or rename a definition and its dependent answers are withdrawn rather than left stale. Stale and broken answers are visibly flagged with a quiet cue and an explanation—click the number to Update, Remove, or Ignore it.

New

  • Content-conservation guard — a move, duplicate, drag, or table reorder that would silently lose or corrupt content is blocked outright, with a quiet notice instead of vanishing text; saves that would introduce the same damage are declined. A document that already carries damage still edits normally; only gestures that would add damage are refused.
  • Send Feedback — a palette command that composes a report in your browser or mail client under your own identity, never sent by the editor itself. It carries your Birta and VS Code versions, your OS, and which birta.* settings you've changed from defaults, in a collapsed block you can delete. Your document, its path, and workspace name are never included.
  • Disk-drift badge — warns when a file open with unsaved edits is changed on disk by another tool; reload from disk or compare the two versions side by side.
  • Crashes surface instead of going silent — if the rendering layer hits an unexpected script error, VS Code shows an error notification rather than the editor quietly stopping.
  • Restore Previous Content — a last-resort recovery command; if a mass delete or editor defect removes a large share of a document's lines, the extension keeps the prior text in memory and swaps it back on demand.
  • Block selection and keyboard editing — select whole blocks with an Escape ladder, Shift+↑/↓, or a rubber-band marquee in the margins; join lines, insert paragraphs, transform case, and a smart expand/shrink ladder adapted from VS Code.
  • Folding — fold headings, callouts, list items, tables, and code blocks from a gutter chevron, or use Fold / Unfold / Fold All commands. Folds persist per tab and never touch the file.
  • Slash command menu — type / for a filterable, keyboard-first insert menu with Markdown shortcuts shown for each row; context-aware and runs the same commands as the toolbar.
  • Find and replace — a find bar with ⌘D occurrence cycling, Change All Occurrences (⌘F2 / ⇧⌘L), Find in Selection, and toggles for Match Case / Whole Word / Regex. Skips code blocks and rendered previews.
  • Inline calculator — type an arithmetic expression with = at either end (12 * 4 = or =5+7) and the result is offered as a suggestion you confirm with Tab. Supports + - * / % ^ ** (parentheses, decimals, and unary minus, plus Unicode operator glyphs and xas multiplication. On by default; keep updated with=>` form.
  • Stale and broken living-calc answers are visibly flagged — when an accepted => answer stops matching the document (definition changed, moved above its premise, or file arrived that way), the number carries a quiet warning-tinted highlight (stale) or strikethrough (broken). Click for explanation and actions: Update, Remove answer, or Ignore.
  • Self-sinking checklists — turn on Move checked tasks to bottom and checking a task-list item moves it below unchecked items in the same list; unchecking floats it back up. An Uncheck All Tasks command clears every box in the whole checklist in one undo step.
  • Backtick wraps a selection in inline code — with text selected, pressing ` toggles the inline-code mark instead of replacing it.
  • Floating selection palette — selecting text raises a small formatting bar just above it (bold, italic, strikethrough, inline code, link, copy-for-AI-agent button), lighting the buttons for marks already applied. Four more buttons (inline math, highlight, link to section, clear formatting) ship hidden; opt in via birta.floatingToolbar.items.*.
  • Tighten / Loosen List — a list item's block menu offers one toggle for the whole list's spacing: Tighten List removes blank lines between items, Loosen List adds them everywhere. Nested sublists follow; one undo step either way.
  • Merge adjacent lists on demand — when two same-kind lists sit back to back, a quiet inline suggestion or block menu entry offers Merge with list above / below.
  • Browse for a link target with the OS file picker — the link editor's URL field gains a folder button that opens your system's native file dialog, anchored at the document's folder. The picked file lands as a document-relative path.
  • Paste Markdown as Markdown — pasting plain text that carries Markdown syntax now becomes real nodes; # Title is a heading, - item a list, **bold** bold. Paste as Plain Text (⇧⌘V) pastes literally for one paste. Pasting into a table cell keeps the table's shape. Pasting multi-line text into a heading keeps it one heading. Pasting an image from a browser inserts one image, not two.
  • Rich HTML pastes keep more of what you copied — strikethrough written as <s>, task-list checkboxes, and an image's title no longer invented from its alt text.
  • Copy as Rich Text — a new command that puts a real rich-text (HTML) clipboard entry on the clipboard from the selection, so rich editors like Docs, Word, or email paste real formatting. Copy as Markdown joins it in the command palette.
  • Tables — Google-Docs-style overlay chrome (row/column grips, hover insert bars, drag-to-reorder) and per-column alignment (left / center / right) with GFM markers that round-trip faithfully.
  • Callouts, admonitions, and directives — GitHub alerts (> [!NOTE] …), Obsidian callouts (per-kind icon and accent, collapsible bodies, aliases, fold markers), Docusaurus :::name container directives, and Notion <aside> exports all render richly with editable titles. Callout types nest, and every marker line round-trips byte-for-byte.
  • Math — inline $…$ edits in place like inline code (the caret walks into the raw LaTeX and it re-renders on exit), plus $$…$$ math blocks. KaTeX loads on demand.
  • Mermaid diagrams — render on a white canvas by default so they stay legible in dark themes; birta.mermaid.theme chooses light / dark / auto. The engine loads on demand.
  • Calculation blocks — a fenced ```calc block is a live worksheet: every line is computed under one shared scope and shown in a two-column ledger (source on the left, value on the right) that recomputes as you type. Define variables, do offline unit conversions, and annotate with comments. The source is never rewritten, so the block round-trips byte-for-byte as ordinary Markdown.
  • Highlight==marked text== (Obsidian) renders as a theme-aware highlight.
  • Images — alt text shows as an editable caption under the image, the title as a hover tooltip, and the file path edits from a filename chip. The image's key actions (zoom, width, delete) live in a control column at the top-right.
  • URL embeds — a bare provider link on its own line renders as an inline card for YouTube (privacy-mode click-to-load), Vimeo (same click-to-load with dnt=1), Loom (click-to-load player behind a branded facade with no thumbnail fetch), Figma (design files, boards, slides, prototypes in a taller frame), and GitHub (repo, pull request, issue, or file card built from the URL alone—zero network, works with network switch off). Every card is display-only (source stays the plain link), first-class to edit around (arrow keys stop at each), and offline by default. Players load without forced autoplay. Failure states are visible. Cards render on an idle pass after the editor is interactive, never blocking first paint. Either switch takes effect immediately in every open editor with no reload.
  • Links and wikilinks — one link editor for both inserting and editing (⌘K, or click a link; applies on blur; a Markdown / [[wiki]] format switch). Editing the link text previews live on the page. The URL field suggests the document's own headings—type # to browse them all. Smart link resolution (`birta....
Read more

v2026.731.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 12:58
c8d8e53

Birta Writer 2026.731.0

Highlights

Byte-faithful round-trips

Untouched lines are preserved exactly, and constructs the editor can't re-emit byte-for-byte are pinned to their saved bytes. Editing one part of a file never rewrites another.

Content-conservation guard

A move, duplicate, drag, or table reorder that would silently lose or corrupt content is blocked outright. A save whose outcome wouldn't survive reopening is quietly declined instead.

WYSIWYG Markdown editing

Open a .md file as rich text and save standard Markdown back, backed by a real VS Code text document with native dirty state and native saves.

Offline by default, with a single master network switch

Every feature that could contact the network sits behind birta.network.enabled, which ships off. Turning it on takes effect immediately in every open editor with no reload needed.

New

Editing

  • Block handles and block menu — every block has a gutter handle; click for a menu, drag to reorder
  • Block selection and keyboard editing — select whole blocks with Escape ladder or Shift+↑/↓; move with Alt+↑/↓, duplicate with ⇧⌥↑/↓, delete with ⌘⇧K
  • Folding — fold headings, callouts, lists, tables, and code blocks from a gutter chevron; folds persist per tab and never touch the file
  • Slash command menu — type / to open a filterable, keyboard-first insert menu with Markdown shortcuts shown for each row
  • Find and replace — find bar with ⌘D occurrence cycling, Change All Occurrences (⌘F2), Find in Selection, Match Case / Whole Word / Regex toggles; skips code blocks and diagrams in preview mode
  • Inline calculator — type 12 * 4 = or =5+7 for instant arithmetic results inserted as plain text
  • Living calculations with =>, variables, and units — type rent / budget * 100 => for on-the-fly calculation with named variables and offline unit conversion
  • Stale and broken living-calc answers flagged visibly — answers that no longer match their expression are marked with faint highlight or strikethrough, clickable for actions
  • Self-sinking checklists — turn on Move checked tasks to bottom to automatically reorder task-list items as you check them
  • Floating selection palette — selecting text raises a formatting bar (bold, italic, strikethrough, inline code, link, copy-for-AI); selecting blocks raises move/duplicate/delete
  • Tighten / Loosen List — toggle blank lines between list items; deliberate control over spacing that affects rendering
  • Merge adjacent lists on demand — merge same-kind lists with an inline suggestion when the caret is in the lower list
  • Browse for a link target with the OS file picker — the link editor's URL field has a folder button for system file dialog
  • Paste Markdown as Markdown — pasting # Title or **bold** now becomes real nodes instead of escaped literal text
  • Paste as Plain Text (⇧⌘V) — paste literally for one paste; birta.pasteFormat makes every paste literal
  • Pasting into a table cell keeps the table's shape — multi-line text joins with line breaks instead of splitting columns
  • Pasting multi-line text into a heading keeps it one heading — lines join with a space
  • Pasting an image from a browser inserts one image, not two — duplicate filtered out, description preserved
  • A pasted or dropped image shows that it's saving — and says so if it fails
  • Rich HTML pastes keep more of what you copied — strikethrough written as <s>, task-list checkboxes, and image titles now survive
  • Copy as Rich Text — new command puts real HTML on the clipboard for pasting into Docs, Word, or email
  • Frontmatter panel — YAML metadata edits as a borderless key/value grid with workspace-wide autocomplete for list values
  • Block rhythm — embed cards, tables, images, callouts, code blocks, and HR get generous vertical room; rules become visible section breaks
  • Width flips keep your place — switching page width re-wraps the document but keeps your visible line at the top
  • Word count in the status bar — words, characters, and estimated reading time; CJK-aware; hide from the status bar right-click menu
  • Resizable Table of Contents — docks on either side, resizes by dragging, hides to a small tab; flyout overlay when collapsed
  • Sticky heading — the section heading stays pinned under the toolbar as you scroll; click to jump to the real heading
  • Source line numbers — optional column of quiet line numbers matching source lines, off by default
  • Tables — Google-Docs-style grips, hover insert bars, drag-to-reorder, and per-column alignment (left/center/right)
  • Callouts, admonitions, and directives — GitHub alerts, Obsidian callouts, Docusaurus directives, Notion asides all render richly with editable titles and fold markers
  • Math — inline $…$ edits in place like inline code; $$…$$ math blocks; KaTeX loads on demand
  • Mermaid diagrams — render on white canvas by default; birta.mermaid.theme chooses light/dark/auto
  • Calculation blocks — fenced ```calc block is a live worksheet with shared scope, variables, unit conversion, and results in a two-column ledger
  • Highlight — ==marked text== renders as theme-aware highlight
  • Images — alt text editable as caption, title as hover tooltip, path edits from filename chip; zoom, width, delete in control column
  • URL embeds — bare provider links render as display-only cards: YouTube (click-to-load player), Vimeo (same), Loom (same), Figma (design files), GitHub (repo/PR/issue/file info built from URL alone)
  • Links and wikilinks — one editor for both inserting and editing (⌘K); live text preview as you type; paste URL over selected text to link the selection
  • Section links follow a heading rename — rename a heading and every anchor link to it is repointed automatically in the same undo step
  • Paste a bare URL to get a titled link — when network features are on, fetching the page's title is offered as the link text; nothing writes to the file until you accept
  • Smart link resolution — open local links the way a site generator would publish them; resolved target shown while you edit
  • Link to a section — type # after a space and a dropdown of the document's headings opens; pick one with arrows + Enter to make a [Heading](#slug) anchor link

Layout and appearance

  • Customizable toolbar — show, hide, and reorder every item; Quote, Lists, and Code dropdowns group related inserts; bar highlights what the cursor is in
  • Typography — sans/serif/mono font presets with customizable stacks and content font-size stepper
  • Per-block width and centering — embed cards, images, code blocks, and tables carry their own Full Width toggle; centered in Fixed-width mode; toggles hide when they change nothing
  • One control column for every rich block — embed cards, images, tables, code blocks put key actions in the same place: vertical column at top-right, hidden at rest, pinned open while selected
  • Code blocks — word-wrap toggle remembered per block; language pill and fold chevron float inside the canvas's top-left; fullscreen on the same icon as images
  • Live theme following — editor always matches active VS Code color theme, recoloring instantly on theme and OS light/dark switches
  • Keyboard-first — Keyboard Shortcuts Help cheatsheet, command-palette entries for fonts, checks, view toggles; UI keybindings contribute as VS Code keybindings, rebindable in Keyboard Shortcuts editor
  • Proofreading (offline) — spelling, grammar, and style checks underline issues inline; click for one-click fix, Ignore, or Add to dictionary; runs entirely offline, loads lazily
  • Review sidebar — Contents / Links / Notes / Proofreading tabs; appears only while it has entries; Links grouped by destination; Proofreading lists every finding with inline Ignore action
  • Floating menus and panels cast a much lighter shadow — roughly half the ink, reads as lifted instead of ringed

Coding-agent integration

  • Share your file and selection with AI coding agents — Copy Reference for AI Agent button on selection palette puts a path.md#L12-L20 reference on the clipboard; Copy Selection + Reference command quotes exactly what you selected as real source Markdown below the reference
  • Language Model Tool integration — Copilot agent mode and other tool-using agents can pull your current file, caret, and selection on demand with the #birtaSelection tool

Writing assistance

  • Send Feedback — command in palette asks what kind of feedback, composes text, offers GitHub issue or clipboard; you send it under your own identity; no telemetry
  • Disk-drift badge — warns when a file with unsaved edits is changed on disk by another tool; reload from disk or compare side by side
  • Crashes surface instead of going silent — rendering-layer errors now show a notification instead of the editor quietly stopping
  • Restore Previous Content — recovery command swaps back the prior text if a single update removes a large share of a document's lines

Platform

  • Remote workspaces — works in Remote-SSH, WSL, and Codespaces
  • Fast launch — heavy dependencies load on demand; documents with no math, code, or diagrams load a fraction of what they used to

Improved

  • Selecting blocks is now ~34x faster on large documents — under 5 ms instead of ~170 ms on a 300 KB file
  • Typing in large documents no longer stutters — keystroke latency dropped 85% on large files; code editing got the largest speed-up, from ~38 ms to ~9 ms per keystroke inside a fenced block
  • Cursor movement is faster — caret, click, and selection changes now cost 3.4 ms instead of 5.5 ms on large files
  • Opening a document is 10% faster on large files and 6% faster on medium ones — find highlight styles load only when first searched
  • The table of contents updates on every document change instead of on save — reflects edits on the next frame, whatever else you're doing
  • View state now persists across raw editor round-trips — folds, scroll position, and frontmatter collapse state survive switching modes and...
Read more

v2026.730.54523

Choose a tag to compare

@github-actions github-actions released this 30 Jul 12:46
f3069d1

Birta Writer 2026.730.54523

Highlights

WYSIWYG Markdown editing
Open a .md file as rich text and save standard Markdown back. The editor is backed by a real VS Code text document, so it carries native dirty state and saves through VS Code's own files.autoSave / Cmd+S with no separate save timer. Toggle to Raw Markdown and back at any time; switching with unsaved edits shows the normal Save / Don't Save / Cancel prompt.

Living calculations with => and variables
Type an expression followed by => (rent / budget * 100 =>, 3 km in mi =>) and the answer is offered for Tab, written as plain text. Expressions can reference variables defined earlier in the document as name = value, use functions and constants (sqrt, abs, ln, exp, trig functions), and perform offline unit conversions across the full mathjs catalog. Answers stay alive—edit the expression or a definition above it and every dependent result updates in place. Stale or broken answers are visibly flagged so you can update them with a click.

Block editing and layout control
Every block has a gutter handle for a menu and drag-to-reorder. Select whole blocks with an Escape ladder or shift+arrow, move them with alt+arrow, or use a rubber-band marquee in the margins. Per-block width and centering let embed cards, images, code blocks, and tables break out to full pane width or stay in a fixed column. One control column for every rich block puts key actions—open, zoom, copy—just outside the block's top-right corner.

Proofreading and review panels
Spelling, grammar, and style checks underline issues inline with one-click fixes. A review sidebar groups Links, Notes, and Proofreading findings with full keyboard navigation, so you can jump through every issue in the document and decide what stays.

New

Blocks and syntax

  • Tables with overlay chrome (row/column grips, drag-to-reorder) and per-column alignment (left / center / right) that round-trips faithfully
  • GitHub alerts, Obsidian callouts, Docusaurus directives, and Notion asides all render richly with editable titles and collapsible bodies
  • Math blocks with $$…$$, plus inline $…$ that edit in place like code; KaTeX loads on demand
  • Mermaid diagrams rendering on a white canvas by default (configurable with birta.mermaid.theme)
  • Calculation blocks (```calc) as live worksheets—every line computed under one scope and shown in a two-column ledger with source on the left, value on the right
  • Highlight syntax (==marked text==) that renders as theme-aware highlighting
  • Images with editable captions (shown under the image), title as a hover tooltip, and a control column with zoom, width, and delete
  • URL embeds for YouTube, Vimeo, Loom, Figma, and GitHub as click-to-load cards (display-only, file round-trips byte-for-byte); failing embeds show visible fallbacks instead of blank frames
  • Wikilinks and internal anchor links with workspace-wide path and heading autocomplete; [text](#slug) links follow heading renames automatically
  • Frontmatter panel as a borderless key/value grid with per-file and per-workspace persistence

Editing

  • Slash command menu (/) with filterable insert options and keyboard shortcuts shown for each row; filters match prefixes, substrings, and compressed abbreviations
  • Find and replace with ⌘D occurrence cycling, Change All Occurrences (⌘F2), Find in Selection (shaded with range visibility), and regex support
  • Inline calculator for arithmetic expressions (12 * 4 =, =5+7) with Tab to accept, and an Always Insert mode; supports all basic operators, parentheses, Unicode operator glyphs, and x as multiplication
  • Self-sinking checklists that move checked tasks below unchecked ones with Move checked tasks to bottom
  • Floating selection palette for bold, italic, strikethrough, code, links, and formatting options; shows only for the current text
  • Tighten/Loosen List to control spacing as an explicit choice (tight lists have no blank lines; loose lists get them everywhere—the choice affects rendering downstream)
  • Merge adjacent lists on demand when same-kind lists sit back-to-back
  • Browse for a link target with the OS file picker from the link editor's URL field
  • Copy as Rich Text (HTML) so paste into Docs, Word, or email preserves formatting; Copy as Markdown also available one command away
  • Paste a URL over selected text to link the selection; pasting a bare URL with network features on fetches and offers the page title as link text

Layout

  • Customizable toolbar with show/hide and reorder per item; hidden actions stay in the slash menu and command palette
  • Typography presets (sans / serif / mono) with customizable font stacks and a content font-size stepper
  • Full-Width / Fixed content-width control; per-block width toggles break out wider than a fixed-width page
  • Block rhythm with generous vertical space around set-pieces (tables, code, embeds, callouts) and horizontal rules
  • Width flips keep your place—switching between Full Width and Fixed re-wraps the document while the visible top line stays visible
  • Word count in the status bar showing words, characters, and estimated reading time; CJK-aware counting
  • Resizable Table of Contents docking on either side (birta.tocPosition), hiding to a tab, and flying out as a floating overlay on hover
  • Sticky heading pinned under the toolbar while you scroll, with its own fold chevron and block handle
  • Live theme following that recolors instantly on VS Code theme or OS light/dark switches

Keyboard and commands

  • Keyboard Shortcuts Help cheatsheet with fixed, always-accurate shortcuts plus a button to open VS Code's rebindable Keyboard Shortcuts UI
  • Block selection with Escape (caret → block → all), Shift+↑/↓ to extend, or drag-to-select in the margins
  • Smart select with expand/shrink ladder; delete block with ⌘⇧K; fold/unfold with ⌘⌥[ / ⌘⌥]
  • Folding for headings, callouts, list items, tables, and code blocks; folds persist per tab and can be saved with Obsidian markers on callouts
  • ⌘. / Ctrl+. to open the block menu from keyboard; all gutter affordances reachable without mouse
  • List/heading/paragraph conversion (⌘⇧7–9, ⌘⌥0–6) that converts the whole nested tree in one step
  • Join lines (⌃J), insert paragraph above/below (⌘↩ / ⌘⇧↩), duplicate block (⇧⌥↑/↓)
  • Go to Symbol command for headings, and command-palette entries for fonts and view toggles

Trust and safety

  • Byte-faithful round-trips where untouched lines are preserved exactly; constructs the editor can't re-emit are pinned to their saved bytes
  • Content-conservation guard that blocks moves, duplicates, or drops that would lose or corrupt text; a save that would corrupt is quietly declined
  • Offline by default with a single master network switch (birta.network.enabled); every feature that could contact the network sits behind it and ships off
  • No network egress for document content; images are always local, remote URLs are blocked, HTML is sanitized, and Mermaid runs in strict mode
  • Send Feedback command that composes a GitHub issue in your browser with your choice of detail, never sending anything without you—works offline
  • A disk-drift badge warns when a file is changed on disk by another tool; reload or compare side by side
  • Crashes surface as notifications instead of going silent
  • Restore Previous Content as a last-resort recovery command for accidental mass deletes

Coding-agent integration

  • Copy Reference for AI Agent button in the floating selection palette (path.md#L12-L20) and in the right-click menu
  • Copy Selection + Reference that quotes your exact selection as a fenced block below the reference
  • Language Model Tool (#birtaSelection) for Copilot and other tool-using agents to pull your file, caret, and selection on demand
  • Public extension API (getActiveEditorContext()) for cooperating extensions to read the same live context

Writing assistance

  • Proofreading that runs entirely offline with spelling (Harper-backed), grammar, and style checks (fillers, clichés, wordiness, passive voice, AI-tell vocabulary, punctuation)
  • Unified Checks menu with a master Proofreading switch and individual toggles for each check
  • Review sidebar with Contents / Links / Notes / Proofreading tabs, each appearing only while it has entries; full keyboard navigation and grouping by type or in order
  • Links tab groups every link in the document by destination (Web / Local files / This document / Email) with Open and jump-to actions
  • Notes tab lists editor markers you leave for yourself ([TK], TODO:, FIXME:, HTML comments) and custom markers via birta.notes.customMarkers

Platform

  • Remote workspaces in Remote-SSH, WSL, and Codespaces
  • Fast launch where heavy dependencies load on demand (KaTeX, 68 syntax-highlighting grammars, Mermaid, sanitizer)
  • Source-available under the Functional Source License (FSL-1.1-ALv2), converting to Apache-2.0 two years after each release; portions under MIT License

Improved

  • Selecting blocks no longer restyles the whole document (~170 ms → under 5 ms on 300 KB; arrow keys to gap positions also faster)
  • Typing in long documents no longer stutters (300 KB file: ~45 ms → ~6 ms per keystroke; code blocks: ~38 ms → ~9 ms)
  • Caret movement is faster (~5.5 ms → ~3.4 ms on large files)
  • Opening a document is faster (~10% on large files, ~6% on medium)
  • Find results stay current as you edit; stale matches and misplaced replace actions are gone
  • Jumping to a line lands on the block you asked for, even with frontmatter or loose lists
  • Switching between rich text and Raw Markdown carries your cursor and selection, including block selections; view scrolls to your spot on arrival
  • The Raw Markdown keybinding targets the focused pane instead of always the leftmost
  • View state (folds, scroll, frontmatter collapse) survives switching to raw editor and back, and persists across window reloads
  • Width flips (Full Width ↔ Fix...
Read more

v2026.729.60148

Choose a tag to compare

@github-actions github-actions released this 29 Jul 13:03

Birta Writer 2026.729.60148

Highlights

WYSIWYG Markdown editing
Open a .md file as rich text and save standard Markdown back. The editor is backed by a real VS Code text document, so it carries native dirty state and saves through VS Code's own files.autoSave / Cmd+S. Toggle to Raw Markdown and back at any time; switching with unsaved edits shows the normal Save / Don't Save / Cancel prompt.

Block handles, selection, and keyboard editing
Every block at every nesting depth has a gutter handle. Click it for a menu—turn into another block type, duplicate, move up/down, delete—or drag to reorder. Select whole blocks with an Escape ladder or Shift+↑/↓, move them with Alt+↑/↓, or duplicate with ⇧⌥↑/↓. A heading carries its whole section when you move it.

Living calculations with variables and units
Type an expression followed by => (rent / budget * 100 =>, 3 km in mi =>) and the answer is offered for Tab, written as plain text. Expressions reference named variables defined earlier (name = value), use functions and constants (sqrt, abs, log, trig, round, pi, e), and perform offline unit conversions across length, mass, time, volume, temperature, area, and data. Edit the expression or a definition above it and every dependent result updates in place. Answers that stop matching the document are visibly flagged—stale (value changed) or broken (definition vanished)—with a click to update, remove, or ignore.

Tables, callouts, math, diagrams, and embeds
Tables render with Google Docs-style column alignment and drag-to-reorder. GitHub alerts (> [!NOTE]), Obsidian callouts, and Docusaurus directives (:::name) render with rich editing. Inline and block math ($…$, $$…$$) edit in place; Mermaid diagrams render on a white canvas by default. URL embeds for YouTube, Vimeo, Loom, Figma, and GitHub render as click-to-load cards with editable URLs and a resident title, opening in a fullscreen lightbox. Every embed is a keyboard-reachable block with its own control column.

New

Editing and navigation

  • Slash command menu—type / to open a filterable insert menu with keyboard shortcuts shown for each row.
  • Find and replace with ⌘D occurrence cycling, Select All Occurrences, Find in Selection, and Match Case / Whole Word / Regex toggles; find skips code blocks and rendered previews.
  • Inline calculator—type 12 * 4 = or =5+7 and the result is offered as a suggestion; an auto-insert mode switches to insert-on-=.
  • Self-sinking checklists—check a task and it moves below unchecked items in the same list; unchecking floats it back up.
  • Floating selection palette—selecting text raises a formatting bar with bold, italic, strikethrough, inline code, link, and an AI agent reference button.
  • Tighten / Loosen List—remove or add blank lines between items across the whole list and nested sublists.
  • Merge adjacent lists on demand—when two same-kind lists sit back to back, a suggestion or block-menu row offers to merge them.
  • Browse for a link target with the OS file picker—the link editor's URL field gains a folder button.
  • Copy as Rich Text and Copy as Markdown—put real HTML or Markdown on the clipboard from your selection.
  • Section links—type # after a space to browse and insert [Heading title](#slug) anchor links; pick from the slash menu, a command, or the floating toolbar's own button.
  • Smart link resolution—links open the way a site generator would publish them; the resolved target shows while you edit.
  • Section links follow a heading rename—rename a heading and every [text](#slug) link pointing at it is repointed automatically.
  • Paste a bare URL to get a titled link—pasting https://… inserts a link and, with network features on, fetches the page's title as a prompt you can accept or ignore.
  • Frontmatter panel—YAML metadata edits as a borderless key/value grid with list values as removable chips and workspace-wide autocomplete.
  • Customizable toolbar—show, hide, and reorder every item; hidden actions stay reachable from the slash menu.

Layout and view

  • Typography presets—sans / serif / mono font families with customizable stacks and a content font-size stepper.
  • Per-block width and centering—embed cards, images, code blocks, and tables each carry a Full Width toggle; blocks center in a fixed-width column.
  • One control column for every rich block—embed cards, images, tables, and code blocks put key actions in a hover-revealed column at the top-right: open, zoom, copy, preview / fullscreen / delete.
  • Block rhythm—embed cards, tables, standalone images, callouts, code blocks, and raw-HTML blocks get generous vertical room; horizontal rules carry a section-break band.
  • Width flips keep your place—switching between Full Width and Fixed re-wraps the document and keeps the top visible line at the top.
  • Word count in the status bar—words, characters, and estimated reading time; selecting text switches to the selection's count.
  • Resizable Table of Contents—a chrome-free outline docks on either side, resizes by dragging, hides to a tab, and floats as an overlay when collapsed.
  • Sticky heading—the heading of the section you're reading stays pinned under the toolbar as you scroll.
  • Live theme following—the editor matches your active VS Code color theme and recolors on theme and OS switches.
  • Keyboard-first UI—command-palette entries for fonts, checks, and view toggles; UI actions are VS Code keybindings, rebindable in Keyboard Shortcuts.

Writing assistance

  • Proofreading (offline)—spelling, grammar (Harper-backed), and style checks (fillers, clichés, wordiness, passive voice, AI-tell, em-dash and punctuation) underline issues inline; click for a one-click fix, Ignore, or Add to dictionary.
  • Review sidebar—Contents / Links / Notes / Proofreading tabs; Links lists every link grouped by destination (Web / Local / This document / Email); Notes lists editor-note markers ([TK], TODO:, FIXME:, comments); Proofreading lists current findings.

Trust and safety

  • Byte-faithful round-trips—untouched lines are preserved exactly; constructs the editor can't re-emit are pinned to their saved bytes.
  • Content-conservation guard—moves, duplicates, and drops that would lose or corrupt content are blocked with a notice.
  • Offline by default—every network feature sits behind birta.network.enabled, which ships off; the moment you need it, a dismissable prompt appears.
  • No network egress for document content—images are saved locally, remote loads are blocked, opened URLs are allowlisted, and the HTML sanitizer is hardened.
  • Send Feedback—a palette command that composes a report (with your VS Code version, OS, and changed settings, skippable) and opens a prefilled GitHub issue or copies it to your clipboard. Birta never sends it; you do.
  • Disk-drift badge—warns when a file open with unsaved edits is changed on disk; reload from disk or compare side by side.
  • Crashes surface instead of going silent—an error notification instead of the editor quietly stopping.
  • Restore Previous Content—a last-resort recovery command to swap back large deletions from memory.

Coding-agent integration

  • Precise clipboard reference, one click away—select text and the floating palette's AI button puts a path.md#L12-L20 reference on your clipboard.
  • Copy Selection + Reference for AI Agent—a command that quotes exactly what you selected below the reference.
  • Language Model Tool (#birtaSelection)—Copilot agent mode can pull your current file, caret, and selection on demand.
  • Public extension API (getActiveEditorContext())—any cooperating extension can read the live file + selection.

Platform and performance

  • Remote workspaces—works in Remote-SSH, WSL, and Codespaces.
  • Fast launch—KaTeX, 68 syntax-highlighting grammars, Mermaid, and the HTML sanitizer load on demand; proofreading and fidelity checks settle in after first paint.
  • Calculation blocks—a fenced ```calc block is a live worksheet; every line computes under one shared, top-to-bottom scope shown in a two-column ledger (source left, value right).
  • Highlight—==marked text== (Obsidian) renders as a theme-aware highlight.
  • Images—alt text shows as an editable caption, title as a hover tooltip, and the file path edits from a chip in the image toolbar.
  • Folding—fold headings, callouts, nested list items, tables, and code blocks; folds persist per tab and never touch the file.
  • Hard fork with FSL licensing—source-available under Functional Source License (FSL-1.1-ALv2), converting to Apache-2.0 two years after release.

Improved

  • View state now survives switching to the raw editor and back—folds, scroll position, and the metadata panel's hide/show choice persist across round-trips.
  • Find results no longer go stale after you edit—the find bar re-searches the live document before acting on a match.
  • Files with Windows line endings no longer come back with mixed CRLF and LF—every line keeps its exact ending.
  • Tab-indented outline blocks no longer detach when edited—a block indented with tabs keeps those tabs when you edit it.
  • Moving a block in a tab-indented outline no longer re-nests the file—the moved block is written with the indentation the file uses.
  • A bullet whose content is a heading or quote no longer dissolves the list—the item is written with its content on the bullet line.
  • Editing one table cell no longer empties a line break in another cell of the same row.
  • List markers and numbering are no longer rewritten—+ stays +, 1) stays 1), and 1. 1. 1. stays as written.
  • A link in angle brackets no longer grows a backslash—backslashes don't double on save.
  • Path suggestions no longer fight an IME—composition keys pass straight through to the input method.
  • Suggestion dropdowns near the bottom of the window stay on screen—they flip above the field when there isn't room below.
  • Only one suggestion row highlights at a time.
  • Typing inside a `~~~...
Read more

v2026.727.63943

Choose a tag to compare

@github-actions github-actions released this 27 Jul 13:41
08b9622

Birta Writer 2026.727.63943

Highlights

WYSIWYG Markdown editing with perfect fidelity

Edit .md files as rich text in VS Code, save standard Markdown back unchanged. Toggle to Raw Markdown at any time — the caret, selection, and unsaved edits carry both ways. The editor is backed by a real VS Code text document, so it tracks dirty state and saves through VS Code's own files.autoSave / Cmd+S with no separate save timer.

Block-level editing and navigation

Every block — headings, lists, quotes, code, tables, diagrams, anywhere they nest — has a gutter handle for its menu: turn it into another type, duplicate, move, delete, copy as Markdown. Select whole blocks with an Escape ladder or by dragging in the margins; extend with Shift+↑/↓. Move with Alt+↑/↓, duplicate with ⇧⌥↑/↓, fold from a gutter chevron. A keyboard shortcut (⌘. / Ctrl+.) opens the block menu from anywhere.

Living calculations with variables and units

Type an expression followed by => (rent / budget * 100 =>, 3 km in mi =>) and confirm with Tab to insert the computed answer as plain text. Expressions reference named variables defined earlier in the document (budget = 5000), use functions and constants (sqrt, pi, log2, trig), and convert units across the full mathjs catalog — all computed locally and offline. Edit the expression or a definition above it and every dependent answer updates in place; delete a definition and its answers are withdrawn rather than left stale. Stale and broken answers show a quiet visual cue.

Comprehensive writing assistance

Spelling, grammar, and style checks underline issues inline (fillers, clichés, wordiness, passive voice, AI-tell vocabulary, punctuation). Click an issue for a one-click fix, ignore it, or add to dictionary. A review sidebar lists every issue, link in the document, and editor notes ([TK], TODO:, FIXME:) you leave while drafting — all clickable to jump to, and every category toggled from a Checks menu.

New

Tables

  • Google-Docs-style editing with row/column grips, hover insert bars, reordering via drag, and per-column alignment (left / center / right) with GFM round-trip.

Block types and syntax

  • Callouts, admonitions, directives — GitHub alerts (> [!NOTE]), Obsidian callouts (per-kind icon, collapsible, aliases), Docusaurus :::name containers, and Notion <aside> exports render richly with editable titles.
  • Math blocks — inline $…$ (edits in place like code) and block $$…$$ with KaTeX rendering.
  • Mermaid diagrams with white canvas rendering for legible dark themes; birta.mermaid.theme controls light / dark / auto.
  • Calculation blocks — a ```calc worksheet where every line computes in shared scope, showing a two-column source/value ledger that updates as you type.
  • Highlight (==marked text==) renders as theme-aware highlighting.
  • Images with editable captions (alt text) under and hover tooltips (title); filename edits from a toolbar chip.

URL embeds

  • Bare provider links render as inline cards for YouTube (click-to-load privacy-mode player), Loom (quiet branded facade, click-to-load), Figma (live design/prototype frames), and GitHub (repo/PR/issue info cards built from the URL alone, zero network). Cards are display-only — the source stays a plain link, so files round-trip byte-for-byte.

Link editing and navigation

  • One link editor for inserting and editing (⌘K, or click; applies on blur). Edit the link text live on the page as you type. Paste a bare URL over selected text to link the selection. Pasting a bare URL (with network on) fetches the page title and offers it as link text — take it and the link becomes titled, ignore it and the plain link stays.
  • Link anchors suggest the document's own headings — type # and pick from a filtered list. Link to a section from anywhere in prose — type # after a space and a heading dropdown opens, narrowing as you type; pick one and it becomes a standard [Heading](#slug) anchor link.
  • Rename a heading and every same-document anchor link pointing at it repoints to the new slug automatically, in the same undo step.
  • Browse for a link target with your OS file picker; the picked file lands as a document-relative path with a resolved-target hint.
  • Smart link resolution opens local links the way a site generator would publish them — workspace-root paths, content-root inference, index.md / _index.md suffixes — and shows the resolved target while you edit.

Slash command menu

  • Type / to open a filterable, keyboard-first insert menu with every block type, inline format, and markdown shortcut shown. Filtering matches label, keyword, and compressed word-prefix abbreviations (/seclink finds Section Link, /inlmath finds Inline Math). Context-aware — runs the same commands as the toolbar.

Find and replace

  • Find bar with ⌘D occurrence cycling, Select All Occurrences (⇧⌘L), Find in Selection, and toggles for Case / Whole Word / Regex. Skips code blocks and diagram source, so a match never lands on hidden content.

Inline calculator

  • Type an arithmetic expression with = at either end (12 * 4 = or =5+7) and the result is offered as a suggestion; confirm with Tab (Return stays free). Supports + - * / % ^ ** × ÷ · − x (multiplication). Edit an existing expr = answer and the answer updates in place; edit the answer itself and it stays as your override.

Self-sinking checklists

  • Turn on Move checked tasks to bottom and checking a task moves it below unchecked items in the same list; unchecking floats it back up. Parent items carry their nested children. Off by default; a separate Uncheck All Tasks command clears every box in a whole checklist in one undo step.

List utilities

  • Tighten / Loosen List — toggle a whole list's spacing (blank lines between items). Deliberately on-demand, never a side effect of editing.
  • Merge adjacent lists — when two same-kind lists sit back to back (often left from past editing), an inline suggestion or block menu row offers to make them one.

Selection and clipboard

  • Floating selection palette — selecting text raises a formatting bar (bold, italic, strikethrough, code, link, math, highlight, clear formatting) with buttons lit for marks already applied. Works for mouse and keyboard selections alike. Four buttons (inline math, highlight, link to section, clear) ship hidden to keep the bar small; opt in with birta.floatingToolbar.items.*.
  • Copy as Markdown — Cmd+C copies the selection's Markdown source so pasting into plain-text targets keeps the syntax. A rich-text flavor is written alongside for rich editors.
  • Copy as Rich Text — a command that puts real HTML on the clipboard for pasting into Docs, Word, or email.
  • Select with an Escape ladder (caret → block → all document), Shift+↑/↓ to extend, or a rubber-band marquee dragged in the margins.

Layout and appearance

  • Customizable toolbar — show, hide, and reorder every item, or hide the whole bar for a chrome-free surface.
  • Typography presets — sans / serif / mono with customizable stacks, content font-size stepper, and Full-Width / Fixed content-width control.
  • Word count in the status bar — words, characters, and reading time for the active document; selecting text switches to the selection's count. CJK-aware.
  • Resizable Table of Contents — docks on either side, collapses to a floating tab overlay, switches sides in place. Drag TOC items to reorder whole sections; drag blocks into a section to refile them.
  • Sticky heading — the heading of the section you're reading stays pinned under the toolbar as you scroll, with fold chevron and block handle. Click the title to jump back to the real heading.
  • Live theme following — the editor always matches your active VS Code color theme and recolors instantly on theme/OS light/dark switches.

Frontmatter panel

  • YAML metadata edits as a borderless key/value grid. List values become removable chips with workspace-wide autocomplete. Collapses (birta.frontmatterExpanded). A document without frontmatter shows Add metadata button; committing the first field inserts the fenced block at the top.

Proofreading sidebar

  • Review panel tabs: Contents / Links / Notes / Proofreading. Links lists every link grouped by destination (Web / Local / This document / Email) with an Open action and hover URL display. Notes lists [TK], TODO:, FIXME:, and HTML comments — each clickable to jump. Proofreading lists spelling, grammar, and style findings with Ignore and Add to dictionary (for spelling). All three are keyboard-navigable and group by type with a toggle.

Keyboard-first

  • Command-palette entries for fonts, checks, view toggles, and every action. Fixed chords for typing (formatting, undo/redo, block move/duplicate, block selection, expand/shrink) are listed in a keyboard cheatsheet. Navigate with find and fold commands, Go to Symbol, and the Raw Markdown switch — all rebindable VS Code keybindings.

Coding-agent integration

  • Copy Reference for AI Agent puts a path.md#L12-L20 reference on the clipboard from a button on the floating selection palette, right-click Copy menu, or command palette. Copy Selection + Reference quotes the exact selected text in a fenced markdown block below the reference.
  • Language Model Tool (#birtaSelection) lets Copilot agent mode and any tool-using agent pull your current file, caret, and selection on demand — no copy-paste. Requires VS Code 1.95+.
  • Public extension API — getActiveEditorContext() returned from the extension's activate() lets any cooperating extension read the same live file and selection.

Trust and safety

  • Byte-faithful round-trips — untouched lines are preserved exactly; constructs the editor can't re-emit byte-for-byte (reference links, wikilinks, callout markers, tight lists) are pinned to their saved bytes.
  • Content-conservation guard — moves, ...
Read more

v2026.726.50402

Choose a tag to compare

@github-actions github-actions released this 26 Jul 12:05
3c9573c

Birta Writer 2026.726.50402

Highlights

WYSIWYG Markdown editing with byte-faithful fidelity

Open a .md file as rich text and save standard Markdown back, backed by a real VS Code text document so it carries native dirty state and saves through VS Code's own files.autoSave / Cmd+S. Toggle to Raw Markdown and back at any time. Untouched lines are preserved exactly — constructs the editor can't re-emit byte-for-byte (reference links, wikilinks, callout markers, tight lists, Notion asides) are pinned to their saved bytes, so editing one part of a file never rewrites another. A move, duplicate, drag, or save whose outcome would lose content is blocked outright instead of silently damaging the file.

Block handles, menus, and keyboard editing

Every block at every nesting depth has a gutter handle — click it for a menu (turn into another type, duplicate, move, delete) or drag to reorder; a heading carries its whole section. Open the same menu from ⌘. / Ctrl+.. Select whole blocks with Escape, Shift+↑/↓, or a marquee drag; move with Alt+↑/↓, duplicate with ⇧⌥↑/↓, delete with ⌘⇧K. The VS Code editing canon adapts to WYSIWYG: join lines, insert a paragraph above/below without splitting, transform case, expand/shrink selection.

Live calculations with named variables and unit conversions

Type an arithmetic expression with an equals sign (12 * 4 = or =5+7) and the result is offered as a suggestion. For richer calculations type expr => to define variables (rent = 2000, then rent / budget * 100 =>) and perform offline unit conversions (3 km in mi =>). Answers stay alive — edit the expression or a definition and every dependent result updates in place. Stale or broken answers carry a quiet visual cue; click one to update, remove, or ignore it. Deterministic, offline, eval-free engine.

Proofreading, calculations, and rich blocks

Spelling, grammar, and style checks run entirely offline, decoration-only, marking issues you can fix one click at a time or ignore. Tables render with Google-Docs-style overlay chrome and per-column alignment. GitHub alerts, Obsidian callouts, Docusaurus directives, and Notion asides all render richly with editable titles and fold support. Math blocks ($$...$$) and inline math ($...$) render with KaTeX. Mermaid diagrams render by default on a white canvas for legibility. Calculation blocks (```calc) are live worksheets — every line computes under one shared scope in a two-column ledger.

New

  • Slash command menu — type / to open a filterable insert menu for text blocks, lists, and media, with Markdown shortcuts shown; filtering matches prefixes, substrings, and compressed abbreviations.
  • Find and replace — find bar with ⌘D occurrence cycling, Select All Occurrences, Find in Selection, and Match Case / Whole Word / Regex. Skips hidden code blocks and diagram source.
  • Inline calculator — type arithmetic expressions with = at either end; Tab to confirm the result, which inserts as plain text. +−*/, %, ^ / ** / superscript exponents, parentheses, decimals, unary minus, and Unicode operator glyphs (×, ÷, ) all supported.
  • Self-sinking checklists — toggle Move checked tasks to bottom to have checked items move below unchecked ones in the same list automatically.
  • Floating selection palette — selecting text raises a small formatting bar with bold, italic, strikethrough, inline code, inline math, highlight, link, and clear formatting; whole-block selection raises move / duplicate / delete instead.
  • Tighten / Loosen List — toggle a list's spacing from its block menu to remove or add blank lines between items document-wide.
  • Merge adjacent lists on demand — when two same-kind lists sit back-to-back, the editor offers to merge them from an inline suggestion or the block menu.
  • Browse for a link target with the OS file picker — the link editor's URL field gains a folder button to pick a local file; the resolved path appears as a document-relative path with target confirmation.
  • Copy as Rich Text — new command to put real rich-text (HTML) on the clipboard from the selection, so rich editors like Docs, Word, or email compose receive formatting instead of bare text. Copy as Markdown joins the command palette.
  • Link editor — a unified editor for inserting and editing links (⌘K, or click a link), with live text preview, autocomplete for the document's own headings, smart link resolution, and Markdown / wikilink format switching.
  • Section links — type # after a space and a dropdown of the document's headings opens; pick one to create an anchor link. Same flow from the slash menu, selection palette, or Link to Section command.
  • Section links follow a heading rename — rename a heading and every same-document anchor link pointing at it is repointed to the new slug automatically, in the same undo step.
  • Paste a bare URL to get a titled link — pasting a URL (with nothing selected) inserts a link and, when network features are enabled, fetches and offers the page's title as the link text. Nothing writes until you accept.
  • Frontmatter panel — YAML metadata edits as a borderless key/value grid with list-value chips and workspace-wide autocomplete. Collapse it and optionally show an Add metadata button to insert frontmatter without it.
  • Tables — Google-Docs-style overlay chrome with row/column grips, hover insert bars, and drag-to-reorder. Per-column alignment (left / center / right) with GFM markers that round-trip faithfully.
  • Callouts, admonitions, and directives — GitHub alerts (> [!NOTE]), Obsidian callouts (per-kind icon and accent, collapsible bodies, aliases, fold markers), Docusaurus :::name directives, and Notion <aside> exports render richly with editable titles. Marker lines round-trip byte-for-byte.
  • Math — inline $...$ edits in place like inline code; $$...$$ blocks. KaTeX loads on demand.
  • Mermaid diagrams — render on a white canvas by default so they stay legible in dark themes. birta.mermaid.theme chooses light / dark / auto. Engine loads on demand.
  • Highlight==marked text== (Obsidian style) renders as theme-aware highlight.
  • Images — alt text shows as an editable caption under the image; title as a hover tooltip; file path edits from a filename chip in the image toolbar.
  • URL embeds — a bare provider link on its own line renders as an inline card for YouTube (static thumbnail, click-to-load player via youtube-nocookie.com), Loom (click-to-load with branded facade), Figma (design files, boards, slides, prototypes in a tall frame), and GitHub (repo, PR, issue, or file info built from URL alone with zero network). Cards are display-only; source stays a plain link and toggling embeds off shows the link again. Offline by default behind birta.network.enabled (off by default).
  • Links and wikilinks — one editor for both, with URL field suggestions for the document's own headings, smart link resolution, and Markdown / [[wiki]] format switching.
  • Customizable toolbar — show, hide, and reorder every item, or hide the whole bar for a chrome-free surface; hidden actions stay reachable from the slash menu.
  • Typography — sans / serif / mono font presets with customizable stacks and a content font-size stepper.
  • Word count in the status bar — words, characters, and estimated reading time for the active document; selecting text switches to the selection's count. CJK-aware.
  • Resizable Table of Contents — a chrome-free TOC docks on either side, resizes by dragging, hides to a small tab, and switches sides in place. Hovering the collapsed tab flies it out as a floating overlay.
  • Sticky heading — the section heading you're reading stays pinned just under the toolbar as you scroll, carrying its own fold chevron and block handle.
  • Live theme following — the editor always matches your active VS Code color theme, recoloring instantly on theme and OS light/dark switches.
  • Keyboard-first — command-palette entries for fonts, checks, and view toggles. UI actions (list/heading/paragraph chords, fold, find, link, block move/delete) are VS Code keybindings, rebindable in Keyboard Shortcuts. Typing-level grammar keeps a fixed chord set (formatting, undo/redo, block move/duplicate, block selection, expand/shrink); those can't be reassigned but each has a palette command you can bind to.
  • Keyboard Shortcuts Help cheatsheet — a true inventory of fixed, always-accurate shortcuts with Edit Keyboard Shortcuts button.
  • Review sidebarContents / Links / Notes / Proofreading tabs in the table-of-contents drawer. Links groups by destination (Web / Local / This document / Email) and opens straight from the sidebar. Notes lists [TK], TODO:, FIXME:, custom markers, and HTML comments. Proofreading lists every spelling, grammar, and style finding. All three are keyboard-navigable with full undo support.
  • Outline is foldable — H1/H2 headings with sub-headings always show the disclosure arrow; deeper ones on hover. The outline folds in the sidebar only; it never collapses the document.
  • Byte-faithful round-trips — untouched lines are preserved exactly, and constructs the editor can't re-emit (reference links, wikilinks, callout markers, tight lists, Notion asides) are pinned to their saved bytes.
  • Content-conservation guard — a move, duplicate, drag, or table reorder that would silently lose or corrupt content is blocked outright with a quiet notice instead of vanishing text. Same protection covers what a save would do: a move whose outcome wouldn't survive saving and reopening is declined.
  • Offline by default with a single master network switchbirta.network.enabled (off by default) gates every feature that touches the network. Turning it on enables both URL embeds and paste-unfurl. A quiet prompt appears where you're working if...
Read more

v2026.725.50309

Choose a tag to compare

@github-actions github-actions released this 25 Jul 12:04
c3acabf

Birta Writer 2026.725.50309

Highlights

WYSIWYG Markdown editing backed by a real VS Code text document

Open a .md file as rich text and save standard Markdown back. The editor carries native dirty state and saves through VS Code's own files.autoSave / Cmd+S with no separate save timer. Toggle to Raw Markdown and back at any time; switching with unsaved edits shows the normal Save / Don't Save / Cancel prompt.

Block handles and a block menu at every nesting depth

Every block, at every nesting depth (including inside callouts, quotes, and directives), has a gutter handle. Click it for a menu — turn into another block type, duplicate, copy as Markdown, copy link, move up/down, delete — or drag it to reorder; a heading carries its whole section. Open the same menu from the keyboard with ⌘. / Ctrl+.

Living calculations with variables, functions, and offline unit conversions

Type an expression followed by => (rent / budget * 100 =>, 3 km in mi =>) and the answer is offered for Tab, written as expr => result in plain text. Expressions reference named variables defined earlier in the document, use functions and constants (sqrt, abs, log, trig, round, π, e), and convert units across length, mass, time, volume, and more — all computed locally with no network. Edit the expression or a definition above it and every dependent result updates in place; delete or rename a definition away and its dependent answers are withdrawn rather than left stale.

Stale and broken living-calc answers are visibly flagged

When an accepted => answer stops matching the document and the editor deliberately won't rewrite it (the definition changed externally, the equation moved above its definition, or the file arrived that way), the answer carries a quiet visual cue: a faint warning tint means stale (computes a different value now), the same tint with strikethrough means broken (no longer computes at all). Click the number for the explanation and actions to update, remove, or ignore it.

New

Block selection and keyboard editing

Select whole blocks with an Escape ladder (caret → block → all document), Shift+↑/↓ to extend, or a rubber-band marquee dragged in the margins; move them with Alt+↑/↓, duplicate with ⇧⌥↑/↓, delete with ⌘⇧K. Join lines, insert a paragraph above/below without splitting, transform case, and a smart expand/shrink-selection ladder adapted to WYSIWYG.

Folding

Fold headings, callouts, nested list items, tables, and code blocks from a gutter chevron (or the Fold / Unfold / Fold All commands, ⌘⌥[ / ⌘⌥]). Folds persist per tab and never touch the file — or write an Obsidian [!kind]- marker explicitly from a callout's menu when you want the collapsed state saved.

Slash command menu

Type / to open a filterable, keyboard-first insert menu (text, lists, and insert blocks) with the markdown shortcut shown for each row. Filtering matches label and keyword prefixes, substrings, and compressed word-prefix abbreviations. It's context-aware and runs the same commands as the toolbar and command palette.

Find and replace

A find bar with ⌘D occurrence cycling, Select All Occurrences (⇧⌘L), Find in Selection, and Match Case / Whole Word / Regex toggles. It skips code blocks and diagrams that are showing their rendered preview, so a match never lands on hidden source.

Inline calculator

Type an arithmetic expression with an equals sign at either end (12 * 4 = answers after it; =5+7 answers before it, as 12=5+7) and the result is offered as a suggestion you confirm with Tab. Supports + - * / % ^ ** and parentheses, the Unicode operator glyphs, and a lone x as multiplication (2 x 3 =). An existing expr = answer stays maintained: edit the expression and the answer updates in place, editing the answer is always your override, and toggling Always insert result switches to insert-on-= automatically.

Self-sinking checklists

Turn on Move checked tasks to bottom (a switch in the toolbar's Lists menu, the block menu, or the palette) and checking a task-list item moves it below the still-unchecked items in the same list with a brief highlight where it lands; unchecking floats it back up. A parent item carries its nested items with it, and an Uncheck All Tasks command clears every box in the whole checklist in one undo step.

Floating selection palette

Selecting text raises a small formatting bar just above it (bold, italic, strikethrough, inline code, inline math, highlight, link, clear formatting), lighting the buttons for marks already applied. A paragraph/heading turn-into appears only when the whole block is selected. Works for mouse and keyboard selections alike, and the palette steps aside when the link editor or block menu opens.

Tighten / Loosen List

A list item's block menu offers one toggle for the whole list's spacing: Tighten List removes the blank lines between items, Loosen List adds them everywhere. Nested sublists follow, and it matters because loose items render with paragraph spacing in most Markdown pipelines.

Merge adjacent lists on demand

When a document carries two same-kind lists back to back, the editor offers to make them one list instead of guessing: with the caret in the first item of the lower list, an inline suggestion offers Merge with list above (Tab confirms), and any item's block menu offers Merge with List Above / Below rows whenever a same-kind neighbor exists.

Browse for a link target with the OS file picker

The link editor's URL field gains a folder button that opens your system's native file dialog, anchored at the document's own folder. The picked file lands in the field as a document-relative path with the resolved-target hint confirming where it opens.

Copy as Rich Text

A new command (command palette and the right-click Copy group) that puts a real rich-text (HTML) clipboard entry on the clipboard from the selection or the block under the pointer, so rich editors like Docs, Word, or email paste real formatting. Copy as Markdown joins it so either is one command away for a one-off copy.

Tables

Google-Docs-style overlay chrome (row/column grips, hover insert bars, drag-to-reorder) and per-column alignment (left / center / right) with GFM markers that round-trip faithfully.

Callouts, admonitions, and directives

GitHub alerts (> [!NOTE]), Obsidian callouts (per-kind icon and accent, collapsible bodies, aliases, fold markers), Docusaurus :::name container directives, and Notion <aside> exports all render richly with editable titles. Insert from the slash menu, the command palette, or by typing [!note] / :::name . Callout types nest, and every marker line round-trips byte-for-byte.

Math

Inline $…$ edits in place like inline code (the caret walks into the raw LaTeX and it re-renders on exit), plus $$…$$ math blocks. KaTeX loads on demand.

Mermaid diagrams

Render on a white canvas by default so they stay legible in dark themes; birta.mermaid.theme chooses light / dark / auto. The engine loads on demand.

Calculation blocks

A fenced ```calc block is a live worksheet: every line is computed under one shared, top-to-bottom scope and shown in a two-column ledger — source on the left, value on the right — that recomputes as you type. Define variables with name = value and reuse them below, do offline unit conversions, and annotate with # / // comment lines. A rounded value offers its full-precision number as a hover tooltip. The source is never rewritten — results live only in the rendered view — so the block round-trips byte-for-byte as ordinary Markdown.

Highlight

==marked text== (Obsidian) renders as a theme-aware highlight.

Images

Alt text shows as an editable caption under the image, the title as a hover tooltip, and the file path edits from a filename chip in the image toolbar.

URL embeds

A bare provider link on its own line renders as an inline card, for four providers: YouTube (a static thumbnail with a play button that loads the actual player only when you click it), Loom (the same click-to-load player behind a quiet branded facade), Figma (design files, FigJam boards, slides, and prototypes in a taller frame that loads the live Figma embed on click), and GitHub (a compact info card for a repo, pull request, issue, or file, built from the URL alone — zero network, so it renders even offline). Every card is display only — the source stays the plain link, so the file round-trips byte-for-byte and turning embeds off simply shows the link again. Cards render on an idle pass after the editor is interactive, never blocking first paint. Offline by default: the master network switch birta.network.enabled gates every card that would make a request, while the request-free GitHub card needs only birta.embeds.enabled.

Links and wikilinks

One link editor for both inserting and editing (⌘K, or click a link; applies on blur). Editing the link text previews live on the page as you type, the editor widens for real-length URLs, and the URL field suggests the document's own headings — type # to browse them all, or just part of a heading's title and the matching anchors appear. Wikilinks ([[target|alias#heading]]) round-trip byte-identically with bare-name autocomplete. Smart link resolution opens local links the way a site generator would publish them. Link to a section — type # after a space anywhere in prose and a dropdown of the document's headings opens, narrowing as you type; pick one with arrows + Enter/Tab and it becomes a standard [Heading title](#slug) anchor link. Pasting a URL over selected text links the selection instead of replacing it, opening the editor prefilled to confirm or fix it.

Section links follow a heading rename

Rename a heading and every same-document [text](#slug) anchor link pointing at it is repoint...

Read more

v2026.724.51948

Choose a tag to compare

@github-actions github-actions released this 24 Jul 12:21
22d2c85

Birta Writer 2026.724.51948

Highlights

Living calculations with variables and units
Type an expression followed by => (rent / budget * 100 =>, 3 km in mi =>) and the answer is offered as a plain-text suggestion you confirm with Tab. Expressions can reference named variables defined elsewhere in the document (name = value lines) and perform offline unit conversions across length, mass, time, volume, temperature, and more. Edit the expression or a definition above it and every dependent result updates in place; delete a definition and its dependent answers are withdrawn rather than left stale.

Heading links with # autocomplete and section insertion
Type # mid-prose to open a filterable dropdown of the document's headings, narrowing as you type; pick one with arrows + Enter and it becomes a standard [Heading title](#slug) anchor link. The same flow works from the Section Link command and the selection palette's button. Rename a heading and every same-document anchor link pointing at it is repointed to the heading's new slug automatically in one undo step.

Restored list editing — Backspace joins, spacing is yours to set
Backspace at a nested list item's start deletes the item break like a text editor joining lines: the text lands at the end of the previous line and sub-items follow one level up. List tight/loose spacing is now entirely the author's choice — the editor adds only the one blank line Markdown requires, never removes one, and a new Tighten/Loosen List toggle in a list item's block menu rewrites the whole tree in one undo step.

Copy Markdown natively, Rich Text on demand
Cmd+C now puts the selection's Markdown source on the clipboard's plain-text flavor, so pasting into any text target keeps the syntax. Rich-text apps still paste formatting via the HTML flavor written alongside. A new Copy as Rich Text command (and its Markdown counterpart) puts whichever format you want just this once into the clipboard.

New

  • Calculation blocks — a fenced ```calc block (insert from the slash menu or language picker) is a live worksheet: every line computes under a shared scope and shows in a two-column ledger (source left, value right) that recomputes as you type. Define variables with name = value, reuse them below, do offline unit conversions, and annotate with # / // comments. The source never rewrites — results live only in the rendered view — so the block round-trips byte-for-byte as ordinary Markdown. Independent switch from inline calc: birta.calc.blocks.enabled.
  • Inline calculator improvements — the = form now supports functions (sqrt, abs, ln / log / log2, exp, trig and inverses, round / floor / ceil) and constants (pi / π, tau / τ), superscript exponents ( is c^2), and the Unicode operator glyphs (×, ÷, · / , ), plus the letter x as multiplication between digits (2 x 3 =); a menu footer introduces the richer => form with full-precision hover tooltips on rounded results.
  • Multi-line definitions — a line can define several variables at once: a=5, b=2 (comma or semicolon separated) in prose scope, calc blocks, and the living-calculation cascade.
  • Functions and constants in calc blocks — every line computes with the full function and constant set (sqrt, log10, trigonometric and their inverses, round / floor / ceil, pi / π / tau / τ); an unresolved identifier before ( is an error, never a call.
  • Calendar units in offline conversions — a year is exactly 365 days and a month is 365/12, matching note-taker intuition (write 365.25 days when you mean the astronomical year); decades, centuries, and millennia follow the overridden year.
  • Paste a bare URL to get a titled link — with nothing selected, pasting a bare URL (https://… or a domain like example.com) inserts a link and, when network features are enabled, fetches the linked page's title and offers it as the link text with a small prompt — nothing writes to the document until you accept it. Offline by default; the feature has its own birta.pasteUnfurl.enabled (on by default) beneath the master birta.network.enabled.
  • Frontmatter empty state — documents without YAML metadata show a quiet Add metadata button in the frontmatter panel; committing the first field inserts the fenced block. A new birta.frontmatterAddButton setting (on by default) controls the button.
  • Customizable toolbar — show, hide, and reorder every item with birta.toolbar.items.*, or hide the whole bar for a chrome-free surface; hidden actions stay reachable from the slash menu.
  • Word count in the status bar — words, characters, and estimated reading time for the active document, updating as you type; selecting text switches to the selection's count. Counting is CJK-aware (each CJK character counts as a word). Hide it from the status bar's right-click menu if you don't want it.
  • Resizable Table of Contents — a chrome-free TOC docks on either side (birta.tocPosition), resizes by dragging, hides to a small tab, and switches sides in place. When collapsed, hovering or focusing the tab floats the panel as an overlay so you can jump without reopening it. Drag TOC items to reorder whole sections.
  • Sticky heading — the heading of the section you're reading stays pinned just under the toolbar as you scroll, carrying its own fold chevron and block handle.
  • Floating selection toolbar — selecting text raises a small formatting bar just above it (bold, italic, strikethrough, inline code, inline math, highlight, link, clear formatting), lighting buttons for marks already applied. Works for mouse and keyboard selections; turn it off with birta.floatingToolbar.enabled or hide individual buttons with birta.floatingToolbar.items.*.
  • Smart link resolution — the link editor shows local links the way a site generator would publish them — workspace-root paths, index.md / _index.md suffix handling — and resolves the target path as you type.
  • Browse for a link target with the OS file picker — the link editor's URL field gains a folder button that opens your system's native file dialog, anchored at the document's folder. The picked file lands as a document-relative path with a resolved-target hint; nothing writes until you confirm.
  • Copy as Rich Text — a new command (command palette and the right-click Copy group) puts a real rich-text (HTML) clipboard entry on the clipboard from the selection or the block under the pointer. Copy as Markdown joins it in the command palette.
  • Math-safe multiplication typing — typing * no longer italicizes when it reads as multiplication: a star pair flanked by a digit, ), or word characters with expression material between (60*60*1000, budget*2) stays literal text instead of becoming emphasis, while a *word* still emphasizes.
  • Self-sinking checklists — turn on Move checked tasks to bottom (a switch in the toolbar's Lists menu, a list's block menu, or birta.checklist.sinkChecked) and checking a task moves it below unchecked items in the same list; unchecking floats it back up.
  • Uncheck All Tasks — a command (command palette and a task list's block menu) clears every checkbox in the whole checklist — nested sublists included — in one undo step.
  • Tighten / Loosen List — a list item's block menu offers one toggle for the whole list's spacing: Tighten List removes blank lines between items, Loosen List adds them everywhere — nested sublists follow in one undo step.
  • Merge adjacent lists on demand — when two same-kind lists sit back to back (Markdown's marker-change syntax, often left behind by editing), a quiet inline suggestion offers Merge with list above (Tab confirms), and any list item's block menu offers Merge with List Above / Below rows when a same-kind neighbor exists.
  • Google-Docs-style table editing — row and column grips, hover insert bars, drag-to-reorder, and per-column alignment (left / center / right) with GFM markers that round-trip faithfully.
  • Callouts, admonitions, and directives — GitHub alerts (> [!NOTE] …), Obsidian callouts (per-kind icon and accent, collapsible bodies, fold markers), and Docusaurus :::name container directives render richly with editable titles. Insert from the slash menu or by typing [!note] / :::name . Callout types nest and every marker line round-trips byte-for-byte.
  • Math blocks and KaTeX rendering — inline $…$ edits in place like inline code (the caret walks into the LaTeX and it re-renders on exit), plus $$…$$ math blocks. KaTeX loads on demand.
  • Mermaid diagrams — render on a white canvas by default (the way GitHub and Notion show them) so they stay legible in dark themes; birta.mermaid.theme chooses light / dark / auto. The engine loads on demand.
  • Highlight markup==marked text== (Obsidian syntax) renders as a theme-aware highlight.
  • Images with captions and tooltips — alt text shows as an editable caption under the image, the title as a hover tooltip, and the file path edits from a filename chip in the image toolbar.
  • URL embed cards — a YouTube link on its own line renders as a static thumbnail with a play button that loads the player only when you click it (through YouTube's privacy-mode youtube-nocookie.com). The card is display-only — the source stays the plain link, so the file round-trips byte-for-byte — and a quiet corner button opens the video on YouTube. Offline by default: birta.network.enabled (off by default) controls the feature.
  • Wikilinks[[target|alias#heading]] with the same heading-completion UX as regular anchor links; bare-name autocomplete.
  • Section links from the keyboard — type /section (or header, heading, anchor) in the slash menu to pick from a dropdown of the document's headings and insert a standard [title](#slug) link. With text select...
Read more

v2026.723.52435

Choose a tag to compare

@github-actions github-actions released this 23 Jul 12:25

Birta Writer 2026.723.52435

Highlights

WYSIWYG Markdown editing
Open a .md file as rich text and save standard Markdown back. The editor is backed by a real VS Code text document, so it carries native dirty state and saves through VS Code's own files.autoSave / Cmd+S. Toggle to Raw Markdown and back at any time; switching with unsaved edits shows the normal Save / Don't Save / Cancel prompt.

Block editing with handles, selection, and keyboard commands
Every block at every nesting depth has a gutter handle for a menu — turn into another block type, duplicate, move, delete — or drag to reorder. Select whole blocks with an Escape ladder or Shift+↑/↓, then move them with Alt+↑/↓, duplicate with ⇧⌥↑/↓, or delete with ⌘⇧K. The VS Code editing canon is adapted to WYSIWYG: join lines, insert a paragraph above/below without splitting, transform case, and a smart expand/shrink-selection ladder.

Review sidebar with Contents, Links, Notes, and Proofreading tabs
The table of contents drawer is now a tabbed review panel. Contents shows your document structure with collapsible sections. Links lists every link grouped by destination (Web / Local files / This document / Email) with one-click Open and a live URL preview. Notes catalogs editor markers you leave for yourself — [TK], TODO:, FIXME:, HTML comments, and custom tokens — each clickable to navigate. Proofreading lists every spelling, grammar, and style finding with the same Ignore and Learn actions the in-text popup offers. Each tab appears only while it has entries; all four support keyboard navigation and are collapsed/expanded with a single setting per list.

Fidelity and safety as first principles
Untouched lines are preserved exactly, byte-for-byte. A move, duplicate, or drag that would silently lose or corrupt content is blocked outright. The editor warns when a file open with unsaved edits is changed on disk by another tool, and a last-resort Restore Previous Content command recovers large deletions. The editor ships offline by default — every feature that contacts the network sits behind a single birta.network.enabled master switch, off by default, with no path to send document content off the machine.

New

Formatting and blocks

  • Tables with overlay chrome (row/column grips, hover insert bars, drag-to-reorder) and per-column alignment (left / center / right).
  • Callouts, admonitions, and directives — GitHub alerts (> [!NOTE]), Obsidian callouts with collapsible bodies and fold markers, Docusaurus :::name containers, and Notion <aside> exports — all render richly with editable titles.
  • Math: inline $…$ edits in place like inline code, plus $$…$$ math blocks with on-demand KaTeX.
  • Mermaid diagrams rendering on a white canvas by default (configurable via birta.mermaid.theme).
  • Highlight syntax ==marked text== (Obsidian) renders as a theme-aware highlight.
  • Images with editable captions (alt text) and hover tooltips (title), plus a filename chip in the image toolbar for editing the path.
  • URL embeds — a YouTube link on its own line renders as a privacy-mode player card (static thumbnail, play button loads the player only on click) with a corner button to open on YouTube; the source stays a plain link so the file round-trips byte-for-byte.

Links and navigation

  • One link editor for both inserting and editing (⌘K, or click a link), with live preview as you type, [[wiki]] format support, and a Browse button that opens your system's native file picker anchored at the document folder.
  • Smart link resolution that opens local links the way a site generator would publish them — workspace-root paths, index.md / _index.md suffixes.
  • Link to a section: pick a heading from a keyboard-navigable list (slash menu /section, selection palette, or command) and insert a standard [text](#slug) anchor link with the heading's GitHub-style slug.
  • Section links follow a heading rename automatically — renaming a heading repoints every same-document [text](#slug) anchor to its new slug in one undo step.
  • Paste a bare URL to get a titled link: with nothing selected, pasting a URL fetches the page title (when network features are enabled) and offers it as link text in a prompt; the link appears instantly and nothing is written until you accept.
  • Wikilinks round-trip byte-identically with bare-name autocomplete.

Editing assistance

  • Slash command menu: type / for a filterable, keyboard-first insert menu (text, lists, blocks) showing the markdown shortcut for each row; context-aware and available in headings.
  • Find and replace with ⌘D occurrence cycling, Select All Occurrences (⇧⌘L), Find in Selection, and Match Case / Whole Word / Regex toggles; skips code blocks and diagram source.
  • Inline calculator: type an arithmetic expression with an equals sign at either end (12 * 4 = or =5+7) and the result is offered as a suggestion. Supports + - * / % ^ ** () and decimals; refuses algebra with variables and division by zero. Insert on Tab (default advisory mode) or configure auto-insert with birta.calc.autoInsert. Editing an existing equation refreshes its answer automatically in auto-insert mode.
  • Self-sinking checklists: enable Move checked tasks to bottom (toolbar Lists menu, block menu, or command) to have checked items move below unchecked ones in the same list, floating back up on uncheck; unchecking everything in a list is one command.
  • Floating selection palette: selecting text raises a formatting bar above it (bold, italic, strikethrough, inline code, inline math, highlight, link, clear formatting) that lights buttons for marks already applied; selecting whole blocks raises move / duplicate / delete instead.
  • Merge adjacent lists on demand: when a document carries two same-kind lists back to back (left behind by editing), an inline suggestion offers to merge them, or the block menu shows Merge with List Above / Below when a same-kind neighbor exists; merges created by your own edits happen automatically.

Text features

  • Proofreading (offline): spelling, grammar, and style checks underline issues inline; click for a popup with a one-click fix, Ignore, or Add to Dictionary. A master Proofreading switch and per-check toggles control everything, and it runs entirely offline with no delay to opening a file.
  • Folding: fold headings, callouts, nested list items, tables, and code blocks from a gutter chevron; chevron visibility follows VS Code's editor.showFoldingControls. Folds persist per tab and never touch the file — or write an Obsidian [!kind]- marker explicitly from a callout's menu when you want the collapsed state saved.
  • Sticky heading: the heading of the section you're reading stays pinned just under the toolbar as you scroll, with its own fold chevron and block handle; click the title to jump back to the real heading.
  • Word count in the status bar: words, characters, and estimated reading time for the active document; selecting text switches to the selection's count. CJK-aware (each CJK character counts as a word).

Appearance and layout

  • Customizable toolbar: show, hide, and reorder every item (birta.toolbar.items.*), or hide the whole bar; hidden actions stay reachable from the slash menu.
  • Typography: sans / serif / mono font presets with customizable stacks and a content font-size stepper (birta.fontPreset, birta.fontFamily*, birta.fontSize).
  • Content width control: Full-Width / Fixed width toggle (birta.contentWidth, birta.maxContentWidth).
  • Resizable Table of Contents: a chrome-free outline docks on either side (birta.tocPosition), resizes by dragging, hides to a small tab, and switches sides in place; hovering the collapsed tab flies the panel out as a floating overlay.
  • Live theme following: the editor always matches your active VS Code color theme, recoloring instantly on theme and OS light/dark switches.

Keyboard and accessibility

  • A Keyboard Shortcuts Help cheatsheet and command-palette entries for fonts, checks, and view toggles.
  • All UI-level actions are contributed VS Code keybindings, rebindable in Keyboard Shortcuts: heading/list/paragraph chords (⌘⇧7–9, ⌘⌥0–6), find and navigation (⌘F, ⌘G), Replace (⌘⌥F), Link (⌘K), Delete Block (⌘⇧K), Fold/Unfold (⌘⌥[ / ⌘⌥]), Open Block Menu (⌘.), Go to Symbol, and Raw Markdown toggle.
  • The sidebar is fully keyboard-navigable: Tab to enter, arrows move focus, Enter activates (jumps to links / toggles collapse), Escape returns to the editor.

Platform

  • Remote workspaces: works in Remote-SSH, WSL, and Codespaces.
  • Fast launch: heavy dependencies (KaTeX, ~66 syntax-highlighting grammars, Mermaid) load on demand; a document with no math, code, or diagrams loads a fraction of what it used to.
  • Source-available under the Functional Source License (FSL-1.1-ALv2) with an Apache-2.0 conversion two years after each release.

Improved

  • A little more air under headings — the space between a heading and the content below it increased slightly, so a list directly under a heading no longer reads cramped.
  • Block palette leading button now shows the selected blocks' gutter symbol when all blocks are the same kind (list icon, H1–H6 badge, pilcrow).
  • Keyboard Shortcuts panel is now a true inventory of fixed shortcuts (names left, keys right-aligned) with an Edit Keyboard Shortcuts button in a sticky footer; the old customizable-commands listing is gone.
  • Sidebar is wider by default (260px, was 220px) with a minimum of 240px (was 150px); tab strip collapses to a dropdown select when visible tabs don't fit.
  • Menu group headers share one typographic voice (title case, full foreground) across the slash menu, block menu, toolbar dropdowns, and sidebar.
  • Reordering a heading in the outline now sets its level to match where you drop it; drop onto a heading to nest it (becomes child), or between headings to set it as a sibling.
  • Typing in large documents is noticeably lighter with the o...
Read more

v2026.722.52550

Choose a tag to compare

@github-actions github-actions released this 22 Jul 12:26
bcc969b

Birta Writer 2026.722.52550

Highlights

WYSIWYG Markdown editing
Open a .md file as rich text and save standard Markdown back. The editor is backed by a real VS Code text document, so it carries native dirty state and saves through VS Code's own files.autoSave / Cmd+S. Toggle to Raw Markdown and back at any time; switching with unsaved edits shows the normal Save / Don't Save / Cancel prompt.

Block handles, selection, and keyboard editing
Every block has a gutter handle for a menu—turn into another block type, duplicate, copy as Markdown, move up/down, delete—or drag to reorder. Select whole blocks with Escape (caret → block → all), Shift+↑/↓ to extend, or a marquee drag in the margins. Move them with Alt+↑/↓, duplicate with ⇧⌥↑/↓, delete with ⌘⇧K. The VS Code editing canon adapts to WYSIWYG: join lines, insert a paragraph above/below, transform case, and a smart expand/shrink-selection ladder.

Rich blocks: tables, callouts, math, diagrams
Google-Docs-style tables with row/column grips and per-column alignment. GitHub alerts, Obsidian callouts, and Docusaurus directives render richly with editable titles and nest at any depth. Inline $…$ and block $$…$$ math edit in place with KaTeX. Mermaid diagrams render on a white canvas by default and load on demand.

Writing assistance and safety
Spelling, grammar, and style checks (fillers, clichés, wordiness, passive voice) underline issues inline with one-click fixes. Section links follow heading renames automatically. A content-conservation guard blocks moves or drops that would silently lose content. Offline by default—every feature that contacts the network sits behind a master switch. Crashes surface instead of going silent, and a Restore Previous Content command recovers from mass deletes.

New

  • Folding — fold headings, callouts, nested list items, tables, and code blocks from a gutter chevron; folds persist per tab and never touch the file.
  • Slash command menu — type / to open a filterable insert menu with Markdown shortcuts shown for each row, context-aware and keyboard-first.
  • Find and replace — find bar with ⌘D occurrence cycling, Select All Occurrences, Find in Selection, and Match Case / Whole Word / Regex toggles; skips code blocks and diagram previews.
  • Inline calculator — type 12 * 4 = or =5+7 to get an arithmetic suggestion via Tab; supports + - * / % ^ ** () and decimals; off by default (birta.calc.enabled).
  • Self-sinking checklists — turn on Move checked tasks to bottom to auto-reorder task lists; Uncheck All Tasks clears every box in a checklist in one undo step.
  • Floating selection palette — selecting text raises a formatting bar (bold, italic, strikethrough, inline code, math, highlight, link, clear formatting); selecting whole blocks raises move / duplicate / delete.
  • Images — alt text shows as an editable caption under the image; the title is a hover tooltip; the file path edits from a chip in the image toolbar.
  • URL embeds — a YouTube link on its own line renders as an inline player card (static thumbnail, play button loads the player only when clicked, through YouTube's privacy mode); the source stays the plain link for byte-faithful round-trips.
  • Links and wikilinks — one editor for both formats; typing # in the URL field suggests the document's own headings; Link to Section picks a heading from a live list; pasting a URL over selected text links the selection instead of replacing it.
  • Smart link resolution — opens local links the way a site generator would publish them (workspace-root paths, content-root inference, index.md / _index.md suffixes).
  • Section links follow heading renames — rename a heading and every same-document [text](#slug) anchor link pointing at it is repointed to the new slug automatically, in the same undo step.
  • Paste a bare URL to get a titled link — pasting a bare URL inserts a link and offers its page title as the link text (with network features enabled); nothing is written to the document until you accept.
  • Frontmatter panel — YAML metadata edits as a borderless key/value grid; list values become removable chips with workspace-wide autocomplete; full keyboard, undo, and screen-reader support.
  • Customizable toolbar — show, hide, and reorder every item (birta.toolbar.items.*), or hide the whole bar; hidden actions stay reachable from the slash menu.
  • Typography controls — sans / serif / mono font presets with customizable stacks and a content font-size stepper; Full-Width / Fixed content-width control.
  • Word count in the status bar — words, characters, and estimated reading time show in the status bar and update as you type; CJK-aware counting.
  • Resizable Table of Contents — a chrome-free TOC docks on either side, resizes by dragging, hides to a small tab, and switches sides in place; the flyout is fully live when collapsed.
  • Sticky heading — the heading of the section you're reading stays pinned just under the toolbar as you scroll.
  • Keyboard-first — Keyboard Shortcuts Help cheatsheet; command-palette entries for fonts, checks, view toggles; most UI-level actions are rebindable VS Code keybindings.
  • Proofreading (offline) — spelling, grammar, and style checks (fillers, clichés, wordiness, passive voice, AI-tell vocabulary, punctuation) underline issues inline; click one for a popup with a one-click fix, Ignore, or Add to Dictionary.
  • Live theme following — the editor always matches your active VS Code color theme, recoloring instantly on theme and OS light/dark switches.
  • Byte-faithful round-trips — untouched lines are preserved exactly; constructs the editor can't re-emit byte-for-byte are pinned to their saved bytes.
  • A disk-drift badge — warns when a file open with unsaved edits is changed on disk by another tool; reload from disk or compare versions side by side.
  • Remote workspaces — works in Remote-SSH, WSL, and Codespaces.
  • Fast launch — heavy dependencies load on demand; a document with no math, code, or diagrams loads a fraction of what it used to.

Improved

  • Reordering a heading in the outline now sets its level to match where you drop it — drop onto a heading to make it a child (nested deeper); drop between headings to make it a sibling; the section's whole subtree shifts with it and the internal hierarchy is preserved.
  • Typing in very large documents is noticeably lighter — with the outline panel showing, ordinary body-text typing now skips table-of-contents recomputation; edits that touch a heading still update it instantly.
  • Opening a long document is noticeably faster — fold chevrons and block handles settle in after first paint rather than blocking it on fresh opens.
  • The table of contents now updates on every document change — reflects an edit on the next frame, whatever else you're doing.
  • Nesting one ::: directive inside another survives a save — the outer fence is written longer than the inner (:::: around :::) so the inner reopens as a directive.
  • Moving a heading in the outline or document is now protected — a move between callouts, a rule to a callout's top, or other content-losing scenarios is quietly declined.
  • The table of contents is now fully structural — the outline is a complete editor for document hierarchy as well as a view; changes sync bidirectionally.
  • The slash command menu now opens inside headings.
  • Blocks nested inside a list item now have a grabber — blockquotes, code blocks, callouts, tables, and headings indented under list items now show their block menu and drag handle.
  • List grabbers inside a callout, quote, or directive no longer overlap the accent bar — handles now step clear of every enclosing colored bar.
  • The numbered-list block handle no longer hides under multi-digit numbers — the grabber tracks the number's width and content font size.
  • Heading grabber handles now center on their text line — H1–H6 badges and fold chevrons center at every level and content scale.
  • Nested headings' gutter badges now sit on their text line — all six levels align at every content scale.
  • The pinned heading's tooltips are no longer hidden behind the toolbar — tooltips drop below the pinned heading when the toolbar leaves no room above.
  • The ToC flyout now opens at your place in the document — the active heading is centered in the list on hover.
  • The table of contents no longer starts its first row under the panel buttons — the list starts below them and keeps clear of the window's bottom edge.
  • The ToC hover flyout now shrinks to fit a short outline — the floating flyout sizes to its contents instead of inheriting the docked drawer's full height.
  • Showing or hiding the table of contents now sticks — the choice is saved to birta.tocVisibility and applies to every file until changed.
  • The table of contents width is now a birta.tocWidth setting — dragging the panel edge still remembers the width; it's now an ordinary setting with Settings Sync support.
  • Editing chords no longer change an unfocused document — document-mutating shortcuts require the editor itself to be focused; find and navigation shortcuts are unchanged.

Fixed

  • A document ending in an unclosed code fence is no longer "closed" by saving — a file whose last construct is an unterminated ``` fence keeps exactly the fence you wrote instead of gaining a synthetic closing fence.
  • A save after a failed editor rebuild can no longer write the previous content back over the file — a failed rebuild leaves the save pipeline inert so you can recover fully on the next open.
  • Moving a collapsed section no longer buries the destination's content inside its fold — if the fold would hide anything at the destination it didn't hide before, it now opens.
  • **A save with no edits can no longer rewrite a file that mixes...
Read more