A Raycast extension for Karakeep, a self-hostable bookmark manager with AI-powered tagging. Save, search, and manage your bookmarks, notes, and highlights without leaving Raycast.
This extension leverages Karakeep's API to provide a streamlined experience for managing your digital collection, complete with AI-powered tagging and search capabilities.
git clone https://github.com/foru17/raycast-karakeep.git
cd raycast-karakeep
npm install && npm run dev
# Enjoy it
Install the Karakeep browser extension to save pages directly from your browser and create highlights. Links to Chrome, Firefox, and Safari extensions are available from the Actions panel on any bookmark.
Before you begin, ensure you have the following:
https://your-karakeep-instance.com/settings/api-keysIt is strongly recommended to set up Karakeep with Docker for easy deployment and management.
You can also customize default actions for link and text bookmarks, and choose which bookmark details to display (tags, description, note, summary, creation date, preview image).
If you self-host Karakeep on the same Mac β the standard Docker Compose setup β the extension detects when your instance is stopped and helps you get going again instead of failing with a generic network error.
When Karakeep isn't responding at your configured apiUrl, you'll see a "Karakeep isn't running" screen with:
web, meilisearch, chrome), so the whole Compose project is started rather than just the web container, and the extension waits for the API to actually answer before reloading.ECONNREFUSED) for a bug report.The Create Bookmark, Create Note, and Create List forms check that the server is reachable before submitting, so a stopped instance never costs you what you typed. If it can't be reached, your input stays in the form and is copied to the clipboard as a backup.
If your container is not running, the extension will detect this and offer to start it for you.

Requirements: Docker Desktop running, and Karakeep started at least once from Docker so the container exists. The extension never creates containers β it only starts ones you already have.
Using a hosted or remote instance? None of this applies to you and nothing changes. The Docker checks only run when your API URL is
localhostor127.0.0.1β an instance on another machine, including one elsewhere on your network, is left alone, and the Start action is hidden when there's no local container to start.
If problems persist, open an issue on GitHub.
Contributions are welcome and appreciated! Here's how you can contribute:
git checkout -b my-new-featuregit commit -am 'Add some feature'git push origin my-new-featureBuilt on top of the Karakeep project.
Thanks to @kdurek for the original Raycast Karakeep extension, and to @foru17 for the enhanced version this is based on.
MIT β see LICENSE for details.
List all your bookmarks
List all your lists
List all your tags
Create a new bookmark
Create a new note
Create a new list
List all your notes
View and manage your highlights
View your Karakeep usage statistics
Create, download, and delete account backups
Quickly bookmark the current browser tab
Pull the latest Docker images and restart a local Karakeep instance
: followed by a name β which searches every emoji and follows your skin tone preference. The βI grid it replaces has been removed, and the extension is a good deal smaller for it@chrismessina/raycast-logger to 1.3.0, which hardens credential redaction in logs β including credentials embedded in URLs, and values that previously escaped masking by their runtime type.@raycast/api to 1.104.24.ECONNREFUSED) instead of the opaque "fetch failed", and no longer stack a generic "Failed to fetch latest data" toast on top of the recovery screenuseTagPicker hook shared across Create Bookmark, Create Note, Edit Bookmark, and Edit Note.runWithToast β Consistent toast handling with Edit Note; error toasts now include a "Copy Error" action.isEmoji rejecting emoji followed by \uFE0F (e.g. βοΈ).| no longer break the table layout.import/first violations and no-misleading-character-class in emoji validation..eslintrc.json (superseded by eslint.config.mjs)getScreenshot βprewarmβ flow and limited it to the currently selected item to prevent performance issues.getDashboardListsPage was calling useConfig() inside a regular function; converted to a pure helper that receives apiUrl as a parameter.console.* usage in favor of structured logging, and simplified selection/state handling after list mutations (e.g., delete).List type now includes parentId and icon fields used by the hierarchy view; Asset.assetType is now an optional property instead of a | undefined union member.useTranslation hook: Removed unnecessary isInitialMount ref pattern; language sync is now handled by a single clean effect.Bookmark import in quickBookmark.tsx, unnecessary URL polyfill import in apis/index.ts, and a redundant showHUD call that duplicated the success toast in createNote.tsx.Create Bookmark now focuses exclusively on URL bookmarksCreate Note command for text-only notesuseCachedPromise pagination