A bookmark manager with tagging, full-text search, and RSS feed tracking.
Installed at https://linky1.com
- Frontend: Vue 3 SPA (TypeScript, Tailwind CSS, Pinia) in
client/ - Backend: Go server with MariaDB in
server/ - Auth: JWT tokens, email/password, OAuth 2.0 (Google, GitHub, Facebook, LinkedIn, Bitbucket, Reddit, Yahoo), OAuth 1.0a (Twitter)
- Go 1.24+
- Node.js 20+
- Docker (for MariaDB)
cd server
docker-compose up -d mariadbcd server
go run ./cmd/linkyThe server runs on :8080, auto-runs database migrations on startup.
cd client
npm install
npm run devOpen http://localhost:3000 — API requests are proxied to the Go server on :8080.
The Go server is configured via environment variables. See server/.env.example for all options.
Key variables:
| Variable | Default | Description |
|---|---|---|
PORT |
8080 |
Server port |
DATABASE_URL |
linky:linky@tcp(localhost:3306)/linky?parseTime=true&multiStatements=true |
MariaDB DSN |
JWT_SECRET |
change-me-in-production |
Change in production! |
JWT_EXPIRY |
24h |
Token lifetime |
Authentication is SSO-only via OIDC. Configure the provider with OIDC_* env vars. |
To migrate data from an existing CouchDB instance:
cd server
go run ./cmd/migrate-couchdb \
--couchdb-url=http://localhost:5984/linky \
--couchdb-user=admin \
--couchdb-password=secretcd client
npm run build
cd ../server
go build -o linky ./cmd/linky
DATABASE_URL="..." JWT_SECRET="..." ./linkyThe server serves the Vue client from ../client/dist/ if present.
Alternatively, use Docker:
cd server
docker-compose up- Link checker: A scheduled job that validates all bookmark URLs and tags broken links with a
brokensystem tag. The old version (old-version/link-check-server/) ran this as a nightly batch process. Could be implemented as a Go CLI command or a Kubernetes CronJob.
The previous Node.js/Express/CouchDB/React implementation is archived in old-version/.