6.9 KiB
6.9 KiB
Backlog — goget
This file tracks planned features and improvements across releases.
Items are grouped by target version and priority. Completed items
move to CHANGELOG.md when the version ships.
v1.1.0 — Protocol completeness
Finish the protocol layer so every supported protocol handles recursive, parallel, resume, and shutdown correctly.
🔴 Supreme Priority
- Graceful shutdown for all protocols — persist
.goget.metaon SIGINT for FTP single-file and SFTP parallel recursive paths. - WebDAV connection pooling — shared
http.Transportacross WebDAV requests instead of a fresh transport per request (currently defeats HTTP keep-alive, TLS session resumption, and HTTP/2 multiplexing).
🟡 High Priority
- WebDAV recursive parallel downloads — extend
--recursive-parallelto WebDAV using the shared transport. - SFTP recursive parallel downloads — parallel SFTP recursive with session pooling.
- FTP recursive parallel — connection pool for independent control connections in FTP recursive mode.
--dry-runfor WebDAV recursive — list matched entries without downloading.
🟢 Medium Priority
--adjust-extensionfor non-HTML protocols — apply.htmlextension to text/html files from WebDAV, Gopher.--backup-convertedfor WebDAV mirrors — keep.origbackups before link conversion.- Parallel recursive across all protocols — unified worker pool independent of protocol handler.
v1.2.0 — curl/wget parity & UX
Close the gap with curl and wget, and improve scripting/automation UX.
🟡 High Priority
--create-dirs— auto-create parent directories for--outputpaths (curl--create-dirs/ wget--directory-prefixequivalent).- Short flags —
-O,-o,-s,-valiases for curl/wget muscle memory.--output-documentalias for--output. - Brotli decompression — RFC 7932, written from scratch. Currently only gzip/deflate/bzip2/LZW.
🟢 Medium Priority
--progress=bar:force:noscroll— curl-compatible progress options.--metalink --follow-metalink=mem— keep Metalink in memory instead of writing to disk.- Bandwidth throttling per-domain — global rate limit only at present.
- MIME type detection for local files — determine Content-Type from file extension when uploading.
--cut-dirsfor recursive mode — strip directory components from output paths.- Notification hooks —
--on-errorwith richer environment variables (exit code, error type, checksum). - Retry with backoff visualization — show retry attempts in progress bar (attempt 2/3, waiting 4s...).
- Idempotent
--resume— auto-detect whether resume is possible without manual flag. --show-metadata— display.goget.metacontents for debugging.
🔵 Lower Priority
- URL glob expansion (
--glob) — expand[1-3]and{a,b}patterns in URLs.
v1.3.0 — Security hardening
TLS, authentication, and verification improvements.
🔴 Supreme Priority
- PGP replacement —
golang.org/x/crypto/openpgpis frozen (archived by Go team). Evaluate: inline a minimal subset, or wait for a communitygolang.org/x/successor.
🟡 High Priority
--pinned-certfor all TLS protocols — extend certificate pinning to FTPS, SFTP, Gemini, and WebDAVS (currently HTTP/HTTPS only).- SOCKS5 proxy for non-HTTP protocols — FTP and SFTP through SOCKS5 proxy (currently HTTP/HTTPS only).
- DNS-over-HTTPS (DoH) — optional DoH resolver. Must use only
golang.org/x/libraries.
🟢 Medium Priority
- Structured error output with
--json— machine-readable error objects with type, message, URL, and hint fields.
v2.0.0 — New protocols
Cloud providers, additional network protocols, and long-lived services.
🔵 Lower Priority
- S3 — generic S3-compatible protocol with signature v4 auth (covers AWS S3, MinIO, and any S3-compatible storage).
- Huawei OBS — Huawei Cloud Object Storage.
- Alibaba OSS — Alibaba Cloud Object Storage Service.
- Tencent COS — Tencent Cloud Object Storage.
- Rsync — incremental file transfer. Written from scratch (rolling checksum, delta transfer, rsync wire protocol).
- TFTP — trivial file transfer, useful for embedded devices and PXE.
- NFS — NFS v3/v4 client. Written from scratch (ONC RPC/XDR, portmapper, mount protocol, NFS protocol).
- goget-as-a-service — daemon mode with REST API for remote download management.
v2.1.0 — Extensibility & UI
🔵 Lower Priority
- Plugin system — protocol handlers as external plugins.
- TUI (Terminal User Interface) — interactive download manager with live queue, progress, and log views. Keyboard navigation, color-coded status, inline log viewer.
- Web GUI — browser-based download manager (Vue 3 frontend, REST API, live progress via SSE).
- Download speed test / benchmark mode — measure maximum throughput against a target server without saving the file.
💡 Backlog (unscheduled)
Items that need more design, depend on external factors, or are lower priority than the versioned roadmap.
Performance
- Memory-mapped I/O for large files —
mmapfor checksum verification of multi-gigabyte downloads. - Zero-copy for
file://anddata:protocols —sendfile(2)/splice(2)where available on Linux. - HTTP/3 (QUIC) — when Go stdlib gains QUIC support.
Advanced UX
- Scheduling — pause/resume queued downloads — ability to pause the queue, reorder items, and resume later.
Code Quality & Testing
- Integration test matrix — CI against real FTP, SFTP, and WebDAV servers.
- Coverage threshold increase — raise from 40% to 60%.
- Benchmark suite —
go test -benchin CI. - Fuzzing corpus in CI — store and replay past crashes automatically.
internal/logmigration — migrate remaining ~140fmt.Fprintfandcli.Print*callsites tolog.Infof.unsafeaudit — verify nounsafeusage outside build-tag-gated platform-specific code.
Project Infrastructure
- RPM spec file — Fedora / RHEL / openEuler packaging.
- FreeBSD port — official FreeBSD ports tree entry.
- systemd unit — for daemon / scheduled mode.
Documentation
- Man page packaging — already generated by
--generate-man-page, needs installation via packaging. - Architecture decision records — document why specific choices were made (no short flags, IPv6-first, long flags only, no global state).
- Protocol-specific guides — one doc per protocol with examples.
- Troubleshooting guide — common errors and solutions.