Texodus is a modern, fast, small, and beautiful Markdown viewer and editor
  • TypeScript 65.8%
  • Vue 27.1%
  • Rust 5.8%
  • JavaScript 0.9%
  • CSS 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nick Blokhin a355014717 Fix menu shortcuts firing in the wrong window; bump to 4.2.2
Tauri routes menu events through one app-global map keyed by the item
id string, registered at item creation — not at setAsAppMenu. With
every window building its menu under identical ids, the last window to
build silently owned every id app-wide: Cmd+S (and all menu items)
fired in that window instead of the focused one, or nowhere once it
closed, until a menu rebuild happened to re-register the handlers.

Suffix every action-carrying item id with the window label so each
window's handlers live on distinct keys and events always route to the
window whose menu is installed.
2026-07-17 14:07:01 +02:00
.github/workflows Fix appimagetool download URL in the repack step 2026-07-02 14:43:08 +02:00
screenshots Add a new screenshot 2026-06-22 19:53:13 +02:00
scripts Sync Cargo.lock in the bump script 2026-07-02 15:18:05 +02:00
src Fix menu shortcuts firing in the wrong window; bump to 4.2.2 2026-07-17 14:07:01 +02:00
src-tauri Fix menu shortcuts firing in the wrong window; bump to 4.2.2 2026-07-17 14:07:01 +02:00
.gitignore Drop package-lock.json — bun.lock is the single lockfile 2026-06-10 21:48:48 +02:00
bun.lock Add document search: full-width find bar, Cmd+F, configurable highlight 2026-06-22 08:57:00 +02:00
eslint.config.js Fix quick open, tab duplication, preview render race, and shortcut conflicts 2026-07-02 06:27:32 +02:00
index.html Init 2026-05-17 08:26:10 +02:00
LICENSE.txt Init 2026-05-17 08:26:10 +02:00
package.json Fix menu shortcuts firing in the wrong window; bump to 4.2.2 2026-07-17 14:07:01 +02:00
README.md Update README for sidebar navigation, Quick Open, and AppImage note 2026-07-02 15:17:39 +02:00
tsconfig.json Init 2026-05-17 08:26:10 +02:00
vite.config.js Init 2026-05-17 08:26:10 +02:00
vitest.config.ts Add mock-Tauri layer for testing and browser dev 2026-06-30 16:27:38 +02:00

Texodus

Texodus is a modern, fast, and beautiful Markdown editor built with Tauri 2 and Vue 3. Designed for performance and a premium user experience, it combines the power of Rust with the flexibility of modern web technologies to provide a native-feeling desktop writing environment with robust support for the GitHub Flavored Markdown (GFM) standard.

Texodus Editor Preview

📥 Installation

Download the latest release from the releases page. It's available for macOS, Windows, and Linux. You can also build it from source.

Features

  • CodeMirror 6 Editor: Modern editing experience with markdown syntax highlighting, smart indentation, and large-document performance.
  • Live Markdown Preview: Real-time, debounced rendering with full GitHub Flavored Markdown (GFM) support — tables, strikethrough, autolinks, and interactive task list checkboxes you can toggle directly in the preview.
  • Mermaid Diagrams: Render flowcharts, sequence diagrams, and other Mermaid graph types inline in the preview, themed to match the active color scheme.
  • Local Images: Embed images with relative (![](images/foo.png)) or absolute filesystem paths — resolved against the open document's directory via Tauri's asset protocol.
  • Export: Save the current document as standalone HTML or PDF.
  • Workspace Sidebar: Open a folder to browse its Markdown files in a lazy-loaded tree, with a context menu to create, rename, delete, and reveal files. Clicking a file opens it in the current window; Cmd/Ctrl+Click (or the context menu) opens it in a new window.
  • Quick Open: A Cmd/Ctrl+P palette to fuzzy-find and jump to any file in the workspace.
  • Document Search: A full-width find bar (Cmd/Ctrl+F) with live match counts and case-sensitive, whole-word, and regular-expression toggles — works in both the editor and the live preview, with a configurable highlight color.
  • Multi-Document & Multi-Window: Open multiple documents in a new tabbed interface or separate native windows. A file that is already open elsewhere gets its window focused instead of being opened twice.
  • Auto-Reload: Files are automatically reloaded when they are changed on disk by external programs.
  • Settings Mode: A dedicated settings mode for easier configuration.
  • Dynamic Layouts: Switch between Split View, Focus Mode (editor only), and Preview Only modes.
  • 10 Color Schemes: Default, Solarized, Nord, Monokai, Dracula, GitHub, Catppuccin, Gruvbox, Everforest, and Matrix — each with light and dark variants.
  • Document Statistics: Live word / character / line counts and reading-time estimates.
  • Custom Typography: Curated editor and preview fonts (JetBrains Mono, Iosevka, Inter, Roboto, Merriweather, …), all bundled locally — no network fonts.
  • Native Integration:
    • Full system menu support with keyboard accelerators.
    • Open Recent submenu in the File menu.
    • Drag-and-drop file support.
    • Window state persistence (remembers size, position, and maximized state).
    • Unsaved changes protection.
  • Secure & Fast: Built on Tauri 2 with a strict CSP and a local-first philosophy — no telemetry, no cloud.

Preview Only Mode (dark theme)

Preview Only Mode

Split View Mode

Split View

🛠️ Tech Stack

  • Core: Tauri 2 (Rust)
  • Frontend: Vue 3 (Composition API) + Vite
  • Editor: CodeMirror 6
  • State: Pinia
  • Markdown: marked.js compliant with the GitHub Flavored Markdown (GFM) specification, with DOMPurify for sanitization.
  • Diagrams: Mermaid
  • Syntax Highlighting: Prism.js (preview code blocks)
  • Styling: Vanilla CSS (no frameworks) with CSS variables for theming.
  • Package Manager: Bun (recommended)

🚀 Getting Started (for Developers)

Prerequisites

Installation

  1. Clone the repository:

    git clone https://github.com/w512/texodus.git
    cd texodus
    
  2. Install dependencies:

    bun install
    
  3. Run the development server:

    bun run tauri dev
    

📦 Building

To create a production-ready installer for your current platform:

bun run tauri build

Linux builds produce .deb, .AppImage, and .rpm packages; macOS produces .dmg and .app; Windows produces an NSIS installer.

Note (Linux/AppImage): the release pipeline strips the bundled Wayland/DRM client libraries (libwayland-*, libgbm, libdrm*) from the AppImage after packaging so they resolve from the host — otherwise WebKitGTK's EGL init fails on recent Mesa (see the repack step in release.yml). A locally built AppImage does not get this treatment; if it aborts with EGL_BAD_PARAMETER, remove those libraries from the AppImage the same way.

🏗️ Project Structure

  • src/: Vue.js frontend source code.
    • assets/: App icons and static assets.
    • components/: Reusable Vue components.
    • composables/: Shared logic (CodeMirror, native menus, formatting, scroll sync).
    • services/: Core application services (file I/O, export, Mermaid, sanitization).
    • stores/: Pinia state management (editor, settings, workspace).
    • themes/: Color scheme definitions and Prism stylesheet.
    • utils/: Path helpers and other small utilities.
  • src-tauri/: Rust backend and Tauri configuration.
  • screenshots/: Application screenshots for documentation.

📄 License

This project is licensed under the GNU General Public License v3 - see the LICENSE file for details.