Cloudmark is a universal cloud bookmark management tool that allows you to easily save and access your bookmarks from anywhere. No login or registration required — create a collection ID (mark) plus a secret write token, install the bookmarklet, and start saving pages.
Try it online: https://cloudmark.site/
- 🔑 No Registration: Access your collection with a unique
mark; writes require a write token - 🔖 One-Click Save: Bookmarklet embeds mark + write token
- 🏷️ Category Management: Custom categories for organization
- ⌨️ Keyboard-first:
/search,j/knavigate,n/e/dCRUD,?help - 📋 High density: Compact list with instant filter / sort
- 🎨 Custom icons: Emoji, letter marks, or upload SVG/ICO/PNG
- 🌐 Cross-Device Access: Read anywhere; copy the write token to another device to write
- 📝 Detailed Descriptions: Optional notes per bookmark
- 🌍 Multi-Language Support: English and Chinese
- 🗄️ Cloudflare D1: Relational storage on the edge
| Capability | Requirement |
|---|---|
| View collection | Know the mark (URL) |
| Add / edit / delete | Valid write token for that mark |
| Bookmarklet save | mark + token query params |
- Write tokens are hashed (SHA-256) in D1; plaintext is only stored in the browser (
localStorage) and in the bookmarklet. - Rate limits and field length limits protect against abuse.
- Visit https://cloudmark.site/doc
- Generate a
markand write token (or customize the mark) - Drag the bookmarklet to your browser bookmarks bar
- Click the bookmarklet while browsing to save pages
- Open
https://cloudmark.site/your-markto manage bookmarks
- Node.js 20+ and pnpm
- Cloudflare account (for preview and deployment)
pnpm install- Create a D1 database:
pnpm exec wrangler d1 create cloudmark-
Put the returned
database_idintowrangler.jsonc→d1_databases[0].database_id. -
Apply migrations:
# local (Miniflare)
pnpm db:migrate:local
# production
pnpm db:migrate:remotepnpm devVisit http://localhost:3000.
pnpm db:migrate:local
pnpm previewOne-click deploy (creates a Cloudflare Worker from this repo):
Or from your machine:
pnpm db:migrate:remote
pnpm run deployAfter the first deploy, set d1_databases[0].database_id in wrangler.jsonc (or via the dashboard) and run migrations.
BASE_URL— public site URL in Worker vars (optional; client uses current origin)
- TypeScript 7 — language
- React + Vite — SPA frontend
- Hono — Worker API
- Cloudflare Workers — hosting (
@cloudflare/vite-plugin) - Cloudflare D1 — primary data store
- Tailwind CSS + shadcn/ui — styling
This project is open-sourced under the AGPL-3.0 license.
Issues and Pull Requests are welcome!
- Fork the project
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
If you have any questions, please contact us through GitHub Issues.