Skip to content

Releases: d12frosted/vulpea

v2.2.0

06 Mar 10:05
v2.2.0
e2330e8

Choose a tag to compare

Features

  • Automatic database rebuild on schema version change (#243)
  • Support for non-.org file extensions like .org.age, .org.gpg (vulpea-journal#3)
  • Link descriptions stored in the database — schema version bumped to 3 (auto-rebuild)
  • Title propagation system for renaming notes with backlink updates (#212)
  • Per-note and batch tag operations in new vulpea-tags.el module (#211, #120)
  • Batch metadata operations: vulpea-meta-batch-set, vulpea-meta-batch-remove (#211)
  • Create heading-level notes under existing notes via :parent and :after params (vulpea-journal#2)

Fixes

  • Heading-level notes now inherit tags from #+filetags and parent headings (#248)
  • Enable alias expansion by default in vulpea-find and vulpea-insert (#227)
  • Support aliases on heading-level notes (#232)
  • Fix title links not persisted to normalized links table (#221)
  • Strip Org emphasis markers from titles, aliases, and outline paths (#221)
  • Fix sync failure with read-only text properties from e.g. org-transclusion (#238)
  • Fix ~ paths in database causing query mismatches (vulpea-journal#5)
  • Fix vulpea-find-backlink failing inside headings without own ID (#252)
  • Fix vulpea-default-notes-directory stale default (vulpea-journal#5)
  • Fix fswatch ignoring changes with relative paths in vulpea-db-sync-directories (#255)
  • Extract #+CATEGORY keyword at file level as a property (#257)
  • Fix property keys returned as symbols after DB round-trip (vulpea-journal#9)
  • Fix first heading with :ID: not indexed when file has no file-level ID (#260)
  • Fix vulpea-buffer-tags-get only reading first #+filetags line (#250)
  • Fix org-attach error during parsing with org-latex-preview-mode (#262)
  • Add :noquery t to fswatch process for clean Emacs exit (#263)

Upgrading

Database schema version bumped to 3. Existing databases will rebuild automatically on first access.

Full changelog: https://github.com/d12frosted/vulpea/blob/master/CHANGELOG.org

v2.1.0

01 Feb 11:11
v2.1.0
5392b43

Choose a tag to compare

First feature release since the v2 rewrite.

Blog post: https://www.d12frosted.io/posts/2026-02-01-vulpea-v2-1

Features

  • Dead link detection (vulpea-db-query-dead-links)
  • Orphan and isolated note detection (vulpea-db-query-orphan-notes, vulpea-db-query-isolated-notes)
  • Title collision detection (vulpea-db-query-title-collisions)
  • Link querying API (vulpea-db-query-links, vulpea-db-query-links-by-type, vulpea-db-query-links-from, vulpea-db-query-links-to)

Fixes

  • Strip org link markup from titles during extraction (#221)
  • Normalize property keys to uppercase during extraction (#222)

Performance

  • Polling-based change detection is now non-blocking — uses async fd/find subprocess instead of synchronous directory-files-recursively, reducing blocking time from ~700ms to 0ms per poll cycle

Upgrading

Delete your database and rebuild to pick up the extraction fixes:

(vulpea-db-close)
(delete-file vulpea-db-location)
(vulpea-db-sync-full-scan)

Full changelog: https://github.com/d12frosted/vulpea/blob/master/CHANGELOG.org

v2.0.1

31 Jan 08:07
v2.0.1
54d5740

Choose a tag to compare

Features

  • Add vulpea-db-query-attachments-by-path for efficiently querying all attachment link destinations for notes at a given file path. Returns a list of cons cells (DEST . ATTACH-DIR) where DEST is the attachment file name and ATTACH-DIR is the attachment directory of the note containing the link. Uses a single SQL query with JOIN, avoiding N+1 queries when processing multiple notes in a file.

Performance

  • Async autosync startup is now non-blocking. When vulpea-db-sync-scan-on-enable is 'async, the startup function returns in ~8ms instead of ~1400ms (measured with 13,800 files in GUI Emacs). File listing uses an fd (or find) subprocess instead of synchronous directory-files-recursively, and cleanup of deleted files uses set comparison against the subprocess output instead of per-file file-exists-p calls. When fswatch is active, filenotify watchers are skipped entirely as they are redundant. Added vulpea-db-sync-debug variable for timing instrumentation.

Fixes

  • #200 Fix heading-level metadata not being persisted to the database.
  • Fix headline link extraction including links from child headlines.
  • #202 Fix link extraction to include links from non-note subtrees.

v2.0.0

30 Dec 07:24
v2.0.0
89ed53b

Choose a tag to compare

This is the first stable release of Vulpea 2.0 - a complete rewrite that removes the dependency on org-roam. Vulpea now manages its own database and provides all functionality independently.

Fixes (since v2.0.0-rc.2)

  • vulpea-create now refuses to overwrite existing files. Previously, if a file existed at the target path but was not in the vulpea database, vulpea-create would silently overwrite it. Now it signals an error, preventing accidental data loss.

Highlights from the 2.0 series

Breaking changes

  • org-roam is no longer required. Vulpea manages its own SQLite database.
  • Database location changed from org-roam's db to vulpea-db-file (default: vulpea.db in vulpea-directory).
  • vulpea-db-update renamed to vulpea-db-update-file.
  • vulpea-insert now uses keyword arguments instead of positional optional arguments.

New Sync System

Vulpea now has its own file synchronization system (vulpea-db-sync.el):

  • Multiple backends: filenotify (default), fswatch (for large directories), polling (fallback).
  • Async batched updates to avoid blocking Emacs.
  • Configurable via vulpea-db-sync-backend, vulpea-db-sync-directories.
  • Start with vulpea-db-sync-start, stop with vulpea-db-sync-stop.

New Features

  • file-title slot in vulpea-note for file context
  • Heading-level metadata support
  • New query functions: vulpea-db-query-by-directory, vulpea-db-query-by-file-path, vulpea-db-search-by-title, vulpea-db-query-by-created-date, vulpea-db-query-by-property, vulpea-db-query-by-property-key
  • Expanded aliases support in selection interfaces
  • Batch metadata operations with vulpea-meta-set-batch

Performance

  • Optimized tag and link queries (~1.3-1.4x speedup)
  • Batch metadata operations (2-10x speedup)

See CHANGELOG.org for the complete list of changes.

v2.0.0-rc.2

23 Dec 12:57
v2.0.0-rc.2
a8653da

Choose a tag to compare

v2.0.0-rc.2 Pre-release
Pre-release

Breaking changes

  • vulpea#128 vulpea-insert now uses keyword arguments instead of positional optional arguments. Change (vulpea-insert filter-fn create-fn) to (vulpea-insert :filter-fn filter-fn :create-fn create-fn).

Features

  • vulpea#178 Add file-title slot to vulpea-note that stores the title of the file containing the note. For file-level notes, this equals the note's title. For heading-level notes, this is the parent file's title. Useful for displaying context without additional queries.
  • vulpea#178 Add vulpea-select-describe-outline and vulpea-select-describe-outline-full functions for displaying notes with their parent hierarchy in selection interfaces. Set vulpea-select-describe-fn to use them.
  • vulpea#128 Add :candidates-fn argument to vulpea-insert, aligning with vulpea-find. Allows customizing the source of candidates for note selection during insert.
  • vulpea#75 Add heading-level metadata support to vulpea-meta-* and vulpea-buffer-meta-* functions. Metadata operations now scope to the correct level based on the note: file-level notes access metadata before any headings, while heading-level notes access metadata within their subtree.

Performance

  • vulpea#129 Optimize vulpea-db-query-by-tags-every, vulpea-db-query-by-tags-none, and vulpea-db-query-by-links-every to use single SQL queries with subqueries instead of two separate queries. Provides ~1.3-1.4x speedup for large result sets.
  • vulpea#66 Add vulpea-meta-set-batch and vulpea-buffer-meta-set-batch for setting multiple metadata properties efficiently. Parses the buffer only once instead of N times, providing significant speedup (2-10x depending on property count).

Fixes

  • Interactive meta commands (vulpea-meta-add, vulpea-meta-add-list, vulpea-meta-remove, vulpea-meta-clean) now correctly operate on the note at point, including heading-level notes.

v2.0.0-rc.1

20 Dec 19:03
v2.0.0-rc.1
192eb30

Choose a tag to compare

v2.0.0-rc.1 Pre-release
Pre-release

First release candidate for Vulpea v2 - a complete rewrite independent of org-roam.

Highlights

  • No org-roam dependency - Vulpea manages its own SQLite database
  • Async-first sync - Non-blocking file watchers with batched updates
  • Plugin system - Custom extractors with schema versioning
  • Performance - Optimized for 100k+ notes

Breaking Changes

  • Database location changed from org-roam's db to vulpea-db-file
  • vulpea-db-update renamed to vulpea-db-update-file

See CHANGELOG for full details.