Noteriv
Fast markdown notes, everywhere.
The open-source markdown editor with a graph view, plugin API, themes, Git/WebDAV sync, and an AI MCP server — built on Tauri 2.
~15 MB. Linux, macOS, Windows. React Native mobile companion app.
Note: The mobile app is a work in progress. All features ship to desktop first.
Website · Docs · Google Play · App Store · Features · Getting Started · Desktop · Mobile · Community · Structure · Contributing
Why Noteriv?
Most note apps lock you into their cloud, their format, or their platform. Noteriv is different:
- Your notes are plain markdown files. No proprietary format. Open them in any editor, anywhere.
- Your data stays yours. Notes live on your device. Sync with GitHub if you want, or don't.
- Same app on every platform. Desktop and mobile with full feature parity. Edit on your laptop, review on your phone.
- Extensible. Plugins, themes, and CSS snippets let you make it your own.
β¨ Features
Editor
Writing
|
Markdown Support
|
Knowledge Management
Linking & Discovery
|
Organization
|
Advanced Features
Content Tools
|
Media & Attachments
|
Sync
|
Views
Board ViewTurn any note into a drag-and-drop task board. Create
|
Calendar ViewVisual month calendar that surfaces your daily notes and tasks with due dates.
|
AI Integration
MCP ServerConnect any MCP-compatible AI assistant (Claude, Cursor, etc.) directly to your Noteriv vault with full read/write access.
Or install from npm: |
Collaboration & Sharing
Live CollaborationReal-time co-editing using Yjs CRDT over WebRTC — peer-to-peer, no server required.
|
Publish as HTMLExport notes as beautiful standalone web pages using your current theme.
|
Web ClipperBrowser extension to save articles and selections as markdown notes directly into your vault.
|
|
Customization
Themes10 built-in themes with full dark and light mode support:
|
EcosystemPlugins
CSS Snippets
|
Editor Settings
| Setting | Options |
|---|---|
| Auto-save interval | Off, 10s, 30s, 1 min, 5 min (sync auto every 5s) |
| Font size | 12px – 24px |
| Line height | 1.2 – 2.0 |
| Tab size | 2, 4, 8 |
| Editor font | JetBrains Mono, Fira Code, Cascadia Code, Source Code Pro, SF Mono, System Mono |
| Theme | 10 built-in + community + custom |
| Accent color | 8 options |
| Spell check | On / Off |
π Getting Started
Prerequisites
Clone the repo
git clone https://github.com/thejacedev/Noteriv.git
cd Noteriv
π₯ Desktop App
Tauri 2 + Next.js — Windows, macOS, Linux
The desktop app provides the full Noteriv experience with a CodeMirror-based editor, native file system access, and Git integration via the system's git binary.
Install
Fedora (COPR)
sudo dnf copr enable jacedev/noteriv
sudo dnf install noteriv
dnf upgrade keeps it current.
Flatpak (any Linux distro)
flatpak remote-add --if-not-exists --no-gpg-verify noteriv https://flatpak.thejacedev.xyz/noteriv/repo
flatpak install noteriv com.noteriv.Noteriv
flatpak update keeps it current.
For other platforms, grab a build from the latest release:
| Platform | Formats |
|---|---|
| Linux | .rpm, .deb, AppImage |
| Windows | .exe installer, portable .zip |
| macOS | .dmg |
Development
cd desktop
npm install
npm run dev
This starts both the Next.js dev server (port 3456) and the Tauri window simultaneously.
Build
cd desktop
npm run build
Builds distributable packages to desktop/dist/:
| Platform | Format |
|---|---|
| Linux | AppImage, .deb, .rpm |
| macOS | .dmg |
| Windows | .exe (NSIS installer) |
Desktop Architecture
desktop/
βββ src-tauri/ Rust backend (Tauri 2)
β βββ src/
β β βββ lib.rs App entry, plugin registration, startup
β β βββ shim.rs window.electronAPI shim + drag/resize polyfill
β β βββ store.rs Persistent config (vaults, settings)
β β βββ auth.rs GitHub token storage + API
β β βββ updater_cmds.rs Auto-update via tauri-plugin-updater
β β βββ clipper.rs Web clipper local HTTP server
β β βββ watcher.rs Vault file watcher (debounced)
β β βββ menu.rs Hidden menu for keyboard accelerators
β β βββ commands_git.rs Git operations via std::process::Command
β β βββ commands_sync.rs Folder + WebDAV sync providers
β β βββ commands_*.rs Other IPC commands
β βββ Cargo.toml
β βββ tauri.conf.json
β βββ capabilities/
βββ package.json # renderer deps + tauri scripts
βββ src/
β βββ app/
β β βββ page.tsx Main app (90+ state variables)
β β βββ layout.tsx Next.js root layout
β β βββ globals.css Global styles + CSS variables
β βββ components/ 41 React components
β β βββ Editor.tsx CodeMirror markdown editor
β β βββ Sidebar.tsx File tree with drag-drop
β β βββ TitleBar.tsx Tabs + window controls
β β βββ SettingsModal.tsx 6-section settings
β β βββ SetupWizard.tsx First-run wizard
β β βββ GraphView.tsx Force-directed knowledge graph
β β βββ Canvas.tsx Visual whiteboard
β β βββ SlidePresentation.tsx Markdown presentations
β β βββ CommandPalette.tsx Searchable action palette
β β βββ ThemePicker.tsx Theme browser + installer
β β βββ PluginManager.tsx Plugin browser + installer
β β βββ CSSSnippets.tsx Snippet editor + community
β β βββ DrawingEditor.tsx Canvas drawing editor (pencil, shapes, arrows, text, eraser)
β β βββ CalendarView.tsx Month calendar with daily notes + tasks
β β βββ BoardView.tsx Drag-and-drop task board
β β βββ DataviewBlock.tsx Vault query result renderer
β β βββ PublishPreview.tsx HTML export preview + multi-note publish
β β βββ FlashcardReview.tsx Spaced repetition flashcard review
β β βββ CollabPanel.tsx Live collaboration session manager
β β βββ PDFViewer.tsx PDF viewer with annotation tools
β β βββ markdown/ Live rendering engine
β β βββ plugin.ts CodeMirror ViewPlugin
β β βββ registry.ts Renderer registration
β β βββ renderers/ 15 block + inline renderers
β β βββ callouts.ts Obsidian-style admonitions
β β βββ embeds.ts Note embedding (![[file]])
β β βββ math.ts KaTeX rendering
β β βββ mermaid.ts Diagram rendering
β β βββ wikilinks.ts Interactive wiki-links
β β βββ slash-commands.ts / command menu
β βββ lib/ 33 utility modules
β β βββ settings.ts App settings + defaults
β β βββ theme-utils.ts 10 built-in themes + community
β β βββ plugin-api.ts Plugin sandbox + API
β β βββ css-snippets.ts CSS snippet system
β β βββ hotkeys.ts 70+ rebindable shortcuts
β β βββ editor-commands.ts Formatting commands
β β βββ wiki-link-utils.ts Link parsing + resolution
β β βββ tag-utils.ts Tag extraction + aggregation
β β βββ frontmatter-utils.ts YAML frontmatter
β β βββ template-utils.ts Template variables
β β βββ file-recovery.ts Snapshot system
β β βββ note-composer-utils.ts Merge + split
β β βββ attachment-utils.ts Media management
β β βββ audio-utils.ts Recording utilities
β β βββ canvas-utils.ts Canvas data model
β β βββ slide-utils.ts Presentation parser
β β βββ pdf-export.ts PDF export
β β βββ sync-providers.ts Folder + WebDAV config
β β βββ vim-mode.ts Vim keybindings
β β βββ drawing-utils.ts Drawing file create/parse/serialize/export
β β βββ calendar-utils.ts Calendar grid, daily note mapping, task extraction
β β βββ board-utils.ts Board parse/serialize, card/column CRUD
β β βββ dataview.ts Vault query engine (TABLE, LIST, TASK)
β β βββ toc-utils.ts Table of contents generation + auto-update
β β βββ publish.ts HTML export with theme colors
β β βββ flashcard-utils.ts SM-2 spaced repetition + card extraction
β β βββ collab.ts Yjs CRDT + WebRTC collaboration
β β βββ focus-mode.ts Focus/typewriter mode extension
β β βββ pdf-annotation.ts PDF annotation types + sidecar I/O + markdown export
β βββ types/
β βββ electron.d.ts IPC type definitions (50+ methods)
βββ public/ App icons (macOS, Windows, Linux)
π± Mobile App
Expo + React Native — Android, iOS
Work in progress. All features come to desktop first, then mobile.
The mobile app aims for feature parity with the desktop, adapted for touch interfaces. Notes are stored in the app's document directory and synced via the GitHub REST API.
Get it: App Store · Google Play · Android APK (direct sideload download)
Development
cd phone
npm install
npx expo start
| Command | Description |
|---|---|
npx expo start |
Start Expo dev server |
npx expo start --android |
Open on Android device/emulator |
npx expo start --ios |
Open on iOS simulator |
Mobile Architecture
phone/
βββ app/ Screens (Expo Router, file-based routing)
β βββ _layout.tsx Root layout + theme provider
β βββ index.tsx Home (notes list, daily note, random note)
β βββ editor.tsx Markdown editor + preview
β βββ settings.tsx Settings (themes, GitHub, ecosystem)
β βββ setup.tsx First-run wizard with GitHub auth
β βββ templates.tsx Template picker
β βββ recovery.tsx File recovery / snapshots
β βββ composer.tsx Note merge + split
β βββ attachments.tsx Attachment manager
β βββ backlinks.tsx Backlinks viewer
β βββ frontmatter.tsx YAML frontmatter editor
β βββ slides.tsx Slide presentation viewer
β βββ snippets.tsx CSS snippets (installed + community)
β βββ plugins.tsx Plugin manager (installed + community)
β βββ calendar.tsx Monthly calendar with daily note dots + due tasks
β βββ flashcards.tsx SM-2 spaced repetition flashcard review
β βββ graph.tsx Force-directed wiki-link graph (WebView canvas)
β βββ trash.tsx Trash / soft delete with restore
β βββ publish.tsx Publish note as HTML + share sheet
βββ components/
β βββ MarkdownEditor.tsx TextInput editor + formatting toolbar
β βββ MarkdownPreview.tsx Custom markdown renderer
β βββ NotesList.tsx File/folder browser
β βββ SearchModal.tsx Quick open + vault search
β βββ CreateModal.tsx Create file/folder
β βββ VaultSwitcher.tsx Switch/create vaults
β βββ OutlinePanel.tsx Document outline
β βββ BookmarksPanel.tsx Bookmarked files
β βββ TagsPanel.tsx Hierarchical tag browser
β βββ BoardView.tsx Board view with columns + cards
βββ context/
β βββ AppContext.tsx Global state (vault, settings, files, auto-sync)
β βββ ThemeContext.tsx Dynamic theme provider
βββ lib/
β βββ file-system.ts expo-file-system class API wrapper
β βββ vault.ts Vault CRUD + workspace
β βββ settings.ts Settings with defaults
β βββ storage.ts AsyncStorage wrappers
β βββ github-sync.ts GitHub REST API sync (push/pull)
β βββ templates.ts Template listing + variables
β βββ frontmatter.ts YAML parse/serialize
β βββ file-recovery.ts Snapshot system
β βββ note-composer.ts Merge + split
β βββ wiki-links.ts Link parsing + backlinks
β βββ attachments.ts Attachment management
β βββ slide-utils.ts Slide parser
β βββ daily-note.ts Daily note helper
β βββ random-note.ts Random note picker
β βββ css-snippets.ts CSS snippet system
β βββ plugins.ts Plugin management
β βββ community.ts Community theme support
β βββ calendar-utils.ts Month grid, task extraction
β βββ flashcard-utils.ts SM-2 algorithm, card extraction
β βββ markdown-lint.ts Linting rules (wiki-links, headings, code blocks)
β βββ note-history.ts Line-based diff (LCS algorithm)
β βββ publish.ts Markdown-to-HTML converter
β βββ board-utils.ts Board parse/serialize, card CRUD
β βββ dataview.ts Vault query engine
βββ constants/
β βββ theme.ts 10 built-in themes + accent colors
βββ types/
βββ index.ts TypeScript interfaces
Mobile vs Desktop
Both apps share the same feature set with platform-appropriate adaptations:
| Feature | Desktop | Mobile |
|---|---|---|
| Editor | CodeMirror 6 | TextInput + toolbar |
| Git sync | Native git binary | GitHub REST API + fresh clone |
| File storage | Any filesystem path | App document directory |
| Themes | 10 built-in + custom creator | 10 built-in + community install |
| Plugins | Sandbox execution | Install + enable/disable |
| Navigation | Sidebar + tabs + split editor | Stack navigation + swipe between notes |
| Graph view | Force-directed canvas | Force-directed WebView canvas |
| Board view | Drag-drop columns | Horizontal scroll columns with move actions |
| Calendar | Monthly grid | Monthly grid with daily note dots |
| Flashcards | SM-2 spaced repetition | SM-2 spaced repetition |
| Canvas | SVG whiteboard | — |
| Vim mode | CodeMirror vim extension | — |
| Audio recorder | MediaRecorder API | — |
| Drawing editor | Canvas with tools | — |
| PDF viewer | Inline annotations | — |
| Keyboard shortcuts | 70+ rebindable | System defaults |
π Community
Noteriv has a growing ecosystem of community-created extensions. Browse and install them directly from the app.
Pluginsthejacedev/NoterivPluginsExtend Noteriv with custom commands, sidebar panels, status bar items, and editor integrations. Plugins have access to the vault filesystem, editor state, and event system. Plugin API: vault read/write, UI commands, event listeners (file-open, file-save, editor-change, etc.), editor manipulation (insert, replace, cursor) |
Themesthejacedev/NoterivThemesCommunity color themes beyond the 10 built-in options. Themes define 16 color properties covering backgrounds, text, accent, and syntax colors. Theme format: JSON with id, name, type (dark/light), and colors object. Import/export supported on desktop. |
CSS Snippetsthejacedev/NoterivSnippetsFine-tune the editor and preview with custom CSS. Snippets are stored per-vault and can be toggled individually. Community snippets are organized by category. Snippet storage: .noteriv/snippets/ directory with per-snippet .css files and a config JSON for enable/disable state.
|
Creating Plugins
Plugins live in .noteriv/plugins/{plugin-id}/ inside your vault. Each plugin needs:
my-plugin/
βββ manifest.json Plugin metadata
βββ main.js Entry point
manifest.json:
{
"id": "my-plugin",
"name": "My Plugin",
"version": "1.0.0",
"description": "What this plugin does",
"author": "Your Name",
"main": "main.js"
}
main.js:
module.exports = {
onLoad(api) {
api.ui.addCommand({
id: "hello",
name: "Say Hello",
callback: () => api.ui.showNotice("Hello from my plugin!")
});
},
onUnload() {
// cleanup
}
};
Creating Themes
Themes are JSON files with 16 color properties:
{
"id": "my-theme",
"name": "My Theme",
"type": "dark",
"colors": {
"bgPrimary": "#1a1b26",
"bgSecondary": "#16161e",
"bgTertiary": "#24283b",
"border": "#3b4261",
"textPrimary": "#c0caf5",
"textSecondary": "#a9b1d6",
"textMuted": "#565f89",
"accent": "#7aa2f7",
"green": "#9ece6a",
"red": "#f7768e",
"yellow": "#e0af68",
"blue": "#7aa2f7",
"mauve": "#bb9af7",
"peach": "#ff9e64",
"teal": "#73daca",
"pink": "#bb9af7"
}
}
Save to .noteriv/themes/my-theme.json or submit a PR to NoterivThemes.
π Project Structure
Noteriv/
βββ desktop/ Tauri 2 + Next.js desktop application
β βββ src-tauri/ Rust backend (IPC, file I/O, Git, sync, clipper server, vault watcher)
β βββ src/components/ 41 React components + markdown rendering engine
β βββ src/lib/ 33 utility modules
β βββ public/ Platform icons + pdf.js worker
βββ mcp/ MCP server for AI assistant integration (22 tools, auto-discovers vaults)
βββ extension/ Web Clipper browser extension (Manifest V3)
βββ phone/ Expo + React Native mobile application
β βββ app/ 19 screens (Expo Router)
β βββ components/ 11 UI components
β βββ lib/ 24 utility modules
β βββ context/ App state + theme contexts
βββ .github/workflows/ CI/CD (build + release)
βββ LICENSE MIT License
βββ README.md
π§ Development
Commands
| Command | Description |
|---|---|
cd desktop && npm run dev |
Desktop dev mode (Next.js + Tauri) |
cd desktop && npm run build |
Build desktop distributables |
cd desktop && npm run build:next |
Build Next.js only |
cd mcp && npm install |
Install MCP server dependencies |
node mcp/index.js |
Run MCP server (manual vault path optional) |
cd phone && npx expo start |
Mobile dev server |
cd phone && npx expo start --android |
Run on Android |
cd phone && npx expo start --ios |
Run on iOS |
cd phone && npx expo export |
Export mobile app bundle |
Tech Stack
| Layer | Desktop | Mobile |
|---|---|---|
| Framework | Next.js 16 | Expo 54 |
| UI | React 19 | React Native 0.81 |
| Editor | CodeMirror 6 | TextInput + custom renderer |
| Runtime | Tauri 2 (Rust) | Expo Router 6 |
| File I/O | Rust std::fs | expo-file-system |
| Sync | std::process git | GitHub REST API |
| Storage | JSON files | AsyncStorage |
| Styling | Tailwind CSS 4 | StyleSheet + dynamic themes |
| Math | KaTeX | — |
| Diagrams | Mermaid | — |
π€ Contributing
Contributions are welcome! Here's how you can help:
- Report bugs — Open an issue with steps to reproduce
- Suggest features — Open an issue describing what you'd like to see
- Submit code — Fork, create a branch, make your changes, and open a PR
- Create plugins — Build and share plugins via NoterivPlugins
- Create themes — Design and share themes via NoterivThemes
- Create snippets — Write and share CSS snippets via NoterivSnippets
π License
MIT © Jace Sleeman
Built with care by @thejacedev