A self-hosted link archival tool
  • Go 78.1%
  • Vue 15.1%
  • TypeScript 2.9%
  • HTML 1.7%
  • CSS 0.9%
  • Other 1.3%
Find a file
Felipe M. a7f3e73493
All checks were successful
ci/woodpecker/tag/release Pipeline was successful
fix: allow startup with environment variables when config file is missing
The application now gracefully handles missing config files and can be
configured entirely through environment variables. File-not-found errors
are ignored while other errors (like permission denied) are still reported.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-31 15:46:00 +01: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 fix: allow startup with environment variables when config file is missing 2026-01-31 15:46:00 +01:00
scripts test(e2e): expand test suite with comprehensive coverage 2026-01-29 12:49:40 +01:00
webapp feat: add yt-dlp support for video downloads 2026-01-29 12:52:29 +01: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.