A powerful and modern DNS lookup tool built with Vala, GTK4, and libadwaita. Digger provides an intuitive interface for performing DNS queries with advanced features including batch lookups, server comparison, DNSSEC validation, and DNS-over-HTTPS support.
Clean, modern interface for DNS lookups with instant autocomplete suggestions
Detailed DNS record information with one-click copying and export capabilities
Intelligent domain suggestions with keyboard navigation and favorites system
Advanced search and filtering through your DNS query history
Comprehensive settings for customizing behavior, DoH providers, and DNSSEC validation
Modern about dialog with automatic release notes and comprehensive information
- 🔍 Comprehensive DNS Queries: Support for all major DNS record types (A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SRV, DNSKEY, DS, RRSIG, ANY)
- ⚙️ Advanced Query Options: Reverse DNS lookup, trace queries, custom DNS servers, and short output format
- 🔒 DNS-over-HTTPS (DoH): Secure DNS queries with support for Cloudflare, Google, Quad9, and custom endpoints
- 🛡️ DNSSEC Validation: Verify DNSSEC chain of trust with DNSKEY, DS, and RRSIG record validation
- 🔄 Server Comparison: Compare DNS responses across multiple servers with automatic discrepancy detection
- 📋 WHOIS Integration: Automatic domain registration information lookup with caching and comprehensive details
- ⭐ Favorites System: Star and save frequently queried domains with their record types
- 📦 Batch Lookup: Import and query multiple domains from CSV/TXT files with progress tracking
- 📤 Export Manager: Export query results to JSON, CSV, plain text, or DNS zone file formats
- 📝 Enhanced Query History: Persistent history with advanced search, filtering, and management
- 🔄 Smart Autocomplete: Intelligent domain suggestions with usage tracking and quick selection
- 📋 Clipboard Integration: One-click copying of DNS record values and raw dig output
- ⌨️ Keyboard Shortcuts: Comprehensive keyboard shortcuts for efficient navigation
- 🎨 Modern Interface: Clean, adaptive UI built with libadwaita 1.6+ and blueprint templates
- 📱 Responsive Design: Fully adaptive layout supporting desktop (>1024px), tablet (768-1024px), and mobile (<768px) form factors
- 🌐 Network Diagnostics: Detailed error handling with NXDOMAIN, SERVFAIL, and timeout detection
- ⚙️ Comprehensive Preferences: Multi-page preferences with DNS defaults, DoH configuration, and DNSSEC settings
- 🚀 Native Performance: Vala implementation for optimal speed and resource usage
# Install from Flathub
flatpak install flathub io.github.tobagin.digger
flatpak run io.github.tobagin.diggerNote: Building uses Flatpak, so no system dependencies are required. All dependencies are automatically handled by the build scripts.
git clone https://github.com/tobagin/digger.git
cd digger
# Production build
./scripts/build.sh
# Development build (with debug info)
./scripts/build.sh --dev
# Build and run development version
./scripts/build.sh --dev --rungit clone https://github.com/tobagin/digger.git
cd digger
# Install Flatpak build dependencies
sudo dnf install flatpak flatpak-builder # Fedora/RHEL
# sudo apt install flatpak flatpak-builder # Ubuntu/Debian
# sudo pacman -S flatpak flatpak-builder # Arch Linux
# Add Flathub repository and install GNOME SDK
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gnome.Platform//49 org.gnome.Sdk//49
# Build and install (Production)
flatpak-builder --user --install --force-clean build-dir packaging/io.github.tobagin.digger.yml
flatpak run io.github.tobagin.digger
# Build and install (Development)
flatpak-builder --user --install --force-clean build-dir-dev packaging/io.github.tobagin.digger.Devel.yml
flatpak run io.github.tobagin.digger.Devel- Enter a domain name (e.g.,
example.com) - Select the DNS record type
- Click "Look up DNS records" or press Enter
- Click the star icon to add to favorites
- Click the menu button → "Batch Lookup" (or press
Ctrl+B) - Import domains from CSV/TXT file or enter manually
- Select record type and DNS server
- Choose parallel or sequential execution
- Monitor progress and export results
- Click the menu button → "Tools" → "Compare DNS Servers" (or press
Ctrl+M) - Enter domain and select record type on the Setup page
- Choose DNS servers to compare (Google, Cloudflare, Quad9, OpenDNS, System)
- Click "Compare DNS Servers" to begin comparison
- View response times, statistics, and detect discrepancies on the Results page
- Export comparison results to JSON, CSV, or TXT format
- Open Preferences → Advanced
- Enable "DNS-over-HTTPS"
- Select provider (Cloudflare, Google, Quad9) or enter custom endpoint
- All queries will now use encrypted DNS
- Open Preferences → Advanced
- Enable "DNSSEC Validation"
- Optionally enable "Show DNSSEC Details"
- Query results will show DNSSEC validation status
- Perform a DNS query
- Click "Export" button in results view
- Choose format (JSON, CSV, Plain Text, DNS Zone File)
- Select save location
Expand the "Advanced Options" section to access:
- Reverse DNS Lookup: Check for IP address reverse resolution
- Trace Query Path: See the full resolution path from root servers
- Short Output: Get minimal, essential output only
- Custom DNS Server: Specify a custom DNS server (e.g., 8.8.8.8)
Ctrl+L: Focus the domain entry fieldCtrl+R: Repeat the last queryCtrl+B: Open batch lookup dialogCtrl+M: Open server comparison dialogCtrl+,: Open preferencesCtrl+?: Show keyboard shortcutsF1: Show about dialogEscape: Clear resultsEnter: Submit query
Digger follows a clean, modular architecture with organized source code:
Digger/
├── src/
│ ├── Main.vala # Application entry point
│ ├── Application.vala # Main application class
│ ├── Config.vala.in # Configuration template
│ ├── dialogs/ # Dialog windows
│ │ ├── Window.vala # Main window
│ │ ├── AboutDialog.vala # About dialog with release notes
│ │ ├── PreferencesDialog.vala # Multi-page preferences
│ │ ├── ShortcutsDialog.vala # Keyboard shortcuts
│ │ ├── BatchLookupDialog.vala # Batch DNS lookup
│ │ └── ComparisonDialog.vala # Server comparison
│ ├── models/ # Data models
│ │ └── DnsRecord.vala # DNS record data structures
│ ├── services/ # Business logic services
│ │ ├── DnsQuery.vala # DNS query execution
│ │ ├── QueryHistory.vala # History management
│ │ ├── SecureDns.vala # DNS-over-HTTPS implementation
│ │ └── DnssecValidator.vala # DNSSEC validation logic
│ ├── managers/ # Feature managers
│ │ ├── ExportManager.vala # Export to various formats
│ │ ├── FavoritesManager.vala # Favorites persistence
│ │ ├── BatchLookupManager.vala # Batch operation orchestration
│ │ └── ComparisonManager.vala # Multi-server comparison
│ ├── widgets/ # UI components
│ │ ├── EnhancedQueryForm.vala # Modern query input
│ │ ├── EnhancedResultView.vala # Results display with export
│ │ ├── QueryResultView.vala # Legacy results view
│ │ ├── AdvancedOptions.vala # Advanced options panel
│ │ ├── AutocompleteDropdown.vala # Smart autocomplete widget
│ │ └── EnhancedHistorySearch.vala # Advanced history search
│ └── utils/ # Utility classes
│ ├── ThemeManager.vala # Theme management
│ ├── DnsPresets.vala # DNS server presets
│ └── DomainSuggestions.vala # Autocomplete engine
├── data/
│ ├── ui/ # Blueprint UI templates
│ │ ├── window.blp # Main window UI
│ │ ├── dialogs/ # Dialog UI files
│ │ │ ├── preferences-dialog.blp
│ │ │ ├── shortcuts-dialog.blp
│ │ │ ├── batch-lookup-dialog.blp
│ │ │ └── comparison-dialog.blp
│ │ └── widgets/ # Widget UI files
│ │ ├── enhanced-query-form.blp
│ │ ├── enhanced-result-view.blp
│ │ ├── advanced-options.blp
│ │ ├── autocomplete-dropdown.blp
│ │ ├── enhanced-history-search.blp
│ │ └── history-popover.blp
│ ├── io.github.tobagin.digger.gschema.xml # GSettings schemas
│ ├── io.github.tobagin.digger.metainfo.xml.in # AppStream metadata
│ ├── io.github.tobagin.digger.desktop.in # Desktop entry
│ ├── icons/ # Application icons (SVG scalable)
│ │ └── hicolor/scalable/apps/
│ │ ├── io.github.tobagin.digger.svg # Main app icon
│ │ ├── io.github.tobagin.digger-history-symbolic.svg
│ │ ├── io.github.tobagin.digger-copy-symbolic.svg
│ │ ├── io.github.tobagin.digger-error-symbolic.svg
│ │ ├── io.github.tobagin.digger-success-symbolic.svg
│ │ ├── io.github.tobagin.digger-fastest-server-symbolic.svg
│ │ ├── io.github.tobagin.digger-slowest-server-symbolic.svg
│ │ ├── io.github.tobagin.digger-average-query-time-symbolic.svg
│ │ └── io.github.tobagin.digger-query-time-symbolic.svg
│ ├── screenshots/ # Application screenshots
│ └── presets/ # DNS server presets
├── packaging/ # Flatpak manifests
│ ├── io.github.tobagin.digger.yml # Production manifest
│ └── io.github.tobagin.digger.Devel.yml # Development manifest
├── scripts/ # Build and utility scripts
│ └── build.sh # Unified build script
└── po/ # Translations
Digger uses the embedded dig command (BIND 9.16.48) for DNS resolution, providing:
- Enhanced Error Handling: Proper parsing of NXDOMAIN, SERVFAIL, REFUSED, and other DNS status codes
- Comprehensive Record Support: All standard DNS record types with proper parsing
- Advanced Query Options: Tracing, custom servers, reverse lookups, and short output
- DNSSEC Support: Full DNSSEC validation with DNSKEY, DS, and RRSIG records
- DoH Integration: DNS-over-HTTPS using libsoup-3.0 with RFC 1035 wire format
- Detailed Diagnostics: Query timing, server information, and comprehensive status reporting
- Self-Contained: Embedded dig command in Flatpak builds eliminates external dependencies
Contributions are welcome! Please feel free to submit issues and pull requests.
- Fork the repository
- Create a feature branch
- Make your changes following the coding guidelines
- Test thoroughly with various DNS queries
- Submit a pull request
- Follow PascalCase naming for Vala files (e.g.,
DnsQuery.vala) - Organize code into appropriate folders (dialogs, models, services, managers, widgets, utils)
- Add appropriate error handling with null checks
- Use Blueprint for UI definitions
- Include descriptive commit messages
- Test changes with various DNS record types and scenarios
- Place dialogs in
src/dialogs/ - Place data models in
src/models/ - Place business logic in
src/services/ - Place feature managers in
src/managers/ - Place UI components in
src/widgets/ - Place utility classes in
src/utils/ - Place Blueprint UI files in
data/ui/dialogs/ordata/ui/widgets/
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- Built with Vala and GTK4
- UI components from libadwaita 1.8
- DNS resolution powered by BIND dig
- Inspired by the classic
digcommand-line tool - Thanks to the GNOME and GTK communities for excellent documentation
Major New Features:
- Responsive Mobile UI: Full adaptive layout with libadwaita 1.6+ breakpoints supporting mobile (360px+), tablet (768px+), and desktop (1024px+) form factors
- WHOIS Integration: Automatic domain registration information lookup with intelligent caching (configurable 1-168 hour TTL)
- Command Export: Generate equivalent dig and DoH curl commands from GUI queries for easy CLI transition
- Query Presets: Foundation for user-defined query configurations with dropdown selector
Mobile Experience:
- Touch-friendly 44x44px minimum button sizes on mobile devices
- Native mobile bottom sheet for query history (dialog on mobile, popover on desktop)
- Vertical stacking of controls on narrow screens (<768px)
- Progressive autocomplete sizing (400px desktop, 260px tablet, 180px mobile)
- Main content area with vertical scrolling for better mobile navigation
- Removed nested ScrolledWindows for clean, predictable scrolling
WHOIS Capabilities:
- Bundled whois command (v5.5.22) for Flatpak sandbox compatibility
- Rich display of registrar, dates, nameservers, and domain status
- Privacy-protected record detection
- Full export support in JSON, CSV, and text formats
- Configurable timeout (5-120 seconds) and cache management
- Async operation that doesn't block DNS queries
Development:
- Development builds now show "Digger (Devel)" in application launchers
- Upgraded minimum libadwaita requirement to 1.6 for breakpoint support
UI/UX Enhancements:
- Redesigned Comparison Dialog: Two-page architecture (Setup → Results) for cleaner, more focused interface
- Custom Icons: Added custom symbolic icons for fastest-server, slowest-server, average-query-time, and query-time
- Semantic Record Type Icons: Visual icons replace colored text labels for DNS record types (A, AAAA, MX, CNAME, NS, TXT, SOA, PTR, SRV)
- System Default Display: Shows "System Default (localhost)" for clarity when using default DNS server
- Menu Integration: Added Batch Lookup and Compare DNS Servers to Tools menu for better discoverability
Critical Bug Fixes:
- Fixed UI Freeze: Comparison dialog now uses sequential async with 50ms yields, keeping UI fully responsive during multi-server queries
- Fixed Results Accumulation: Comparison results properly clear between runs using reusable rows pattern
- Fixed False Positives: Set-based discrepancy detection eliminates false warnings when DNS records return in different order
Performance Improvements:
- Reusable Widgets: Statistics rows created once and updated instead of removed/recreated for better performance
- Enhanced Export: Full JSON/CSV/TXT export with smart filename generation for comparison results
New Features:
- Export Manager: Export query results to JSON, CSV, plain text, or DNS zone file formats
- Favorites System: Star and save frequently queried domains with their record types
- Batch Lookup: Import and query multiple domains from CSV/TXT files with progress tracking
- Server Comparison: Compare DNS responses across multiple servers with discrepancy detection
- DNS-over-HTTPS (DoH): Secure DNS queries with Cloudflare, Google, Quad9, and custom endpoint support
- DNSSEC Validation: Verify DNSSEC chain of trust with DNSKEY, DS, and RRSIG record validation
- Advanced Preferences: Configure DoH providers and DNSSEC validation settings
- Enhanced About Dialog: Comprehensive about dialog with automatic release notes display
Code Organization:
- Renamed all Vala files to PascalCase naming convention
- Organized source code into logical folders (dialogs, models, services, managers, widgets, utils)
- Organized Blueprint UI files into dialogs and widgets folders
- Moved screenshots to data folder for better organization
Technical Improvements:
- Updated keyboard shortcuts to Libadwaita 1.8 ShortcutsDialog API
- Improved stability with defensive null checks for GSettings
- Enhanced metainfo with comprehensive v2.2.0 release notes
- Better error handling throughout the application
- Added comprehensive project links (help, donations, contact, contribution)
- Enhanced AppStream metadata for better app store integration
- Improved project visibility and user support resources
- Updated to GNOME runtime version 49
- Improved compatibility with latest GNOME platform
- Fixed application crash when changing DNS servers via dropdown
- Fixed crash with DNS quick preset buttons (Google, Cloudflare, Quad9)
- Resolved index out of bounds error in DNS server selection
- Improved DNS server dropdown stability
- Native Performance: Complete rewrite from Python to Vala
- Enhanced DNS Parsing: Proper handling of all DNS status codes
- Modern UI: GTK4 and libadwaita with Blueprint templates
- Self-Contained: Embedded dig command eliminates external dependencies
Made with ❤️ using Vala, GTK4, and libadwaita