A self-hosted link archival tool
  • Go 76.6%
  • Vue 16.6%
  • TypeScript 3%
  • HTML 1.6%
  • CSS 0.9%
  • Other 1.3%
Find a file
Felipe M. 484b225af7
feat: add user administration API and UI
Add admin-only CRUD endpoints for user management under /api/v1/system/users
with full frontend implementation including create, edit, change password,
and delete operations with self-protection guards.

- Extend AuthDomain interface with ListUsers, GetUser, UpdateUser,
  UpdateUserPassword, DeleteUser methods
- Add List, Update, Delete methods to UserStore with shared scanUser helper
- Create UserHandler with 5 endpoints protected by admin middleware
- Complete Users.vue admin page with modals and error handling
- Make CreateUser accept role parameter for atomic user creation
- Fix auth middleware to use database role as source of truth instead of
  stale JWT claims, preventing privilege persistence after demotion
- Fix pre-existing gofmt issues in yt_dlp.go and config.go
2026-04-02 10:33:36 +02:00
.readme docs: screenshots 2026-01-12 21:18:29 +01:00
.woodpecker ci: install docker from official repository 2026-01-30 18:03:51 +01:00
cmd/hako feat: enhance build configuration and implement versioning 2026-01-03 13:49:17 +01:00
devdata feat: add server host and interface binding configuration 2026-01-29 12:57:10 +01:00
docs docs: screenshots 2026-01-12 21:18:29 +01:00
e2e test(e2e): expand test suite with comprehensive coverage 2026-01-29 12:49:40 +01:00
internal feat: add user administration API and UI 2026-04-02 10:33:36 +02:00
scripts test(e2e): expand test suite with comprehensive coverage 2026-01-29 12:49:40 +01:00
webapp feat: add user administration API and UI 2026-04-02 10:33:36 +02:00
.gitignore chore: add default config file for development 2026-01-29 12:52:15 +01:00
.golangci.yaml feat: search 2026-01-18 09:51:25 +01:00
.goreleaser.yml chore: container deployment and updated readme 2026-01-12 21:08:33 +01:00
Containerfile feat: add yt-dlp support for video downloads 2026-01-29 12:52:29 +01:00
docker-compose.yml chore: container deployment and updated readme 2026-01-12 21:08:33 +01:00
go.mod deps: cleanup 2026-01-29 13:25:32 +01:00
go.sum deps: cleanup 2026-01-29 13:25:32 +01:00
LICENSE initial boilerplate 2026-01-03 11:43:21 +01:00
Makefile feat: add yt-dlp support for video downloads 2026-01-29 12:52:29 +01:00
README.md feat(e2e): add HTML report generation with embedded screenshots 2026-01-18 18:45:09 +01:00

Hako

Hako is a self-hosted link archival service that automatically saves and preserves web content. Save URLs and let Hako archive them using multiple archival methods, extract content for full-text search, and organize your saved links with categories.

Features

  • Link Archival: Save URLs and automatically archive web content.
  • Multiple Archivers: Support for different archival methods depending on the site or content type.
  • Content Extraction: Extract text content from PDFs and web pages for full-text search
  • Rule Engine: Configurable rules that automatically select appropriate archivers based on URL patterns, hostnames, and content types
  • Categories: Organize links in categories.
  • Archive History: Track multiple archive versions for each link if archived multiple times.
  • Full-Text Search: Search through archived content.
  • Self-Hosted: Full control over your archived data

Tech stack

  • Go
  • Vue 3
  • Bun

Screenshots

See docs/screenshots.

Running the Application

This project uses a Makefile for common tasks. Run make help to see all available commands.

Backend

To build and run the backend:

# Build the webapp (required for embedded frontend)
make build-webapp

# Run the server only (without building webapp)
make run-server

Frontend

The frontend is built with Vue.js and Vite, using Bun as the package manager:

# Run the webapp in development mode with hot-reload
make run-webapp

# Build the webapp for production
make build-webapp

Docker

Running with Docker Compose

To run Hako locally using Docker Compose:

# Build the docker binaries
make build-docker

# Start the container
docker compose up

# Or run in detached mode
docker compose up -d

The service will be available at http://localhost:8080.

Building Docker Images

To build Docker images using goreleaser (for production builds):

# Build Docker image locally (creates multi-arch images)
make build-docker

This will build Docker images for multiple architectures (amd64, arm64, armv7) using goreleaser.

Development

Development Commands

Common development tasks:

# Run linting (server and webapp)
make lint

# Run test suite
make test

# Run integration tests
make e2e

# Format code
make format

# Clean build artifacts
make clean

# Clear dev data (keeps config.yaml)
make clean-devdata

Run make help to see all available commands.