mirror of
https://github.com/karakeep-app/karakeep.git
synced 2026-04-25 16:06:04 +03:00
Open
opened 2026-03-02 11:47:21 +03:00 by kerem
·
21 comments
No Branch/Tag specified
main
refactor/use-npm-singlefile
onetab
claude/issue-2596-20260321-1401
claude/fix-docs-button-responsive-V3aBQ
claude/review-import-backpressure-D4ArJ
claude/fix-archived-bookmarks-mobile-P9OJW
claude/issue-1189-20260211-1601
claude/fix-nested-smart-lists-3uFkt
claude/issue-2298-20251223-1704
feat/import-v3
claude/add-cli-search-subcommand-6kIe0
claude/add-bookmark-indexing-timestamps-96bPj
claude/auto-disable-failing-feeds-fkDhP
claude/add-tag-search-aliases-HzESD
feat/docker-compose-dev
claude/add-attachedby-tags-endpoint-01WYfemMGHJJjXsPYLvUJAno
claude/fix-crawler-memory-leaks-NE7Ct
bookmark-debugger
claude/issue-2352-20260106-1120
claude/issue-1977-20260102-2348
claude/add-banner-rendering-JeLUk
claude/add-descendant-qualifier-cUm26
claude/skip-metadata-refresh-archives-CAo4Y
claude/fix-archive-pending-banner-pAyGM
claude/add-embeddings-support-h2swV
claude/nested-manage-lists-QVV85
claude/privacy-type-system-MG1bT
claude/add-action-menu-icons-6hNKw
claude/issue-2299-20251223-1711
claude/bookmark-indexing-progress-QwZSI
claude/migrate-bookmark-attachments-3O2te
claude/add-2025-wrapped-feature-tIUIh
claude/improve-ai-settings-design-639tq
claude/add-youtube-metascraper-plugin-0lWC7
claude/add-problem-reporting-gSSEV
claude/add-mobile-list-menus-spcS7
claude/shadcn-bookmark-cards-WWHzP
claude/add-extensions-link-HTeXc
claude/add-onboarding-screens-hsYMO
claude/fix-settings-switch-overflow-nlzM4
claude/clamp-bookmark-titles-diAEz
claude/port-stats-mobile-expo-MuXAn
claude/whats-new-base-version-vrv8C
claude/fix-settings-auth-checks-jgyD8
claude/add-server-version-display-3sGa2
claude/fix-tag-editor-scrolling-rzdbG
claude/add-company-pricing-card-y5mHY
claude/audit-optimize-transactions-xpDVc
codex/ensure-consistent-ui-experience-across-app-pages
claude/plan-opentelemetry-integration-01Jx183mz1Ev8h8JoYj97Auw
libsql
db-indicies
claude/export-import-lists-01UuCWwdaqduAd35NppvjnMD
claude/configurable-worker-timeout-0198GQh6YrrRzqG62xnogyrz
claude/check-import-quota-01CPdxTpHp18Ba62bYcBTVbA
claude/scraper-worker-thread-01FEHen6MGrQHmdBstJSuiyA
claude/customize-dialog-styling-01CVjEv2KgyZJSpCg3mqkvR7
claude/add-asset-cache-headers-0175WhNcqwiwurrmjj52jnLT
claude/add-db-search-plugin-017Xxd4Jq3MfjWT788vgfbaq
benchmarks-2
claude/add-filtered-deletion-01DTxWNcg3hhqdNpeNLa3s6L
claude/actionbutton-loading-spinner-015DY5ZTvgPgFAXTZz3UGaYv
claude/add-broken-links-qualifier-01S31X1LsKiYb9gE1dXTKvi3
claude/docker-release-tag-trigger-01UmzFXEumhK2jdmRGtMcueo
claude/spread-feed-fetch-scheduling-01EihUtmZSyqeE1HfRMessxW
restate-idempotency
claude/align-android-ios-colors-01GJfkhEyZVBReohVioPa8ok
claude/improve-mobile-app-colors-0155LzHfkd5HyJr6YyZMsus5
codex/add-autocomplete-for-search-query-language
claude/add-bookmark-backups-016L2A8Z94n7tDgDdMPdFuAd
claude/restrict-binary-user-permissions-01FSGyy2RXGZvE26YbAejzGi
effect-ts
claude/prepare-trpc-npm-publish-0193EjfwpxSNVNcLXqXjs6Ln
shared-list-sidebar
claude/lazy-load-tiktoken-017UTNpJPTcMMQvNEBa1aFwo
codex/fix-asset-pre-processing-worker-abort-signals
add-groupid
claude/add-bookmark-list-button-01VF7uXYNLsVDzqdozWMXP5M
claude/extract-shared-ui-components-01DSVfaCr6WRqAyx1vJTZk9r
claude/migrate-shadcn-sidebar-01DKjpg9MD5PJ2potemSnbvW
claude/add-collaborators-rate-limits-01VjXyRWWPUkGQKa8d8D8qKj
claude/modernize-dark-mode-01FRfE81PAY5C44pFu1cYocf
claude/add-signed-url-bookmark-01PjYT1ZhvLK2FPJNTAhJsWf
restate-group-id
claude/add-highlights-page-012vhHpn8fVNp3gf7gBeW14s
claude/disable-shared-bookmark-features-01B9fiGUdu6NyWaxSQFsQBxP
claude/mobile-bookmark-grid-layouts-018cGBBMhPJVq6PJVRBpqT2r
claude/add-mobile-bookmark-summary-01494LYoh4sJW5Fj4GPm62Vj
claude/add-mobile-tags-screen-01WRADt4ZzvXVew1Y9vqF8SV
claude/add-highlight-notes-01LpanRLS4a2YMnT1qB5GTqX
claude/add-search-bar-014k2ngaqjwYRVSvqmbuECqr
claude/hide-collaborator-emails-01TQrkkMupC7CR9BTuDkireg
claude/list-invitation-approval-0129V89M1riXW6JqmoF74VfM
claude/add-bookmark-archive-sort-018VbGPGvtmsGgXFEERoAX7B
claude/add-mobile-smart-lists-01251tYo9u1SywE6XFezAv9e
claude/bookmark-drag-drop-01DmWq286ogHpDGHKcXjKr3z
claude/add-rss-import-01DH1Q2axcDeq8nQJR5MWjPJ
claude/mobile-inapp-browser-auth-01KiT6bwyntRPQ1X4oTtAveC
claude/offline-mode-react-query-01D1rE2bdBEPw2teGqunr5Gd
claude/add-singlefile-extension-support-01BEB9QQZABzwfZDvR9Bz5b2
claude/custom-list-slugs-01VxcfkNUXZ97FNpNVURopMq
claude/issue-2148-20251118-1133
claude/add-groupid-queue-fairness-011CV1r8Wb46HuGAg5o95i3m
claude/hide-viewer-shared-lists-01Fst6NBvdxrXXnDhUmjsNDP
claude/collaborative-lists-013AvDvMqkoszDVcSoCYgBcM
claude/implement-feature-01LT5XzGsbEhZkYXNEjEwdui
claude/fix-bookmark-loading-state-01AgF4H2drxwuTCJDB2Xgiu4
claude/admin-user-edit-013tbiRmb1KX2fhSYqmGKCu8
claude/expose-all-api-01YTruEW72WQYMtq4iZoaPkA
claude/add-doc-link-main-016NYLxShpKuH6R8XCBgeZtc
claude/fix-issue-2133-019JLvdSRAUbU4FtjQztcM6S
claude/explore-effect-ts-integration-01F7xb1dWwP1ma4LnLbFGfDD
claude/optimize-dockerfile-build-011CV5gDnPZbdbbVSPDofC4e
claude/add-custom-headers-guide-011CV249t16aWDRb1mCrzQdC
claude/mobile-app-signup-011CUxPtCXgU6U3T8GShTR2Q
claude/crawler-worker-fetch-browser-011CUvcRc24XEr9DTWDW6MX8
claude/fix-issue-784-011CUvubQrcZHG9S3KjpCKbK
codex/add-user-settings-for-inference-language-and-screenshots
claude/fix-mobile-signin-server-address-011CUnaUWwY2Fhq5Xbwhgr8H
better-auth-2
claude/issue-2028-20251012-1429
claude/issue-1010-20251012-1154
codex/update-feed-refresh-job-idempotency-key
restate
import-v2
fix-public-lists
recurse-delete-list
abort-dangling-processing
tag-pagination
ratelimit-plugin
claude/issue-1937-20250914-0912
codex/implement-title-search-query-qualifier
copilot/add-edit-button-for-notes
cookie-path
ai-tag-cleanup
codex/add-allowlist-and-blocklist-env-variables
mobile-retheme
expo-next-upgrade
opencode/issue1788-20250727215611
fix-trailing-slash-deduplication
edit-bookmark-dialog
bookmark-embeddings
rag
nextjs-15
bookmark-hover-bar
sapling-pr-archive-MohamedBassem
track-bookmark-assets
json-cli
admin-settings
mobile-dark-mode
android/v1.9.2-0
ios/v1.9.1-1
android/v1.9.1-0
ios/v1.9.1-0
ios/v1.9.0-2
ios/v1.9.0-1
android/v1.9.0-1
extension/v1.2.9
cli/v0.31.0
sdk/v0.31.0
mcp/v0.31.0
android/v1.9.0-0
ios/v1.9.0-0
v0.31.0
android/v1.8.5-0
cli/v0.30.0
sdk/v0.30.0
ios/v1.8.4-0
android/v1.8.4-0
v0.30.0
cli/v0.29.1
v0.29.3
v0.29.2
v0.29.1
sdk/v0.29.0
cli/v0.29.0
mcp/v0.29.0
ios/v1.8.3-0
android/v1.8.3-0
extension/v1.2.8
v0.29.0
android/v1.8.2-2
android/v1.8.2-1
ios/v1.8.2-0
android/v1.8.2-0
extension/v1.2.7
android/v1.8.1-0
ios/v1.8.1-0
v0.28.0
cli/v0.27.1
cli/v0.27.0
v0.27.1
sdk/v0.27.0
v0.27.0
android/v1.8.0-1
ios/v1.8.0-1
mcp/v0.26.0
sdk/v0.26.0
v0.26.0
cli/v0.25.0
ios/v1.7.0-1
mcp/v0.25.0
v0.25.0
extension/v1.2.6
ios/v1.7.0-0
android/v1.7.0-0
v0.24.1
v0.24.0
mcp/v0.23.10
mcp/v0.23.9
mcp/v0.23.8
extension/v1.2.5
mcp/v0.23.7
mcp/v0.23.6
mcp/v0.23.5
mcp/v0.23.4
sdk/v0.23.2
cli/v0.23.0
extension/v1.2.4
android/v1.6.9-1
ios/v1.6.9-1
v0.23.2
v0.23.1
sdk/v0.23.0
v0.23.0
ios/v1.6.9-0
sdk/v0.22.0
v0.22.0
android/v1.6.8-0
ios/v1.6.8-0
sdk/v0.21.2
sdk/v0.21.1
sdk/v0.21.0
v0.21.0
cli/v0.20.0
v0.20.0
ios/v1.6.7-4
android/v1.6.7-4
ios/v1.6.7-3
android/v1.6.7-3
android/v1.6.7-2
ios/v1.6.7-2
android/v1.6.7-1
ios/v1.6.7-1
ios/v1.6.7-0
android/v1.6.7-0
v0.19.0
android/v1.6.6-0
android/v1.6.5-0
ios/v1.6.5-0
ios/v1.6.4-0
android/v1.6.4-0
v0.18.0
v0.17.1
v0.17.0
ios/v1.6.3-0
android/v1.6.3-0
extension/v1.2.3
ios/v1.6.2-1
android/v1.6.2-1
ios/v1.6.2-0
android/v1.6.2-0
v0.16.0
ios/v1.6.1-3
android/v1.6.1-3
ios/v1.6.1-2
android/v1.6.1-2
android/v1.6.1-1
ios/v1.6.1-1
android/v1.6.1-0
ios/v1.6.1-0
extension/v1.2.2
android/v1.6.0-1
ios/v1.6.0-1
ios/v1.6.0
android/v1.6.0
cli/v0.13.7
cli/v0.13.6
v0.15.0
cli/v0.13.5
extension/v1.2.1
v0.14.0
cli/v0.13.3
cli/v0.13.2
cli/v0.13.1
cli/v0.13.0
v0.13.1
v0.13.0
mobile-v1.5.0
mobile-v1.4.0
v0.12.2
v0.12.1
v0.12.0
v0.11.1
v0.11.0
v0.10.1
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
v0.4.1
v.0.4.0
v.0.3.1
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.0
Labels
Clear labels
Mirrored from GitHub Pull Request
UI/UX
android
bug
dependencies
documentation
documentation
extension
feature request
feature request
good first issue
ios
long-term
performance
pri/high
pri/low
pri/medium
pull-request
Mirrored from GitHub Pull Request
question
status/approved
status/icebox
status/pending_clarification
status/untriaged
No labels
UI/UX
android
bug
dependencies
documentation
documentation
extension
feature request
feature request
good first issue
ios
long-term
performance
pri/high
pri/low
pri/medium
pull-request
question
status/approved
status/icebox
status/pending_clarification
status/untriaged
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
starred/karakeep#178
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @echo-saurav on GitHub (Jul 1, 2024).
Original GitHub issue: https://github.com/karakeep-app/karakeep/issues/267
Automatically getting tags with ollama is quite nice ! but i think it would be more awesome if it stored text vector , so we can search by similar text, or make filter to have similar links / image together
@MohamedBassem commented on GitHub (Jul 1, 2024):
This is definitely planned and I actually have a prototype for it already :) Just trying to find a reasonable vector db without adding extra dependencies.
@echo-saurav commented on GitHub (Jul 1, 2024):
awsome !
You can see weaviate . it has text and image vector both (I know its not really lightweight , but i like it a lot because of its customisation ability )
@ieaves commented on GitHub (Jul 1, 2024):
You can actually do vector search in postgres pretty easily. Postgres would also have the side benefit of not requiring the database to be mounted into every container.
@MohamedBassem commented on GitHub (Jul 1, 2024):
The problem is that hoarder currently doesn't depend on postgres. So introducing postgres now as a dependency will be very disruptive. If I'm to start hoarder from scratch, I'd have gone for postgres for everything (database, FTS, vector search, etc). But it's too late now unfortunately.
@ieaves commented on GitHub (Jul 1, 2024):
Ahh okay, I'm not familiar with Drizzle but perusing the docs made it look like a fairly simply drop in replacement.
@MohamedBassem commented on GitHub (Jul 1, 2024):
it's less about the code changes and more about asking every existing user to add a new dependency and migrate their data.
@kamtschatka commented on GitHub (Jul 2, 2024):
I actually REALLY like the idea of moving to postgres.
** Is is a toy db anyways. Every project has the fate of running into SQLite limitations sooner or later for the bigger users. There are already requests to use OAuth, so I can really imagine that people have bigger plans
** Postgres is a common database and people might already have one in their homelab (i certainly do)
** Needs to be kept in sync with the db all the time
** We already had issues, where it ran out of sync after some tag merging
Yes, I understand that it is disruptive, but there is already a section in the release notes on what to keep an eye on and if we update the UI to show that you need to add new environment variables with a postgres db and we offer an automatic data migration (could be version 0.16.0 with not much else), we could keep the disruption low AND open up a whole lot of possibilities for us in the future.
@MohamedBassem commented on GitHub (Jul 7, 2024):
I pretty much disagree that sqlite is a toy database. Cloudflare's D1 database for example is built on top of sqlite. Other companies like fly.io and turso are also offering prod databases built on top of sqlite. Tailscale for example, aslo embraced sqlite in prod. We're way way far from approaching the limits of sqlite. It also fits us well because we don't need a client/server architecture given that our deployments are usually on a single machine.
Sqlite contains full text search btw (https://www.sqlite.org/fts5.html) and the extension is already enabled in our docker containers. I haven't given it a try so I don't know how good it is compared to meillisearch's. I also didn't give postgres' FTS a try as well. So if getting rid of meillisearch is a goal, there's a route to do it on sqlite as well.
Two limitations that I know about in sqlite's FTS (that I don't know if pg handles better):
This can be solved if we're to move to sqlite's FTS.
I've been actually thinking about going the route that immich went. Just merge the workers and web containers into one. That'll simplify the deployment a bit without sacrificing on anything. I initially went with separate container for the worker as the worker was the one spawning the chrome process and I didn't want this to be mixed with the web container. But now chrome is in its own container and we can probably just spin up the workers as a background job inside the web container.
This "IS" my biggest concern. It is very disruptive and we will lose some users because of that move. I'm for example, still stuck on old immich releases because I don't have time to go through all the recent breaking changes that they introduced. I want hoarder to just work for people, and regardless of how many bells we add to the UI, we're going to break some deployment with this migration, and I don't really want this to happen.
I understand that sometimes this is a cost we'll have to pay, but so far, I'm not seeing the strong justification to pay it just yet.
Another Route
There's another route we can take though. We can double down on sqlite:
@wbste commented on GitHub (Sep 29, 2024):
Yeah I'm 100% on board for doubling down in sqlite. All your above points are valid, it's portable, and it supports FTS and similarity search with the extensions you highlighted...would love to add semantic (or adjustable-weight hybrid) search :)
Another option (I stumbled on, but never tried myself) is this zero-dependency sqlite vector search project here. Of course you still need something to do the text-to-vector conversion, but the processing looks about as lightweight as it can be for sqlite!
@huyz commented on GitHub (Oct 7, 2024):
My two cents: it seems too early in Hoarder history to worry about disruption. Most of us have been using Hoarder for just a few months?
https://star-history.com/#hoarder-app/hoarder&Date shows

Looks to me like Hoarder is just starting to take off. If anything, now is the time to make big changes before it becomes impossible later when you're at 50K stars :)
And as @kamtschatka argued, everyone has PostgreSQL in their homelab, often several times over.
@airdogvan commented on GitHub (Oct 16, 2024):
It seems to me that, aside from any technical consideration about the merits of sqllite or other databases, your project won't really be seriously considered by most people who will be looking for a stable long term solution if not using a recognized as reliable database engine is chosen, such as pgres, mysql or Mongodb for example.
I may be wrong but I doubt it...
@MohamedBassem commented on GitHub (Oct 16, 2024):
I mentioned this before and I'll mention it again. I care about backward compatibility a lot and I'll not be breaking it unless there are extremely good reasons. So far, there are no good reasons and we're sticking with sqlite for the foreseeable future.
People take a project seriously for how stable it is and not for the database engine it's using.
@acelinkio commented on GitHub (Oct 26, 2024):
Doubling down on SQLLite feels like a premature optimization. SQLLite is growing in maturity and does have some promising use cases for ultra-low latency. However that comes as a tradeoff as SQLLite does not have the same tooling to reduce operational overhead for things like clustering, backup/restore, or scaling. Technically you can distribute SQLLite and horizontally scale with some clever filesystems. Those approaches require specialized infrastructure pieces not typically hosted in homelabs.
You mentioned that if you were starting from scratch that Postgres would have been selected. I strongly encourage leaning into the architecture design you want instead of succumbing to the problems of getting there. I understand the desire to not introduce breaking changes, but major changes should be expected from any project in a v0 state. Create a migration plan and just keep charging forward. Or maybe support both SQLLite / Postgres based deployments. Either way I've seen way too many sqllite databases get corrupted inside of docker/kubernetes.
*edit small wording changes
@grapemix commented on GitHub (Oct 30, 2024):
When you already put "This app is under heavy development and it's far from stable.", I think users already expect backward compatibility problem. So as long as your export and import features works correctly, don't worry about it. ;)
Your target users are not regular non technical users. People choose to self-host your app are technical and of course we do care about the db choice.
I am not sure how's the concurrency performance of SQLLite in multiple worker and multiple users environment, but it will be really painful if you decide to switch DB in that late stage.
In short, switching to Postgres doesn't necessary mean hoarder loses users. It might attracts other types of user.
Since sqlite depends on persistent volume, it requires a persistent volume which can handle multiple read-write if multiple pod is involved, but this feature only available in some persistent volumes type of CEPH/OpenEBS.
Lots of people's homelab have already installed postgres' operator, but not much people have installed CEPH or its alternative. If an admin want to run multiple instance/pod/container/worker of hoarder in multiple machine env(not hostPath), the admin can only self-host hoarder if hoarder uses postgres DB, unless they also install CEPH or its alternative.
https://github.com/tensorchord/pgvecto.rs/ if you want to take a look for postgres+vector support.
Data integration, migration and monitoring are important to us. With trusted tools and technology like wals, grafana dashboard, grafana alerts do make us feel like at home (I have alerts and dashboard for each pg clusters). >.< We don't just install your app and forget it. Just like adopting a pet, we have to make sure it plays nice with the others.
Even switching to postgres, I think Meilisearch is still useful because we can share Meilisearch instances and use Meilisearch to search for resources from other apps.
Nevertheless, if you think switching to Postgres will waste you so much time or bring you so much pressure, it is OK to stay in SQLLite. It is not the end of the day.
@csanchez-jetdev commented on GitHub (Nov 5, 2024):
I noticed that Meilisearch (which is already used in the project) has recently added vector search capabilities that could be leveraged here. This would allow us to add vector search without introducing new dependencies or changing the database architecture.
Meilisearch's vector search feature supports multiple embedders including Ollama (which is already used for tags) and OpenAI. We could configure it like this:
The MeiliSearch client version is probably preferable since it handles authentication and other details more cleanly.
Why use Meilisearch vector:
Would love to hear thoughts on this approach as it seems to align well with the project's goals while maintaining stability and avoiding major architectural changes.
@hadleyrich commented on GitHub (Dec 22, 2024):
I get not wanting to add new dependencies, but having postgres as an option would be pretty nice for HA setups. Not having to have persistent volumes is a pretty big plus from my point of view.
I would much rather have a container I can spin up and down on any host and point to a postgres DB and S3 storage than to mess around with local volumes. HA is a big thing for me.
Besides that, I've only just come across Hoarder and deployed it this evening. It's a fantastic looking app so congrats on that and obviously it's yours to take whichever direction you want :)
@rafaribe commented on GitHub (Jan 8, 2025):
This, I already have all the infrastructure setup for postgres, backups tested, the works and I believe most people with an homelab have as well.
@MohamedBassem Why don't you introduce a interface where you abstract the database away? That way people can use SQLite or Postgres or anything else that fits hoarder.
@caquillo07 commented on GitHub (Mar 24, 2025):
Forcing SQLite is the only thing preventing us from being able to deploy this at my place of work, not being able to properly deploy as HA without external file systems is a huge drawback. Have a DB abstraction that lets you plug in any database is a common pattern, in fact am sure drizzle supports this out of the box as well.
Would you be open to PRs to allow for this? Essentially SQLite would be the default, but if a new DB connection string is passed, it can use that one instead.
@rymurr commented on GitHub (Apr 24, 2025):
I configured this manually for my local install and it works great. I manually created the vector index w/
curland addedto the search endpoint. I've found it works great!
@Fmstrat commented on GitHub (Jun 26, 2025):
Why not do what Nextcloud does?
POSTGRES_CONN_STRENV variabledocker-compose.yml, add the postgres instance and config for new usersThis doesnt break legacy users, and allows for a better system going forward.
There are good arguments for how SQLite is better than it has been, but it's still a single file single connection DB. Locking will be an issue when using the CLI, for instance. Disk corruption can be more impactful, etc.
@tommyalatalo commented on GitHub (Jul 15, 2025):
There are many benefits with Postgres as have already been mentioned by others, and I support this feature as well.
I don't think it's a good idea to think about backwards compatibility in a project that is currently on v0.25.0, the road to 1.0.0 is expected to be include changes of all kinds. The initial choice of sqlite was probably good to get the project off the ground, but if the goal is to have a reliable and scalable self hosted service that can also support high availability setups you need something like Postgres instead. Like you said yourself, look at projects like Immich, they made big changes on the way, because they were necessary, and they're all the better for it. Instead of getting bogged down by early decisions and tangled up in workarounds that will only delay the inevitable rewrite to get it right anyway they sorted things out and are in a much better place today.
I would suggest to draft a roadmap for how to get better database support in place, since that is what you said you would have done if starting over today. As other projects have done, you could default to using sqlite to offer the "easy" way, but still allow for configuring use of Postgres and other databases by using an interface for those who want/need something more reliable and/or are already using Postgres with backups etc already in place.
This is true in my case as well, I run a multi-node homelab with NFS storage to allow for easy relocation of workloads across the nodes, I currently can't run karakeep because sqlite works very poorly over NFS. I already have a Postgres instance up, and S3 storage too, so if karakeep would support them I could run it as a very reliable and resilient application with high availability.