32
5
In review
Synced today
What it does
Query and explore the Wayback Archiver personal web archiving system
Skill profile
Keep exploring
More options in Dev Tools.
Claude Code · Codex · OpenClaw
Go
Updated 7/28/2026
Agent compatibility
Compatibility has not been reviewed for this listing yet. Check the publisher documentation before installing.
Installation
npx skills add https://github.com/icodeface/wayback-archiver --skill rootReview source code and installation permissions before adding third-party tools to an agent.
wayback is organized in the Dev Tools category. Compare its source, install method, and compatibility before adding it to your workflow.
Third-party agent tools may access source code, credentials, or browser sessions. Read the source documentation and use the minimum permissions needed.
npx skills add https://github.com/icodeface/wayback-archiver --skill rootSKILL.md
---
name: wayback
description: Query and explore the Wayback Archiver personal web archiving system
---
# Wayback Archiver
Wayback Archiver is a self-hosted personal web archiving system that captures and preserves web pages with full fidelity — HTML, CSS, JavaScript, images, fonts, and all resources.
**Repository**: https://github.com/icodeface/wayback-archiver
## When to use
Use this skill when the user wants to:
- Search archived web pages
- View snapshots of a specific URL
- List recent archives or filter by date range
- Get details about a specific archived page
- Read page content in Markdown format (for AI/LLM consumption)
- Explore the archiving system's data
## Prerequisites
Before using this skill, ensure the Wayback Archiver server is running:
- **Chrome** or **Firefox** with [Tampermonkey](https://www.tampermonkey.net/) extension (v5.3+)
- **Database** (optional): SQLite (default, zero-config) or PostgreSQL 14+ (for remote deployment)
## Quick Start
### 1. Download Pre-built Binaries
Download from [Releases](https://github.com/icodeface/wayback-archiver/releases):
- **Server binary**: `wayback-server-<os>-<arch>.tar.gz` (or `.zip` for Windows)
- **Userscript**: `wayback-userscript.js`
Extract the server binary:
```bash
# macOS/Linux
tar -xzf wayback-server-*.tar.gz
# Windows: extract the .zip file
```
> **Building from source?** See [docs/BUILD.md](https://github.com/icodeface/wayback-archiver/blob/main/docs/BUILD.md).
### 2. Setup Database
By default, Wayback Archiver uses SQLite (zero-config, single-file database). For remote deployment with multiple users, PostgreSQL is recommended.
**Option 1: SQLite (Default)**
No setup required! The database file will be created automatically at `./data/wayback.db` on first run.
**Option 2: PostgreSQL**
```bash
# Configure database connection in .env
echo "DB_TYPE=postgres" >> .env
echo "DB_NAME=wayback" >> .env
```
Server startup automatically creates the configured PostgreSQL database and tables. If the database does not exist yet, the configured user must have permission to create databases.
> **Upgrade note for existing installs:** Any installation upgrading from **`< 1.1.0`** to `1.1.0` or later needs the `pages.snapshot_state` column. The server applies this automatically during startup when the database user has sufficient privileges. Otherwise, run the following idempotent SQL manually first:
>
> ```sql
> ALTER TABLE pages ADD COLUMN IF NOT EXISTS snapshot_state VARCHAR(16);
> UPDATE pages SET snapshot_state = 'ready' WHERE snapshot_state IS NULL OR snapshot_state = '';
> ALTER TABLE pages ALTER COLUMN snapshot_state SET DEFAULT 'pending';
> ALTER TABLE pages ALTER COLUMN snapshot_state SET NOT NULL;
> ```
### 3. Start Server
```bash
./wayback-server
```
Server runs at `http://localhost:8080` by default.
### 4. Install Browser Script
1. Download `wayback-userscript.js` from [Releases](https://github.com/icodeface/wayback-archiver/releases)
2. Open Tampermonkey dashboard
3. Create new script and paste the content
4. Save and enable
> **Chrome users:** Enable "Allow user scripts" in Tampermonkey's extension settings (right-click icon → Manage extension). Firefox does not require this.
## API Usage
Base URL: `http://localhost:8080`
### Authentication (Optional)
When `AUTH_PASSWORD` is set, use HTTP Basic Auth:
- **Username**: `wayback`
- **Password**: `$AUTH_PASSWORD`
### Endpoints
#### List All Pages
```bash
curl "http://localhost:8080/api/pages?limit=100&offset=0"
```
#### Search Pages
```bash
curl "http://localhost:8080/api/search?q=$KEYWORD"
```
#### Filter by Date Range
```bash
curl "http://localhost:8080/api/pages?from=2026-03-01&to=2026-03-12"
```
#### Get Page Details
```bash
curl "http://localhost:8080/api/pages/$PAGE_ID"
```
#### Get Page Content as Markdown
Returns the page body as clean Markdown (strips scripts, nav, footer, etc.). Ideal for AI/LLM consumption.
```bash
curl "http://localhost:8080/view/$PAGE_ID/md"
```
#### Create Public Share Link
Creates an unauthenticated link for one fixed snapshot. The returned token is only shown once.
The `/view/:id` snapshot header also has a Share button that creates and copies the public URL, then exposes Revoke for that share.
```bash
curl -X POST "http://localhost:8080/api/pages/$PAGE_ID/shares" \
-H "Content-Type: application/json" \
-d '{}'
```
#### Get Timeline for URL
```bash
curl "http://localhost:8080/api/pages/timeline?url=$ENCODED_URL"
```
#### View Archived Page
Open in browser:
```
http://localhost:8080/view/$PAGE_ID
```
## Data Models
### Page
```typescript
{
id: number;
url: string;
title: string;
captured_at: string; // ISO 8601 timestamp
html_path: string;
content_hash: string; // SHA-256
first_visited: string; // ISO 8601 timestamp
last_visited: string; // ISO 8601 timestamp
created_at: string; // ISO 8601 timestamp
}
```
### Resource
```typescript
{
id: number;
url: string;
content_hash: string; // SHA-256
resource_type: string; // "css", "js", "image", "font", etc.
file_path: string;
file_size: number;
first_seen: string; // ISO 8601 timestamp
last_seen: string; // ISO 8601 timestamp
}
```
## Storage Layout
```
data/
├── html/ # HTML snapshots, organized by date
│ └── 2026/03/12/
│ └── <timestamp>_<hash>.html
└── resources/ # Deduplicated static resources
└── ab/cd/
└── <sha256>.css
```
## Features
- **High-fidelity replay**: CSSOM serialization, computed styles inlining
- **Full-page capture**: HTML, CSS, JS, images, fonts
- **Cross-origin resource recovery**: Server-side download of CORS-blocked resources
- **Content-hash deduplication**: SHA-256 based, shared resources stored once
- **Version history**: Multiple snapshots per URL, distinguished by timestamp
- **Smart dedup**: Session-level + server-level prevents redundant captures
- **Dynamic content support**: Captures live DOM state, auto-updates on significant mutations
- **SPA-aware**: Detects SPA navigation, resets capture state per route
- **Anti-refresh protection**: Archived pages frozen (timers, WebSockets, navigation APIs neutralized)
- **Hardened cross-origin iframe capture**: Embedded cross-origin documents are still captured, but bridge requests are signed and frame HTML returns over a private `MessageChannel`
- **Capture body guardrail**: `/api/archive` and `/api/archive/:id` reject decompressed JSON bodies above 32 MiB
- **Private page filter**: Browser side skips loopback, RFC1918, link-local, ULA/loopback IPv6, and `.local` pages
## Testing
See [docs/BUILD.md](https://github.com/icodeface/wayback-archiver/blob/main/docs/BUILD.md) for build and test instructions.
## Troubleshooting
| Issue | Solution |
|-------|----------|
| Server won't start | Check database configuration; for PostgreSQL ensure it's running and database exists |
| Pages not archiving | Verify Tampermonkey script is enabled and server is reachable |
| Missing resources | Check proxy settings if behind corporate firewall |
| Authentication errors | Verify `AUTH_PASSWORD` env var matches your curl credentials |
## Configuration
Create `.env` file in the project root (or set environment variables directly):
The server automatically loads `.env` from the working directory if it exists.
```bash
# Database
DB_TYPE=sqlite # "sqlite" (default) or "postgres"
DB_PATH=./data/wayback.db # SQLite database file path (when DB_TYPE=sqlite)
# PostgreSQL configuration (when DB_TYPE=postgres)
DB_HOST=localhost
DB_PORT=5432
# DB_USER defaults to your current system username; falls back to postgres if unavailable
# DB_USER=
DB_PASSWORD=
DB_NAME=wayback
DB_SSLMODE=disable
# Server
SERVER_HOST=0.0.0.0 # 默认 127.0.0.1,设置 0.0.0.0 监听所有网卡
SERVER_PORT=8080
# Storage
DATA_DIR=./data
# Resource metadata cache
RESOURCE_METADATA_CACHE_MB=256 # Optional; RESOURCE_CACHE_MB is a legacy alias
# Authentication (optional)
AUTH_PASSWORD=
# Debug APIs (disabled by default; enable only while troubleshooting)
ENABLE_DEBUG_API=false
```
## License
MIT
skill
mattpocock
A tool that automates setting up Husky pre-commit hooks with lint-staged, Prettier formatting, type checking, and tests in a code repository.