APM

>Agent Skill

@benbjohnson/litestream

skilldevelopment

SQLite disaster recovery and streaming replication to cloud storage (S3, GCS, Azure, SFTP, NATS). Use this skill for configuring Litestream, deploying to cloud platforms, troubleshooting WAL replication issues, implementing point-in-time recovery, and setting up VFS read replicas.

gitdocker
apm::install
$apm install @benbjohnson/litestream
apm::skill.md
---
name: litestream
description: SQLite disaster recovery and streaming replication to cloud storage (S3, GCS, Azure, SFTP, NATS). Use this skill for configuring Litestream, deploying to cloud platforms, troubleshooting WAL replication issues, implementing point-in-time recovery, and setting up VFS read replicas.
version: 0.5.5
---

# Litestream

Litestream is a disaster recovery tool for SQLite that runs as a background process, continuously replicating database changes to cloud storage. It monitors the SQLite Write-Ahead Log (WAL), converts changes to immutable LTX files, and uploads them to your chosen storage backend.

## Key Concepts

- **WAL Monitoring**: Watches SQLite Write-Ahead Log for changes at configurable intervals (default 1s)
- **LTX Files**: Immutable files containing database page changes, never modified after creation
- **Level-Based Compaction**: Multi-level system (L0-L9) that merges LTX files to reduce storage overhead
- **Point-in-Time Recovery**: Restore to any transaction using TXID or timestamp
- **VFS Support**: Read replicas directly from cloud storage without local database copy
- **MCP Server**: AI tool integration for automated database management

## Quick Start

### Installation

```bash
# macOS
brew install litestream

# Linux (Debian/Ubuntu)
wget https://github.com/benbjohnson/litestream/releases/download/v0.5.5/litestream-v0.5.5-linux-amd64.deb
sudo dpkg -i litestream-v0.5.5-linux-amd64.deb

# Docker
docker pull litestream/litestream:0.5
```

### Basic Replication

```bash
# Command line (single database)
litestream replicate /path/to/db.sqlite s3://bucket/db

# With config file
litestream replicate -config /etc/litestream.yml
```

### Restore Database

```bash
# Restore latest backup
litestream restore -o /path/to/restored.db s3://bucket/db

# Point-in-time recovery
litestream restore -timestamp 2024-01-15T10:30:00Z -o /tmp/db s3://bucket/db

# Restore to specific transaction
litestream restore -txid 1000 -o /tmp/db s3://bucket/db
```

### Check Status

```bash
# View all databases and their replication status
litestream status

# List available LTX files
litestream ltx /path/to/db.sqlite
```

## Critical Rules

These rules are essential for correct Litestream operation:

1. **Lock Page at 1GB**: SQLite reserves the page at offset 0x40000000 (1GB). This page must always be skipped during replication and compaction. The page number varies by page size:
   - 4KB pages: page 262145
   - 8KB pages: page 131073
   - 16KB pages: page 65537

2. **LTX Files are Immutable**: Once created, LTX files are never modified. New changes create new files.

3. **Single Replica per Database**: Each database can only replicate to one destination. Use multiple Litestream instances for multiple destinations.

4. **WAL Mode Required**: SQLite must be in WAL mode (`PRAGMA journal_mode=WAL;`)

5. **Use `litestream ltx`**: The `litestream wal` command is deprecated.

## Storage Backends

| Backend | URL Scheme | Example |
|---------|-----------|---------|
| AWS S3 | `s3://` | `s3://bucket/path` |
| S3-Compatible (R2, Tigris, MinIO) | `s3://` | `s3://bucket/path?endpoint=host:port` |
| Google Cloud Storage | `gs://` | `gs://bucket/path` |
| Azure Blob Storage | `abs://` | `abs://container@account/path` |
| SFTP | `sftp://` | `sftp://user@host:22/path` |
| NATS JetStream | `nats://` | `nats://host:4222/bucket` |
| WebDAV | `webdav://` | `webdav://host/path` |
| Alibaba OSS | `oss://` | `oss://bucket/path` |
| Local File | (path) | `/var/backups/db` |

## Configuration File Example

```yaml
dbs:
  - path: /data/app.db
    replica:
      url: s3://my-bucket/app-backup
      access-key-id: ${AWS_ACCESS_KEY_ID}
      secret-access-key: ${AWS_SECRET_ACCESS_KEY}
      region: us-east-1
      sync-interval: 1s
```

## When to Use This Skill

Use Litestream skill when:
- Configuring SQLite database replication to cloud storage
- Setting up disaster recovery for SQLite applications
- Troubleshooting replication issues (WAL growth, sync failures)
- Implementing point-in-time recovery procedures
- Deploying Litestream with Docker, Fly.io, Kubernetes, or systemd
- Understanding WAL-based replication concepts

## Skill Contents

- `concepts/` - Architecture, replication mechanics, LTX format, SQLite WAL, VFS support, compaction
- `configuration/` - Storage backend configurations (S3, GCS, Azure, SFTP, NATS, OSS, WebDAV, File)
- `commands/` - CLI command reference (replicate, restore, status, ltx, databases)
- `operations/` - Monitoring, troubleshooting, recovery, and heartbeat monitoring
- `deployment/` - Docker, Fly.io, Kubernetes, and systemd deployment guides
- `integrations/` - MCP server integration for AI tools
- `scripts/` - Validation and diagnostic helper scripts

## Common Issues

### WAL Growing Too Large
- Check sync interval (default 1s may be too slow for write-heavy workloads)
- Verify storage backend connectivity
- Check for checkpoint blocking (long-running transactions)

### Replication Lag
- Monitor with `litestream status`
- Check network connectivity to storage backend
- Review sync interval configuration

### Restore Failures
- Verify backup exists: `litestream ltx /path/to/db`
- Check storage backend credentials
- Ensure target directory is writable

## Links

- [Official Documentation](https://litestream.io)
- [GitHub Repository](https://github.com/benbjohnson/litestream)
- [Getting Started Guide](https://litestream.io/getting-started/)