quikleaf

June 14, 2026 · View on GitHub

License npm version CI

A standalone, cross-platform local markdown editor with rich rendering and LLM chat integration.

Built with Tauri v2 and powered by quikdown.

quikleaf editor with rich fence rendering

Features

  • Rich Markdown Rendering — Powered by quikdown standalone bundle with support for syntax highlighting, Mermaid diagrams, Math/LaTeX, GeoJSON maps, 3D STL viewer, CSV/TSV tables, Vega/Vega-Lite charts, ABC music notation, SVG, and more — all rendered locally without external services.

  • LLM Chat Integration — Built-in AI assistant (QD) with streaming responses, 20+ document/memory/KV/file tools, slash commands, and a tool-calling loop with stop button. Supports OpenAI-compatible APIs (Ollama, OpenRouter, LM Studio, Groq) and Anthropic Claude. Auto-detects local Ollama and LM Studio.

  • Project Mode — Open a folder with --project ./dir to get a file tree sidebar, project-scoped file tools, persistent memory/KV store, and project state saving.

  • Native Desktop App — Fast startup, low memory, native file dialogs, CLI support, keyboard shortcuts, auto dark mode, resizable panels. Cross-platform: macOS, Windows, Linux.

Quick Start

# Install dependencies
npm install

# Run in development mode
npm run tauri:dev

# Build production installers
npm run tauri:build

Pre-built Releases

Download installers from the Releases page:

PlatformFormat
macOS (Apple Silicon).dmg
macOS (Intel).dmg
Windows.msi / .exe
Linux.deb / .AppImage

Usage

Simple Mode (single file)

quikleaf                    # Open empty editor
quikleaf document.md        # Open a file

Project Mode (folder)

quikleaf --project ./mydir  # Open folder with file tree and project tools

Project mode enables:

  • File tree sidebar
  • File read/write/list/stat tools for the LLM
  • Persistent memory and key-value store
  • Project state saved to quikleaf.prj

Keyboard Shortcuts

ShortcutAction
Cmd/Ctrl + OOpen file
Cmd/Ctrl + SSave file
Enter (in chat)Send message
Shift + Enter (in chat)New line

Chat Slash Commands

CommandDescription
/helpShow available commands
/clearClear chat history
/modelShow current LLM model
/memoryShow scratchpad contents
/toolsList available tools

LLM Configuration

Click Settings in the title bar, or let quikleaf auto-detect a local Ollama or LM Studio instance.

Example Configurations

Local Ollama:

Provider: OpenAI-compatible
Host: http://localhost:11434/v1
API Key: (leave blank)
Model: llama3.2

Anthropic Claude:

Provider: Anthropic
Host: https://api.anthropic.com
API Key: sk-ant-...
Model: claude-sonnet-4-20250514

OpenRouter:

Provider: OpenAI-compatible
Host: https://openrouter.ai/api/v1
API Key: sk-or-v1-...
Model: meta-llama/llama-3.1-70b-instruct

Building from Source

Prerequisites

  • Node.js 18+ and npm
  • Rust 1.70+ (rustup.rs)
  • Platform-specific dependencies (see below)

macOS:

xcode-select --install

Linux (Debian/Ubuntu):

sudo apt install -y libwebkit2gtk-4.1-dev build-essential curl wget file \
  libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev

Windows:

  • Visual Studio 2022 with "Desktop development with C++" workload

Build Commands

npm install                 # Install frontend deps
npm run dev                 # Vite dev server (frontend only)
npm run tauri:dev           # Full dev mode with hot reload
npm run tauri:build         # Production build with installer
npm run check               # TypeScript type checking
cd src-tauri && cargo check # Rust compilation check

Build Output

  • macOS: src-tauri/target/release/bundle/dmg/
  • Windows: src-tauri/target/release/bundle/nsis/
  • Linux: src-tauri/target/release/bundle/deb/, appimage/

Architecture

src-tauri/              Rust backend (Tauri v2)
  src/commands/
    fs.rs               File I/O commands
    llm.rs              LLM API proxy with streaming
    project.rs          Project state, memory, KV, file tools
  src/main.rs           CLI parsing, app setup, asset protocol
  src/lib.rs            Library entry point (mirrors main.rs)

src/                    TypeScript frontend (Vite)
  editor/editor.ts      quikdown editor wrapper
  chat/chat-ui.ts       Chat UI, tool dispatch, slash commands
  chat/providers.ts     LLM provider adapters (OpenAI, Anthropic)
  settings/settings.ts  LLM config UI, auto-detect
  project/file-tree.ts  Project mode file tree sidebar
  main.ts               App init, file ops, project mode

index.html              App shell with all CSS

Key Design Decisions

  • LLM operates on raw markdown only — never sees or produces HTML
  • LLM API calls proxied through Rust backend to avoid CORS and protect API keys
  • quikdown standalone bundle includes all fence renderers (~8MB) for offline use
  • Tool-calling loop with 60s timeout per call and user-accessible stop button

Troubleshooting

macOS: "quikleaf is damaged and can't be opened"

xattr -cr /Applications/quikleaf.app

LLM not responding: Check endpoint is reachable, API key is correct, and model name matches. For Ollama, ensure ollama serve is running.

Tool calls hanging: Click the red "Stop" button, or try a different model. Some smaller models don't handle tool calling well.

License

BSD 2-Clause License. Copyright (c) 2026 deftio.

See LICENSE for details.