English · Türkçe
A single-user desktop app for tracking university applications, programs, people, labs, and the documents and emails that connect them. Storage is plain Markdown + YAML on disk — sync-friendly via Dropbox / iCloud / Syncthing, and editable directly in Obsidian alongside the app.
Just want to use it? Download an installer for Windows, macOS, or Linux from the latest release — the release page lists exactly which file to pick for your OS and how to install it. No setup beyond that.
Status: v1 in active development. Local builds work end-to-end; installers are unsigned (warnings on first launch are dismissable, see the release page for steps).
<slug>-<id>.md with YAML frontmatter.eduport/schema.yaml so renames and new fields propagate across machines.eduport/views.yaml (synced)[[eth-zurich-K9p3]] references resolve by id-suffix, so renames in Obsidian don't break linksattachments/ and notes/ subfolders, optional sample seeds<data folder>/.eduport-trash/, restorable from the in-app Trash view┌─────────────────────────────────────────┐
│ Tauri shell (Rust) — eduport-tauri │
│ • Hosts the WebView │
│ • #[tauri::command] handlers wrap │
│ eduport-core for the SvelteKit UI │
│ • Forwards watcher events as Tauri │
│ events (eduport:vault-event / │
│ eduport:parse-error) │
└─────────────┬───────────────────────────┘
│ Tauri command channel (in-process)
▼
┌─────────────────────────────────────────┐
│ eduport-core (Rust library) │
│ • Typed entities + custom-property │
│ schema validator │
│ • Atomic file writes via vaultdb-core │
│ • SQLite + FTS5 search/filter index │
│ • notify-based file watcher │
│ • EML parser │
└─────────────┬───────────────────────────┘
│ depends on
▼
┌─────────────────────────────────────────┐
│ vaultdb-core (Rust library) │
│ • Treats a markdown vault as a queryable │
│ database │
│ • Frontmatter parser, link graph, │
│ transactional rename, vault lock │
└─────────────────────────────────────────┘
The Python (FastAPI) sidecar that this stack used to ship with was retired in rewrite phase 11; everything now lives in process via
eduport-coreandeduport-tauri. The original design spec is atdocs/superpowers/specs/2026-05-09-vaultdb-rewrite-design.md.
| Layer | Choice |
|---|---|
| Native shell | Tauri 2 (Rust) |
| Domain layer | eduport-core (Rust) over vaultdb-core |
| Frontend | SvelteKit + Svelte 5, Tailwind CSS v4, CodeMirror 6 |
| Markdown render (UI) | marked + custom wikilink/checkbox extraction |
| File watcher | notify + notify-debouncer-full (Rust) |
| Storage / search | rusqlite with bundled SQLite + FTS5 |
| Desktop bundling | Tauri (no external sidecar binary) |
| Tooling | cargo (Rust), npm (frontend) |
Cargo.toml workspace manifest
crates/
eduport-core/ Rust library — typed schema, FTS5, watcher, EML, settings
eduport-tauri/ Rust shell (Tauri 2) — Tauri commands + native bridges
docs/ design spec, packaging notes, implementation plans
frontend/ SvelteKit app — UI + Tauri-invoke API client
scripts/ build helpers (Tauri prereqs)
The project targets macOS, Windows, and Linux. All three need:
rustup install stable)Plus the OS-specific Tauri prerequisites (full reference: https://v2.tauri.app/start/prerequisites/):
xcode-select --installlibwebkit2gtk-4.1-dev, libgtk-3-dev, librsvg2-dev, build-essentialcd frontend
npm install
npm run dev # http://localhost:5173
In browser-only mode, dialogs and API commands that require Tauri fall back to dev placeholders or throw — the dev server is for component work, not API exercise.
The packaging script builds the SvelteKit frontend then runs tauri build:
python3 scripts/build_desktop.py
On Linux this produces .deb and .rpm under target/release/bundle/. Install with sudo apt install ./target/release/bundle/deb/eduport_*.deb (or your distro's equivalent). See docs/packaging.md for advanced bundle targets and CI notes.
# eduport-core unit tests
cargo test -p eduport-core
# whole-workspace clippy
cargo clippy --workspace --all-targets -- -D warnings
# Frontend — type-check + Svelte diagnostics
cd frontend
npm run check
npx vitest --run
docs/superpowers/plans/MIT (per the workspace Cargo.toml). A standalone LICENSE file is on the to-do list.