A self-hosted link archival tool
  • Go 77%
  • Vue 16.5%
  • TypeScript 3%
  • HTML 1.6%
  • CSS 0.9%
  • Other 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Felipe M. 5d593c0eae
All checks were successful
CI / goreleaser-lint (push) Successful in 8s
CI / format (push) Successful in 1m38s
CI / lint (push) Successful in 4m3s
CI / build (push) Successful in 5m43s
CI / test (push) Successful in 7m59s
Release / release (push) Successful in 5m43s
CI / e2e (push) Successful in 25m33s
feat: show the deployed version at the bottom of the sidebar
The version composable requests /system, the public endpoint that serves the build version. The Login page now shows the real version.
2026-10-02 16:16:02 +02:00
.github/workflows deps: upgrade dependencies and add a JS runtime for yt-dlp (#3) 2026-10-02 13:10:18 +02:00
.readme docs: screenshots 2026-01-12 21:18:29 +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 deps: upgrade dependencies and add a JS runtime for yt-dlp (#3) 2026-10-02 13:10:18 +02:00
internal fix: archive yt-dlp videos when other assets fail (#4) 2026-10-02 11:46:03 +02:00
scripts ci: migrate from Woodpecker CI to Forgejo Actions (#1) 2026-09-22 17:33:29 +02:00
webapp feat: show the deployed version at the bottom of the sidebar 2026-10-02 16:16:02 +02:00
.dockerignore ci: migrate from Woodpecker CI to Forgejo Actions (#1) 2026-09-22 17:33:29 +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 ci: migrate from Woodpecker CI to Forgejo Actions (#1) 2026-09-22 17:33:29 +02:00
Containerfile deps: upgrade dependencies and add a JS runtime for yt-dlp (#3) 2026-10-02 13:10:18 +02:00
docker-compose.yml ci: copy the release binary from its per-platform context path 2026-09-22 21:33:38 +02:00
go.mod deps: upgrade dependencies and add a JS runtime for yt-dlp (#3) 2026-10-02 13:10:18 +02:00
go.sum deps: upgrade dependencies and add a JS runtime for yt-dlp (#3) 2026-10-02 13:10:18 +02:00
LICENSE initial boilerplate 2026-01-03 11:43:21 +01:00
Makefile deps: upgrade dependencies and add a JS runtime for yt-dlp (#3) 2026-10-02 13:10:18 +02: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.