Skip to content

Driftleaf: v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Aug 02:38
dd2be0e

What's new

  • Search performance instrumentation: detailed timing metrics for search index build
    (decrypt phase, insert phase, per-note average) and query latency. Enable with
    DEBUG_SEARCH=1 environment variable for console logging. Metrics tracked in
    src/main/search.ts and src/main/ipc.ts.
  • Test vault generator: new CLI tool (scripts/generateTestVault.ts) to create
    reproducible test vaults with N notes (100, 500, 1000, 5000+) for performance
    benchmarking. Usage: npx ts-node scripts/generateTestVault.ts 1000 /tmp/test-vault.
  • Performance benchmarking guide: comprehensive documentation at docs/PERFORMANCE.md
    with methodology, baseline metrics, expected improvements, and troubleshooting steps.
  • Data loss safeguard testing: new test suite in scripts/tests/ (data-loss.js and
    data-loss-integration.mjs) for verifying atomic writes, crash safety, reconciliation,
    encryption, and corruption detection. Comprehensive testing documentation at
    docs/DATA_LOSS_TESTING.md verifying all safeguards (atomic writes, crash-safe
    operation ordering, vault reconciliation, AES-GCM auth tags, canary file checks).
    PLAN.md milestone 16 completed.
  • GitHub community configuration: complete .github/ folder with issue templates
    (bug reports, feature requests), pull request template, contributor guidelines
    (CONTRIBUTING.md), code of conduct (CODE_OF_CONDUCT.md), security policy
    (SECURITY.md), funding configuration (FUNDING.yml), automated PR checks workflow
    (pr-checks.yml), and Dependabot configuration for weekly dependency updates.
  • Keyboard navigation in sidebar: arrow keys (Up/Down) to navigate notes list, Enter to
    open, Escape to clear search. Visual focus indicator (subtle background + left border)
    distinguishes keyboard focus from selection. Works in both folder notes and search results.
  • Accessibility improvements: ARIA labels on all interactive elements (buttons, folders,
    notes, context menus). Context menu role set to role="menu" with role="menuitem" on
    items. Folder buttons use role="treeitem" with aria-expanded. All elements properly
    labeled for screen reader navigation.
  • Visible keyboard focus indicators: global :focus-visible styles (2px primary color
    outline with 2px offset) applied to all buttons, inputs, textareas, and ARIA roles. Tab
    navigation now visually clear throughout the entire UI.
  • Focus trap utility: new src/renderer/lib/focusTrap.ts for managing modal focus —
    ensures focus stays within modal, cycles with Tab, closes on Escape, and returns focus to
    the triggering element on dismiss. Ready for use in modal components.

Bug fixes

  • Keyboard focus management in notes list: sidebar now properly tracks keyboard focus
    separately from selected note, allowing arrow-key navigation without changing selection.
    Focused note rendered with distinct visual state.

Changes

  • Search index build optimized for speed: decryption of notes now runs in parallel via
    Promise.all() instead of sequential loop, reducing I/O blocking. Expected improvement:
    2–3× faster on large vaults (1000+ notes). Inserts remain serial (SQLite single-threaded)
    but wrapped in a single transaction for ~10–20% additional speedup.
  • Incremental search reindex faster: reindexNote() now uses atomic REPLACE INTO
    instead of DELETE + INSERT pair, cutting per-note update overhead by ~50%.
  • Save status visibility: font size increased from 0.8em to 1em, opacity from 0.5 to
    0.8. Layout updated to flex with gap for visual icons (checkmark for "Saved", hourglass
    for "Saving…").
  • Disabled element visual feedback: cursor: not-allowed applied to all disabled
    buttons and folder items in modals. Move modal's current-folder state now uses
    cursor: not-allowed instead of default for clarity.

Downloads

Platform Format SHA256
Linux (x64) AppImage driftleaf-0.2.0-x86_64.AppImage c307db79da1adee9ff087241fd4b0adc1a9fabfcdccc09a6e171d1f8d54dfeea
Linux (x64) .deb driftleaf-0.2.0-amd64.deb 94a3f5fbf65e2957367e96340ec6b68d8ba44618bd3d93f72f26e29efc6bf056
Linux (x64) .rpm driftleaf-0.2.0-x86_64.rpm 7a7cb7b460c35c6fefb150b26cd42cdb28ce2e7469f1b8398eeef4cdecd19264
Linux (arm64) AppImage driftleaf-0.2.0-arm64.AppImage 65c621e652c959f0a2a053e9be2df4b811543c15aa482db984d6f65e9b641851
Linux (arm64) .deb driftleaf-0.2.0-arm64.deb 054a8645c4683af4d9e28ff5b0dc9790b59e29d1212bad0e501220672b24d4f1
Linux (arm64) .rpm driftleaf-0.2.0-aarch64.rpm be1f65a40728fde132a942d261ec92c975c7ce2140de9aa7b376bec6b58d7fca
macOS DMG driftleaf-0.2.0-mac.dmg b85e76d179e376b10eb935a39b566226fea9d47444e3d99fee061af42f6915e7
Windows installer driftleaf-setup-0.2.0.exe 57269c6d7a50e4b9b202f3a95ada2397fe4149522963aa0b289af1519d084240
Windows portable driftleaf-portable-0.2.0.exe d72defee1b4bb35940bac229c77a63520a21d6c4b8f6698da2a4c85b365f75a4

Verify a download

sha256sum "driftleaf-0.2.0-x86_64.AppImage"

Linux notes

Already using a package repo? Just run your normal update command — no download needed:

  • Debian / Ubuntu / Raspberry Pi OS (apt): sudo apt update && sudo apt upgrade driftleaf
  • Fedora / RHEL / CentOS Stream / Rocky / Alma (COPR): sudo dnf upgrade driftleaf
  • openSUSE (OBS): sudo zypper update driftleaf
  • Arch: download the appropriate .AppImage attached below

First install or using AppImage? Grab your build from the table above.
Repo setup instructions are in the README.

macOS notes

The app is not notarized, so macOS may show a "damaged" warning and refuse to open it.
Run this command after mounting the DMG to strip the quarantine flag:

xattr -d com.apple.quarantine "/Applications/Driftleaf.app"

Windows notes

If SmartScreen warns on the installer, click More info then Run anyway. The app is not yet code-signed.


Full changelog