All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Interactive terminal UI (
-tuiflag) built with Bubble Tea — form-based config screen and live-scrolling results view; no CLI arguments required to launch make tuiMakefile target for one-command TUI launchinternal/scanpackage: extracted scan engine (scan.Run) with typedEventchannel, usable by both CLI and TUI- TUI session persistence: last-used form values written to
~/.config/subenum/last.jsonand restored on next launch or after pressingr(new scan)
- CLI scan loop in
main.gonow delegates toscan.Run()instead of containing the worker pool inline - External dependencies added:
github.com/charmbracelet/bubbleteaandgithub.com/charmbracelet/bubbles(TUI only; CLI path has zero external dependencies) - TUI form field order: Simulate toggle promoted to field 3 (was field 8); Hit Rate row is hidden when Simulate is OFF
- TUI now shows a blinking cursor inside the active text input
- Pressing
ron the scan results screen returns to the form with last-used values pre-filled (was reset to defaults)
- Wildcard DNS detection with double-probe confirmation; exits by default, continue with
-force - Wordlist deduplication (duplicates removed before scanning, count reported in verbose mode)
-attemptsflag replacing-retries(deprecated, still accepted with warning)
- Refactored into
internal/dns,internal/output,internal/wordlistpackages - Progress, verbose, and diagnostic output moved to stderr (stdout is now pipe-clean)
- Version bumped to 0.4.0
- Progress ticker no longer corrupts piped stdout output
-retriessemantics clarified via rename to-attempts
- Output file support with the
-oflag to save results to a file - DNS retry mechanism with configurable
-retriesflag for transient failure resilience - Graceful shutdown on SIGINT/SIGTERM — drains in-flight workers and prints partial results
- Proper DNS server validation (IP format and port range 1-65535)
- Domain format validation against DNS naming rules
- Tests for
validateDNSServer,validateDomain,resolveDomainWithRetry, andsimulateResolution
- Removed deprecated
rand.Seedcall (auto-seeded since Go 1.20) - Tests now use
t.Errorffor real assertions instead oft.Logfwarnings - Fixed test compilation —
resolveDomaincalls now pass all 4 required parameters - Updated all placeholder URLs/emails in documentation to actual repo values
- Progress goroutine
donechannel is now buffered to prevent potential deadlock - Mutex-protected stdout/file output to prevent interleaved writes from concurrent workers
- Custom DNS server support with the
-dns-serverflag - Verbose output mode with the
-vflag - Progress reporting during scans (enabled by default)
- Version information accessible via the
-versionflag - Input validation for concurrency and timeout values
- Legal disclaimers and usage restrictions to prevent misuse
- Comprehensive documentation via README.md and docs folder
- Developer Guide with setup and contribution instructions
- Example wordlist and multi-domain scanning script
- Basic test suite for DNS resolution
- Enhanced error handling with user-friendly messages
- Improved code structure and documentation
- DNS resolution now reports timing information in verbose mode
- Proper cleanup of resources after scans complete
- Prevention of negative values for concurrency and timeout
- Initial project setup with basic functionality
- Concurrent subdomain enumeration using goroutines
- DNS resolution with configurable timeout
- Command-line flags for wordlist, concurrency, and timeout