Skip to content

Texodus v4.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Jul 13:08

✨ Highlights

🔒 Filesystem access hardening

The webview no longer holds read/write/delete permissions for the whole disk.

  • Access is granted per action: picking a file or folder in the native
    dialog, opening a file via the OS ("Open With", double-click), or dropping a
    file into the window grants access to that document and its folder — nothing
    else. Grants persist across restarts.
  • Dialogs now run on the Rust side, so a compromised page script cannot
    mint grants for arbitrary paths.
  • Secrets are always off-limits: ~/.ssh, ~/.aws, ~/.gnupg and the
    macOS Keychain are denied even inside granted folders.
  • If a file is out of scope, Texodus offers the file dialog pre-navigated to
    it — one pick re-grants access (this is also the 3.x migration path).

💾 Auto-save & external change tracking

  • Optional auto-save (Settings): edits are written ~1.5 s after you stop
    typing, and flushed before tab switches, closes and opens.
  • Open files are watched for external changes: clean documents reload
    automatically; if you have unsaved edits, a three-way prompt lets you keep
    your version, reload, or overwrite.
  • The workspace tree refreshes itself when files appear, move or vanish on
    disk.

⚡ Quick Open

  • Cmd/Ctrl + P (or File → Quick Open…) opens a fuzzy-search palette over
    every Markdown/text file in the workspace — including folders the
    sidebar hasn't expanded yet.

🗂 Tabs: session restore & polish

  • In tabs mode the window restores your open tabs from the previous
    session.
  • Drag to reorder, duplicate tab, dirty indicators, middle-click close,
    and a context menu with Close Others / Close Tabs to the Right.
  • Re-opening an already-open file now focuses its existing tab instead of
    creating a duplicate buffer.

🔗 Local links in the preview

  • Clicking a relative or absolute link to a local Markdown file opens it
    in-app (tab or window, following your document mode); other local files
    open with their default application.

🎨 Improvements

  • Smarter preview rendering — edits now patch only the changed blocks
    instead of rebuilding the whole document: no flicker on large files, and
    Mermaid diagrams keep their zoom/pan state while you type around them.
  • Real syntax highlighting in the preview for Python, Rust, Go, SQL, YAML,
    TypeScript and ~30 more languages (loaded on demand), matching the editor
    pane.
  • PDF export embeds local images; HTML export is fully self-contained and
    no longer does the heavy rendering before you've even picked a save path.
  • Word count & reading time are now computed on the visible prose —
    Markdown syntax, URLs, code blocks and frontmatter no longer inflate them.
  • Whole-word search works with Cyrillic and other non-Latin scripts in the
    preview pane.
  • Multi-select "Open With" on Windows/Linux opens every selected file, not
    just the first.
  • Dropping files onto the sidebar copies them into the workspace — now
    with an overwrite confirmation instead of silently replacing same-named
    files.
  • Native menus rebuild only when their content actually changes — snappier
    window switching.
  • Changed shortcuts (to stop them colliding with menu accelerators):
    Insert Table is now ⌥⌘T / Ctrl+Alt+T, Horizontal Rule is
    ⌥⌘R / Ctrl+Alt+R.

🐛 Fixes

  • File → Quick Open… did nothing when clicked with the mouse.
  • <u>underline</u> from the Underline command was stripped from the preview
    and HTML export.
  • Task-list checkboxes could toggle the wrong item when the document contained
    raw HTML <input> elements.
  • Overlapping preview renders could race and drop the scroll-sync anchors.
  • Session restore could leave a stray blank tab when the first saved file had
    been deleted, and relative images in restored tabs didn't render.
  • Cmd/Ctrl+T inserted a table and opened a new tab, depending on mode.
  • The "Copied N files" toast counted files that failed to copy.

🧰 Under the hood

  • New tauri-plugin-persisted-scope keeps runtime file-access grants across
    restarts; all "**" filesystem scopes removed from the capability file.
  • Preview language highlighting ships as ~37 tiny lazy-loaded chunks.
  • Test suite grew to 330+ tests (Vitest + Rust); eslint . runs clean
    again from the repo root.
  • Dead code removed; duplicated path/scope helpers consolidated into the
    stores.