Mobile App
Noteriv's mobile app brings your notes to your phone and tablet. Built with React Native and Expo, it runs natively on both Android and iOS, giving you a fast, platform-appropriate experience without the overhead of a web wrapper.
The mobile app is not a stripped-down companion. It is a full-featured note-taking environment that shares the same file format and vault structure as the desktop app. Notes you create on your phone are standard .md files in your vault folder, and they work identically when you open them on your desktop.
Technology Stack
The mobile app is built on the following technologies:
- React Native 0.81 for native UI rendering on Android and iOS.
- Expo SDK 54 for build tooling, file system access, routing, and device APIs.
- Expo Router for file-based navigation between screens.
- React Native Gesture Handler for swipe navigation between notes, pull-to-refresh, and other touch interactions.
- React Native WebView for rendering math (KaTeX), Mermaid diagrams, and syntax-highlighted code blocks in the preview.
- React Native Reanimated for smooth, 60fps animations.
- Expo File System for reading and writing vault files directly on the device.
- AsyncStorage for persisting settings, vault configuration, and workspace state across sessions.
Available Features
The mobile app includes the following features, each adapted for touch interaction:
| Feature | Description |
|---|---|
| Markdown editor | Full-text editing with a formatting toolbar for bold, italic, headings, links, lists, code, highlights, and more |
| Markdown preview | Rendered HTML preview with syntax highlighting, KaTeX math, Mermaid diagrams, callouts, embeds, table of contents, and interactive checkboxes |
| Wiki-link navigation | Tap [[wiki-links]] in preview to jump to linked notes, with automatic note creation for links that do not exist yet |
| Swipe navigation | Swipe left and right to move between notes in the same folder |
| Board view | Kanban-style board for notes with a board: true frontmatter field |
| Graph view | Interactive network graph showing connections between notes via wiki-links and tags |
| Calendar view | View and create daily notes on a monthly calendar |
| Flashcards | Spaced repetition review of Q:/A: pairs and {{cloze}} deletions extracted from your notes |
| Trash | Soft-delete notes with restore capability; permanently delete when ready |
| Dataview | Query your notes like a database using TABLE, LIST, and TASK queries inside code blocks |
| Focus mode | Dim surrounding content and center the current line while editing |
| Markdown lint | Check your notes for formatting issues: heading hierarchy, broken wiki-links, trailing whitespace, and more |
| Publish HTML | Export any note as a standalone HTML page using your current theme colors |
| Note history | View the git commit history of a note and diff any two versions side by side |
| GitHub sync | Push and pull your vault to a GitHub repository using the GitHub REST API |
| Themes | Choose from 10 built-in themes and community themes, with 8 accent colors |
| Templates | Insert pre-built note templates into new or existing notes |
| Note composer | Merge multiple notes into one, or split a note at a heading |
| File recovery | Access automatic snapshots to restore previous versions of a note |
| Slide presentation | Present any note as a slideshow, split at horizontal rules or headings |
| Frontmatter editor | Visual editor for YAML frontmatter fields |
| Bookmarks | Pin frequently accessed notes for quick access |
| Outline panel | Navigate headings within the current note |
| Tag browser | Browse all tags in your vault and see which notes use each tag |
| Vault search | Full-text search across all notes in your vault |
| Vault switcher | Switch between multiple vaults without leaving the app |
| CSS snippets | Toggle custom CSS snippets on and off to fine-tune the interface |
| Plugins | Enable and manage community plugins per vault |
| Attachments | Browse and manage images, PDFs, and other files in your vault |
Desktop-Only Features
A few features are available only on the desktop app due to platform constraints:
| Feature | Reason |
|---|---|
| Split editor | Mobile screens are too narrow for side-by-side editing |
| Vim mode | Touch keyboards do not support modal editing |
| Canvas / whiteboard | Requires precise mouse interaction for node layout |
| Drawing editor | Freehand drawing tools are desktop-optimized |
| PDF annotation viewer | Native PDF rendering requires Electron APIs |
| Real-time collaboration | WebRTC peer-to-peer connections require desktop networking APIs |
| Audio recorder | Desktop microphone access via Electron |
| Folder sync (Dropbox/Drive) | File system watcher requires native OS integration |
| WebDAV sync | Desktop network stack handles authentication and large transfers |
| Web clipper | Browser extension communicates with the desktop app |
Architecture
The mobile app follows a standard Expo Router structure:
phone/
app/ # Screen routes (editor, settings, graph, etc.)
components/ # Reusable UI components (MarkdownEditor, MarkdownPreview, etc.)
context/ # React context providers (ThemeContext, AppContext)
lib/ # Business logic (file system, sync, dataview, flashcards, etc.)
constants/ # Color definitions and configuration constants
hooks/ # Custom React hooks
types/ # TypeScript type definitions
assets/ # Fonts, icons, and static resources
State management is handled through React context providers. AppContext manages the current vault, file list, active file, editor content, and dirty state. ThemeContext provides the active theme colors to all components. Both persist their state to AsyncStorage so the app resumes exactly where you left off.
File Storage
On mobile, vaults are stored in the app's document directory under a vaults/ folder. Each vault is a regular directory containing your markdown files and a .noteriv/ configuration directory. The file system layer uses Expo's File and Directory APIs for synchronous reads and writes, with async wrappers for operations that touch multiple files.
Sync on Mobile
The mobile app supports GitHub sync using the GitHub REST API. Unlike the desktop app, which uses native git commands, the mobile app communicates directly with GitHub's API to push and pull changes. This means you do not need git installed on your phone.
To set up sync:
- Open Settings > Sync.
- Enter your GitHub repository URL (e.g.,
https://github.com/username/my-notes). - Enter a personal access token with
reposcope. - Choose a sync interval (1, 5, 10, or 30 minutes) or sync manually.
The sync engine handles:
- Pulling remote changes and merging them with local files.
- Pushing local changes as commits to the remote repository.
- Conflict detection when the same file has been modified both locally and remotely.
- Auto-sync at the configured interval when the app is in the foreground.
Folder sync (Dropbox/Drive) and WebDAV sync are desktop-only features due to platform limitations.
Getting Started
See Setup for instructions on running the mobile app locally, or download the latest release from the App Store or Google Play.