{"id":47282646,"url":"https://github.com/thejacedev/noteriv","last_synced_at":"2026-05-31T01:00:31.564Z","repository":{"id":344595696,"uuid":"1181028617","full_name":"thejacedev/Noteriv","owner":"thejacedev","description":"A modern, open-source markdown editor built with Electron — graph view, plugin API, themes, and more.","archived":false,"fork":false,"pushed_at":"2026-04-25T15:01:14.000Z","size":13131,"stargazers_count":22,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-25T17:10:11.807Z","etag":null,"topics":["daily-notes","electron","knowledge-base","markdown-editor","mcp","note-taking","notes","obsidian-alternative","react","vault"],"latest_commit_sha":null,"homepage":"https://www.noteriv.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thejacedev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["thejacedev"]}},"created_at":"2026-03-13T17:09:26.000Z","updated_at":"2026-04-25T15:01:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"d59fe9b2-cc97-42a8-a201-479b9a94a462","html_url":"https://github.com/thejacedev/Noteriv","commit_stats":null,"previous_names":["thejacedev/noteriv"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/thejacedev/Noteriv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thejacedev%2FNoteriv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thejacedev%2FNoteriv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thejacedev%2FNoteriv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thejacedev%2FNoteriv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thejacedev","download_url":"https://codeload.github.com/thejacedev/Noteriv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thejacedev%2FNoteriv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33715211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daily-notes","electron","knowledge-base","markdown-editor","mcp","note-taking","notes","obsidian-alternative","react","vault"],"created_at":"2026-03-16T02:26:31.159Z","updated_at":"2026-05-31T01:00:31.539Z","avatar_url":"https://github.com/thejacedev.png","language":"TypeScript","funding_links":["https://github.com/sponsors/thejacedev"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"desktop/public/banner.png\" alt=\"Noteriv\" /\u003e\n  \u003ch1\u003eNoteriv\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eFast markdown notes, everywhere.\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003e\n    The open-source markdown editor with a graph view, plugin API, themes, Git/WebDAV sync, and an AI MCP server \u0026mdash; built on \u003cstrong\u003eTauri 2\u003c/strong\u003e.\u003cbr /\u003e\n    ~15 MB. Linux, macOS, Windows. React Native mobile companion app.\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003cstrong\u003eNote:\u003c/strong\u003e The mobile app is a work in progress. All features ship to desktop first.\n  \u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://www.noteriv.com\"\u003e\u003cstrong\u003eWebsite\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"https://docs.noteriv.com\"\u003e\u003cstrong\u003eDocs\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"https://play.google.com/store/apps/details?id=com.ironstacksoftware.noteriv\"\u003e\u003cstrong\u003eGoogle Play\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"https://apps.apple.com/us/app/noteriv/id6761115699\"\u003e\u003cstrong\u003eApp Store\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-features\"\u003e\u003cstrong\u003eFeatures\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-getting-started\"\u003e\u003cstrong\u003eGetting Started\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-desktop-app\"\u003e\u003cstrong\u003eDesktop\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-mobile-app\"\u003e\u003cstrong\u003eMobile\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-community\"\u003e\u003cstrong\u003eCommunity\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-project-structure\"\u003e\u003cstrong\u003eStructure\u003c/strong\u003e\u003c/a\u003e \u0026middot;\n    \u003ca href=\"#-contributing\"\u003e\u003cstrong\u003eContributing\u003c/strong\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\n  \u003cbr /\u003e\n\u003c/div\u003e\n\n---\n\n## Why Noteriv?\n\nMost note apps lock you into their cloud, their format, or their platform. Noteriv is different:\n\n- **Your notes are plain markdown files.** No proprietary format. Open them in any editor, anywhere.\n- **Your data stays yours.** Notes live on your device. Sync with GitHub if you want, or don't.\n- **Same app on every platform.** Desktop and mobile with full feature parity. Edit on your laptop, review on your phone.\n- **Extensible.** Plugins, themes, and CSS snippets let you make it your own.\n\n---\n\n## ✨ Features\n\n### Editor\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eWriting\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eLive markdown preview\u003c/strong\u003e \u0026mdash; See rendered output as you type\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eSource mode\u003c/strong\u003e \u0026mdash; Raw markdown with syntax highlighting\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eRead-only mode\u003c/strong\u003e \u0026mdash; Clean rendered view for reading\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFormatting toolbar\u003c/strong\u003e \u0026mdash; Bold, italic, headings, links, lists, code, tables, horizontal rules\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eAuto-save\u003c/strong\u003e \u0026mdash; Configurable intervals (10s, 30s, 1m, 5m) or manual\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eSpell check\u003c/strong\u003e \u0026mdash; Toggle on/off\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eVim mode\u003c/strong\u003e \u0026mdash; Optional vim keybindings (desktop)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFocus mode\u003c/strong\u003e \u0026mdash; Dims all lines except the active one for distraction-free writing. \u003ccode\u003eCtrl+Shift+D\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eSplit editor\u003c/strong\u003e \u0026mdash; Open two notes side by side. Right-click tab → \"Open in Split\" or \u003ccode\u003eCtrl+\\\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003ePer-file view mode\u003c/strong\u003e \u0026mdash; Right-click in editor to set a default mode (Live/Source/View) per file, persisted across restarts\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eMulti-select sidebar\u003c/strong\u003e \u0026mdash; \u003ccode\u003eCtrl+Click\u003c/code\u003e to toggle, \u003ccode\u003eShift+Click\u003c/code\u003e for range. Merge, delete, or move in bulk\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eMarkdown Support\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003eHeadings (H1\u0026ndash;H6)\u003c/li\u003e\n        \u003cli\u003eBold, italic, strikethrough, highlight\u003c/li\u003e\n        \u003cli\u003eOrdered \u0026amp; unordered lists\u003c/li\u003e\n        \u003cli\u003eTask lists with checkboxes\u003c/li\u003e\n        \u003cli\u003eTables with alignment + interactive checkboxes in cells\u003c/li\u003e\n        \u003cli\u003eFenced code blocks with syntax highlighting\u003c/li\u003e\n        \u003cli\u003eBlock \u0026amp; inline math (LaTeX via KaTeX)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eMermaid diagrams\u003c/strong\u003e \u0026mdash; Flowcharts, sequence diagrams, Gantt charts, pie charts, and more rendered inline from \u003ccode\u003e```mermaid\u003c/code\u003e code blocks\u003c/li\u003e\n        \u003cli\u003eCallouts / admonitions (16+ types)\u003c/li\u003e\n        \u003cli\u003eFootnotes \u0026amp; definition lists\u003c/li\u003e\n        \u003cli\u003eSuperscript, subscript\u003c/li\u003e\n        \u003cli\u003eHTML blocks\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Knowledge Management\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eLinking \u0026amp; Discovery\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eWiki-links\u003c/strong\u003e \u0026mdash; Link notes with \u003ccode\u003e[[note name]]\u003c/code\u003e, supports aliases \u003ccode\u003e[[note|display]]\u003c/code\u003e and headings \u003ccode\u003e[[note#heading]]\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eBacklinks panel\u003c/strong\u003e \u0026mdash; See every note that links to the current file\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eTags\u003c/strong\u003e \u0026mdash; Hierarchical tags with \u003ccode\u003e#tag\u003c/code\u003e and \u003ccode\u003e#parent/child\u003c/code\u003e syntax\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eGraph view\u003c/strong\u003e \u0026mdash; Interactive force-directed knowledge graph (desktop)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eHover preview\u003c/strong\u003e \u0026mdash; Preview linked notes on hover (desktop)\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eOrganization\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eVaults\u003c/strong\u003e \u0026mdash; Multiple vaults for different projects or areas of life\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFolders\u003c/strong\u003e \u0026mdash; Nested folder structure with drag-and-drop reordering\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eBookmarks\u003c/strong\u003e \u0026mdash; Pin frequently accessed notes\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eOutline panel\u003c/strong\u003e \u0026mdash; Table of contents from headings\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eQuick open\u003c/strong\u003e \u0026mdash; Fuzzy file search across your vault\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eVault search\u003c/strong\u003e \u0026mdash; Full-text search across all notes\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eDaily notes\u003c/strong\u003e \u0026mdash; Quick-access to today's note\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eRandom note\u003c/strong\u003e \u0026mdash; Rediscover forgotten ideas\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Advanced Features\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"33%\"\u003e\n      \u003ch4\u003eContent Tools\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eTemplates\u003c/strong\u003e \u0026mdash; Create notes from templates with variables (\u003ccode\u003e{{date}}\u003c/code\u003e, \u003ccode\u003e{{time}}\u003c/code\u003e, \u003ccode\u003e{{title}}\u003c/code\u003e, and more)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFrontmatter editor\u003c/strong\u003e \u0026mdash; YAML metadata editing with property suggestions\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eNote composer\u003c/strong\u003e \u0026mdash; Merge multiple notes or split by heading level\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eNote merge from sidebar\u003c/strong\u003e \u0026mdash; \u003ccode\u003eCtrl+Click\u003c/code\u003e multiple files → right-click → \"Merge N Notes\" to combine with \u003ccode\u003e---\u003c/code\u003e separators\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFile recovery\u003c/strong\u003e \u0026mdash; Automatic snapshots (up to 50 per file) with one-tap restore\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eSlide presentations\u003c/strong\u003e \u0026mdash; Present markdown as slides (split by \u003ccode\u003e---\u003c/code\u003e), with speaker notes\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003ePDF export\u003c/strong\u003e \u0026mdash; Export notes to PDF (desktop)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eTable of contents\u003c/strong\u003e \u0026mdash; Type \u003ccode\u003e[TOC]\u003c/code\u003e to auto-generate a clickable table of contents from headings. Supports \u003ccode\u003e\u0026lt;!-- toc --\u0026gt;\u003c/code\u003e blocks that auto-update on save\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eDataview queries\u003c/strong\u003e \u0026mdash; Query your vault like a database with \u003ccode\u003eTABLE\u003c/code\u003e, \u003ccode\u003eLIST\u003c/code\u003e, and \u003ccode\u003eTASK\u003c/code\u003e queries inside \u003ccode\u003e```dataview\u003c/code\u003e code blocks. Filter by tags, folders, frontmatter fields, and more\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003ePublish as HTML\u003c/strong\u003e \u0026mdash; Export notes as standalone HTML pages using your current theme. Live preview, HTML editor, and multi-note publishing \u0026mdash; combine multiple notes into a single page before saving\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFlashcard review\u003c/strong\u003e \u0026mdash; Spaced repetition system using SM-2 algorithm. Add \u003ccode\u003eQ:\u003c/code\u003e/\u003ccode\u003eA:\u003c/code\u003e pairs or \u003ccode\u003e{{cloze}}\u003c/code\u003e deletions to notes, then review with keyboard-driven grading (Again/Hard/OK/Good/Easy). Progress saved per vault\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"33%\"\u003e\n      \u003ch4\u003eMedia \u0026amp; Attachments\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eAttachment manager\u003c/strong\u003e \u0026mdash; Browse, filter, and manage all vault attachments\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eImage support\u003c/strong\u003e \u0026mdash; PNG, JPG, GIF, SVG, WebP, and more\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eAudio files\u003c/strong\u003e \u0026mdash; MP3, WAV, OGG, FLAC, AAC\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eVideo files\u003c/strong\u003e \u0026mdash; MP4, MKV, AVI, MOV\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eAudio recorder\u003c/strong\u003e \u0026mdash; Record voice notes directly in the app (desktop)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eCanvas / Whiteboard\u003c/strong\u003e \u0026mdash; Infinite canvas with text nodes, sticky notes (6 colors), image nodes, freehand drawing, file embeds, groups, and edge connections. Toolbar with select, text, sticky, image, draw tools + color picker\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003ePDF annotation\u003c/strong\u003e \u0026mdash; Open PDFs inline with highlight (4 colors), underline, and note tools. Annotation sidebar, auto-save to sidecar JSON, and one-click export to linked markdown with blockquotes and page references\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eDrawing editor\u003c/strong\u003e \u0026mdash; Built-in drawing canvas with pencil, shapes, arrows, text, and eraser tools. Full color picker, stroke widths, pan \u0026amp; zoom. Drawings saved as \u003ccode\u003e.drawing\u003c/code\u003e files and embeddable in notes with \u003ccode\u003e![[file.drawing]]\u003c/code\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"33%\"\u003e\n      \u003ch4\u003eSync\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eGitHub sync\u003c/strong\u003e \u0026mdash; Push and pull notes to/from any GitHub repository\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eAuto-sync every 5 seconds\u003c/strong\u003e \u0026mdash; Always-on background sync, pull first then push. No config needed\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003ePull on open\u003c/strong\u003e \u0026mdash; Automatically pull latest changes when opening a vault\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFolder sync\u003c/strong\u003e \u0026mdash; Sync with Google Drive, Dropbox, OneDrive, iCloud (desktop)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eWebDAV sync\u003c/strong\u003e \u0026mdash; Sync with Nextcloud, ownCloud, or any WebDAV server (desktop)\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eVault file watcher\u003c/strong\u003e \u0026mdash; Monitors the vault directory for external changes (from the MCP server, git pulls, other editors). Sidebar refreshes automatically; open files with no unsaved changes reload instantly; open files with unsaved changes are saved first before reloading\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Views\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eBoard View\u003c/h4\u003e\n      \u003cp\u003eTurn any note into a drag-and-drop task board. Create \u003ccode\u003e.board.md\u003c/code\u003e files or add \u003ccode\u003eboard: true\u003c/code\u003e to frontmatter. Columns are H2 headings, cards are checkbox items.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eDrag cards between columns\u003c/li\u003e\n        \u003cli\u003eInline card editing (double-click)\u003c/li\u003e\n        \u003cli\u003eTags shown as colored pills\u003c/li\u003e\n        \u003cli\u003eDue date badges\u003c/li\u003e\n        \u003cli\u003eAuto-saves every 5 seconds\u003c/li\u003e\n        \u003cli\u003eSwitch to Source mode to edit raw markdown\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eCalendar View\u003c/h4\u003e\n      \u003cp\u003eVisual month calendar that surfaces your daily notes and tasks with due dates.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eBlue dots on days with daily notes\u003c/li\u003e\n        \u003cli\u003eGreen dots on days with due tasks\u003c/li\u003e\n        \u003cli\u003eClick a day to see its notes and tasks\u003c/li\u003e\n        \u003cli\u003eDouble-click to open or create a daily note\u003c/li\u003e\n        \u003cli\u003eMonth navigation and \"Today\" button\u003c/li\u003e\n        \u003cli\u003eAccessible from the ribbon or command palette\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### AI Integration\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003ch4\u003eMCP Server\u003c/h4\u003e\n      \u003cp\u003eConnect any MCP-compatible AI assistant (Claude, Cursor, etc.) directly to your Noteriv vault with full read/write access.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003e22 tools\u003c/strong\u003e \u0026mdash; read, write, append, delete, rename notes; list/create/delete folders; full-text search; tags, backlinks, outgoing links; vault stats; daily notes\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eAuto-discovers vaults\u003c/strong\u003e \u0026mdash; reads the same config file as the desktop app, no manual path setup needed\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eMulti-vault support\u003c/strong\u003e \u0026mdash; switch between vaults or pass a path directly as a CLI argument\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eLive sync\u003c/strong\u003e \u0026mdash; the desktop app watches the vault for external changes and automatically refreshes the sidebar and any open files when the MCP server (or anything else) modifies them\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eSoft delete\u003c/strong\u003e \u0026mdash; deleted notes go to \u003ccode\u003e.noteriv/trash/\u003c/code\u003e, restorable from the app\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eMCP resources\u003c/strong\u003e \u0026mdash; vault notes are exposed as \u003ccode\u003enote:///\u003c/code\u003e resources for direct access\u003c/li\u003e\n      \u003c/ul\u003e\n      \u003cstrong\u003eSetup (Claude Code):\u003c/strong\u003e\n      \u003cpre\u003e\u003ccode\u003eclaude mcp add --scope user noteriv -- npx -y noteriv-mcp\u003c/code\u003e\u003c/pre\u003e\n      \u003cp\u003eOr install from npm: \u003ccode\u003enpx noteriv-mcp\u003c/code\u003e. Auto-detects your active vault from the Noteriv config.\u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Collaboration \u0026amp; Sharing\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eLive Collaboration\u003c/h4\u003e\n      \u003cp\u003eReal-time co-editing using Yjs CRDT over WebRTC \u0026mdash; peer-to-peer, no server required.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eStart a session and share the room ID\u003c/li\u003e\n        \u003cli\u003eOthers join from the command palette\u003c/li\u003e\n        \u003cli\u003eChanges sync instantly between all peers\u003c/li\u003e\n        \u003cli\u003eCustom display name and cursor color\u003c/li\u003e\n        \u003cli\u003eOptional dependency: \u003ccode\u003enpm install yjs y-webrtc\u003c/code\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003ePublish as HTML\u003c/h4\u003e\n      \u003cp\u003eExport notes as beautiful standalone web pages using your current theme.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eLive preview before saving\u003c/li\u003e\n        \u003cli\u003eEdit the raw HTML directly\u003c/li\u003e\n        \u003cli\u003eCombine multiple notes into one page\u003c/li\u003e\n        \u003cli\u003eSearch and select notes from your vault\u003c/li\u003e\n        \u003cli\u003eCopy HTML to clipboard or save as \u003ccode\u003e.html\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003eOpens in your default browser after saving\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n      \u003ch4\u003eWeb Clipper\u003c/h4\u003e\n      \u003cp\u003eBrowser extension to save articles and selections as markdown notes directly into your vault.\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eClip full pages or selected text\u003c/li\u003e\n        \u003cli\u003ePure JS HTML-to-markdown conversion (headings, links, images, lists, code, tables)\u003c/li\u003e\n        \u003cli\u003eSet title, tags, and target folder from the popup\u003c/li\u003e\n        \u003cli\u003eRight-click context menu: \"Clip to Noteriv\" / \"Clip Selection to Noteriv\"\u003c/li\u003e\n        \u003cli\u003eAuto-generates frontmatter with title, source URL, date, and tags\u003c/li\u003e\n        \u003cli\u003eSidebar refreshes instantly when a note is clipped\u003c/li\u003e\n        \u003cli\u003eLocalhost API server on port 27123 \u0026mdash; auto-starts with the app\u003c/li\u003e\n        \u003cli\u003eInstall: load \u003ccode\u003eextension/\u003c/code\u003e as unpacked extension in Chrome/Brave/Edge or temporary add-on in Firefox\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Customization\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eThemes\u003c/h4\u003e\n      \u003cp\u003e10 built-in themes with full dark and light mode support:\u003c/p\u003e\n      \u003ctable\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eDark\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eCatppuccin Mocha, Nord, Dracula, Solarized Dark, One Dark, Gruvbox Dark, Tokyo Night, GitHub Dark\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eLight\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eCatppuccin Latte, Solarized Light\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n      \u003cbr /\u003e\n      \u003cul\u003e\n        \u003cli\u003eCommunity themes from \u003ca href=\"https://github.com/thejacedev/NoterivThemes\"\u003eNoterivThemes\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003eCustom theme creation and import/export (desktop)\u003c/li\u003e\n        \u003cli\u003e8 accent colors: Blue, Lavender, Mauve, Pink, Peach, Yellow, Green, Teal\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch4\u003eEcosystem\u003c/h4\u003e\n      \u003cp\u003e\u003cstrong\u003ePlugins\u003c/strong\u003e\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eInstall community plugins from \u003ca href=\"https://github.com/thejacedev/NoterivPlugins\"\u003eNoterivPlugins\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003ePlugin API with vault access, UI commands, events, and editor integration\u003c/li\u003e\n        \u003cli\u003eEnable/disable per vault\u003c/li\u003e\n      \u003c/ul\u003e\n      \u003cp\u003e\u003cstrong\u003eCSS Snippets\u003c/strong\u003e\u003c/p\u003e\n      \u003cul\u003e\n        \u003cli\u003eCreate custom CSS to style the editor and preview\u003c/li\u003e\n        \u003cli\u003eInstall community snippets from \u003ca href=\"https://github.com/thejacedev/NoterivSnippets\"\u003eNoterivSnippets\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003eToggle snippets on/off individually\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Editor Settings\n\n| Setting | Options |\n|---|---|\n| Auto-save interval | Off, 10s, 30s, 1 min, 5 min (sync auto every 5s) |\n| Font size | 12px \u0026ndash; 24px |\n| Line height | 1.2 \u0026ndash; 2.0 |\n| Tab size | 2, 4, 8 |\n| Editor font | JetBrains Mono, Fira Code, Cascadia Code, Source Code Pro, SF Mono, System Mono |\n| Theme | 10 built-in + community + custom |\n| Accent color | 8 options |\n| Spell check | On / Off |\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- [Node.js](https://nodejs.org/) 18+\n- [npm](https://www.npmjs.com/)\n- [Git](https://git-scm.com/) (for GitHub sync features)\n\n### Clone the repo\n\n```bash\ngit clone https://github.com/thejacedev/Noteriv.git\ncd Noteriv\n```\n\n---\n\n## 🖥 Desktop App\n\n\u003e **Tauri 2 + Next.js** \u0026mdash; Windows, macOS, Linux\n\nThe 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.\n\n### Development\n\n```bash\ncd desktop\nnpm install\nnpm run dev\n```\n\nThis starts both the Next.js dev server (port 3456) and the Tauri window simultaneously.\n\n### Build\n\n```bash\ncd desktop\nnpm run build\n```\n\nBuilds distributable packages to `desktop/dist/`:\n\n| Platform | Format |\n|---|---|\n| Linux | AppImage, .deb, .rpm |\n| macOS | .dmg |\n| Windows | .exe (NSIS installer) |\n\n### Desktop Architecture\n\n```\ndesktop/\n├── src-tauri/             Rust backend (Tauri 2)\n│   ├── src/\n│   │   ├── lib.rs           App entry, plugin registration, startup\n│   │   ├── shim.rs          window.electronAPI shim + drag/resize polyfill\n│   │   ├── store.rs         Persistent config (vaults, settings)\n│   │   ├── auth.rs          GitHub token storage + API\n│   │   ├── updater_cmds.rs  Auto-update via tauri-plugin-updater\n│   │   ├── clipper.rs       Web clipper local HTTP server\n│   │   ├── watcher.rs       Vault file watcher (debounced)\n│   │   ├── menu.rs          Hidden menu for keyboard accelerators\n│   │   ├── commands_git.rs  Git operations via std::process::Command\n│   │   ├── commands_sync.rs Folder + WebDAV sync providers\n│   │   └── commands_*.rs    Other IPC commands\n│   ├── Cargo.toml\n│   ├── tauri.conf.json\n│   └── capabilities/\n├── package.json           # renderer deps + tauri scripts\n├── src/\n│   ├── app/\n│   │   ├── page.tsx      Main app (90+ state variables)\n│   │   ├── layout.tsx    Next.js root layout\n│   │   └── globals.css   Global styles + CSS variables\n│   ├── components/       41 React components\n│   │   ├── Editor.tsx           CodeMirror markdown editor\n│   │   ├── Sidebar.tsx          File tree with drag-drop\n│   │   ├── TitleBar.tsx         Tabs + window controls\n│   │   ├── SettingsModal.tsx    6-section settings\n│   │   ├── SetupWizard.tsx      First-run wizard\n│   │   ├── GraphView.tsx        Force-directed knowledge graph\n│   │   ├── Canvas.tsx           Visual whiteboard\n│   │   ├── SlidePresentation.tsx  Markdown presentations\n│   │   ├── CommandPalette.tsx   Searchable action palette\n│   │   ├── ThemePicker.tsx      Theme browser + installer\n│   │   ├── PluginManager.tsx    Plugin browser + installer\n│   │   ├── CSSSnippets.tsx      Snippet editor + community\n│   │   ├── DrawingEditor.tsx    Canvas drawing editor (pencil, shapes, arrows, text, eraser)\n│   │   ├── CalendarView.tsx     Month calendar with daily notes + tasks\n│   │   ├── BoardView.tsx        Drag-and-drop task board\n│   │   ├── DataviewBlock.tsx    Vault query result renderer\n│   │   ├── PublishPreview.tsx   HTML export preview + multi-note publish\n│   │   ├── FlashcardReview.tsx  Spaced repetition flashcard review\n│   │   ├── CollabPanel.tsx      Live collaboration session manager\n│   │   ├── PDFViewer.tsx        PDF viewer with annotation tools\n│   │   └── markdown/            Live rendering engine\n│   │       ├── plugin.ts        CodeMirror ViewPlugin\n│   │       ├── registry.ts      Renderer registration\n│   │       ├── renderers/       15 block + inline renderers\n│   │       ├── callouts.ts      Obsidian-style admonitions\n│   │       ├── embeds.ts        Note embedding (![[file]])\n│   │       ├── math.ts          KaTeX rendering\n│   │       ├── mermaid.ts       Diagram rendering\n│   │       ├── wikilinks.ts     Interactive wiki-links\n│   │       └── slash-commands.ts  / command menu\n│   ├── lib/              33 utility modules\n│   │   ├── settings.ts          App settings + defaults\n│   │   ├── theme-utils.ts       10 built-in themes + community\n│   │   ├── plugin-api.ts        Plugin sandbox + API\n│   │   ├── css-snippets.ts      CSS snippet system\n│   │   ├── hotkeys.ts           70+ rebindable shortcuts\n│   │   ├── editor-commands.ts   Formatting commands\n│   │   ├── wiki-link-utils.ts   Link parsing + resolution\n│   │   ├── tag-utils.ts         Tag extraction + aggregation\n│   │   ├── frontmatter-utils.ts YAML frontmatter\n│   │   ├── template-utils.ts    Template variables\n│   │   ├── file-recovery.ts     Snapshot system\n│   │   ├── note-composer-utils.ts  Merge + split\n│   │   ├── attachment-utils.ts  Media management\n│   │   ├── audio-utils.ts       Recording utilities\n│   │   ├── canvas-utils.ts      Canvas data model\n│   │   ├── slide-utils.ts       Presentation parser\n│   │   ├── pdf-export.ts        PDF export\n│   │   ├── sync-providers.ts    Folder + WebDAV config\n│   │   ├── vim-mode.ts          Vim keybindings\n│   │   ├── drawing-utils.ts     Drawing file create/parse/serialize/export\n│   │   ├── calendar-utils.ts    Calendar grid, daily note mapping, task extraction\n│   │   ├── board-utils.ts       Board parse/serialize, card/column CRUD\n│   │   ├── dataview.ts          Vault query engine (TABLE, LIST, TASK)\n│   │   ├── toc-utils.ts         Table of contents generation + auto-update\n│   │   ├── publish.ts           HTML export with theme colors\n│   │   ├── flashcard-utils.ts   SM-2 spaced repetition + card extraction\n│   │   ├── collab.ts            Yjs CRDT + WebRTC collaboration\n│   │   ├── focus-mode.ts        Focus/typewriter mode extension\n│   │   └── pdf-annotation.ts   PDF annotation types + sidecar I/O + markdown export\n│   └── types/\n│       └── electron.d.ts  IPC type definitions (50+ methods)\n└── public/               App icons (macOS, Windows, Linux)\n```\n\n---\n\n## 📱 Mobile App\n\n\u003e **Expo + React Native** \u0026mdash; Android, iOS\n\u003e\n\u003e **Work in progress.** All features come to desktop first, then mobile.\n\nThe 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.\n\n### Development\n\n```bash\ncd phone\nnpm install\nnpx expo start\n```\n\n| Command | Description |\n|---|---|\n| `npx expo start` | Start Expo dev server |\n| `npx expo start --android` | Open on Android device/emulator |\n| `npx expo start --ios` | Open on iOS simulator |\n\n### Mobile Architecture\n\n```\nphone/\n├── app/                  Screens (Expo Router, file-based routing)\n│   ├── _layout.tsx       Root layout + theme provider\n│   ├── index.tsx          Home (notes list, daily note, random note)\n│   ├── editor.tsx         Markdown editor + preview\n│   ├── settings.tsx       Settings (themes, GitHub, ecosystem)\n│   ├── setup.tsx          First-run wizard with GitHub auth\n│   ├── templates.tsx      Template picker\n│   ├── recovery.tsx       File recovery / snapshots\n│   ├── composer.tsx       Note merge + split\n│   ├── attachments.tsx    Attachment manager\n│   ├── backlinks.tsx      Backlinks viewer\n│   ├── frontmatter.tsx    YAML frontmatter editor\n│   ├── slides.tsx         Slide presentation viewer\n│   ├── snippets.tsx       CSS snippets (installed + community)\n│   ├── plugins.tsx        Plugin manager (installed + community)\n│   ├── calendar.tsx       Monthly calendar with daily note dots + due tasks\n│   ├── flashcards.tsx     SM-2 spaced repetition flashcard review\n│   ├── graph.tsx          Force-directed wiki-link graph (WebView canvas)\n│   ├── trash.tsx          Trash / soft delete with restore\n│   └── publish.tsx        Publish note as HTML + share sheet\n├── components/\n│   ├── MarkdownEditor.tsx   TextInput editor + formatting toolbar\n│   ├── MarkdownPreview.tsx  Custom markdown renderer\n│   ├── NotesList.tsx        File/folder browser\n│   ├── SearchModal.tsx      Quick open + vault search\n│   ├── CreateModal.tsx      Create file/folder\n│   ├── VaultSwitcher.tsx    Switch/create vaults\n│   ├── OutlinePanel.tsx     Document outline\n│   ├── BookmarksPanel.tsx   Bookmarked files\n│   ├── TagsPanel.tsx        Hierarchical tag browser\n│   └── BoardView.tsx        Board view with columns + cards\n├── context/\n│   ├── AppContext.tsx       Global state (vault, settings, files, auto-sync)\n│   └── ThemeContext.tsx     Dynamic theme provider\n├── lib/\n│   ├── file-system.ts       expo-file-system class API wrapper\n│   ├── vault.ts             Vault CRUD + workspace\n│   ├── settings.ts          Settings with defaults\n│   ├── storage.ts           AsyncStorage wrappers\n│   ├── github-sync.ts       GitHub REST API sync (push/pull)\n│   ├── templates.ts         Template listing + variables\n│   ├── frontmatter.ts       YAML parse/serialize\n│   ├── file-recovery.ts     Snapshot system\n│   ├── note-composer.ts     Merge + split\n│   ├── wiki-links.ts        Link parsing + backlinks\n│   ├── attachments.ts       Attachment management\n│   ├── slide-utils.ts       Slide parser\n│   ├── daily-note.ts        Daily note helper\n│   ├── random-note.ts       Random note picker\n│   ├── css-snippets.ts      CSS snippet system\n│   ├── plugins.ts           Plugin management\n│   ├── community.ts         Community theme support\n│   ├── calendar-utils.ts    Month grid, task extraction\n│   ├── flashcard-utils.ts   SM-2 algorithm, card extraction\n│   ├── markdown-lint.ts     Linting rules (wiki-links, headings, code blocks)\n│   ├── note-history.ts      Line-based diff (LCS algorithm)\n│   ├── publish.ts           Markdown-to-HTML converter\n│   ├── board-utils.ts       Board parse/serialize, card CRUD\n│   └── dataview.ts          Vault query engine\n├── constants/\n│   └── theme.ts             10 built-in themes + accent colors\n└── types/\n    └── index.ts             TypeScript interfaces\n```\n\n### Mobile vs Desktop\n\nBoth apps share the same feature set with platform-appropriate adaptations:\n\n| Feature | Desktop | Mobile |\n|---|---|---|\n| Editor | CodeMirror 6 | TextInput + toolbar |\n| Git sync | Native git binary | GitHub REST API + fresh clone |\n| File storage | Any filesystem path | App document directory |\n| Themes | 10 built-in + custom creator | 10 built-in + community install |\n| Plugins | Sandbox execution | Install + enable/disable |\n| Navigation | Sidebar + tabs + split editor | Stack navigation + swipe between notes |\n| Graph view | Force-directed canvas | Force-directed WebView canvas |\n| Board view | Drag-drop columns | Horizontal scroll columns with move actions |\n| Calendar | Monthly grid | Monthly grid with daily note dots |\n| Flashcards | SM-2 spaced repetition | SM-2 spaced repetition |\n| Canvas | SVG whiteboard | \u0026mdash; |\n| Vim mode | CodeMirror vim extension | \u0026mdash; |\n| Audio recorder | MediaRecorder API | \u0026mdash; |\n| Drawing editor | Canvas with tools | \u0026mdash; |\n| PDF viewer | Inline annotations | \u0026mdash; |\n| Keyboard shortcuts | 70+ rebindable | System defaults |\n\n---\n\n## 🌐 Community\n\nNoteriv has a growing ecosystem of community-created extensions. Browse and install them directly from the app.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003ch3\u003ePlugins\u003c/h3\u003e\n      \u003ca href=\"https://github.com/thejacedev/NoterivPlugins\"\u003e\n        \u003cstrong\u003ethejacedev/NoterivPlugins\u003c/strong\u003e\n      \u003c/a\u003e\n      \u003cbr /\u003e\u003cbr /\u003e\n      \u003cp\u003eExtend Noteriv with custom commands, sidebar panels, status bar items, and editor integrations. Plugins have access to the vault filesystem, editor state, and event system.\u003c/p\u003e\n      \u003cbr /\u003e\n      \u003csub\u003e\n        \u003cstrong\u003ePlugin API:\u003c/strong\u003e vault read/write, UI commands, event listeners (file-open, file-save, editor-change, etc.), editor manipulation (insert, replace, cursor)\n      \u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003ch3\u003eThemes\u003c/h3\u003e\n      \u003ca href=\"https://github.com/thejacedev/NoterivThemes\"\u003e\n        \u003cstrong\u003ethejacedev/NoterivThemes\u003c/strong\u003e\n      \u003c/a\u003e\n      \u003cbr /\u003e\u003cbr /\u003e\n      \u003cp\u003eCommunity color themes beyond the 10 built-in options. Themes define 16 color properties covering backgrounds, text, accent, and syntax colors.\u003c/p\u003e\n      \u003cbr /\u003e\n      \u003csub\u003e\n        \u003cstrong\u003eTheme format:\u003c/strong\u003e JSON with id, name, type (dark/light), and colors object. Import/export supported on desktop.\n      \u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n      \u003ch3\u003eCSS Snippets\u003c/h3\u003e\n      \u003ca href=\"https://github.com/thejacedev/NoterivSnippets\"\u003e\n        \u003cstrong\u003ethejacedev/NoterivSnippets\u003c/strong\u003e\n      \u003c/a\u003e\n      \u003cbr /\u003e\u003cbr /\u003e\n      \u003cp\u003eFine-tune the editor and preview with custom CSS. Snippets are stored per-vault and can be toggled individually. Community snippets are organized by category.\u003c/p\u003e\n      \u003cbr /\u003e\n      \u003csub\u003e\n        \u003cstrong\u003eSnippet storage:\u003c/strong\u003e \u003ccode\u003e.noteriv/snippets/\u003c/code\u003e directory with per-snippet \u003ccode\u003e.css\u003c/code\u003e files and a config JSON for enable/disable state.\n      \u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Creating Plugins\n\nPlugins live in `.noteriv/plugins/{plugin-id}/` inside your vault. Each plugin needs:\n\n```\nmy-plugin/\n├── manifest.json    Plugin metadata\n└── main.js          Entry point\n```\n\n**manifest.json:**\n```json\n{\n  \"id\": \"my-plugin\",\n  \"name\": \"My Plugin\",\n  \"version\": \"1.0.0\",\n  \"description\": \"What this plugin does\",\n  \"author\": \"Your Name\",\n  \"main\": \"main.js\"\n}\n```\n\n**main.js:**\n```javascript\nmodule.exports = {\n  onLoad(api) {\n    api.ui.addCommand({\n      id: \"hello\",\n      name: \"Say Hello\",\n      callback: () =\u003e api.ui.showNotice(\"Hello from my plugin!\")\n    });\n  },\n  onUnload() {\n    // cleanup\n  }\n};\n```\n\n### Creating Themes\n\nThemes are JSON files with 16 color properties:\n\n```json\n{\n  \"id\": \"my-theme\",\n  \"name\": \"My Theme\",\n  \"type\": \"dark\",\n  \"colors\": {\n    \"bgPrimary\": \"#1a1b26\",\n    \"bgSecondary\": \"#16161e\",\n    \"bgTertiary\": \"#24283b\",\n    \"border\": \"#3b4261\",\n    \"textPrimary\": \"#c0caf5\",\n    \"textSecondary\": \"#a9b1d6\",\n    \"textMuted\": \"#565f89\",\n    \"accent\": \"#7aa2f7\",\n    \"green\": \"#9ece6a\",\n    \"red\": \"#f7768e\",\n    \"yellow\": \"#e0af68\",\n    \"blue\": \"#7aa2f7\",\n    \"mauve\": \"#bb9af7\",\n    \"peach\": \"#ff9e64\",\n    \"teal\": \"#73daca\",\n    \"pink\": \"#bb9af7\"\n  }\n}\n```\n\nSave to `.noteriv/themes/my-theme.json` or submit a PR to [NoterivThemes](https://github.com/thejacedev/NoterivThemes).\n\n---\n\n## 📁 Project Structure\n\n```\nNoteriv/\n├── desktop/              Tauri 2 + Next.js desktop application\n│   ├── src-tauri/        Rust backend (IPC, file I/O, Git, sync, clipper server, vault watcher)\n│   ├── src/components/   41 React components + markdown rendering engine\n│   ├── src/lib/          33 utility modules\n│   └── public/           Platform icons + pdf.js worker\n├── mcp/                  MCP server for AI assistant integration (22 tools, auto-discovers vaults)\n├── extension/            Web Clipper browser extension (Manifest V3)\n├── phone/                Expo + React Native mobile application\n│   ├── app/              19 screens (Expo Router)\n│   ├── components/       11 UI components\n│   ├── lib/              24 utility modules\n│   └── context/          App state + theme contexts\n├── .github/workflows/    CI/CD (build + release)\n├── LICENSE               MIT License\n└── README.md\n```\n\n---\n\n## 🔧 Development\n\n### Commands\n\n| Command | Description |\n|---|---|\n| `cd desktop \u0026\u0026 npm run dev` | Desktop dev mode (Next.js + Tauri) |\n| `cd desktop \u0026\u0026 npm run build` | Build desktop distributables |\n| `cd desktop \u0026\u0026 npm run build:next` | Build Next.js only |\n| `cd mcp \u0026\u0026 npm install` | Install MCP server dependencies |\n| `node mcp/index.js` | Run MCP server (manual vault path optional) |\n| `cd phone \u0026\u0026 npx expo start` | Mobile dev server |\n| `cd phone \u0026\u0026 npx expo start --android` | Run on Android |\n| `cd phone \u0026\u0026 npx expo start --ios` | Run on iOS |\n| `cd phone \u0026\u0026 npx expo export` | Export mobile app bundle |\n\n### Tech Stack\n\n| Layer | Desktop | Mobile |\n|---|---|---|\n| Framework | Next.js 16 | Expo 54 |\n| UI | React 19 | React Native 0.81 |\n| Editor | CodeMirror 6 | TextInput + custom renderer |\n| Runtime | Tauri 2 (Rust) | Expo Router 6 |\n| File I/O | Rust std::fs | expo-file-system |\n| Sync | std::process git | GitHub REST API |\n| Storage | JSON files | AsyncStorage |\n| Styling | Tailwind CSS 4 | StyleSheet + dynamic themes |\n| Math | KaTeX | \u0026mdash; |\n| Diagrams | Mermaid | \u0026mdash; |\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Here's how you can help:\n\n1. **Report bugs** \u0026mdash; Open an issue with steps to reproduce\n2. **Suggest features** \u0026mdash; Open an issue describing what you'd like to see\n3. **Submit code** \u0026mdash; Fork, create a branch, make your changes, and open a PR\n4. **Create plugins** \u0026mdash; Build and share plugins via [NoterivPlugins](https://github.com/thejacedev/NoterivPlugins)\n5. **Create themes** \u0026mdash; Design and share themes via [NoterivThemes](https://github.com/thejacedev/NoterivThemes)\n6. **Create snippets** \u0026mdash; Write and share CSS snippets via [NoterivSnippets](https://github.com/thejacedev/NoterivSnippets)\n\n---\n\n## 📄 License\n\n[MIT](LICENSE) \u0026copy; Jace Sleeman\n\n\u003cdiv align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003csub\u003eBuilt with care by \u003ca href=\"https://github.com/thejacedev\"\u003e@thejacedev\u003c/a\u003e\u003c/sub\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthejacedev%2Fnoteriv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthejacedev%2Fnoteriv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthejacedev%2Fnoteriv/lists"}