Skip to content
Conduit

mcp server

Noteriv

A fast, open-source markdown editor. Graph view, plugin API, themes, Git/WebDAV sync, AI MCP — built on Tauri 2.

thejacedev/Noterivcommunitylistedunreviewednot running here yet

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 14, 2026

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

Knowledge Management

Advanced Features

Views

AI Integration

Collaboration & Sharing

Customization

Editor Settings

SettingOptions
Auto-save intervalOff, 10s, 30s, 1 min, 5 min (sync auto every 5s)
Font size12px – 24px
Line height1.2 – 2.0
Tab size2, 4, 8
Editor fontJetBrains Mono, Fira Code, Cascadia Code, Source Code Pro, SF Mono, System Mono
Theme10 built-in + community + custom
Accent color8 options
Spell checkOn / 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:

PlatformFormats
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/:

PlatformFormat
LinuxAppImage, .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
CommandDescription
npx expo startStart Expo dev server
npx expo start --androidOpen on Android device/emulator
npx expo start --iosOpen 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:

FeatureDesktopMobile
EditorCodeMirror 6TextInput + toolbar
Git syncNative git binaryGitHub REST API + fresh clone
File storageAny filesystem pathApp document directory
Themes10 built-in + custom creator10 built-in + community install
PluginsSandbox executionInstall + enable/disable
NavigationSidebar + tabs + split editorStack navigation + swipe between notes
Graph viewForce-directed canvasForce-directed WebView canvas
Board viewDrag-drop columnsHorizontal scroll columns with move actions
CalendarMonthly gridMonthly grid with daily note dots
FlashcardsSM-2 spaced repetitionSM-2 spaced repetition
CanvasSVG whiteboard—
Vim modeCodeMirror vim extension—
Audio recorderMediaRecorder API—
Drawing editorCanvas with tools—
PDF viewerInline annotations—
Keyboard shortcuts70+ rebindableSystem defaults

🌐 Community

Noteriv has a growing ecosystem of community-created extensions. Browse and install them directly from the app.

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

CommandDescription
cd desktop && npm run devDesktop dev mode (Next.js + Tauri)
cd desktop && npm run buildBuild desktop distributables
cd desktop && npm run build:nextBuild Next.js only
cd mcp && npm installInstall MCP server dependencies
node mcp/index.jsRun MCP server (manual vault path optional)
cd phone && npx expo startMobile dev server
cd phone && npx expo start --androidRun on Android
cd phone && npx expo start --iosRun on iOS
cd phone && npx expo exportExport mobile app bundle

Tech Stack

LayerDesktopMobile
FrameworkNext.js 16Expo 54
UIReact 19React Native 0.81
EditorCodeMirror 6TextInput + custom renderer
RuntimeTauri 2 (Rust)Expo Router 6
File I/ORust std::fsexpo-file-system
Syncstd::process gitGitHub REST API
StorageJSON filesAsyncStorage
StylingTailwind CSS 4StyleSheet + dynamic themes
MathKaTeX—
DiagramsMermaid—

🤝 Contributing

Contributions are welcome! Here's how you can help:

  1. Report bugs — Open an issue with steps to reproduce
  2. Suggest features — Open an issue describing what you'd like to see
  3. Submit code — Fork, create a branch, make your changes, and open a PR
  4. Create plugins — Build and share plugins via NoterivPlugins
  5. Create themes — Design and share themes via NoterivThemes
  6. Create snippets — Write and share CSS snippets via NoterivSnippets

📄 License

MIT © Jace Sleeman

↑↓ navigate openesc close