DuckDNS Connector is a production-ready, enterprise-grade desktop application for Windows that automatically keeps your DuckDNS domains updated with your public IP address. Built with modern Python and featuring a beautiful dark-themed UI, it runs silently in the system tray with comprehensive monitoring and fault tolerance.
Developed by thirawat27.
- 🔄 Automatic IP Updates: Background monitoring with configurable intervals (1-1440 minutes)
- 🧠 Smart Updates: Only updates when IP actually changes, preventing unnecessary API calls
- 📌 System Tray Integration: Lightweight, stays out of your way
- 🎨 Modern Dark UI: Beautiful interface using CustomTkinter
- 🔔 Desktop Notifications: Optional alerts for updates and errors
- 🔌 Port Checker: Test if ports are accessible from the internet
- 📖 Help Guide: Integrated firewall and port forwarding documentation
- 🌐 IP Display: Quick view of your current public IP
- 📊 System Status: Real-time performance metrics and health monitoring
- 🔄 Auto-Updater: Automatic version checking and updates
-
⚡ High Performance:
- JIT compilation support (Numba/PyPy)
- Lazy loading for instant startup
- Connection pooling and caching
- Module pre-loading
- Icon caching
-
🏥 Reliability:
- Circuit breaker pattern
- Exponential backoff retry logic
- Rate limiting (30s minimum)
- Consecutive failure tracking
- Graceful error recovery
-
📊 Monitoring:
- Real-time performance metrics
- System resource tracking (CPU, Memory)
- Health status indicators
- Success rate monitoring
- Comprehensive logging
-
🔒 Enterprise Grade:
- Thread-safe operations
- Config backup & recovery
- Atomic file writes
- Structured logging (JSON support)
- Graceful shutdown
- Input validation
DuckDNS-Connector/
├── main.py # Application entry point
├── requirements.txt # Python dependencies
├── build.spec # PyInstaller configuration
├── installer_script.iss # Inno Setup installer script
├── README.md # Documentation
├── LICENSE # MIT License
├── PRODUCTION_READY.md # Production features guide
├── assets/
│ └── logo.ico # Application icon
├── src/
│ ├── core/ # Core modules
│ │ ├── constants.py # App constants & theme
│ │ ├── config.py # Thread-safe config manager
│ │ └── exceptions.py # Custom exceptions
│ ├── services/ # Business logic
│ │ ├── duckdns_client.py # DuckDNS API with circuit breaker
│ │ ├── network.py # Network utilities with caching
│ │ └── updater.py # Auto-update service
│ ├── ui/ # User interface
│ │ ├── app.py # Main application controller
│ │ ├── components.py # Reusable UI components
│ │ ├── theme.py # CustomTkinter theme
│ │ ├── icon_utils.py # Icon caching system
│ │ └── windows/ # Window dialogs
│ │ ├── settings.py # Settings configuration
│ │ ├── port_checker.py # Port testing utility
│ │ ├── help.py # Help & guide
│ │ ├── about.py # About dialog
│ │ ├── public_ip.py # IP display
│ │ ├── status.py # System status & monitoring
│ │ └── update_dialog.py # Update notifications
│ └── utils/ # Utilities
│ ├── logger.py # Production logging system
│ ├── paths.py # Path management
│ ├── validators.py # Input validation
│ ├── performance.py # Performance optimizations
│ ├── monitoring.py # Health & metrics monitoring
│ ├── shutdown.py # Graceful shutdown handler
│ └── retry.py # Retry logic & circuit breaker
├── config/ # User configuration
└── logs/ # Application logs
- Go to the Releases page.
- Download the latest
DuckDNS-Connector-vX.X.X-Setup.exefile. - Run the installer and follow the instructions.
- Python 3.10+
- Git (optional)
-
Clone the Repository:
git clone https://github.com/thirawat27/DuckDNS-Connector.git cd DuckDNS-Connector -
Create Virtual Environment:
python -m venv venv venv\Scripts\activate # Windows # source venv/bin/activate # macOS/Linux
-
Install Dependencies:
pip install -r requirements.txt
-
Run the Application:
python main.py
-
Build Executable (Optional):
pip install pyinstaller pyinstaller build.spec
The executable will be in the
distfolder.
-
Launch Application:
- Find the DuckDNS Connector icon in your system tray (near the clock)
- Right-click the icon to open the menu
-
Configure Settings:
- Select "Settings" from the menu
- Enter your Domain (subdomain only, e.g.,
my-homeformy-home.duckdns.org) - Paste your Token from DuckDNS
- Set Update Interval (1-1440 minutes, default: 5)
- Enable/disable Notifications
- Click "Save Changes"
-
Verify Operation:
- The app will immediately check and update your IP
- Check the tray icon tooltip for status updates
Right-click the tray icon to access:
- Settings - Configure domain, token, and preferences
- Force Update - Immediately check and update IP
- Show My Public IP - Display current public IP address
- System Status - View performance metrics and health
- Check Service Port - Test port accessibility
- Help - Firewall and port forwarding guide
- Check for Updates - Check for new versions
- About - Application information
- Exit - Close application
Access real-time monitoring:
- Performance Metrics: Uptime, success rate, update times
- System Resources: CPU and memory usage
- Network Status: Cache statistics
- Health Indicator: Overall system health
- Auto-refreshes every 5 seconds
- Singleton Pattern: Configuration manager
- Circuit Breaker: Fault tolerance for API calls
- Observer Pattern: Event-driven updates
- Factory Pattern: Window creation
- Strategy Pattern: Retry logic
- JIT Compilation: Numba/PyPy auto-detection
- Lazy Loading: On-demand module imports
- Connection Pooling: HTTP adapter (10 connections, 20 max)
- Caching: IP (60s), connection status (10s), icons (permanent)
- Concurrent Operations: Parallel IP provider checks
- Circuit Breaker: Opens after 3 failures, recovers after 60s
- Retry Logic: 3 attempts with exponential backoff
- Rate Limiting: 30s minimum between updates
- Failure Tracking: Alerts after 5 consecutive failures
- Graceful Degradation: Continues on non-critical errors
- Performance Metrics: Uptime, success rate, operation times
- System Metrics: CPU, memory, thread count
- Health Checks: Overall status with issue detection
- Structured Logging: JSON format, rotating files (5MB, 5 backups)
- Error Tracking: Separate error log file
- Thread-Safe: RLock protection for shared resources
- Atomic Writes: Temp file + rename for config
- Config Backup: Automatic backup before save
- Input Validation: All user inputs validated
- No Sensitive Data: Tokens not logged
- Graceful Shutdown: Signal handlers (SIGINT, SIGTERM, SIGBREAK)
- Proper Cleanup: All resources released on exit
- Memory Efficient: <50MB typical usage
- Low CPU: <1% idle, <5% active
- Startup Time: ~2 seconds (with optimizations)
- Update Cycle: <5 seconds (with caching)
- Memory Usage: <50MB typical, <100MB peak
- CPU Usage: <1% idle, <5% during updates
- Success Rate: >99% with proper configuration
- Windows:
%APPDATA%\DuckDNS-Connector\config.ini - Backup:
config.ini.backup(automatic)
- Main log:
DuckDNS-Connector.log(5MB, 5 backups) - Error log:
DuckDNS-Connector_errors.log(5MB, 3 backups) - JSON log:
DuckDNS-Connector_structured.json(optional)
- Minimum: 1 minute
- Maximum: 1440 minutes (24 hours)
- Default: 5 minutes
- Recommended: 5-15 minutes
Icon not showing in title bar:
- Fixed in latest version with proper timing
Update fails:
- Check domain and token in Settings
- Verify internet connection
- Check System Status for details
High memory usage:
- Normal: <50MB
- Check System Status window
- Restart if >100MB
Port check fails:
- Verify port forwarding on router
- Check Windows Firewall settings
- Ensure service is running
- Check System Status window for diagnostics
- Review log files in
%APPDATA%\DuckDNS-Connector\logs - Open an issue on GitHub with logs
The application includes an auto-updater that:
- Checks for updates on startup (after 5s delay)
- Can be manually triggered from tray menu
- Downloads and installs updates automatically
- Requires restart to apply updates
- Python 3.10+
- customtkinter - Modern UI framework
- requests - HTTP client
- Pillow - Image processing
- pystray - System tray integration
- psutil - System monitoring
- urllib3 - Connection pooling
- filelock - File locking
- pyinstaller - Executable building
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License. See the LICENSE file for details.
- DuckDNS for providing free dynamic DNS service
- CustomTkinter for the modern UI framework
- All contributors and users
- Developer: thirawat27
- GitHub: DuckDNS-Connector
- Issues: GitHub Issues
Version: 2.0.0 Last Updated: 2024