Releases: karakeep-app/karakeep
0.24.1
0.24.0
0.24.0 β Riding the MCP hype
Welcome to the 0.24.0 release of Karakeep! This release packs a ton of new stuff (we're back to shipping folks!). This release introduces a new MCP server for interacting with Karakeep through LLMs, a new rule generic rule engine for more control over organizing your bookmarks, new search qualifiers for feeds and bookmark age, overdue edit dialog for bookmark details, some UI polishing and more! This release also welcomes a TON of new contributors, @brandonw3612, @yorch, @Summon528, @dotvhs, @YTKme, @hasansino, @gomnitrix, @adripo, @meysam81, @SteffoSpieler, @jkywalker (And I probably missed some).
If you enjoy using Karakeep, consider supporting the project here βοΈ or via GitHub here.
New Features π
β¨ MCP Server β¨
Unless you've been living under a rock recently, you've heard about the recent explosion of MCP servers all over the internet.
We're not going to miss the hype. This release ships a new MCP server (docs) that allows you to interact with your Karakeep instance and bookmarks through extrenal LLMs.
You can ask the LLM to summarize your bookmarks, search the web and send what it finds to Karakeep, or archive your recent chat as a text note in karakeep.
It can create new lists, attach tags and more to help you organize your bookmarks.
More demos in the screenshot section.
Generic Rule Engine βοΈ
Karakeep was born because I don't want to spend time organizing what I hoard. I just throw stuff in there and karakeep's tagging and search will help me retrieve it later.
However, turns out that not everyone is in the same camp. If you're one of those people who enjoy organizing their bookmarks, this feature is for you.
This release introduces a new generic rule engine that allows you to define arbitrary processing rules for organizing your bookmarks.
Some examples:
- If a bookmark is added, and it's coming from youtube, tag it with "#youtube" and "#video".
- If a bookmark is favourited, download an offline archive for it.
- If the tag "#fashion" is added to a bookmark, and this bookmark is an image, then add it my "Inspiration" list (You're better off using a smart list for this though).
β οΈ The firefox extension is back under a new name (Action Required) β οΈ
After the rebranding unfortunatly we couldn't get the old Firefox extension back, so we had to publish a new one (link).
If you're using the old "firefox" extension, you MUST migrate to the new one manually otherwise you won't be getting future updates.
And more!
- gpt-4.1-mini is the new default text model: The default OpenAI text model changed to the new 4.1-mini. It's slightly more expensive than 4o-mini, but is supposed to be much smarter. The image model remains as 4o-mini as 4.1-mini is more expensive for images.
- New Search & Smart list Qualifiers:
- New βage:β search qualifier to show bookmarks older or newer than a given duration (by @brandonw3612).
- New "feed:" search qualifier to find bookmarks imported from certain RSS feeds.
- You can find the full query language here.
- Edit Bookmark Details: You can now edit almost all the details of bookmarks. The URL, summary, creation date, everything. This is obviously very overdue.
- List Merging: You can now merge lists together thanks to @gomnitrix.
- Import Tab Session Manager Sessions: Bulk-import your Chrome/Firefox Tab Session Manager session files as Karakeep bookmarks by @yorch.
- Configuring other AI providers: We added documentations for how to configure other AI providers beside OpenAI (link). This includes providers like Google AI Studio, OpenRouter, Perplexity, etc.
- Karakeep on TrueNAS: People using TrueNAS can now find Karakeep in TrueNAS' app store thanks to @stavros-k.
UX Improvements β¨
- Some UI polish
β Reduced shadows, lighter font weights, smaller editor box following the suggestions of @dotvhs in #1261!
β Removed focus rings where they don't matter much, fix popovers to the emoji picker (by @Mxrk), and list items in the sidebar now get truncated if they're long.
β Fixed margins of the βNew Listβ button, and fixed spinner visibility during AI summarization - Cached content is now called βReader Modeβ content.
- There's now a nice looking "No bookmarks" banner for search and empty smart lists.
- Lists now can have a short description beside their name (by @ekambains).
- A new monochrome icon for android builds by @SteffoSpieler.
- Copy link button now gets greyed out when on a non-secure context by @ekambains.
- The github link in the sidebar now works correctly for people on the nightly build thanks to @hasansino.
For Developers π οΈ
- Added
includeContent
to the API endpoints that return bookmarks (Listing, search, etc) to control whether the endpoint should include the content of the bookmark (which can be huge or not).β οΈ For backward compatibility, this defaults totrue
, but starting from the next release, this will default tofalse
. So if your tool relies on the content of the bookmarks, start passing this totrue
now.
- The API docs have a new look. The new look also fixes the enum-like requests types (like the one in createBookmark).
Fixes π
- Smart lists in search: Smart lists are now correctly resolved in the search qualifiers
list:
andis:inlist
. - A much faster homepage loading times: If you've been a user for the SingleFile extension, Karakeep's homepage might have started getting slower recently. The UI was accidently downloading a big chunk of the archive in the homepage when it's not needed. This is now fixed.
- Faster Imports: Importing bookmarks used to be extremely slow, now it's done with much higher parallelism and should be significantly faster.
- Dark-mode icons for the firefox extension @L-K-M
- Fixed the list getting opened when editing it from the sidebar.
- Added a new
INFERENCE_OUTPUT_SCHEMA
configuration to restore support for models that only works with JSON mode (instead of the newer structured output mode). - Passwords stored in the database are now salted. For backward compatibility, existing users will continue using an empty salt until they change their password.
- Karakeep now closes the browser after it's done crawling in "on demand" mode by @Summon528.
- Fixed a bug in content extraction that might result in a suboptimal "cached content" being shown.
- Triggering a search re-index now drops all the documents first to avoid dangling documents.
Community Projects π‘
Github 2 Karakeep Importer
By @hasansino
Exports your github stars automatically to Karakeep! Get it here.
Screenshots πΈ
MCP Demo
The new "No Bookmarks banner"
Bookmark Editing Dialog
Upgrading π¦
If youβre using KARAKEEP_VERSION=release
:
docker compose pull && docker compose up -d
If you pin to a specific version, update KARAKEEP_VERSION
, then:
docker compose pull && docker compose up -d
All Commits
- fix: Fix smart lists not working in list search qualifiers. Fixes #845 - @MohamedBassem in 6178736
- docs: Update the API docs - @MohamedBassem in 28ca9d5
- fix: When triggering a re-index, drop all the documents first - @MohamedBassem in 3dd98b4
- fix(mcp): Remove extra new line in bookmark listing - @MohamedBassem in b63366a
- fix(mcp): Fix spacing around the bookmarks - @MohamedBassem in 1568fe9
- fix(mcp): Ditch JSON and respond in plain text - @MohamedBassem in 1a24eb6
- fix(web): Hide smart lists from list selectors - @MohamedBassem in d3cf3e4
- feat: Implement generic rule engine (#1318) - @MohamedBassem in 136f126
- tests: Run trpc tests in CI - @MohamedBassem in ca47be7
- build: Provide a docker container for the MCP server - @MohamedBassem in c239634
- landing: Update Homepage and Hero Image (#1304) - @YTKme in 1880a59
- fix(landing): all external links open in new tab (#1292) - @ekambains in 5ff470b
- chore: rename missing files/conf from Hoarder to Karakeep (#1280) - @adripo in 4296e7f
- fix(workers): Fix dompurify to run on readability's input not output - @MohamedBassem in 86728d7
- deps: Upgrade readability to 0.6 & adblocker to 2.5.1 - @MohamedBassem in f257a5b
- fix(web): Fix margins of the new list button - @MohamedBassem in 2870332
- fix(web): Fix the spinner getting hidden during AI summarization - @MohamedBassem in 6310d45
- fix(web): Fix sidebar lists getting opened on edit - @MohamedBassem in 1e2b2df
- fix: Rename cached content into reader mode - @MohamedBassem in c42c2c3
- ui(web): Reduce shadows, lighten some fonts, and a smaller editor. #1261 - @MohamedBassem in cd632f2
- docs: Add a...
0.23.2
0.23.1
0.23.1 (Hoarder is rebranding to Karakeep)
This is not a typical release. Hoarder is rebranding to Karakeep. For context about the rebranding, check out the reddit announcement here.
The name Karakeep is inspired by the Arabic word "ΩΨ±Ψ§ΩΩΨ¨" (karakeeb), a colloquial term commonly used to refer to miscellaneous clutter, odds and ends, or items that may seem disorganized but often hold personal value or hidden usefulness. It evokes the image of a messy drawer or forgotten box, full of stuff you can't quite throw awayβbecause somehow, it matters (or more likely, because you're a hoarder!).
However, we also have a couple of new contributors to this minor version. Welcome @ekambains, @Summon528, @jaworek, @jferch, @denysdovhan to the contributors list!
If you enjoy using Karakeep, consider supporting the project here βοΈ or via GitHub here.
New Features π
- Well, we're rebranding!
- This release shows a banner in the admin panel about the rebranding. It's still unclear whether I'll be able to continue updating the hoarder docker image after the repo name change, so I wanted what might potentially be the last stable release on this image to inform the people about the change in the image name. If it turns out that I can continue updating the image, I'll drop the banner.
- Please note that the new docker image will not yet be available until I execute the repo transfer.
- You can now store the assets in a separate directory by setting the
ASSETS_DIR
env variable. This allows people to offload the assets that can potentially grow larger into a network-mounted directory for example. - Hoarder now stores and indexes the author and publisher attributes of links. In a future release, we'll start showing them in the UI. (by @erik-nilcoast).
UX Improvements β¨
- Clicking view original now opens in a blank tab (by @ekambains).
- Link to Github release page in web sidebar (by @aworek).
- Drop the font weight from sidebar items which makes the sidebar slightly nicer.
Fixes π
- Fixes issue where hoarder was running out of memory when uploading a large archive with SingleFile.
- Added a configurable crawler screenshot time
CRAWLER_SCREENSHOT_TIMEOUT_SEC
(by @Summon528)
Upgrading π¦
To upgrade:
- If you're using
HOARDER_VERSION=release
, rundocker 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
- chore: Hoarder to Karakeep rebranding (#1199) - @MohamedBassem in 16866d8
- feat(web): link to Github release page in web sidebar (#1192) - @jaworek in 55ae679
- i18n: Enable ukrainian language (#1195) - @denysdovhan in 4650ecc
- ui(web): Clicking view original now opens in a blank tab. Fixes #1114 (#1196) - @ekambains in f187e5e
- ui(web): Drop the font weight attribute from sidebar items - @MohamedBassem in e38be87
- feat: Allow storing assets in a separate directory. Fixes #1091 - @MohamedBassem in d86f601
- fix: Dont buffer uploaded files in memory. Fixes #1173 - @MohamedBassem in 453f2dd
- feat(workers): Add CRAWLER_SCREENSHOT_TIMEOUT_SEC (#1155) - @Summon528 in c193c6e
- docs: Fixed missing semicolon in update admin password section (#1169) - @jferch in 41067ee
- feat(workers): Adds publisher and author og:meta tags to Bookmark (#1141) - @erik-nilcoast in b3417d8
0.23.0
0.23.0
Welcome to the 0.23.0
release of Hoarder! This release brings quality of life improvements, bug fixes, and introduces several new features, including the long awaited safari extension, PDF screenshotting, bulk tag deletion, and an assets management page! We welcome new contributor @Kaio-Cesar, @erik-nilcoast, @mos3abof, @halkeye, @saadmanfarhad, and @lexafaxine (and as usual, many more translators on Weblate!).
If you enjoy using Hoarder, consider supporting the project here βοΈ or via GitHub here.
New Features π
- Safari Extension: The long awaited safari extension is now finally in TestFlight.
- PDF Screenshot Generation and Display (by @AhmadMuj): Hoarder can now generate screenshots for PDF files and display them, making it easier to preview and identify saved PDFs.
- Bulk Tag Deletion (by @lexafaxine): You can now delete multiple tags at once, simplifying tag management.
- Asset Management Page: A new settings page allows you to manage your assets and find the ones eating most of your storage.
- "AI Tagged" Webhook Trigger: You can now configure webhooks to trigger when AI automatically tags a bookmark.
- YTDLP Command Line Arguments: youtube-dl library supports a ton of configuration and flags. This release allows you to configure the flags that gets passed to the YTDLP binary for better control on video downloads. (by @erik-nilcoast)
UX Improvements β¨
- Import/Export Page got redesigned to look slightly nicer.
- The web UI now displays statistics for your lists directly in the sidebar.
- Merged background jobs stats and admin actions in the admin panel. Also the stats show more workers that were previously missing.
- Multiple new languages got enabled (Arabic, Slovak, Portuguese (Brazil), Slovenian & Vietnamese). Some of those languages are AI translated, please help us enhance them over at weblate.
For Developers π οΈ
- Bookmark Summarization: The API now exposes a way to trigger bookmark summarization. (by @erik-nilcoast)
- User Stats Endpoints: Added new endpoints to retrieve user information and statistics. This is used by the new homepage widget support implemented by @vhsdream.
- We now have a new CONTRIBUTING.md.
- Added instructions for setting up the Node.js environment for development (by @mos3abof)
Fixes π
- Fixed an issue that was preventing the use of LLM providers like gemini and preplexity. If you're running ollama, you might need to upgrade your server to a newer version. If the model you're using doesn't support structured outputs, set
INFERENCE_SUPPORTS_STRUCTURED_OUTPUT=false
. - Fixed an issue where shared links on mobile were incorrectly stored as text (undergoing apple's review).
- Fixed webhook events being sent regardless of user-selected operations.
- Fixed an issue were RSS feed ingestion was failing for some feeds.
- You can now access the lists from the PWA, which was missing before.
- Hardened the
getBookmarks
endpoint against inconsistent bookmarks. - Fixed an issue in mobile to correctly set a dark theme classname to update the header text color. (by @saadmanfarhad).
- Fixed corepack issues in the CI and docker build, and in the Linux installation script.
- Added a custom fetch wrapper for Ollama inference that prevents timeouts for slow ollama instances (by @halkeye)
- Added an environment variable to configure OAuth timeouts. (by @Kaio-Cesar)
Community Projects π‘
Hoarder Random Bookmark
By @treyg
Sends random bookmarks from your Hoarder account to your email, Discord or exposes your hoarder bookmarks over RSS. Get it here.
Homepage Widget
By @vhsdream
Homepage now has a Hoarder widget that exposes stats about your bookmarks. Get it here.
Screenshots πΈ
The new Asset Management Page
The redesigned Import/Export page
Upgrading π¦
To upgrade:
- If you're using
HOARDER_VERSION=release
, rundocker 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(ui): Fix export button sizing to match the import cards - @MohamedBassem in a384860
- build: Fix lint error in UpdatableBookmarksGrid - @MohamedBassem in 5fca5c8
- deps: Upgrade trpc and react query - @MohamedBassem in 7297144
- deps: Upgrade pdfjs and dompurify - @MohamedBassem in 84ba482
- deps: Upgrade nextjs - @MohamedBassem in 8b9a447
- deps: Upgrade vitest - @MohamedBassem in 7fcedc5
- feat(auth): Added env variable for OAuth timeout (#1136) - @Kaio-Cesar in 71fff38
- feat(workers): allows videoWorker to use ytdlp command line arguments specified in the config. Fixes #775 #792 (#1117) - @erik-nilcoast in bffbd43
- i18n: Sync weblate translations - Weblate in 6bbf4cb
- ci: Fix E2E test timeout - @MohamedBassem in e9afdb5
- ci: Run E2E tests in CI - @MohamedBassem in 927cd89
- i18n: Enable new languages - @MohamedBassem in ad9aa96
- fix(mobile): Fix shared links getting stored as text. #956 - @MohamedBassem in 40fb401
- i18n: Sync weblate translations - Weblate in c388fb2
- fix(translations): fixes typo in video download (#1116) - @erik-nilcoast in 7a372cf
- fix(extension): Fix handling for empty storage. #10 - @MohamedBassem in 7bffa02
- feat: Add endpoints for whoami and user stats. Fixes #1113 - @MohamedBassem in b8c587e
- fix: Revert the accidental upgrade of deps. #1107 - @MohamedBassem in 59c444a
- build(deps-dev): bump vitest from 1.3.1 to 1.6.1 (#1104) - @dependabot[bot] in 6d6790a
- fix: Resync the openapi spec - @MohamedBassem in 96c6378
- fix: Add error boundary around bookmark cards - @MohamedBassem in 82ca8e3
- fix: Harden getBookmarks endpoint against inconsistent bookmarks. Fixes #1094 - @MohamedBassem in dbe6c1d
- build(deps-dev): bump vite from 5.1.4 to 5.4.12 (#1103) - @dependabot[bot] in d2c37c2
- build(deps): bump dompurify from 3.0.9 to 3.2.4 (#1102) - @dependabot[bot] in 849cf4b
- fix(extension): Fix extension setting hook not firing on setting change. #10 - @MohamedBassem in 2fdf754
- feat: Expose bookmark summarization in the API (#1088) - @erik-nilcoast in 9fb8051
- feat: Move background jobs with the admin actions. Fixes #1083 - @MohamedBassem in 80a8080
- fix: Fix missing workers in the server stats - @MohamedBassem in f42a305
- feat(web): Redesign the import/export page - @MohamedBassem in 0c4ea74
- fix(workers): Small typo fix in assetPreprocessingWorker.ts - @vhsdream in e17342e
- feat: Add support for 'ai tagged' as a webhook trigger. Fixes #1092 - @MohamedBassem in 3329317
- fix(workers): Fix webhook events being sent regardless of selected user operation. Fixes #1092 - @MohamedBassem in 6bbfb8c
- fix(workers): Fix pdf screenshotting not working when a text is extracted. Fixes #1096 - @MohamedBassem in bbed0ad
- fix: Validate the output of the feed xml parser. Fixes #1085 - @MohamedBassem in 947ea29
- fix: Fix fixMode preventing images from getting tagged - @MohamedBassem in 2399dcb
- fix: Move away from JSON outputs to structured outputs. Fixes #1047 - @MohamedBassem in 69d81aa
- feat(web): Show list stats in the sidebar - @MohamedBassem in 379c49b
- refactor: Move the list logic into a separate model - @MohamedBassem in feac314
- docs: Add instructions for node environment setup (#1078) - @mos3abof in ac885d8
- fix: Add missing list to PWA. Fixes #884 - @MohamedBassem in 61d398a
- feat: Add a setting page to manage assets. Fixes #730 - @MohamedBassem in 14e4fed
- feat: Add PDF screenshot generation and display (#995) - @AhmadMuj in e5cb9aa
- chore: Add question issue template and update other ones - @MohamedBassem in a14be10
- fix: custom fetch wrapper for ollama inference. Fixes #656 (#1032) - @halkeye in 0621cd9
- docs: Add CONTRIBUTING.md (#1009) - @MohamedBassem in 602e938
- docker: Pin corepack version in the AIO image - @MohamedBassem in c032f50
- fix(mobile): add header class name corresponding to dark mode for text color (#1005) - @saadmanfarhad in 45706a0
- fix: Loosen the restriction about the browser address env variable. Fixes #1000 - @MohamedBassem in a89e052
- docker: Add a warning about now changing the DATA_DIR env variable - @MohamedBassem in bc1e496
- feat(web): bulk tag deletion. Fixes #872 (#900) - @lexafaxine in f9c2557
- build: Add error handling to installation script and other small fixes (#980) - @vhsdream in d6456eb
- feat: add URL protocol validation to extension and mobile app (#996) - @AhmadMuj in 192a7e0
- feat(i18n): add Arabic language support (#983) - @AhmadMuj in f6cdcc0
- ci: Fix corepack issue in CI and docker build - @MohamedBassem in ccd9159
- build: Fix corepack issues in the linux installation script. #967 - @MohamedBassem in f1d2a80
- release(sdk): Release the 0.22 sdk - @MohamedBassem in 4b94c60
- docs: Release the 0.22 docs - @MohamedBassem in f91fe67
0.22.0
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
0.21.0
0.21.0 - The 10k β release!
Welcome to the 0.21.0
release of Hoarder! Hoarder just hit 10k stars on github and I can't be more grateful! We wouldn't have hit this milestone without all of our contributors, users and the awesome community at /r/selfhosted
! Over the holidays, Hoarder got featured at the homepage of hackernews for an entire day!
We're celebrating this milestone, with a release that contains some of the long awaited features! This release introduces advanced search capabilities, smart lists, highlighting support, a TypeScript SDK, and more! As usual, we're excited to welcome our new contributors: @lexafaxine, @jdhartley, @medo & @circuitcreature!
If you enjoy using Hoarder, consider supporting the project here βοΈ or via GitHub here.
New Features π
- Advanced Search Capabilities: Hoarder's search just got much more powerful. You can now add search "qualifiers" to refine your search results. Qualifiers include: tags, lists, favourite/archived status, creation date, etc. You can read about the new query language here. Some examples:
is:fav after:2024-01-01 before:2024-12-31
: Find all the bookmarks that are favourited and created in 2024.(#neovim or #vscode) and -is:archived
: Find all the non-archived bookmarks that are tagged either with #neovim or #vscode.is:archived -is:inlist
: Find all the bookmarks that are archived but are not sorted in any list.url:github.com neovim
: Find all the bookmarks that were hoarded from github and contains theneovim
term in its content.- Special shoutout to @kamtschatka who first advocated for the powerful search language and did the first implementation.
- Smart Lists: With the new powerful search, hoarder now allows you to save your searches as what we're calling "smart lists". Smart lists saves you the hassle of manually managing lists, and allows you create an automatic lists that dynamically matches a specific search query. For example:
- Instead of manually managing a list called
3d Printing
, you can now create a smart list with the queryurl:makerworld.com or url:printables.com or #3dprinting
. Which will include everything you hoarded from popular 3d printing websites and everything the AI/you tagged with the3d printing
tag. - A smart list with the query
url:reddit.com/r/selfhosted and is:fav
will include all the stuff that you hoarded from ther/selfhosted
subreddit and favourited.
- Instead of manually managing a list called
- Highlighting Support: You can now highlight your favourite quotes from the links that you hoard, and have a way to view all what you've highlighted. This was one of the most requested features specially for those coming to Hoarder from Omnivore.
- Linkwarden Import: You can now import your bookmarks from Linkwarden thanks to @circuitcreature).
- More translations: Croatian, Danish, Dutch, Galician, Italian, Japanese, Polish, Russian, Spanish & Turkish. Thanks to all those who contributed those translations over weblate (@Jaksa101, @bcanata, @KilFer, @mathyvds and more on weblate).
UX Improvements β¨
- The admin page now features a sidebar layout, for a more consistent experience with the settings page.
- Bookmarks created over a year ago now show the creation year in the card footer (@jdhartley).
- Added a confirmation dialog before deleting bookmarks to prevent accidental deletions (by @lexafaxine).
- Previously, search used to show only at most 20 bookmarks. This now fixed, and you can scroll across search results.
For Developers π οΈ
- We're now publishing a minimal typescript sdk on npm. This allows you to quickly call hoarder's API endpoints with strong typing in both the requests and responses.
- The search endpoint is now exposed in the REST API as
GET /bookmarks/search
with the support for advanced search queries. - You can now manipulate the assets attached to a bookmark with the new
/bookmarks/assets/...
endpoints. - The new highlights feature is also available via the API in
/bookmarks/highlights/...
endpoints.
Fixes π
- Fix missing scrollbar in the preview model for long notes.
- Refactored asset serving to not load the entire asset in memory. This should result in lower memory consumption when serving large assets (e.g. videos and full page archives).
- Added support for self signed certs for android by @CrypticC3s4r (pending mobile app release).
- Previously the iOS app didn't allow connecting to hoarder over http, this limitation should no longer by there (pending mobile app release). Though honestly, you probably shouldn't be serving hoarder over http.
- Mobile devices without cameras (e.g. eink tablets) were not able to install the app. This is now fixed (pending a mobile app release).
Community Projects π‘
Checkout our community projects page here.
- @Madh93 Implemented a new telegram bot that allows you save stuff to hoarder by sending it to the bot on telegram!
Screenshots πΈ
Highlights Support
Smart Lists
The new Admin Page
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: Fix truncated long text in bookmark preview modal. Fixe #793 - @MohamedBassem in 12cb8c5
- refactor: Implement file streaming for asset route. Fixes #818 - @MohamedBassem in c98722c
- i18n: Enable the new translated languages - @MohamedBassem in 88dc6f9
- i18n: Sync weblate translaions - @MohamedBassem in 2f8ee54
- deps: Upgrade nextjs to 14.2.21 - @MohamedBassem in 7256c4d
- ci: Fix build by using the workspace sdk package - @MohamedBassem in b62640a
- feat: Expose the search functionality in the REST API - @MohamedBassem in 1f5d566
- fix: Change search endpoint to accept query as raw string - @MohamedBassem in ce16eda
- feat: Expose asset manipulation endpoints in the REST API - @MohamedBassem in 4439c91
- Revert "ci: Run tests on push (#807)" (#808) - @MohamedBassem in eb0d821
- ci: Run tests on push (#807) - @MohamedBassem in 39358b1
- fix: Add i18n for query explainer and add missing url matcher - @MohamedBassem in 3bcb1e1
- feat: Add support for smart lists (#802) - @MohamedBassem in 5ecdc36
- refactor: Migrate from the deprecated drizzle-orm schema - @MohamedBassem in 5df0258
- docs: Add search query language documentation - @MohamedBassem in b09c5f2
- docs: Add firefox import-export instructions (#799) - @orthdron in c31b7c6
- feat: Add support for searching for tagged and listed items - @MohamedBassem in 96cc11e
- feat: Add support for negative search terms - @MohamedBassem in 4deda9d
- chore: add format:fix and lint:fix scripts to all packages - @MohamedBassem in 17af22b
- test: Add tests for the search id queries - @MohamedBassem in 4edea56
- feat: Introduce advanced search capabilities (#753) - @MohamedBassem in cbaf9e6
- feat: Add delete bookmark confirmation dialog. Fixes #776 (#787) - @lexafaxine in f476fca
- feat: show createdAt year in card footer when created over a year ago (#790) - @jdhartley in b6d5556
- fix(landing): update GitHub capitalization (#791) - @jdhartley in 61ab59a
- build: Fix sdk and e2e_tests builds - @MohamedBassem in f9b2d1d
- chore: Setup and add e2e tests for the API endpoints - @MohamedBassem in 058e723
- fix(api): Return 201 from highlights creation and fix docs for PATCH /lists/[listId] - @MohamedBassem in 5aee340
- feat: Introduce a typescript sdk - @MohamedBassem in 5d8d2de
- i18n: Added Croatian translation (#788) - @Jaksa101 in 8df4240
- refactor: Refactor sidebar into a shared component - @MohamedBassem in 5902664
- feat: Change the admin page to be tabbed similar to that of the settings page - @MohamedBassem in 179f00b
- deps: Upgrade drizzle-orm to 0.38.3 - @MohamedBassem in aff4e60
- feat: Add support for embeddings in the inference interface (#403) - @medo in c89b0c5
- chore: Add aider to gitignore - @MohamedBassem in 225d855
- docs: Add troubleshooting guide - @MohamedBassem in a1c62e5
- feat: add Linkwarden importer (#786) - @circuitcreature in 27b3f9d
- fix(ios): Drop the local networking property to enable http support. Fixes #679 - @MohamedBassem in aeedea1
- docs: Add Telegram Bot to community projects (#783) - @Madh93 in bad41fb
- fix(mobile): Add support for self signed certs in android. Fixes #381 (#416) - @CrypticC3s4r in 82f1f61
- fix: Coerce createdAt in the bookmark create/update APIs - @MohamedBassem in a1a3a7e
- build: Fix format error - @MohamedBassem in 75a3fc3
- readme: Update readme with new features - @MohamedBassem in aa24118
- fix: react warning about keys in AllHighlights - @MohamedBassem in 98c3c0d
- i18n: Added Turkish translation (#781) - @bcanata in cf22efa
- fix(mobile): Mark the camera e...
0.20.0
Welcome to the 0.20.0
release of Hoarder! This release adds internationalization support, new markdown editor, mobile app improvements, broken link management and more! As usual, we're welcoming our new contributors: @Tukks, @vhsdream, @sweepies, @PeterDaveHello, @wuast94 and @eltociear!
If you're enjoying Hoarder, you can consider supporting it here βοΈ or via github here.
New Features
- Hoarder's UI now comes in multiple languages!
- You can change the language of the UI now to English, German, French, Swedish, Simplified and Traditional Chinese.
- If you want to see your language there or want to improve some existing translation, you can do that via weblate here.
- New experimental WYSIWYG markdown editor for notes by @Tukks!
- You'll now get a preview of the notes you're writing as you're writing them!
- A bunch of mobile app improvements:
- You can now manage tags from the app. Super overdue, I know.
- We have a new cleaner "info" page with the ability to edit title/tags/lists all in one page.
- The mobile app now looks slightly more native. We've got rid of the dedicated search tag, switched to native modals, and used native page headers when possible.
- Note: The apps are yet to be approved by apple & google.
- Broken Link management:
- Hoarder now stores the status codes it got when crawling websites which will allow you to identify and decide what to do about broken links.
- This is now mainly useful for people doing large imports into hoarder, but in the future, we'll use the same mechanism to support automatic link liveness healthchecks.
- Chrome as an optional dependency (aka minimal installation):
- Chrome is no longer a hard dependency. This is useful for people running hoarder in resource constrained environments.
- If you don't specify a
BROWSER_WEB_URL
, hoarder will fallback to a plain HTTP requests to the websites you add instead of crawling them with chrome. - Without chrome, you'll lose the ability to get screenshots from the websites you crawl, and websites that heavily rely on javascript won't work properly.
- With chrome and meilisearch being optional dependencies, you can now get a single-container minimal installation of hoarder by sacrificing some of the features.
- New installation methods:
- Debian / Ubuntu one click installation script (docs) by @vhsdream
- If you're a proxmox user, you can also get a one click LXC container running hoarder using proxmox's helper scripts again thanks to @vhsdream.
- PikaPod (docs) are now offering paid hoarder hosting (~$3/month) for the less tech savvy folks out there. Disclaimer: they're sharing some of their revenue from Hoarder with us.
- Tags placeholder in AI prompt customization:
- You can use the placeholders
$tags
,$aiTags
,$userTags
in the prompt. These placeholders will be replaced with all tags, ai generated tags or human created tags when automatic tagging is performed thanks to @kamtschatka. - With that, you can use this to instruct the LLM to only use existing tags (instead of coming up with new ones). Be careful though if you have a lot of tags as it might increase the cost of the tagging significantly.
- This mechanism is just a temporary solution. We're working on a mechanism to support this natively, in a much cheaper way.
- You can use the placeholders
- New community projects documentation page (here):
- With the release of the REST API in the last version, we started seeing some community projects pop up. So we're starting a new documentation page to list them out for visibility.
- Hoarder now has a raycast extension and an alfred workflow thanks to @foru17 and @yinan-c. Go install them now!
- If you develop a new extension for hoarder, let us know as we'd love to feature it in that page!
- Others:
- We've added the ability to show admin warnings in the admin panels for misconfigurations or future migrations.
UX Improvements
- We're now trimming email addresses out of whitespaces during signin thanks to @sweepies!
Fixes
- AI summarization sometimes included the LLM's response to the prompt (e.g. "Ok, I'll summarize ..."). We're now instructing the model to only respond with the summary.
- Fix broken homepage when hitting a bookmark with an invalid image URL.
- Multiple worker reliability improvements specially in countries with restricted internet.
- The worker container doesn't need to download pnpm on startup anymore as it's now bundled in the container.
- The crawler's adblock list download now has a timeout and can be completely bypassed with
CRAWLER_ENABLE_ADBLOCKER=false
. - The worker was sometimes hanging in the screenshot call. This now has a timeout as well.
Screenshots
The new Markdown Editor
Broken Link Management
Mobile App Improvements
New options at the bottom of the bookmark preview page
Admin Notices
Raycast extension and Alfred workflows
Those screenshots are from the authors of the extensions.
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
- i18n: Enable the Swedish translation - @MohamedBassem in e3b8cda
- i18n: Merge translations from weblate - @MohamedBassem in ab1f49b
- feature: Add an admin notice about the usage of the legacy container images - @MohamedBassem in 4bfb3b4
- release(mobile): Bump mobile version to 1.6.7-4 - @MohamedBassem in 2245887
- deps: Upgrade nextjs to 14.2.15 - @MohamedBassem in 7c05bc8
- deps: Upgrade prettier to 3.4.2 - @MohamedBassem in 1aa7639
- docs: Add the community projects page to docs - @MohamedBassem in 973d552
- feature: WYSIWYG markdown for notes. Fixes #701 (#715) - @Tukks in 40c5262
- Translated using Weblate (German) - @murray3k in 14f8937
- Translated using Weblate (Dutch) - Guido (via weblate) in 17fdd93
- Added translation using Weblate (Dutch) - Guido (via weblate) in 25ebd8e
- Translated using Weblate (Swedish) - Marcus skoding (via weblate) in 20968ec
- Added translation using Weblate (Swedish) - Marcus skoding (via weblate) in 883087b
- fix: trim whitespace from email on signin page (#714) - @sweepies in 16f2ce3
- fix(mobile): useLayoutEffect for navigator changes - @MohamedBassem in 6fba9d1
- ui(mobile): Use native search bar for manage tags page - @MohamedBassem in deadcb9
- fix(mobule): Fix keyboard issues in the info screen - @MohamedBassem in 6055f50
- ui(mobile): Make page titles more native - @MohamedBassem in f4b2bac
- feature: Store crawling status code and allow users to find broken links. Fixes #169 - @MohamedBassem in 705d539
- docs: Add Linux install script and documentation (#707) - @vhsdream in a7b1386
- feature(workers): Allow running hoarder without chrome as a hard dependency. Fixes #650 - @MohamedBassem in 1810100
- fix(mobile): Use keyboard avoiding view in the info page - @MohamedBassem in 5a49691
- fix(extension): Fix dev build. Fixes #670 - @MohamedBassem in 1a2b600
- fix: Instruct the model to only respond with the summary when summarizing content - @MohamedBassem in b9f1a59
- fix(workers): Add spaces in tag placeholders for better tokenization - @MohamedBassem in 036554a
- feature: Add support for tag placeholders in custom prompts. #111 (#612) - @kamtschatka in fdf28ae
- release(mobile): Bump mobile version to 1.6.7-2 - @MohamedBassem in 82af305
- docs: Fix docs build - @MohamedBassem in 6392cca
- deps(mobile): Upgrade to Expo 52 (#692) - @MohamedBassem in fd4a996
- release(mobile): Bump mobile version to 1.6.7-1 - @MohamedBassem in d32457e
- feature(mobile): Add support for creating tags from the manage tags page - @MohamedBassem in 2e5cd59
- fix(mobile): Dont dismiss keyboard on tag selection - @MohamedBassem in dd80f91
- release(mobile): Bump mobile v...
0.19.0
Welcome to the 0.19.0
release of Hoarder! This release is packed with a lot of new features! The long awaited REST APIs, RSS subscriptions, AI summarization, Image OCR, archiving videos, importing from Omnivore, and more!
If you're enjoying Hoarder, you can consider supporting it here βοΈ.
New Feature
- RSS Subscriptions π§ͺ: You can now subscribe to RSS feeds and Hoarder will automatically pull them every hour.
- You can use this to auto hoard stuff from your favourite blogs, subreddits, or youtube channels.
- This feature is still experimental and haven't been tested on a a wide variety of feeds. Please file issues whenever you face any problems using it.
- The long awaited REST API is here. You can view the API docs here.
- You can view the OpenAPI spec here in case you want to generate clients for it. I'm planning to offer an official Typescript SDK some time in the future.
- AI Summarization: Hoarder now has the ability to generate summaries for the links that you hoard! Check the screenshots section to see it in action.
- Currently, summarization is a manual action. In the future, we'll add support for auto summarization.
- Video downloads: For ultimate hoarding, Hoarder now has the ability to download videos from the links that you hoard (e.g. youtube) thanks to @kamtschatka.
- Omnivore Imports: Omnivore is shutting down. You can now import your bookmarks from Omnivore into Hoarder. Check the documentation here.
- User Management: Admins can now reset user passwords, change their roles and even create new users thanks to @kamtschatka.
- Image OCR: Hoarder will now attempt to read and index text in the images that you hoard! Check the configuration variables here.
- Others:
- @kamtschatka Added authentication failure logging in case you want to configure fail2ban against hoarder logs.
UX Improvements
- We have a new redesigned settings page to better support the new options we're adding. Check it out in the screenshot section.
- You can use
Cmd/Ctrl + K
to quickly focus on Hoarder's searchbar. - We reverted the mobile apps to again view webpages inline, but now added buttons for quick actions underneath it.
Fixes
- Single new lines in notes were getting lost in markdown. @kamtschatka fixed that.
- Pocket switched their export format to CSVs instead of their old format. Hoarder now supports importing the new format.
- Tags that had numbers or dashes in them were getting skipped, this is now fixed. Thanks @MakeSomeGood for the bug report and investigation!
- The
All Tags
page was getting very slow when there's a lot of tags. This turned out to be a small misconfiguration in the database that we fixed. - Custom prompts had a max length of 100, which wasn't enough to some people. The new limit is 500.
Screenshots
AI Summarization
Screen.Recording.2024-11-09.at.4.12.35.PM.mov
RSS Feeds & New Settings Page
Admin User Management
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: Increase max prompt length to 500 chars instead of 100 - @MohamedBassem in 8ce272d
- docs: Add documentation about how to import from pocket and omnivore - @MohamedBassem in 2b6eb7c
- docs: Update CLI importing docs to better handle large collections (#630) - @bjornmonnens in e57937e
- fix: Remove old downloaded video when it gets refreshed - @MohamedBassem in a24755d
- fix: Only update bookmark tagging/crawling status when worker is out of retries - @MohamedBassem in f8bed57
- fix: Feed refreshes were not getting re-enqueued for failed jobs - @MohamedBassem in 10070c1
- ui: Mark the RSS subscriptions as an experimental feature - @MohamedBassem in 9ca49b2
- fix: Fix slow AllTags page because of misconfigured tagId index. Fixes #528 - @MohamedBassem in 8f44c81
- fix: Pass arguments to monolith and yt-dlp as array for better escaping - @MohamedBassem in cbaa033
- feature: Add support for importing bookmarks from Omnivore. Fixes #602 - @MohamedBassem in 7ec5746
- fix: Adopt pocket's new export format. Fixes #570 - @MohamedBassem in 7042f26
- fix: Fix bug in tag normalization regex. Fixes #595 - @MohamedBassem in 306567b
- feature: Schedule RSS feed refreshes every hour - @MohamedBassem in d34b538
- feature(web): Add the ability to view the bookmarks of a particular rss feed - @MohamedBassem in fa8286a
- feature: Add support for subscribing to RSS feeds. Fixes #202 - @MohamedBassem in cf1a251
- fix(mobile): Fix bookmarkview page on android not showing bookmark actions. Fixes #603 - @MohamedBassem in 2efc7c8
- fix: Fix type in the separate container env variable - @MohamedBassem in 4c94b37
- feature: Archive videos using yt-dlp. Fixes #215 (#525) - @kamtschatka in 4a13c36
- docs: Add a FAQ page (#590) - @kamtschatka in 3b7451f
- deps: Extract the queue implementation into its own repos - @MohamedBassem in a746e9a
- ui: Redesign the settings page and move it to its own layout - @MohamedBassem in eb7da99
- fix: Index the summary in search - @MohamedBassem in 801ba36
- fix: Some visual fixes to the AI summary - @MohamedBassem in e06a5ea
- fix: Fix search input escape listener to only work when the input is in focus - @MohamedBassem in 9d6d70d
- fix: Fix build by regenerating the openai spec - @MohamedBassem in c0b0691
- feature: Add a summarize with AI button for links - @MohamedBassem in 731d2df
- refactor: Move inference to the shared package - @MohamedBassem in 3e727f7
- docker: Add a flag to detect apps running in legacy container setup - @MohamedBassem in db45aaf
- release(mobile): Bump mobile version to 1.6.5 - @MohamedBassem in bb344e5
- feature(mobile): Use inline WebView for expanding bookmarks - @MohamedBassem in 2ce42a8
- feature: Add OCR support for images. Fixes #296 - @MohamedBassem in 019b5d2
- ci: Add a build step that ensures that open api spec doesn't diverge - @MohamedBassem in f793646
- ci: Fix build by adding corepack enable to CI - @MohamedBassem in 5b20d97
- docs: Add link to discord to navbar - @MohamedBassem in 09d29e4
- api: Add tag ids and support variable baseURL - @MohamedBassem in b476e91
- docs: Generate OpenAPI docs - @MohamedBassem in 6ffa51d
- chore: Define hoarder's rest API in zod format - @MohamedBassem in 3c1ec3a
- fix: Improve field names in the tag APIs - @MohamedBassem in 4086c37
- feature(api): Add REST APIs to update bookmarks, tags and lists - @MohamedBassem in e89a386
- feature(api): Add REST APIs to manipulate lists and tags for bookmarks - @MohamedBassem in 20e5225
- feature: Add APIs to create new lists and bookmarks - @MohamedBassem in 10dcf2e
- fix: Better handling for body JSON parsing errors - @MohamedBassem in f5fd3c4
- feature: Add DELETE REST APIs for bookmarks, lists and tags - @MohamedBassem in 719e25d
- feature: Add GET REST APIs for bookmarks, lists and tags - @MohamedBassem in 62395ec
- featue: Add infra for REST APIs and implement GET /bookmarks - @MohamedBassem in fb297ea
- fix(workers): Pin execa to avoid ERR_PACKAGE_PATH_NOT_EXPORTED error - @MohamedBassem in a822ff2
- feature(web): Add keyboard shortcut to focus on search bar. Fixes #449 (#554) - @kamtschatka in cbc268e
- feature: Allow reseting user password, change their roles and create new users. Fixes #495 (#567) - @kamtschatka in 9a56e58
- feature: Log authentication failures to support fail2ban. Fixes #477 (#569) - @kamtschatka in 0debc6b
- chore: Adding issue templates (#546) - @Inventhrice in e55362e
- fix(web): Single linebreaks are lost when viewing textnote card. Fixes #549 (#551) - @kamtschatka in 6977ba7
- release(mobile): Bump mobile version to 1.6.4 - @MohamedBassem in 4454d63
- fix(mobile): Improve connection testing accuracy - @MohamedBassem in 90953fd
0.18.0
Welcome to the 0.18.0
release of Hoarder! This release introduces customizable tagging rules (aka customizing the prompt), new UI look, selective full page archives, infinite scrolling, more bulk actions and more! As usual, we'd like to welcome our first time contributors @jarednipper, @Trugamr, @cedmax and @CrypticC3s4r! We also have @lucius346346 working behind the scene on improving the UX of Hoarder with amazing designs! And finally, we have our usual contributors @kamtschatka and @mdsaban! Also thanks to @Papierkorb for the help in suggestions to improve the LLM prompt!
We also now have a public roadmap which you can check for the features that we're planning to deliver here. Go upvote the features that you're waiting for!
If you're enjoying Hoarder, you can consider supporting it here βοΈ.
New Feature
- Introducing customizable tagging rules: You can now customize the prompt that we use to generate the tags to your linkings and add custom rules for the LLM to adhere to!
- You can use this to define your tagging rules in natural language and let the LLM take care of applying it.
- If you don't want to enable "Full page archives" by default, you can now selectively archive particular pages that you want to keep forever thanks to @kamtschatka!
- You can now export your bookmarks from Hoarder and re-import them back in another instance (note: currently images and pdfs are not exported).
- You can now customize the context length of the inference model using the
INFERENCE_CONTEXT_LENGTH
flag:- The bigger this value is, the more of your content the model will see and will be able to give you better tagging.
- However, the bigger the context window, the more expensive the request is for OpenAI money-wise and for ollama resource-wise.
- The current default is
2048
tokens (~2048 words).
- Better asset tracking and management:
- We're now currently correctly accounting for all asset sizes in the database. You can view the usage of every user now in the admin panel.
- Old assets are not automatically accounted for and you'll have to click the new
Compact Asset
button in the admin panel to backfill that data. This button also removes assets that are dangling (aka not linked to any bookmark). - This work is in preparation for supporting better privacy checks in the future when we implement public and collaborative lists.
- You can now attach custom image banners to your notes.
- Those banners will appear at the top of your notes when you expand them as well as in the
List
layout. - We're still figuring out a good way to render them in the grid and masonry layouts.
- Those banners will appear at the top of your notes when you expand them as well as in the
UX Improvements
- We have a refreshed UI looks thanks to amazing designs by @lucius346346!
- We now have a sticky navbar for better experience in bulk editing thanks to @mdsaban.
- We also have a new profile options dropdown in the header where the user and admin settings buttons got moved to.
- We now have infinite scrolling for pagination so that you no longer need to click the
Show more
button. - Bulk actions improvements:
- There's now a
Select all
button to select all the currently visible bookmarks. Copy links
is also a thing to bulk copy the source links of a bunch of bookmarks thanks to @kamtschatka.
- There's now a
- You can now trigger AI tag regeneration for all bookmarks or the ones that that failed only in the admin panel.
- When you hoard text from other webpages by the extension (by highlighting text -> right click -> add to hoarder) the source link will now be preserved with the text.
- We have a new tabbed user settings page as it was getting quite long.
- Sidebar items were not clickable around the boarder which was annoying. @Trugamr fixed that!
Fixes
- For those who want to go all-in on Oauth, you can now set
DISABLE_PASSWORD_AUTH=true
which will forbid any password-based authentication/signup. This is implemented by @kamtschatka. - The All Tags page was taking too long to load when you have too many tags. @kamtschatka landed some improvements to the performance of this page.
- Editing lists from the sidebar was broken, now it's fixed.
- When you wipe your hoarder's database while still logged in the browser, users were getting some confusing behavior with confusing database errors. This is now fixed, and hoarder will automatically log you out if your account is no longer there.
- @Mxrk Added docker healthchecks to the dockerfile and also source label so that hoarder's updates can be correctly reflected in stuff like renovate.
Screenshots
The new UI Look
Profile Options
AI Settings and Tagging Rules
New Import/Export Buttons
Num Bookmarks & Asset Sizes in Admin Panel
New Admin Actions
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: Add support for importing notes from the hoarder export - @MohamedBassem in 43ed698
- fix(web): Fix settings tab overflow on mobile layouts - @MohamedBassem in cdd0088
- fix(web): Fix profile option icon in mobile layouts - @MohamedBassem in 8741ab0
- fix(web): Fix slowness in loading the all tags UI. Fixes #382 (#390) - @kamtschatka in 4791a53
- feature: Allow importing hoarder's own bookmark file. Fixes #527 - @MohamedBassem in de9cf0a
- feature: Support regenerating AI tags only for failed bookmarks - @MohamedBassem in 2ccc15e
- build: Use node 22 for CI - @MohamedBassem in fb57f25
- deps: Upgrade nodejs to v22 - @MohamedBassem in 1390337
- deps: Upgrade metascraper for faster docker builds - @MohamedBassem in 31bcad8
- feature(web): Implement a new profile options drop menu and move user and admin settings there - @MohamedBassem in b36eea8
- docs: Add a section to installation docs about optional features - @MohamedBassem in 0d94506
- docs: Remove the warning about ollama being new - @MohamedBassem in 5e44cfb
- fix(web): Fix react error in search input - @MohamedBassem in 6035dff
- feature: Allow customizing the inference's context length - @MohamedBassem in 1b09682
- feature: Introduce a mechanism to cleanup dangling assets - @MohamedBassem in c16173e
- feature: Allow to disable default password login after SSO is configured. Fixes #406 (#502) - @kamtschatka in 9f87207
- fix(web): Reset search query and bulk edit when navigating away from the current page - @MohamedBassem in 02a5b35
- feature(web): Introduce a new sticky navbar. Fixes 520 (#515) - @mdsaban in 1f768be
- docker: Add HEALTHCHECK to Dockerfile (#508) - @Mxrk in e2644eb
- docker: add Source Label to Dockerfile (#509) - @Mxrk in 904eb5a
- fix(web): Fix sidebar list edit dialog not working. Fixes #447 - @MohamedBassem in 09e0659
- refactor: Start tracking bookmark assets in the assets table - @MohamedBassem in 1e5c575
- refactor: Include userId in the assets table - @MohamedBassem in db2d346
- readme: Add a security policy - @MohamedBassem in e6d4ff9
- feature: Allow disabling password signups (#413) - @kamtschatka in 4a3775a
- feature: Allow attaching custom banners to notes. Fixes: #106 - @MohamedBassem in 8a13095
- fix: Drop the usage of useCursorV2 from the server - @MohamedBassem in 99c6232
- fix(mobile): Drop the floating add button. Fixes #439 - @MohamedBassem in c017328
- feature: Persevere the source URL of clipped texts from the extension. Fixes #448 - @MohamedBassem in b147c8e
- feature(web): Async validate JWT account and sign out the user if they no longer exist - @MohamedBassem in f1c956a
- feature(web): Change the settings page to be tabbed - @MohamedBassem in 3a8d197
- fix(web): Simplify the language for inference settings - @MohamedBassem in 03e938a
- fix(web): Change export format to have content as a top level key - @MohamedBassem in 1f7da9a
- docker: Fix the docker-based development env (#456) - @CrypticC3s4r in 3f22801
- docs: Fix typo in installation docs (#465) - @jarednipper in f6192da
- feature(web): Allow users to export their links and notes - @MohamedBassem in c8a3c1e
- readme: Fix installation link in the readme (#482) - @disappointingsupernova in 463d041
- feature(cli): Add ability to get all bookmark IDs of a list. Fixes #442 (#446) - @kamtschatka in 4bda7a9
- deps: Upgrade openai package - @MohamedBassem in b56655c
- feature(web): Add ability to manually trigger full page archives. Fixes #398 (#418) - @kamtschatka in 8b69cdd
- feature(web): Add ability to rerun inference on all bookmarks. Fixes 443 - @MohamedBassem in 5281531
- fix(web): Improve SidebarItem tap target accessibility (#409) - @Trugamr in 8fe1927
- feature(web): Add the ability to customize the inference prompts. Fixes #170 - @MohamedBassem in 36fb5a4
- deps: Upgrade drizzle-kit - @MohamedBassem in 57f5faa
- fix(web): Fix another hydration error in copy to clipboard - @MohamedBas...