selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

cherry logo

Self-host cherry

v0.0.10

Self-hosted bookmark manager with tags and full-text search

BetaOpen SourceMIT
Updated10 hours ago
LanguageTypescript
Setup difficultyEasy
Stars
283
Ports
8000 (HTTP traffic), 5173 (Internal SvelteKit dev server (not for external use))
Docker
ghcr.io/haishanh/cherry
Install with Docker
Cherry home page in dark modeCherry home page in light modeSave page UI in dark modeSave page UI in light mode

What is cherry?

Cherry is a self-hosted bookmark manager designed for personal use. It stores bookmarks in a SQLite database and provides a clean web UI with tagging, grouping, and full-text search powered by a custom SQLite tokenizer extension. Users can save pages through Chrome and Firefox browser extensions or a bookmarklet. The service supports CSV import and export for migrating data. Authentication is handled via built-in email/password accounts, with optional Google OAuth and HTTP remote-user header integration for SSO gateways like Authelia or Authentik. Deployment is Docker-only, with the image published to ghcr.io/haishanh/cherry. The project is MIT-licensed and actively maintained.

Should you self-host cherry?

cherry scores 44/100 on selfhost.directory (how scoring works) and ranks #33 of 46 in Bookmarks & Link Sharing. It has 283 GitHub stars.

It shipped 2 stable releases in the past year. The latest, v0.0.10, came out on 8 September 2026. New versions land roughly every 2 months.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is Karakeep (82/100, 30 114 stars). It scores higher overall, so compare the two before you pick. See cherry vs Karakeep side by side.

Features

  • Bookmarklet
  • Browser Extensions
  • CSV Export
  • CSV Import
  • Full-Text Search
  • Google OAuth sign-in
  • Groups
  • HTTP remote-user authentication
  • Personal access tokens (PAT)
  • SQLite Database
  • Tagging
  • User management CLI

cherry README

How to install cherry

Install cherry with Docker

Environment variables
JWT_SECRET (required), ENABLE_PUBLIC_REGISTRATION, USE_INSECURE_COOKIE, ENABLE_HTTP_REMOTE_USER, HTTP_REMOTE_USER_HEADER_NAME, GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET, GOOGLE_OAUTH_REDIRECT_URI, DATA_DIR, DATABASE_PATH, PAGE_BOOKMARK_LIMIT

docker run -d --name cherry -v cherry_data_v1:/data
-p "8000:8000"
-e "JWT_SECRET=some-secret-string"
-e "ENABLE_PUBLIC_REGISTRATION=1"
ghcr.io/haishanh/cherry:main

Docker is the only supported deployment method. Map a volume to /data for persistence. Use a reverse proxy (Nginx, Caddy, Traefik, Cloudflare Tunnel) for HTTPS.

How to configure cherry

  • DATABASE_PATH/data/cherry.sqliteLocation of the SQLite database file.

    Location of the SQLite database file.

  • DATA_DIR/dataDirectory where temporary files like export CSVs are saved.

    Directory where temporary files like export CSVs are saved.

  • ENABLE_HTTP_REMOTE_USER0Set to 1 to enable authentication via HTTP Remote-User header from an auth gateway.

    Set to 1 to enable authentication via HTTP Remote-User header from an auth gateway.

    values: 0 or 1

  • ENABLE_PUBLIC_REGISTRATION0Set to 1 to enable public registration. Default is disabled.

    Set to 1 to enable public registration. Default is disabled.

    values: 0 or 1

  • GOOGLE_OAUTH_CLIENT_IDGoogle OAuth2 client ID for "Sign in with Google".

    Google OAuth2 client ID for "Sign in with Google".

  • GOOGLE_OAUTH_CLIENT_SECRETGoogle OAuth2 client secret for "Sign in with Google".

    Google OAuth2 client secret for "Sign in with Google".

  • GOOGLE_OAUTH_REDIRECT_URIGoogle OAuth2 redirect URI, should be {YOUR_CHERRY_BASE_URL}/api/auth/callback/google.

    Google OAuth2 redirect URI, should be {YOUR_CHERRY_BASE_URL}/api/auth/callback/google.

  • HTTP_REMOTE_USER_HEADER_NAMERemote-UserCustom header name for remote user authentication (default: Remote-User).

    Custom header name for remote user authentication (default: Remote-User).

  • JWT_SECRETString used to sign user's PAT (Personal Access Token). Required.

    String used to sign user's PAT (Personal Access Token). Required.

  • LOG_LEVELdebugLog level for the application.

    Log level for the application.

  • PAGE_BOOKMARK_LIMIT60Number of bookmarks per page.

    Number of bookmarks per page.

  • USE_INSECURE_COOKIE0Set to 1 to disable secure cookies for local HTTP testing. Should not be used in production with HTTPS.

    Set to 1 to disable secure cookies for local HTTP testing. Should not be used in production with HTTPS.

    values: 0 or 1

cherry releases & version history

More in Bookmarks & Link Sharing

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…