Skip to main content

How to Self-Host Shiori: Minimal Bookmark Manager 2026

·OSSAlt Team
shioribookmarksread-laterself-hostingdocker2026

TL;DR

Shiori (MIT, ~9K GitHub stars, Go) is a simple self-hosted bookmark manager and read-later tool. It's a lightweight alternative to Pocket or Pinboard: save URLs, archive the page content (offline readable copy), add tags, full-text search. The entire server is a single Go binary. Compare Shiori vs Linkwarden: Shiori is simpler (no PDF archiving, no collections/collaborative); Linkwarden has richer archiving and team features. Shiori is perfect for a solo, minimal setup.

Key Takeaways

  • Shiori: MIT, ~9K stars, Go — single binary, SQLite, bookmark + offline archive
  • Offline reading: Saves a clean readable copy of every page (no images by default)
  • Browser extensions: Chrome and Firefox extensions for one-click save
  • Full-text search: Search archived content, not just titles/tags
  • REST API: Automate bookmarking from scripts or other tools
  • Pocket import: Import your Pocket export directly

Shiori vs Linkwarden vs Wallabag

FeatureShioriLinkwardenWallabag
LicenseMITAGPL 3.0MIT
GitHub Stars~9K~8K~10K
StorageSQLite/PostgreSQLPostgreSQLMySQL/SQLite
Archive: ReadableYesYesYes
Archive: ScreenshotNoYesNo
Archive: PDFNoYesNo
CollectionsNo (tags only)YesYes
Multi-userYesYesYes
Browser extensionYes (Chrome/Firefox)YesYes
Highlights/annotationsNoNoYes
RSS feedNoNoYes
Pocket importYesNoYes
TechGoTypeScript/Next.jsPHP
RAM~30MB~200MB~100MB

Part 1: Docker Setup

# docker-compose.yml
services:
  shiori:
    image: ghcr.io/go-shiori/shiori:latest
    container_name: shiori
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - shiori_data:/shiori
    environment:
      SHIORI_DIR: /shiori
      SHIORI_HTTP_PORT: 8080
      SHIORI_HTTP_ROOT_PATH: ""

volumes:
  shiori_data:
docker compose up -d

Visit http://your-server:8080 — first user to register becomes admin.


Part 2: HTTPS with Caddy

bookmarks.yourdomain.com {
    reverse_proxy localhost:8080
}

Part 3: First-Time Setup

  1. Visit https://bookmarks.yourdomain.com
  2. Register your account (first account = admin)
  3. Immediately disable registration if this is a personal instance:
environment:
  SHIORI_HTTP_DISABLE_SIGNUP: "true"

Or set from CLI after first user:

docker exec shiori shiori account add -u bob --password secret

Part 4: Adding Bookmarks

Web UI

  1. Click + New Bookmark
  2. Paste URL
  3. Shiori fetches the title, description, and optionally archives the page
  4. Add tags (comma-separated)
  5. Save

Browser Extension

Install the Shiori extension:

Configure in extension settings:

  • Server: https://bookmarks.yourdomain.com
  • Username + password

Click the extension icon on any page → one-click save with optional tag.

CLI

# Add a bookmark:
docker exec -it shiori shiori add https://example.com -t "tech,reference"

# List bookmarks:
docker exec -it shiori shiori print

# Search:
docker exec -it shiori shiori print -s "docker"

REST API

# Get session token:
TOKEN=$(curl -s -X POST https://bookmarks.yourdomain.com/api/login \
  -H "Content-Type: application/json" \
  -d '{"username":"alice","password":"your-password"}' \
  | jq -r .session)

# Add bookmark:
curl -X POST https://bookmarks.yourdomain.com/api/bookmarks \
  -H "X-Session-Id: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","tags":[{"name":"tech"}],"createArchive":true}'

# Search bookmarks:
curl "https://bookmarks.yourdomain.com/api/bookmarks?keyword=docker&tags=ops" \
  -H "X-Session-Id: $TOKEN"

# Delete bookmark:
curl -X DELETE https://bookmarks.yourdomain.com/api/bookmarks \
  -H "X-Session-Id: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids":[42]}'

Part 5: Archiving

Shiori can save an offline readable copy of every bookmark:

Archive on save:

  1. Check Create archive when adding a bookmark
  2. Or set auto-archive by default in settings

Archive existing bookmarks:

# Archive all bookmarks that don't have an archive:
docker exec -it shiori shiori update -i all --create-archive

The archive strips ads and navigation, keeping the main article content readable offline. Images are not stored by default (keeps storage small).

Enable image archiving (larger storage):

environment:
  SHIORI_HTTP_ARCHIVE_IMAGES: "true"

Part 6: Import from Pocket

Export your Pocket data and import into Shiori:

  1. In Pocket: Settings → Export → HTML
  2. Import:
docker cp pocket-export.html shiori:/tmp/
docker exec -it shiori shiori import /tmp/pocket-export.html

Import from Netscape Bookmarks (browser export)

# Export from Chrome/Firefox as HTML
docker cp bookmarks.html shiori:/tmp/
docker exec -it shiori shiori import /tmp/bookmarks.html

Part 7: PostgreSQL for Production

For larger libraries, switch from SQLite to PostgreSQL:

services:
  shiori:
    image: ghcr.io/go-shiori/shiori:latest
    environment:
      SHIORI_DIR: /shiori
      SHIORI_DATABASE_URL: "postgres://shiori:${POSTGRES_PASSWORD}@postgres:5432/shiori"
    depends_on:
      - postgres

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: shiori
      POSTGRES_USER: shiori
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  shiori_data:
  postgres_data:

Shiori uses tags for organization (no folders or collections):

# In the search box:
docker               ← full-text search across title, description, archived content
#docker              ← filter by tag "docker"
#docker #ops         ← bookmarks with both tags

Bulk tagging:

# Tag all bookmarks matching a search:
docker exec -it shiori shiori update -s "kubernetes" -t "k8s,ops,devops"

Maintenance

# Update Shiori:
docker compose pull
docker compose up -d

# Logs:
docker compose logs -f shiori

# Backup (SQLite):
docker exec shiori cp /shiori/shiori.db /shiori/shiori.db.backup
tar -czf shiori-backup-$(date +%Y%m%d).tar.gz \
  $(docker volume inspect shiori_shiori_data --format '{{.Mountpoint}}')

# CLI account management:
docker exec -it shiori shiori account print     # list accounts
docker exec -it shiori shiori account add -u bob  # add user

See all open source bookmark and read-later tools at OSSAlt.com/categories/productivity.

Comments