0.22.0
Welcome to the 0.22.0
release of Hoarder! This is a lightweight release given the recent events. This release introduces Webhook support, SingleFile support, bookmark sorting, and a lot of fixes! As usual, welcoming our new contributors @hanguofeng, @dakshpareek, @danielvigaru, @techtrd & @meysam81 (and a lot more translators on weblate)!
If you enjoy using Hoarder, consider supporting the project here ☕️ or via GitHub here.
New Features 🚀
- Webhook support (by @hanguofeng): Hoarder can now be configured to send webhooks whenever a new bookmark is created/edited. You can use that to trigger further automation/actions in external apps.
- SingleFile Support: Hoarder now supports being a destination for the SingleFile extension. This allows you to store content from websites that requires authentication for example which wasn't possible before. Read more about how to configure it here.
- This is an experimental feature and is meant to be a stopgap until native support for it in the extension is added.
- Currently, screenshotting for websites archived this way is not supported. We're planning to add it in a future release.
- Summarization Prompt Customization: Similar to the tagging prompts, you can now customize the summarization prompt with your own custom rules in the "AI Settings" page.
- Bookmark Sorting (by @dakshpareek): You can now sort your bookmark grid by newest/oldest.
UX Improvements ✨
- You can now search by bookmark types with the new search qualifiers
is:link
,is:text
oris:media
. - Smart list dialog now contains a link to the query language documentation and also shows the parsed query as you write it.
- @danielvigaru fixed the margins of the lists page in the mobile app.
For Developers 🛠️
- Hoarder now tracks bookmark modification times and exposes it in the
modifiedAt
field in the bookmark schema. This can be useful that uses the API for syncing changes. - @techtrd landed a bunch of improvements to the kubernetes documentation and templates! Check it out at this link.
Fixes 🐛
- Mobile image uploads has been broken for a while (I'm sorry!). This is now fixed and pending google/apple's review for the release (it's a client side bug).
- Installing hoarder on ubuntu/LXC containers got broken last week due to one un pinned linter dependency. This is now fixed.
- Background job timeouts sometimes used to result into duplicate full page archives (which eats a ton of storage). This should be now fixed.
- Mobile app sign in page used to sometimes flicker rapidly if you enter it with the keyboard open (I hate mobile app development!). This is now fixed.
- Search queries for tags/lists that starts with "and"/"or" (such as #android) where not getting correctly parsed. This is now fixed.
- The highlight feature from last release was making it hard to copy content from articles you saved. This is now fixed.
- You no longer need to set
NEXTAUTH_URL_INTERNAL
as it's now baked into the docker image. - Doing a bulk action with 150+ bookmarks selected no longer fails.
- The
url
qualifier in search now also matches the source URLs of assets (e.g. when you clip a quote from a website using the extension). - RSS fetcher now uses firefox's user agent thanks to @meysam81.
- Tags that was attached at least once by humans will no longer show up in the "AI tags" section in the "All Tags" page.
- Default max upload size has been increased to 50MB instead of 4MB.
- Spanish translation wasn't working, this is fixed now. We've also added Hungarian translation.
Community Projects 💡
Checkout our community projects page here. We're featuring two community projects in this release:
Obsidian Sync Plugin
By @jhofker
An Obsidian plugin that syncs your Hoarder bookmarks with Obsidian, creating markdown notes for each bookmark in a designated folder. Get it here, or install it directly from Obsidian's community plugin store (link).
Hoarder's Pipette
By @DanSnow
A chrome extension that injects hoarder's bookmarks into your search results (inspired by linkding-injector). Get it here.
Screenshots 📸
Webhook Settings
Bookmark Sorting
Query Explanation in List Dialogs
Upgrading 📦
To upgrade:
- If you're using HOARDER_VERSION=release, run
docker compose pull && docker compose up -d
. - If you're pinning it to a specific version, upgrade the version and then run
docker compose pull && docker compose up -d
.
All Commits
- fix: Hide tags that were attached once by humans from AI tags - @MohamedBassem in e03997a
- ci: Fix build by regenerating the open API spec - @MohamedBassem in d95cebf
- fix: Fix node22 error in worker container. Fixes #962 - @MohamedBassem in c0a4af7
- fix: Dont rearchive singlefile uploads and consider them as archives - @MohamedBassem in 68e27ad
- feat: Change default max upload size to 50MB up from 4MB - @MohamedBassem in b59fe2e
- docs: Update single file docs - @MohamedBassem in 3cd490e
- release(mobile): Bump mobile version to 1.6.8 - @MohamedBassem in 9f11ffb
- fix(mobile): Add the email trimming that was removed by mistake - @MohamedBassem in 70e7239
- fix(mobile): Fix flicker on sign in page. Fixes #911 - @MohamedBassem in b643c59
- fix(mobile): margin for "Lists" tab content (#927) - @danielvigaru in 5c14735
- docs: Feature obsidian's plugin and hoarder's pipette in community projects - @MohamedBassem in a8ac16e
- feat: Update the last modifiedAt timestamp when tags of the bookmark change - @MohamedBassem in 7d39d69
- feat(api): Expose the modifiedAt date in the bookmarks API - @MohamedBassem in cf85a79
- feat(web): Add the query explainer to the smart list modal - @MohamedBassem in c52a1b4
- fix: Fix search query parsing to allow and/or to be identifiers. Fixes #935 - @MohamedBassem in 1395545
- fix: Fix missing handling for AbortSignal in inference client - @MohamedBassem in a698aea
- fix: Abort all IO when workers timeout instead of detaching. Fixes #742 - @MohamedBassem in fd7011a
- deps: Upgrade typescript to 5.7 - @MohamedBassem in 0893446
- ci: Remove lint:ws from the github action - @MohamedBassem in ba9f0a2
- feat: Add a new modifiedAt field to bookmarks table. Fixes #952 - @MohamedBassem in ab88f59
- build: Remove sherif from the prod installation path - @MohamedBassem in 76f4e35
- build: Add logs to the linux installation script - @MohamedBassem in 4862bbc
- i18n: Fix spanish language code. Fixes #925 - @MohamedBassem in deef30e
- build: Fix unsync-similar-dependencies error (#942) - @henrikno in 32d8513
- readme: Add trademark disclaimer - @MohamedBassem in b2c795c
- build: Fix CI error because of mismatched cmdk version - @MohamedBassem in de42f01
- docs: Various Kubernetes deployment improvements (#862) - @techtrd in 8a07b62
- feat: Change webhooks to be configurable by users - @MohamedBassem in cddaefd
- chore: set firefox user-agent for rss reader (#908) - @meysam81 in 64f24ac
- feat(webhook): Implement webhook functionality for bookmark events (#852) - @hanguofeng in b9cce5d
- docs: Fix type in intro.md (#901) - @zazathomas in b323573
- fix(mobile): Use external blob encoder to fix mobile image uploads. Fixes #800 - @MohamedBassem in 219e16a
- fix: Fix url matcher not matching sourceUrl. Fixes #874 - @MohamedBassem in bbbf335
- fix: Limit concurrency of bulk actions. Fix #773 - @MohamedBassem in 38d403b
- feat: Add ability to filter by bookmark type - @MohamedBassem in 9fd26b4
- build: Bake a default NEXTAUTH_URL_INTERNAL in the docker image - @MohamedBassem in c5298cf
- feat: Add Bookmark Sorting Feature (#812) - @dakshpareek in b6293d1
- feat: Support customizing the summarization prompt. Fixes #731 - @MohamedBassem in b8bd7d7
- fix: Keep user selection on text highlight - @MohamedBassem in 1ec21b6
- feat: Add support for singlefile extension uploads. #172 - @MohamedBassem in 1050617
- docs: Fix openAI pricing link (#816) - @JackBailey in 107d923
- docs: Fix type in the docs hightly -> highly (#853) - @andygeorge in 869fa46