A local-first note editor and planner with no database, no cloud and no accounts —
every note, task and dataset is a plain, RFC 5322 .eml file on your disk.
English · Русский
A desktop app for thinking. Each page is a real email-format file (.eml —
RFC 5322 / RFC 2045): open it in Thunderbird, search it with grep, diff it in
git, back it up with rsync, sync it with Syncthing. CapsuleCraft adds the
editor, search, planning and structure on top — and the files stay yours.
- 🗂 Zero database — a folder of
.emlfiles is the entire knowledge base. - 🛰 Offline by design — parsing, search, AI and planning all run locally; the app makes no network calls of its own.
- 🎨 Eight full themes — Graphite, Paper, Nord, Gruvbox, Catppuccin, Solarized, Everforest and Rosé Pine, plus a personal accent colour and an 80–140 % interface scale on top of any of them.
- 🤖 Offline Co-Thinker — deterministic local critique and data analysis. No API keys, no cloud.
- 🧩 Downloadable local AI — OCR (Xiaomi-OCR-0 on a Rust engine), speech-to-text (whisper) and text-to-speech install from the in-app Integrations catalog and run fully offline.
- 🖥 Tiny native shell — Rust + egui, no browser engine. Ships as an AppImage with zero bundled libraries.
CapsuleCraft starts empty — no demo notes, no filler. A bilingual
interactive onboarding tour (auto-opens on first launch, 12 steps, with
"try it" buttons that jump straight into the real feature) and a built-in
FAQ (F1, ⓘ FAQ, or the command palette) explain storage, search and
data transfer right inside the app.
Every screenshot below is rendered by the app itself — the --snapshot CLI
captures the real window with the real fonts, layout and the active theme.
| Page | Search (BM25) |
|---|---|
![]() |
![]() |
| Planning | Graph |
![]() |
![]() |
| Onboarding tour (12 steps, RU/EN) | FAQ (built-in) |
![]() |
![]() |
Eight themes — one click each in «Внешний вид / Appearance», plus your own accent colour and interface scale
| Graphite (default) | Nord |
|---|---|
![]() |
![]() |
| Gruvbox | Catppuccin |
![]() |
![]() |
| Paper (light) | Rosé Pine |
![]() |
![]() |
Everforest and Solarized ship in the same picker — eight presets total, every
one accepting a custom accent colour and an 80–140 % font scale, all persisted
to a single native-appearance.json.
- Block editor — headings, paragraphs, task lists, callouts, code blocks,
CSV datagrids, audio-attachment notes; autosave, undo/redo,
.emlround-trip. [[Wiki links]]— parsed from page text, clickable, with a live backlink index («Linked from»); renaming a page rewrites every link.- Search — Okapi BM25 over the whole vault with relevance scores, highlighted snippets and Cyrillic-aware case folding; «Related by meaning» ranks pages by tf-idf cosine similarity using the same index.
- Planning — every task block across the vault aggregated into Agenda, Kanban, Gantt (with dependency arrows and cycle protection) and a two-pane calendar: click any plan to open its page — row, chip or Gantt bar — and drag a calendar chip onto another day to reschedule it. RFC 5545 ICS export.
- Scale-proof relationship graph — one canvas, three LOD levels: zoomed out it is a
cluster map (one colored bubble per folder, folder-to-folder edges aggregated and weighted,
labels on the largest clusters, click to fly in); when thousands of nodes crowd the
viewport they collapse into cluster-colored density bins; zoom in for individual pages
with per-frame capped labels. Above 384 nodes the Barnes–Hut layout runs on a background
thread and streams snapshots into the canvas as it converges, positions persist between
launches — a 200k-page vault renders and pans instead of freezing
(
cargo run --release -- --stress-graph 200000to see it). - Theming — eight complete presets (Graphite, Paper, Nord, Gruvbox,
Catppuccin, Solarized, Everforest, Rosé Pine) in an Obsidian-style appearance
picker: theme cards with live swatches, a personal accent colour layered over
any preset, and an 80–140 % interface scale. Everything persists to
native-appearance.json— copy one file to a new machine and the look follows. - Interactive onboarding — a 12-step bilingual tour opens on first launch and stays available from ⌘K («Обзор приложения / Onboarding tour»): it walks through every feature and its "try it" buttons open the real thing — the command palette, the theme picker, the graph, the integrations catalog.
- Project Knowledge Engine — turn a source tree into a knowledge base:
an incremental scan (FNV-1a + mtime cache, a 500-file rescan in under 30 ms)
feeds a signature/docstring parser for eight languages (Rust, TypeScript,
JavaScript, Python, Go, C#, Java, Dart) plus Markdown docs; the result lands
as
.emlcapsules in.capsule/with a tech-debt registry and generated agent skills for MCP clients. Orphaned capsules are cleaned automatically when a source file is renamed or deleted. The entire engine — parser, cache, skills scaffolding and the sidebar folder-folding controls — was contributed by @kobaltgit (see docs/PROJECT_KNOWLEDGE_ENGINE.md). - Threads — replies are real child
.emls withIn-Reply-To/References, exactly like email. Your reasoning tree is standard mail threading. - Datasets — CSV/JSON travel as MIME parts addressed by
Content-ID; datagrid blocks render them as tables — and=SUM(A1:A5)-style formula cells are evaluated by the embedded offline boa JS engine right in the native shell. - Native audio recording & playback — record voice notes right from the audio block (cpal → 16-bit PCM WAV, live level meter) and play MIME audio in the egui shell (rodio: WAV/MP3/OGG/FLAC) with play/pause/stop, scrub seeking and a volume slider.
- OpenPGP capsule encryption — any capsule can be exported as an armored,
passphrase-encrypted
.eml.asc(AES-256, SEIPD v1 via rPGP) and imported back with the same dialog; fully offline, no gpg binary required. - Offline code execution — JavaScript REPL blocks run in the native shell through the embedded boa engine; JSON blocks validate and pretty-print; Python/Rust stay honest about having no interpreter in a zero-dependency build.
- Import — drop
.emlfiles into the window (byte-for-byte), import from IMAP or migrate an existing Obsidian vault (--import-obsidian). - AI-agent ready — expose the vault over MCP so Claude, Cursor or any MCP client can read and search your knowledge base. The built-in Co-Thinker argues with your theses offline instead.
- Built-in FAQ + snapshot CLI —
--snapshotrenders the real window to PNG (which is how every screenshot above was made). RU/EN interface included, and the EN locale is enforced 100% Latin by a unit test.
Most apps lock your knowledge in a database that dies with the app. CapsuleCraft flips it: one page = one plain-text message on disk.
| Typical PKM app | CapsuleCraft | |
|---|---|---|
| Storage | closed database | plain .eml files |
| Opened by | the app only | any mail client, grep, git |
| Export | lossy conversion | the file is already the export |
| Migrations | App updates | never needed |
| Telemetry / accounts | varies | none — the folder is the app |
Message-ID: <capsule-1755000000000@vault.local>
Subject: Q4 pricing experiment
From: Owner <owner@vault.local>
To: Vault <vault@capsuleos.local>
X-Capsule-Tags: pricing, experiment
--capsule-boundary
Content-Type: application/json; name="blocks.json"
Content-ID: <blocks_json>
[{"id":"blk_1","type":"heading","data":{"level":1,"text":"Q4 pricing experiment"}}]
--capsule-boundary
Content-Type: text/csv; name="cohorts.csv"
Content-ID: <dataset_cohorts_csv>
cohort,users,conversion
Q4-A,1200,0.041
--capsule-boundary--The JSON part is the structured block canvas; extra parts are datasets and
attachments addressed by Content-ID from datagrid blocks. Threads ride on
standard mail headers.
| CapsuleCraft | Obsidian | OneNote | Notion | |
|---|---|---|---|---|
| Storage format | plain .eml (open standard) |
Markdown + hidden app data | proprietary binary sections | proprietary cloud database |
| Works fully offline | ✅ by design | ✅ | ||
| Account required | ❌ never | ❌ (paid sync needs one) | ✅ Microsoft account | ✅ for sync |
| Your data readable without the app | ✅ Thunderbird / mutt / grep |
✅ Markdown | ❌ | ❌ (export only) |
git-diffable, grep, rsync |
✅ native | ✅ | ❌ | ❌ |
| Real email threading | ✅ In-Reply-To/References |
❌ | ❌ | ❌ |
| Themes & custom accent | ✅ 8 presets + accent + scale | ✅ (community themes) | ||
| Local deterministic AI | ✅ Co-Thinker | |||
| Open source | ✅ MIT | ❌ (free but closed) | ❌ | ❌ |
| Install size (Linux) | ~11 MB AppImage, no webview | ~100 MB Electron | 100+ MB | web app |
| Vendor lock-in | none | low | high | high |
Where Obsidian/OneNote win today: Obsidian's plugin ecosystem, OneNote's stylus/inking depth, Notion's collaborative cloud editing. CapsuleCraft is deliberately narrower: local-first storage you can trust for decades.
- Data outlives the app. Delete CapsuleCraft tomorrow — Thunderbird still opens every note. No migrations, no conversions, ever.
- Privacy is structural. No accounts, no telemetry, no API keys, no network calls. The AI runs offline because that's the only honest option.
- Small and fast. The native shell has no browser engine inside: an 8–12 MB AppImage, instant start, glibc-only dependencies.
- Honest launch. Starts with an empty vault, a 12-step onboarding tour and a built-in FAQ — no demo notes pretending to be data. Known gaps are tracked in LIMITATIONS.md, not hidden in marketing.
- A migration path. An Obsidian importer, IMAP sync and
.emlimport get real content in on day one.
The native AppImage (recommended, Linux) or the .deb package:
chmod +x CapsuleCraft_2.9.0_amd64.AppImage
./CapsuleCraft_2.9.0_amd64.AppImage # default vault...
./CapsuleCraft_2.9.0_amd64.AppImage /path/to/vault # ...or your folder
# or the deb:
sudo apt install ./CapsuleCraft_2.9.0_amd64.debIt needs only glibc, an X11 or Wayland desktop and (for audio playback) ALSA —
no WebKitGTK, no WebView2, nothing else. Every GitHub release also carries
SHA256SUMS.txt.
The native Windows installer (x64) is CapsuleCraft_2.9.0_x64-setup.exe
(NSIS: Start-menu & desktop shortcuts, uninstaller). Prefer portable? Use
CapsuleCraft_native_2.8.0_x64.zip: unzip it and run CapsuleCraft.exe.
Standalone native egui shell, zero dependencies, no WebView2 required.
The native macOS app (universal: Apple Silicon + Intel) ships as
CapsuleCraft_2.9.0_macos_universal.dmg: open it, drag CapsuleCraft.app
onto Applications. It is ad-hoc signed; if Gatekeeper blocks the first launch,
run xattr -d com.apple.quarantine /Applications/CapsuleCraft.app.
Releases carry native builds only — the legacy web engine was removed from the repository in v2.9.0; no web/Tauri installers exist. The Linux AppImage / .deb, Windows setup.exe, and macOS .dmg are the app, period: no browser engine, no webview libraries.
Components (the OCR/STT/TTS engines and the 1.75 GB OCR model), the active
vault pointer and recent vaults go to the data root: %APPDATA%\com.capsuleos.app
(Windows), $XDG_DATA_HOME/com.capsuleos.app or ~/.local/share/com.capsuleos.app
(Linux/macOS). Settings (theme, zoom, custom model folders) go to the config
root: ~/.config/capsuleos or $XDG_CONFIG_HOME/capsuleos. Both are
independent of where the AppImage, .deb or portable binary lives — an update
never touches your engines or models. Portable runs can relocate either root:
CAPSULECRAFT_DATA_DIR=/mnt/usb/capsulecraft-data ./CapsuleCraft_amd64.AppImage
CAPSULECRAFT_CONFIG_DIR=/mnt/usb/capsulecraft-config ./CapsuleCraft_amd64.AppImageFirst launch shows an empty vault, the onboarding tour (12 bilingual steps — skip it freely, it never nags again and lives in ⌘K) and the built-in FAQ. Press
F1, use theⓘ FAQbutton or ⌘K → FAQ. No demo notes are ever created.
git clone https://github.com/kostyk348/CapsuleCraft.git
cd CapsuleCraft/native
cargo run --release -- /path/to/your/vaultNative-only requirements: Rust stable, no GUI toolkit dependencies.
cargo run --release -- --snapshot out.png --page 1 [--view graph] [--search "query"] [--onboarding]To regenerate the README screenshots: cargo test generate_demo_vault -- --ignored
writes a six-page demo vault to /tmp/capsule-demo-vault, then run the binary
with --snapshot under Xvfb (the exact loop is documented in
docs/releases/v2.2.0.md).
native/src/
main.rs entry, arg parsing, modals wiring, snapshot CLI
cli.rs typed CLI surface
theme.rs 8 theme presets, accent override, font scale, persistence
mail.rs RFC 5322 / MIME parsing & serialization
mime.rs part splitting, Media-Type registry, datasets
blocks/ block renderers: paragraph, todo_list, callout, grid, code…
links.rs [[wiki links]], backlink index
graph.rs capsule relationship DAG
threads.rs In-Reply-To / References threading
planning.rs agenda / kanban / gantt extraction, ICS export
search.rs BM25 index over the whole vault
project_parser.rs Project Knowledge Engine (codebase -> .capsule/ vault)
project_skill.rs generated agent skills
mcp.rs MCP server config for AI agents
sync_imap.rs IMAP account sync
components.rs integrations catalog (OCR / STT / TTS engines)
i18n.rs RU / EN strings
modals/ onboarding tour, appearance picker, FAQ, MCP, integrations…
views/ page, graph, mail, mime, planning, threads, palette
# native shell
cd native
cargo test # 313 unit tests| Version | What | When |
|---|---|---|
| v2.11.0 | Five user-reported bugs fixed — checkboxes clickable again (egui does not set CHANGED on plain click widgets; mark_changed()), the insert-below popup survives the pointer (registered every frame instead of living inside the hover gate), IMAP sync updates existing letters (newer server copy + different body digest overwrites the stale local file), imported email pages render their body (HTML stripped to text, copy button), and thread numbering lives in Threads only. QoL wave: J/K page walking, Alt+Left back-stack, F5 reload, Ctrl+F search focus, Ctrl+D duplicate, palette commands (duplicate / copy link / reload / sync folder), folder sync made discoverable in the vault menu, reading-time estimate, window title follows the page. Tests 310 → 313 |
2026-11-08 |
| v2.10.1 | The graph stops overlapping: cluster bubbles are packed (radii scaled to an area budget, overlaps relaxed apart with an anchor pull to the real centroids, cached by input fingerprint), labels are de-collided in the pages view and the overview (greedy priority placement instead of drawing over each other), and the layout ends with a deterministic separation pass that pushes coincident nodes apart (golden-angle split when pushes would cancel). Tests 304 → 310 | 2026-11-08 |
| v2.10.0 | The graph survives vault scale: three LOD levels (cluster overview with fit-to-screen bubbles + weighted aggregate edges; screen-space density bins when thousands of nodes share the viewport; individual pages with capped labels near zoom), folder clusters + label-propagation communities, background Barnes–Hut layout above 384 nodes streaming snapshots with a progress chip, layout cached by Message-ID between launches; every release now ships a signed Android APK (arm64-v8a, repo-borne release keystore, enforced by the finalizer); --stress-graph N + --zoom harness. Tests 291 → 304 |
2026-11-07 |
| v2.9.1 | Nine QoL fixes from a critique pass: the sidebar footer literally rendered «стр. .eml» — now стр. 3 из 6; the search placeholder, empty-vault message and «New page» button are finally localized; no-date planning rows show «—» (format moved to a hover tooltip) instead of a clipped «YYYY-MM…»; graph labels carry 26 chars; session restore — the open page (by Message-ID) and view reopen on launch; word count in the page meta line («2 блока · 39 слов», RU plurals); «/» focuses the sidebar search from anywhere (un-collapses the sidebar if needed); ✕ button + Esc clear the search. Tests 286 → 291 |
2026-11-07 |
| v2.9.0 | Blocks move three ways (hover toolbar ↑/⧉/↓, a full-height gutter grab strip, Alt+↑/↓), the unreachable topmost drag gap fixed; the canvas opens on content, keyboard zoom +/−/Home/Ctrl+0, minimap from any content; cross-device sync — two-way vault ↔ folder merge (LWW by mtime, 5 tests), a «Sync» button in the sidebar; Android begins (NativeActivity scaffold, debug-APK in CI, five cross-build obstacles fixed); the legacy web engine removed — the repo is the native shell only, CI runs native tests only. Tests 277 → 286 |
2026-11-07 |
| v2.8.0 | Planning made clickable and the calendar made useful: every plan opens its page (row background, calendar chip, «+N», Gantt bar — five click-pipeline regression tests drive real pointer events); the calendar becomes two-pane — the month grid on the left, the focused day with full task rows and a quick add on the right, and a chip dragged onto another day reschedules the plan; Russian README restored (README.ru.md, the language switcher in both files actually works now); promo banner + social card. Tests 272 → 277 |
2026-11-07 |
| v2.7.0 | Icon sets: Nova (new default), Document, Capsule, custom PNG — live taskbar/titlebar switching, palette commands + mark cycle, legacy mascot alias kept; drag-to-reorder of blocks fixed (dead since v2.2.1 — stale cleanup raced the landing; regression test drives a real pointer drag); README promo reel demo.gif (was referenced, never committed) + Nova hero + honest counts. Tests 268 → 272 |
2026-11-07 |
| v2.6.0 | Freehand on the canvas: «Рисовать» toggle (Icon::Pen), decimated strokes as {type:"ink"} (bbox + relative points), polyline/dot rendering, persistent pen flag; the STT busy-flag test de-raced (was the red CI on v2.5.0). Tests 263 → 268 |
2026-11-07 |
| v2.5.0 | Image nodes on the canvas: «Картинка» on the toolbar picks from the capsule's pictures or a file, the node references the attachment by cid (one copy of the bytes), letterboxed rendering with a quiet placeholder, double-click opens the viewer; page mode and block canvas share the ops. Tests 259 → 263 | 2026-11-07 |
| v2.4.1 | Canvas toolbar adds spawn at the visible center (were pinned near the world origin — off-screen after panning: «при добавлении через кнопку нестабильно показывает»), +16 px cascade for consecutive adds; tests 255 → 259 | 2026-11-07 |
| v2.4.0 | Page mode «Страница | Канвас»: every page toggles between the block editor and a full-height canvas (v2.3 engine: pan/zoom, arrows, shapes, snap, minimap); diagrams persist as page-canvas.json inside the same .eml; page-link nodes open/create pages like [[wiki-links]]; IMAP sync off the UI thread, duplicate-proof downloads (content hashing + Message-Id names), working auto_sync; honest data dirs with CAPSULECRAFT_DATA_DIR / CAPSULECRAFT_CONFIG_DIR overrides |
2026-11-07 |
| v2.3.0 | The canvas engine: node boards with pan/zoom, snapping, minimap and undo; sticky notes, shapes, arrows and free text as first-class canvas elements; the planning Gantt and the board share one zooming field language | 2026-11-07 |
| v2.2.1 | Editor promises kept: «Вставить ниже ▸» expands the full block palette in the grip menu; Notion-style «+» appears in the gutter on hover and inserts below the hovered block; slash menu — typing «/» opens a live-filtered floating palette and converts the paragraph; drag-and-drop block reorder with an accent insertion line (the op wiring landed for real in v2.7.0); version manifests re-synced after the 2.1.0 stragglers | 2026-11-06 |
| v2.2.0 | Obsidian-style theming: 8 complete theme presets, personal accent colour, 80–140 % interface scale, appearance picker in ⌘K; interactive bilingual onboarding tour (12 steps, try-it buttons, first-run auto-open); OCR diagnostics (model preflight + engine log tail in the error); refreshed real-app screenshots incl. a themes gallery | 2026-11-06 |
| v2.1.0 | PDF pages render again (one pdfium binding per process); image block inserts a picture below any block with width/caption and viewer; OCR fixed (no invalid -a, real model id from /v1/models, 15-minute cold start, PDF page → OCR); English TTS voice Amy + STT language follows the locale; custom model folders for STT/TTS/OCR |
2026-11-05 |
| v2.0.0 | Project Knowledge Engine: index any source tree into a .capsule/ vault of .eml pages (incremental FNV-1a scan, signature/docstring parsing for 8 languages, tech-debt registry, zero-loss re-sync) + generated agent skills; folder folding in the sidebar |
2026-11-03 |
| v1.12.2 | Fixed the ⚙ Integrations button doing nothing (action field lost in ShellAction::absorb); Integrations in the ⌘K palette; installers for every platform (Windows NSIS setup.exe, macOS universal .dmg, Linux .deb) |
2026-11-02 |
| v1.12.1 | Native-only releases (Windows zip, Linux AppImage, macOS universal .app); fixed the Integrations modal swallowing clicks; TTS runtime pinned to the sherpa-onnx tag the FFI mirrors (v1.12.40); component URLs decoupled from release tags | 2026-11-02 |
| v1.12.0 | Integrations: downloadable local OCR (Xiaomi-OCR-0 on the pure-Rust mistral.rs engine), whisper STT in-process, Russian TTS (piper via sherpa-onnx), native PDF + image viewers | 2026-11-01 |
| v1.11.0 | Polish: multi-blocker tasks in the web Gantt editor; undo + marquee multi-select on the native whiteboard; seek + volume in native audio playback | 2026-11-01 |
| v1.10.0 | Microphone recording from the native audio block (cpal → WAV, live meter); fixed audio file attachments never reaching the capsule; AppImage CI fix | 2026-11-01 |
| v1.9.0 | Roadmap trio in the native shell: audio playback (rodio), OpenPGP .eml.asc encryption (rPGP), code execution + grid formulas (boa); full English UI with a purism test |
2026-10-31 |
| v1.8.1 | Release pipeline rebuilt: native Windows portable build, pre-created release (no more lost artifacts), unified SHA256SUMS.txt, native test job in CI |
2026-10-27 |
| v1.8.0 | Two-tier header, Zen focus mode, wide canvas; macOS arm64 builds; AppImage hardening | 2026-10-26 |
| v1.7.0 | Built-in FAQ in the shell; no demo notes anywhere; README redrawn | 2026-10-25 |
| v1.6.0 | Native standalone AppImage (zero bundled libraries) | 2026-10-25 |
| v1.5.0 | Renamed to CapsuleCraft; native egui shell | 2026-10-23 |
| v1.4.0 | Planning (Agenda/Kanban/Gantt/ICS); email import | 2026-10-22 |
| v1.3.0 | Co-Thinker offline proposal engine | 2026-09-25 |
| v1.2.0 | BM25 search; Linux installers | 2026-09-15 |
| v1.1.0 | Real audio playback | 2026-09-05 |
| v1.0.0 | First Tauri release | 2026-08-16 |
See LIMITATIONS.md. Notably: audio playback covers
WAV/MP3/OGG/FLAC (browser-recorded webm/opus needs conversion), the JS engine
runs no timed side effects or I/O, and sync is a two-way folder merge with no
built-in cloud transport.
- ✅ v1.0 – v2.2 (current milestone)
- ✅ Native code execution (REPL / JS table formulas) — done in v1.9.0 (boa)
- ✅ Audio playback in the native shell — done in v1.9.0 (rodio)
- ✅ GPG-encrypted capsules — done in v1.9.0 (rPGP, passphrase
.eml.asc) - ✅ macOS native builds in CI (arm64)
- ✅ Full theming (8 presets, accent, font scale) + onboarding tour — done in v2.2.0
- ⬜ Optional end-to-end-encrypted vault sync (tamper/censor-proof, still zero-cloud)
- 🐛 Issues — bugs and feature requests: github.com/kostyk348/CapsuleCraft/issues
- 🚀 Releases — installers for Windows, macOS and Linux, with
SHA256SUMS.txtfor every build: github.com/kostyk348/CapsuleCraft/releases - 💬 Discussions — not enabled yet; open an issue and it will be routed.
- ✉️ Telegram / X — no official channel yet; if you mirror the releases somewhere, open an issue and the link will land here.
PRs welcome — see CONTRIBUTING.md. Changes are tracked in
CHANGELOG.md.
- Konstantin (@kostyk348) — creator, architecture, native shell, theming system, releases
- kobaltGIT (@kobaltgit) — author of the Project Knowledge Engine (the codebase→knowledge-base pipeline: 8-language signature parser, incremental FNV-1a cache,
.capsule/capsule generation, tech-debt registry, AI-skills scaffolding, folder folding — the heart of v2.0.0), the in-place rich text editor and block transformation, the two-tier header redesign with Zen focus mode and wide canvas, live vault watching, the offline Co-Thinker, MCP server, Obsidian importer, hierarchy drag & drop, IMAP sync, microphone recording, OpenPGP capsule encryption, grid formulas + code execution, the customizable brand icon, and the multi-platform release pipeline
MIT — see LICENSE.
CapsuleCraft — your thoughts, stored as mail.














