CHANGELOG.md (3610B)
1 # Changelog 2 3 All notable changes to Navi are documented here. 4 5 ## [1.0.0] — 2026-05-20 6 7 Full ground-up rewrite from Python (pygame + ModernGL) to Rust (egui + glow). Same conceptual feature set, dramatically better performance and packaging. The previous Python release is superseded and unsupported. 8 9 ### Added 10 11 - **Rust workspace** — `navi-core` (pure library: config, db loader, graph, physics) + `navi` (egui UI binary). 12 - **Native event loop** — direct `winit` + `glutin` + `egui_glow`, replacing eframe. Gives Navi full control over the paint cadence. 13 - **Vsync-aligned 240 Hz pacer (macOS)** — dedicated background thread owns a `CADisplayLink` pinned to the panel's max refresh rate via `CAFrameRateRange`. Each vsync sends a `UserEvent::Vsync` to the main loop via `EventLoopProxy`; mouse/keyboard events never trigger redraws. Result: locked 4.17 ms frame interval on a 240 Hz display with no missed vsyncs in steady state. 14 - **Idle grace window** — after ~10 s of inactivity (configurable via `NAVI_IDLE_GRACE_SECS`) the display link pauses and the OS drops the panel tier; the next input or focus event resumes within one frame. 15 - **Paint coalescing** — duplicate redraw triggers (e.g. a Vsync arriving microseconds after a focus-driven redraw) within half a vsync interval are dropped, preventing compositor-slot contention that produced 8–14 ms worst-case frames. 16 - **`NAVI_FPS_LOG=1`** — stderr probe printing fps, avg/worst frame ms, deque size, and display-link metadata once per second. 17 - **`NAVI_PROF=1`** — per-layer paint timing (grid / edges / nodes / labels / help). 18 - **Graph rendering via egui's tessellator + glow** — single-pass painter with grid, edges, nodes, labels, particle effects, and help overlay. 19 - **Themes** — Obsidian / Forest / Ocean / Ember / Mono, cycled with `T`. 20 - **Layouts** — force-directed (default) + alternates cycled with `V`. 21 - **Search** — `/` to search nodes by title or alias. 22 - **Local-graph mode** — `L` cycles 1 → 2 → 3 hops → off. 23 - **Filters** — `D` (daily notes) and `O` (orphans). 24 - **Tag colouring** — `G`; reads org-roam's `tags` table, golden-ratio hue spacing. 25 - **Age heatmap** — `A`; visualises file mtime in 6 stages. 26 - **Headline-level nodes** — open jumps to heading position via `goto-char`. 27 - **emacsclient discovery** — Homebrew, MacPorts, `/usr/local/bin`, `/usr/bin`, `~/.local/bin`, `~/.nix-profile/bin`, NixOS, Snap, `/Applications/Emacs.app`. 28 - **Emacs socket discovery** — `$EMACS_SERVER_SOCKET`, `$XDG_RUNTIME_DIR/emacs/`, `$TMPDIR/emacs{uid}/`, `/tmp`, `/private/tmp`, and `/var/folders/.../T/emacs{uid}/` (fixes GUI vs Terminal `TMPDIR` mismatch on macOS). 29 - **DB auto-detection** — vanilla Emacs, XDG, Doom 2.x / 3.x, Spacemacs. 30 31 ### Removed 32 33 - Python launcher (`navi`, `navi.py`, `org-roam-graph-window`). 34 - pygame / ModernGL / Pillow / numpy dependencies. 35 - PyInstaller `.app` bundle build (`build/build-macos.sh`, `dist/Navi.app`). To be replaced by a Cargo-driven `.app` build in a later release. 36 - Borderless mode + AeroSpace integration. Will return as a follow-up once the `winit` macOS path supports the same NSWindow tweaks. 37 - `--check` preflight CLI flag. Will return as `cargo run -- --check`. 38 - Particle effects on the GPU compute path. Currently absent from the Rust port. 39 40 ### Notes 41 42 - This release reuses the `v1.0.0` tag. The previous Python `v1.0.0` was deleted. 43 - Linux compiles but does not yet have a vsync source wired up; the macOS-only `CADisplayLink` path is gated behind `cfg(target_os = "macos")`. Tracking issue to follow. 44 - Windows is not supported.