NAME
    goget - Modern IPv6-First Downloader

SYNOPSIS
    goget --url <URL> [OPTIONS]

DESCRIPTION
    curl/wget replacement in Go. IPv6-first, parallel downloads, resume,
    checksum verification, recursive mirroring, and 8 protocols.

TARGET
    --url <URL>              URL to download (repeatable)

OUTPUT
    --output <FILE>          Output file (default: auto from URL)
    --restart                Delete existing file and restart download
    --overwrite              Overwrite existing file (no atomic rename)
    --content-disposition    Use server-provided filename
    --keep-timestamps        Set file modification time from Last-Modified

PROGRESS
    --verbose                Verbose output with progress bar (default)
    --no-progress            Hide progress bar
    --progress=dot           Wget-style dot progress
    --quiet                  Suppress all output except errors
    --json                   Output progress as JSON-lines (for scripting)
    --debug                  Debug mode with detailed info

NETWORK
    --timeout <DURATION>     Connection timeout (0 = auto)
    --max-time <DURATION>    Maximum total transfer time
    --max-retries <N>        Maximum retry attempts on failure
    --max-filesize <SIZE>    Abort if file exceeds size (e.g., 100MB)
    --proxy <URL>            Proxy server URL
    --no-ipv4                Disable IPv4 fallback
    --no-redirect            Disable following HTTP redirects
    --dns-servers <IPs>      Custom DNS servers (comma-separated)
    --bind-interface <IFACE> Bind to specific network interface
    --allow-private          Allow connections to private/internal IPs
    --pinned-cert <SHA256>   Certificate pinning (SHA-256 hash)

CURL-COMPATIBLE
    --header "K: V"           Custom HTTP header (repeatable)
    --insecure               Skip TLS certificate verification
    --cert <FILE>            Client certificate (PEM)
    --key <FILE>             Client private key (PEM)
    --data "key=value"       Send POST data
    --form "field=value"     Multipart form data (repeatable)
    --form "field=@file"     Upload file via multipart form
    --spider                 Check URL existence only (HEAD request)
    --write-out FORMAT       Print metadata (curl format)
    --trace-time             Print HTTP timing breakdown

WGET-COMPATIBLE
    --accept "*.pdf"          Accept patterns (filename glob or MIME)
    --no-parent               Do not ascend to parent directory
    --adjust-extension        Append .html extension to HTML files
    --wait <DURATION>        Delay between requests (recursive)
    --random-wait            Randomize wait time (0.5x - 1.5x)
    --page-requisites        Download CSS/JS/images for pages
    --span-hosts             Follow links to external domains
    --convert-links          Convert links for local viewing
    --warc-file <FILE>       Write WARC output for archiving
    --progress=dot           Wget-style dot progress

RECURSIVE / MIRROR
    --recursive              Enable recursive downloading
    --mirror                 Mirror entire website (infinite depth)
    --max-depth <N>          Maximum recursion depth
    --follow-external        Follow external domains
    --exclude-pattern <P>    Exclude URL patterns (comma-separated)
    --no-convert-links       Don't convert links in mirror mode
    --no-mirror-assets       Don't download CSS/JS/images in mirror
    --no-robots              Don't respect robots.txt in mirror
    --rate-limit <RATE>      Rate limit (e.g., 1MB/s)

DOWNLOAD MANAGEMENT
    --queue                  Add to download queue
    --queue-list             List queue items
    --queue-process          Process download queue
    --queue-clear            Clear completed items from queue
    --queue-file <PATH>      Custom queue file path
    --queue-priority <N>     Priority (1-10)
    --batch-file <FILE>      Download URLs from file (one per line)
    --schedule <TIME>        Schedule download (datetime or cron)
    --on-complete <CMD>      Run command after successful download

AUTHENTICATION
    --username <USER>        Username for HTTP Basic/Digest Auth
    --password <PASS>        Password (prefer --password-file for security)
    --password-file <FILE>   Read password from file
    --auth-type <TYPE>       Auth type: basic, digest, auto
    --cookie-jar <FILE>      Load/save cookies (Netscape format)
    --oauth-client-id <ID>   OAuth 2.0 Client ID
    --oauth-client-secret <S>OAuth 2.0 Client Secret
    --oauth-token-url <URL>  OAuth 2.0 Token URL
    --oauth-access-token <T> OAuth 2.0 Access Token
    --oauth-refresh-token <T>OAuth 2.0 Refresh Token

UPLOAD
    --upload                 Upload file instead of downloading
    --upload-method <M>      PUT or POST (default: PUT)
    --upload-file <FILE>     File to upload
    --form-data "k=v"        Form data (comma-separated)
    --file-field <NAME>      Form field name (default: file)

VERIFICATION
    --checksum <HASH>        Expected checksum
    --checksum-algo <ALG>    Algorithm: sha256, sha512, blake2b, sha3-256, sha3-512
    --checksum-file <FILE>   Read checksum from SHA256SUMS file

PGP / GPG
    --pgp-decrypt            Decrypt PGP file after download
    --pgp-verify             Verify PGP signature
    --pgp-sig <FILE>         Path to signature file (.asc, .sig)
    --pgp-key <FILE>         Path to key file
    --pgp-passphrase <PASS>  Passphrase for private key
    --pgp-passphrase-file F  Read passphrase from file

METALINK
    --metalink               Treat URL as Metalink (multi-source)
    --metalink-file <PATH>   Path to local Metalink file

CONFIGURATION
    --init-config            Generate default config file
    --config-get <KEY>       Get config value
    --config-set <K> <V>     Set config value
    --config-list            List all config values
    --config-unset <KEY>     Unset config value

INFORMATION
    --info <URL>             Show file info without downloading
    --benchmark <URL>        Benchmark download speed
    --generate-man-page      Generate man page and exit
    --completion <SHELL>     Generate shell completion (bash, zsh, fish)
    --help                   Show this help
    --version                Show version

PROTOCOLS
    http:// https://         HTTP/1.1, HTTP/2, TLS 1.2/1.3
    ftp:// ftps://           FTP (active/passive, explicit TLS)
    file://                  Local file copy + recursive directories
    data:                    Inline data (base64 + plain text)
    gopher://                RFC 1436 with type parsing
    gemini://                Gemini protocol (TLS, redirect)

EXAMPLES
    goget --url https://example.com/file.zip
    goget --url https://a.com/1.zip --url https://b.com/2.zip
    goget -H "Authorization: Bearer TOKEN" --url https://api.example.com
    goget --form "name=value" --form "file=@./data.csv" --url https://httpbin.org/post
    goget --recursive --accept "*.pdf" --url https://example.com/docs/
    goget --mirror --convert-links --url https://example.com --output ./mirror
    goget --schedule "0 2 * * *" --url https://example.com/daily.zip
    goget --json --no-progress --url https://example.com/file.zip

FILES
    ~/.config/goget/config.json   Configuration
    <file>.goget.meta             Resume metadata

More: https://codeberg.org/petrbalvin/goget
