ScriptsApr 17, 2026·3 min read

Shiori — Simple Self-Hosted Bookmark Manager

Shiori is a lightweight self-hosted bookmark manager written in Go with full-text search, archiving, and a clean web interface for organizing your saved links.

TL;DR
Shiori is a self-hosted Go bookmark manager with full-text search, page archiving, and a clean web interface.
§01

What it is

Shiori is a self-hosted bookmark manager written in Go. It saves bookmarks with full-text search, archives web page content for offline reading, and provides a clean web interface for organizing your saved links. It runs as a single binary with an embedded SQLite database or optional PostgreSQL/MySQL backend.

Shiori targets users who want control over their bookmarks without relying on browser sync services or third-party bookmark tools. It is lightweight enough to run on a Raspberry Pi.

§02

How it saves time or tokens

Shiori archives the full content of bookmarked pages, so you never lose access to content that goes offline or changes. The full-text search means you can find bookmarks by content, not just title or URL. This eliminates the frustration of knowing you saved something but not remembering what you called it.

The CLI and REST API enable automation: batch-import bookmarks from browsers, integrate with RSS readers, or build custom workflows.

§03

How to use

  1. Run Shiori with Docker:
docker run -d --name shiori \
  -p 8080:8080 \
  -v /path/to/data:/shiori \
  ghcr.io/go-shiori/shiori
  1. Open http://localhost:8080 and log in with default credentials (shiori/gopher).
  1. Add bookmarks via the web UI or CLI:
# CLI usage
shiori add https://example.com --title 'Example Site' --tags 'reference,docs'
shiori search 'kubernetes deployment'
§04

Example

Using Shiori's REST API to manage bookmarks programmatically:

# Login and get session token
TOKEN=$(curl -s -X POST http://localhost:8080/api/login \
  -d '{"username":"shiori","password":"gopher"}' | jq -r '.session')

# Add a bookmark
curl -X POST http://localhost:8080/api/bookmarks \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "url": "https://docs.anthropic.com",
    "title": "Anthropic Docs",
    "tags": [{"name": "ai"}, {"name": "docs"}]
  }'

# Search bookmarks
curl http://localhost:8080/api/bookmarks?keyword=ai \
  -H "Authorization: Bearer $TOKEN"
§05

Related on TokRepo

§06

Common pitfalls

  • Not changing the default password. The default credentials (shiori/gopher) are well-known. Change them immediately after first login.
  • Running without persistent storage. Without mounting a volume to /shiori, all bookmarks are lost when the container restarts.
  • Expecting browser extension quality. Shiori has a basic bookmarklet but no polished browser extension. Adding bookmarks via the web UI or API is more reliable.

Frequently Asked Questions

Can I import bookmarks from my browser?+

Yes. Export your bookmarks as an HTML file from Chrome, Firefox, or any browser, then import them into Shiori via the web UI or CLI. Shiori parses the standard bookmark HTML format.

Does Shiori archive web page content?+

Yes. When you add a bookmark, Shiori optionally downloads and caches the full page content. This means you can read the page even if the original URL goes offline. Archived content is searchable via full-text search.

What database does Shiori use?+

Shiori uses SQLite by default, which requires no setup. For larger installations or multi-user setups, it supports PostgreSQL and MySQL as alternative backends.

Can multiple users share a Shiori instance?+

Yes. Shiori supports multiple user accounts. Each user has their own bookmark collection. An admin account can manage users and permissions.

Is there a mobile app for Shiori?+

There is no official mobile app, but the web interface is responsive and works on mobile browsers. The REST API enables third-party clients and integrations.

Citations (3)

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets