What's Changed
Plugins
- Hooks now have an explicit contract: each declares its replaceable argument and type, so on_search can finally replace search results. Return a value to replace, None to leave alone; wrong types and exceptions are logged and skipped, so one bad plugin can't take down a request
- New setup(ctx) giving plugins the vault path, config and their own logger
- New get_routes(), mounted at
/api/plugins/<id>/, note_stats now serves its own /calculate instead of it being hardcoded in main.py - New plugins/contrib/ folder for community plugins, ignored by the loader until you copy one into plugins/
- Existing plugins keep working: run_hook(), run_hook_with_return() and in-place list mutation are unchanged
Fixes
- Wikilinks now resolve to absolute URLs, so a link to a note in another folder works when opened in a new tab, copied or shared instead of silently landing on the homepage, thanks @nopoz (#285)
- Root-relative links to a missing note no longer offer to create it with a leading slash in the filename (#289)
- CORS no longer allows credentials when origins are set to wildcard, thanks @anupamme (#278)
- note_stats metrics that disagreed with the numbers shown in the frontend (#286)
Performance and UI
- Mermaid loads on the first diagram instead of on every page load
- Version-addressed static assets are now cached immutably
- Better options navigation on mobile (#283)
Docker Images
This release is available as a Docker image:
docker pull ghcr.io/gamosoft/NoteDiscovery:0.31.0Full Changelog: v0.30.1...v0.31.0