@slashgear/team-bookmarks
v1.0.1
Published
A lightweight open source web app to manage and share team bookmarks via YAML files.
Maintainers
Readme
Team Bookmarks
A lightweight open source web app to manage, share and version your team's bookmarks as a YAML file.
- Accessible: keyboard navigation, ARIA, Lighthouse accessibility score = 100
- Lightweight: main bundle < 20 KB, heavy dependencies lazy-loaded
- Self-hosted: single Docker image, no database, no auth
- CLI: init and export bookmarks from the terminal, no app required
Features
- Create folders and sub-folders of links
- Import a
.ymlbookmark file - Export as YAML (for Git versioning), NETSCAPE HTML (browser import) or JSON
- All edits saved in
localStorage, persists across page reloads - Example collection pre-loaded with Slashgear's favorite tools
CLI
The package ships a CLI so your team can manage bookmarks directly in the repository, no web app needed.
Init a new bookmarks file
npx @slashgear/team-bookmarks init "My Team"
# bunx @slashgear/team-bookmarks init "My Team"
# pnpx @slashgear/team-bookmarks init "My Team"Creates a bookmarks.yml with a starter structure and inline usage comments. Commit it to your repository.
Export to HTML or JSON
# Generate a Netscape HTML file ready to import in any browser
npx @slashgear/team-bookmarks export bookmarks.yml
# Generate JSON
npx @slashgear/team-bookmarks export bookmarks.yml --json
# Custom output path
npx @slashgear/team-bookmarks export bookmarks.yml -o dist/bookmarks.htmlWorkflow with Git
init bookmarks.yml → edit YAML → commit → share with team
↓
npx … export → bookmarks.html → import in browserEdit with an AI agent
An edit-bookmarks skill is included under .agents/skills/edit-bookmarks/SKILL.md. It is compatible with any agent runner that supports the open skills format (opencode, Claude Code, Cursor…).
skill: edit-bookmarks — add a link to Figma in the Design folder
skill: edit-bookmarks — rename "General" to "Resources"
skill: edit-bookmarks — remove the link to example.comThe agent reads and edits the YAML directly, preserving comments and formatting.
Quick start
Docker
docker run -p 3000:3000 ghcr.io/slashgear/team-bookmarks:latestThen open http://localhost:3000.
Docker Compose
services:
team-bookmarks:
image: ghcr.io/slashgear/team-bookmarks:latest
ports:
- "3000:3000"
restart: unless-stoppeddocker compose up -dYAML format
name: My Team
folders:
- name: Dev Tools
links:
- label: GitHub
url: https://github.com
folders:
- name: Monitoring
links:
- label: Grafana
url: https://grafana.comSave this file in your repository and import it whenever you need to update your team's bookmarks.
Workflow
Browser app:
Edit in browser → Export .yml → Commit to Git → Share with team
↓
Anyone can re-import,
edit and export againCLI / Git-native:
npx … init → Edit YAML → Commit → npx … export → Import in browser
↑
/bookmarks "add a link to…" (Claude Code)Tech stack
| Layer | Technology | | ----------- | ---------------------------------------------------------- | | Frontend | Preact + TypeScript | | Validation | Zod mini | | YAML | js-yaml (lazy-loaded) | | Server | HonoJS on Node 22 | | Compression | Brotli (q11) + Zopfli | | Build | Vite | | Tests | Vitest | | Linting | Oxlint | | Formatting | oxfmt | | Releases | Changesets |
Local development
Requirements
- Node.js 22+
- pnpm 10+
Setup
git clone https://github.com/slashgear/team-bookmarks.git
cd team-bookmarks
pnpm install
pnpm devAvailable scripts
| Script | Description |
| -------------------- | ----------------------------------------- |
| pnpm dev | Start dev server |
| pnpm build | Build frontend + compress + bundle server |
| pnpm build:analyze | Build with bundle visualizer |
| pnpm preview | Serve production build locally |
| pnpm test | Run tests in watch mode |
| pnpm test:run | Run tests once |
| pnpm lint | Lint with Oxlint |
| pnpm format | Format with oxfmt |
Build your own Docker image
docker build -t team-bookmarks .
docker run -p 3000:3000 team-bookmarksDeployment guides
Contributing
See CONTRIBUTING.md.
