A self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search
Find a file
Evan Simkowitz 49c286896d
feat(mobile): customizable reader toolbar (#2527)
* feat(mobile): add auto-hiding reader toolbar with customizable actions and overflow menu

Redesign the bookmark reader bottom bar with configurable toolbar actions,
an overflow ellipsis menu using native MenuView, and auto-hide on scroll.
Add toolbar settings page for reordering visible/overflow actions. Support
iOS 26 glass pill styling and transparent headers with edge-to-edge content.

* Update apps/mobile/components/bookmarks/BottomActions.tsx

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix comment

* fix(mobile): address PR review findings for reader toolbar

- Fix silent fall-through when sharing non-image/non-pdf assets
- Pass contentInsetTop to browser/archive WebViews for iOS 26
- Auto-inject missing action IDs into overflow on settings load
- Extract NAV_BAR_HEIGHT constant to replace magic number 44
- Remove unused ownerOnly/linkOnly from ToolbarActionMeta
- Extract triggerHaptic() helper to handle async catch
- Deduplicate image/PDF share logic with finally cleanup
- Add console.warn for unknown menu action events
- Simplify headerPlatformOptions to plain isIOS26 ternary
- Fix inaccurate comment about top/bottom padding

* remove margin around text view

* fix bottom inset

* fix reading progress bar regression, add small gap

* Add redesigned reading progress pill, blur effect for iOS 18 and lower

* small review fixes

* fix icon colors in dark mode

* Add missing @/lib/ios module for isIOS26 platform detection

* downgrade expo-blur to match expo

* Update to stable expo-glass-effect version

* fix(mobile): close reader view after archiving bookmark

* chore(mobile): remove auto-hiding header/footer and pill redesign from toolbar PR

Split these concerns out so this branch lands only the customizable toolbar.
Auto-hiding native header, auto-hiding bottom toolbar, and the redesigned
continue-reading pill will return together in a follow-up reader-chrome PR,
where they belong architecturally as a single feature.

* fix footer padding on iOS 26

* unify handling of archive and fav in bottom actions

* abstract share logic

* dynamic labels depending on bookmark state

* fix overflow submenu in android

* review comments
2026-04-24 17:26:43 +01:00
.claude chore: fix claude settings invalid json 2026-02-09 01:13:17 +00:00
.github chore: fix PR template path 2026-04-20 12:56:21 +01:00
.husky chore: add extra batch size logging to the meilisearch plugin 2026-04-06 20:27:03 +01:00
apps feat(mobile): customizable reader toolbar (#2527) 2026-04-24 17:26:43 +01:00
charts chore: Move the helm charts to their own repo 2025-07-19 08:46:47 +00:00
docker fix: fix pnpm symlink conflict (#2725) 2026-04-20 11:27:21 +01:00
docs feat: add support for configuring OpenAI reasoning effort (#2718) 2026-04-20 17:32:25 +01:00
kubernetes fix(deps): Update meilisearch version to v1.41.0 (#2643) 2026-04-09 23:40:10 +01:00
packages feat: add granular API key scopes (#2731) 2026-04-24 14:41:00 +01:00
patches fix(mobile): remove react-native-keyboard-controller patch (#2697) 2026-04-14 12:32:32 +01:00
screenshots landing: Update Homepage and Hero Image (#1304) 2025-04-25 10:23:13 +01:00
skills fix: fix clawhub skill yaml 2026-04-14 15:12:47 +01:00
tooling chore: migrate to oxfmt 2026-03-01 17:17:33 +00:00
tools/compare-models feat: add support for configuring OpenAI reasoning effort (#2718) 2026-04-20 17:32:25 +01:00
.dockerignore tests: add feed worker e2e tests 2026-03-16 08:03:53 +00:00
.env.sample chore: rename missing files/conf from Hoarder to Karakeep (#1280) 2025-04-21 18:59:40 +01:00
.gitignore feat(landing): migrate to astro 2026-04-09 13:50:00 +01:00
.npmrc build: Use hoisted node_modules to support expo 2024-03-11 01:24:31 +00:00
.nvmrc fix: compile native modules under pnpm 9 and pin Node 24 (#2686) 2026-04-10 09:33:36 +01:00
.oxfmtrc.json chore: migrate to oxfmt 2026-03-01 17:17:33 +00:00
.oxlintrc.json chore: migrate away from eslint to oxlint (#1642) 2025-06-22 12:29:30 +01:00
AGENTS.md chore: migrate to oxfmt 2026-03-01 17:17:33 +00:00
CLAUDE.md chore: Update the agent files 2025-09-07 15:38:02 +00:00
CONTRIBUTING.md docs: replace hoarder with karakeep in CONTRIBUTING.md and FAQ (#1256) 2025-04-13 12:40:20 +01:00
GEMINI.md chore: Update the agent files 2025-09-07 15:38:02 +00:00
karakeep-linux.sh fix: don't fail the script if the user karakeep already exists. fixes #2242 2025-12-18 06:14:10 +00:00
LICENSE Add readme and license 2024-02-20 17:22:14 +00:00
package.json chore: add portless pnpm scripts 2026-04-24 15:05:52 +01:00
pnpm-lock.yaml feat(mobile): customizable reader toolbar (#2527) 2026-04-24 17:26:43 +01:00
pnpm-workspace.yaml chore: add a tool for comparing perf of different models 2025-12-26 11:14:17 +00:00
README.md readme: some readme updates 2025-12-13 12:54:27 +00:00
SECURITY.md chore: Rename hoarder packages to karakeep 2025-04-12 19:37:40 +01:00
start-dev.sh fix(deps): Update meilisearch version to v1.41.0 (#2643) 2026-04-09 23:40:10 +01:00
turbo.json chore: migrate to oxfmt 2026-03-01 17:17:33 +00:00

Karakeep (previously Hoarder) is a self-hostable bookmark-everything app with a touch of AI for the data hoarders out there.

homepage screenshot

Features

  • 🔗 Bookmark links, take simple notes and store images and pdfs.
  • ⬇️ Automatic fetching for link titles, descriptions and images.
  • 📋 Sort your bookmarks into lists.
  • 👥 Collaborate with others on the same list.
  • 🔎 Full text search of all the content stored.
  • AI-based (aka chatgpt) automatic tagging and summarization. With supports for local models using ollama!
  • 🤖 Rule-based engine for customized management.
  • 🎆 OCR for extracting text from images.
  • 🔖 Chrome plugin and Firefox addon for quick bookmarking.
  • 📱 An iOS app, and an Android app.
  • 📰 Auto hoarding from RSS feeds.
  • 🔌 REST API and multiple clients.
  • 🌐 Multi-language support.
  • 🖍️ Mark and store highlights from your hoarded content.
  • 🗄️ Full page archival (using monolith) to protect against link rot.
  • ▶️ Auto video archiving using yt-dlp.
  • ☑️ Bulk actions support.
  • 🔐 SSO support.
  • 🌙 Dark mode support.
  • 💾 Self-hosting first.
  • ⬇️ Bookmark importers from Chrome, Pocket, Linkwarden, Omnivore, Tab Session Manager.
  • 🔄 Automatic sync with browser bookmarks via floccus.
  • [Planned] Offline reading on mobile, semantic search across bookmarks, ...

⚠️ This app is under heavy development.

Documentation

Demo

You can access the demo at https://try.karakeep.app. Login with the following creds:

email: demo@karakeep.app
password: demodemo

The demo is seeded with some content, but it's in read-only mode to prevent abuse.

About the name

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!).

Stack

  • NextJS for the web app. Using app router.
  • Drizzle for the database and its migrations.
  • NextAuth for authentication.
  • tRPC for client->server communication.
  • Puppeteer for crawling the bookmarks.
  • OpenAI because AI is so hot right now.
  • Meilisearch for the full content search.

Why did I build it?

I browse reddit, twitter and hackernews a lot from my phone. I frequently find interesting stuff (articles, tools, etc) that I'd like to bookmark and read later when I'm in front of a laptop. Typical read-it-later apps usecase. Initially, I was using Pocket for that. Then I got into self-hosting and I wanted to self-host this usecase. I used memos for those quick notes and I loved it but it was lacking some features that I found important for that usecase such as link previews and automatic tagging (more on that in the next section).

I'm a systems engineer in my day job (and have been for the past 7 years). I didn't want to get too detached from the web development world. I decided to build this app as a way to keep my hand dirty with web development, and at the same time, build something that I care about and use every day.

Alternatives

  • memos: I love memos. I have it running on my home server and it's one of my most used self-hosted apps. It doesn't, however, archive or preview the links shared in it. It's just that I dump a lot of links there and I'd have loved if I'd be able to figure which link is that by just looking at my timeline. Also, given the variety of things I dump there, I'd have loved if it does some sort of automatic tagging for what I save there. This is exactly the usecase that I'm trying to tackle with Karakeep.
  • mymind: Mymind is the closest alternative to this project and from where I drew a lot of inspirations. It's a commercial product though.
  • raindrop: A polished open source bookmark manager that supports links, images and files. It's not self-hostable though.
  • Bookmark managers (mostly focused on bookmarking links):
    • Pocket (Dead): Pocket is what hooked me into the whole idea of read-it-later apps. I used it a lot. However, I recently got into home-labbing and became obsessed with the idea of running my services in my home server. Karakeep is meant to be a self-hosting first app. Mozilla recently announced that it's shutting down pocket.
    • Linkwarden: An open-source self-hostable bookmark manager that I ran for a bit in my homelab. It's focused mostly on links and supports collaborative collections.
    • Wallabag: Wallabag is a well-established open source read-it-later app written in php.
    • Shiori: Shiori is meant to be an open source pocket clone written in Go.

Translations

Karakeep uses Weblate for managing translations. If you want to help translate Karakeep, you can do so here.

Karakeep Cloud ☁️

If you're not comfortable with self-hosting, you can use our managed Karakeep cloud at cloud.karakeep.app. Cloud subscriptions support the development of Karakeep.

Support

If you're enjoying using Karakeep, drop a on the repo!

Buy Me A Coffee

Community Channels

License

Karakeep is licensed under AGPL-3.0 and owned by Localhost Labs Ltd.

Star History

Star History Chart