# โฆ Vesper
**A beautiful, distraction-free markdown reader for Windows**
Built for everyone. Owned by no one. Free as in freedom.
## ๐ Overview
Vesper renders your markdown with carefully tuned typography and a refined dark interface, giving you the ultimate reading experience. No installation, no AppData, no registry, no telemetry, no accounts, no subscriptions - just drop the exe and go.
Knowledge should be accessible to all. Vesper exists to make reading a pleasure, not a product.
## โจ Features
### ๐ค Markdown Rendering
Full CommonMark support via **markdown-it** with extensions:
| Extension | Description |
|:--|:--|
| ๐จ Syntax Highlighting | 190+ languages via highlight.js with a curated dark palette |
| โ๏ธ Task Lists | Interactive checkboxes in lists |
| แดฌแต Superscript / Subscript | `^text^` and `~text~` notation |
| ๐๏ธ Highlight | `==marked text==` rendered with accent background |
| ๐ฌ Typographer | Smart quotes, dashes, and ellipses |
| ๐ Linkify | Bare URLs auto-converted to clickable links |
| ๐ HTML | Inline HTML passthrough |
| โต Breaks | Newlines preserved as line breaks |
**Premium dark-mode typography** tuned for long-form reading:
> - **Inter Variable** at 17px with 1.7 line-height
> - ~65 character measure for optimal readability
> - Progressive heading color cascade - H1 near-white through H6 muted
> - Accent-colored list markers on both ordered and unordered lists
> - Gradient-fade horizontal rules
> - Subtle persistent link underlines that intensify on hover
> - **JetBrains Mono Variable** for code at 14px with ligature support
### ๐ Tabbed Interface
- Open **multiple documents** simultaneously in tabs
- ๐ **Duplicate detection** - re-opening an already-open file switches to its tab
- โจ Animated tab enter/exit with layout transitions
- โ โถ **Scroll arrows** appear on overflow with hold-to-scroll
- ๐ฑ๏ธ **Mouse wheel** scrolling over the tab bar
- ๐ New tabs **auto-scroll** into view
- โ Close tabs with the button or `Ctrl+W`
### ๐งญ Navigation
- ๐ **Table of Contents** sidebar auto-generated from headings (H1-H6) with indentation
- Click any heading to **smooth-scroll** to that section
- Sidebar opens even with no headings (shows "No headings" message)
- โ๏ธ **Resizable** sidebar via drag handle
- ๐ **Full-text search** with real-time highlighting, match counter, and `Enter` to cycle
### ๐๏ธ Reading Experience
| Feature | Details |
|:--|:--|
| ๐ฅ๏ธ Focus Mode | `F11` hides title bar and menu for immersive reading |
| ๐ Content Zoom | `Ctrl+Scroll` - 50% to 200% |
| โ๏ธ Content Width | `Shift+Scroll` - 400px to 1200px |
| ๐ฒ UI Scale | 50%-200% via View menu spinner, persisted across sessions |
| ๐ Kinetic Scroll | Right-mouse drag with iOS-style rubber band overscroll |
| ๐ Custom Scrollbars | Thin, auto-hiding, accent-colored on hover |
| ๐พ Window Memory | Position, size, and maximized state remembered between sessions |
### ๐ File Handling
- Open via **File menu**, **`Ctrl+O`**, or **drag-and-drop** from Explorer
- Supports `.md` ยท `.markdown` ยท `.txt`
- Native Tauri drag-and-drop integration with real file system paths
### ๐จ UI Details
- Custom **frameless title bar** with minimize, maximize/restore, and close
- **Right-click context menu** - Copy, Open File, Toggle Search, Toggle Sidebar, Focus Mode, Keyboard Shortcuts, About, Exit
- ๐๏ธ **Text selection preserved** visually on right-click via overlay rendering
- Context menu **stays within bounds** and respects UI zoom
- All panels, modals, tabs, and menus **animate** with Framer Motion
- Subtle **noise texture overlay** on the app background
## โจ๏ธ Keyboard Shortcuts
| Shortcut | Action |
|:--|:--|
| `Ctrl+O` | ๐ Open file |
| `Ctrl+W` | โ Close current tab |
| `Ctrl+Q` | ๐ช Exit application |
| `Ctrl+F` | ๐ Toggle search |
| `Ctrl+Shift+S` | ๐ Toggle sidebar |
| `F11` | ๐ฅ๏ธ Toggle focus mode |
| `Escape` | โ Close search / sidebar |
| `Ctrl+Scroll` | ๐ Zoom content in / out |
| `Shift+Scroll` | โ๏ธ Adjust content width |
## ๐ฆ Installation
### Prerequisites
- Windows 10 or later
- WebView2 Runtime (pre-installed on Windows 10/11)
### Download
Download the latest **`vesper.exe`** from the [Releases](https://github.com/yourusername/vesper/releases) page.
No installation required - Vesper is fully portable. No gatekeepers between you and your documents.
### Build from Source
Everyone has the right to inspect, modify, and rebuild the tools they use.
> **Requires:** [Node.js](https://nodejs.org/) v18+ ยท [Rust](https://www.rust-lang.org/tools/install) stable ยท [Tauri v2 prerequisites](https://v2.tauri.app/start/prerequisites/)
```bash
git clone https://github.com/yourusername/vesper.git
cd vesper
npm install
```
```bash
# Development (hot-reload on localhost:1420)
npm run tauri dev
# Production build
npm run tauri build
# -> src-tauri/target/release/vesper.exe
```
## ๐ง Technology Stack
Built entirely on open-source foundations - no proprietary dependencies, no vendor lock-in.
| | Layer | Technology |
|:--|:--|:--|
| โ๏ธ | Runtime | [Tauri v2](https://tauri.app/) - Rust + WebView2 |
| โ๏ธ | Frontend | React 19 ยท TypeScript ยท Vite 7 |
| ๐จ | Styling | Tailwind CSS 4 ยท DaisyUI 5 ยท Custom CSS |
| ๐ | Markdown | [markdown-it](https://github.com/markdown-it/markdown-it) + plugins |
| ๐ | Syntax | [highlight.js](https://highlightjs.org/) |
| ๐ฌ | Animation | [Framer Motion](https://www.framer.com/motion/) |
| ๐ค | Fonts | [Inter Variable](https://rsms.me/inter/) ยท [JetBrains Mono](https://www.jetbrains.com/lp/mono/) |
| ๐ผ๏ธ | Icons | [Lucide React](https://lucide.dev/) |
| ๐ | Scrollbars | [OverlayScrollbars](https://kingsora.github.io/OverlayScrollbars/) |
**Tauri Plugins:** `dialog` ยท `fs` ยท `opener`
## ๐ผ Portable
Vesper is **fully portable** - zero installation, zero system footprint. Your tools, your data, under your control.
All data lives in a `data/` folder next to the executable:
```
vesper.exe
data/
โโโ window-state.json <- window position, size, maximized
โโโ EBWebView/ <- WebView2 data (localStorage, cache)
```
> Nothing is written to AppData, the registry, or any other system location.
> No cloud sync, no phoning home. To move Vesper, just copy the exe and optionally the `data/` folder.
## ๐ง Design Philosophy
| | Principle |
|:--|:--|
| ๐ | **Content First** - all UI chrome can be hidden; the reader is the focus |
| ๐ค | **Typography Matters** - Inter at 17px, 1.7 line-height, ~65 char measure |
| ๐ | **Dark by Default** - deep onyx base `#282C33` reduces eye strain |
| โจ๏ธ | **Keyboard Driven** - every feature accessible via shortcuts |
| โจ | **Minimalist Chrome** - the interface gets out of your way |
| ๐ค | **No Extraction** - no ads, no tracking, no data harvesting, no paywalls |
## ๐จ Color Palette
| Swatch | Name | Hex | Usage |
|:--|:--|:--|:--|
| ๐ซ | Base | `#282C33` | Window background |
| โฌ | Surface | `#252A31` | Title bar, sidebar |
| ๐ฒ | Elevated | `#2D333C` | Active tab, modals |
| โพ | Overlay | `#333942` | Dropdowns, context menu |
| โฌ | Text Primary | `#E4E6EB` | Main content |
| ๐ | Text Secondary | `#ABB0B8` | UI labels |
| ๐ฉถ | Text Tertiary | `#6B7280` | Placeholders, hints |
| ๐ต | Accent | `#6B8AFF` | Interactive elements |
| ๐ท | Link | `#7CA9F7` | Hyperlinks |
## ๐๏ธ Project Structure
```
vesper/
โโโ src/
โ โโโ App.tsx Main application component
โ โโโ main.tsx React entry point
โ โโโ styles.css Variables, UI, markdown typography
โโโ src-tauri/
โ โโโ src/
โ โ โโโ main.rs Rust entry point
โ โ โโโ lib.rs Tauri builder, portable data, window state
โ โโโ capabilities/
โ โ โโโ default.json Permission declarations
โ โโโ tauri.conf.json Window, bundle, and build config
โ โโโ Cargo.toml Rust dependencies
โ โโโ icons/ App icons (ICO, PNG, ICNS)
โโโ index.html
โโโ package.json
โโโ vite.config.ts
โโโ tsconfig.json
```
## ๐ License
Dedicated to the **public domain** under [CC0 1.0 Universal](LICENSE). No copyright, no restrictions, no permission needed. Take it, use it, change it, share it - it belongs to everyone.
## ๐ Acknowledgments
Built with gratitude on the collective work of open-source communities worldwide:
- [iA Writer](https://ia.net/writer) - design inspiration
- [Tauri](https://tauri.app/) - desktop framework
- [markdown-it](https://github.com/markdown-it/markdown-it) - markdown parsing
- [highlight.js](https://highlightjs.org/) - syntax highlighting