A memoir that stays on disk.
Open a folder. Write. Preview. Save.
Markdown / MDX — still ordinary files, still yours.
English · 简体中文
Memoir is a quiet desktop notebook. Point it at a folder of .md / .mdx files and you get a library, a CodeMirror editor, and a live preview — without an account, a sync service, or a proprietary vault.
Notes are ordinary files. You can open the same folder in git, VS Code, or any other editor.
- Local-first — the workspace is a folder you choose. Memoir never uploads your notes.
- Markdown and MDX — GitHub Flavored Markdown, KaTeX, Mermaid, task lists, and a small set of built-in MDX components.
- Edit / split / preview — write source, read the rendered page, or do both with synced scroll.
- Library — folders, frontmatter tags, favorites, recent notes, and a heading outline.
- Safe by default — atomic writes, crash-safe drafts, autosave, and deletes that go to
.memoir-trash/instead of vanishing. - Fast library — each workspace keeps a disposable SQLite cache at
.memoir/index.sqliteso the sidebar does not re-read every note. The markdown files are still the source of truth; gitignore.memoir/and exclude it from iCloud / Dropbox / OneDrive. - Appearance — light / dark / system theme, accent colors, density, type scale, and Chinese / English UI.
- Sandboxed paths — only
.md/.mdxinside the workspace;.., symlinks, and hidden/build directories are rejected.
---
title: Two Sum
tags: [leetcode, rust]
---
# Two Sum
Inline math: $O(n)$. Display math:
$$
\sum_{i=1}^{n} i = \frac{n(n+1)}{2}
$$
- [x] Read the prompt
- [ ] Write a test
```mermaid
graph LR
scan --> edit --> preview --> save
```MDX files can use built-in components. import / export are disabled on purpose so a note cannot pull in arbitrary modules:
<Callout type="tip" title="Local-first">
The file on disk is the source of truth.
</Callout>
<Card title="Built-in">Callout, Badge, Card, Columns, Steps</Card>Download an installer from Releases:
- Windows —
memoir_*_x64-setup.exe - macOS —
memoir_*_aarch64.dmg(Apple Silicon) ormemoir_*_x64.dmg(Intel) - Linux —
memoir_*_amd64.debormemoir-*-1.x86_64.rpm
Open the app, then choose a folder of Markdown / MDX files. That folder is the workspace.
- Bun 1.3+
- Rust (desktop app only)
- Tauri 2 system dependencies
git clone https://github.com/Memoir-Studio/Memoir.git
cd Memoir
bun install
bun run dev # Vite, browser demo
bun run tauri dev # desktop shellThe browser build is an in-memory demo. It does not read or write real files, and it does not persist settings.
Verify a change before opening a PR:
bun test
bun run build
cargo test --manifest-path src-tauri/Cargo.tomlsrc/ React app (features, store, gateways, domain)
src-tauri/ Tauri / Rust workspace IO and persistence
docs/ architecture notes and assets
The frontend is feature-first:
app → features → store → gateways → platform
→ domain
Components do not call Tauri invoke or touch localStorage. Store actions go through WorkspaceGateway / PersistenceGateway. Rust stays a thin commands → services → domain / infrastructure stack.
See docs/architecture.md for the Tauri command contract, app-data layout, path rules, and how to add a feature.
Memoir is in early development. The editor, library, preview, and desktop persistence are usable day to day; plugins and sync are not part of this release.
Issues and pull requests are welcome.
- Read
docs/architecture.mdso new code follows the existing boundaries. - Keep the change small and match the surrounding style.
- Cover helpers, store actions, and Rust filesystem rules with tests.
- Run the three commands in Development.
Please do not add cloud sync, telemetry, or a second persistence path without an issue first.
