* Initial plan * feat(docs): add static documentation website builder script Add build_docs.py script to convert markdown docs to static HTML website with: - Responsive navigation bar with collapsible directory tree - In-page table of contents (right sidebar, hidden on small screens) - Language switcher (Chinese/English) - Pure static HTML output (no server-side processing) - Footer with GitHub links and edit page link - Mobile-friendly responsive design Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * style: format build_docs.py with ruff Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): use MkDocs with Material theme instead of custom parser Replace custom markdown parser with industry-standard tools: - MkDocs: Popular static site generator for documentation - Material for MkDocs: Modern, feature-rich theme Benefits: - Mature, well-tested codebase used by thousands of projects - Built-in features: search, navigation, TOC, code highlighting - Active development with regular updates - Extensive documentation and community support - Beautiful, responsive design out of the box - Easy to maintain with configuration-based approach Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): use VitePress instead of MkDocs for documentation Replace MkDocs with VitePress - a Vue-powered static site generator: - VitePress: Modern, fast, designed for documentation - Vue 3 + Vite stack with instant HMR - Built-in i18n, search, dark mode, responsive design - Chinese-friendly (created by Evan You) Features: - Responsive navigation with collapsible sidebar - In-page TOC automatically generated - Bilingual support (Chinese/English) - Local search with keyboard shortcuts - Light/Dark mode toggle - Edit page links to GitHub - Pure static HTML output Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * feat(docs): add automated setup and build with npm run build Add automated directory setup for VitePress build: - Created scripts/setup-docs.mjs to auto-setup docs structure - Updated package.json with 'build' command that runs setup + build - Updated docs:dev to include setup automatically - Simplified workflow to one command: npm run build Changes: - npm run build now handles everything automatically - No need for separate bash script - Directory structure created on-demand - Updated BUILD_DOCS.md with simplified instructions Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): improve VitePress configuration per feedback Addressed all feedback items: 1. Fixed edit link mapping: index.html now correctly maps to README.md/README.en.md in GitHub 2. Added schema directory to build output via public/ directory 3. Removed /doc/ prefix from all URLs - doc/ is now the web root 4. Fixed path references in README files during setup Changes: - Updated editLink to use function for proper README mapping - Modified setup script to copy doc/ contents to docs root (not docs/doc/) - Added schema/ to public/ directory for static asset serving - Fixed /doc/ path references in copied README files - Updated all navigation and sidebar paths to remove /doc/ prefix URLs now work as: - / (homepage from README.md) - /docker, /install (no /doc/ prefix) - /config/cli, /providers/dnspod (clean paths) - /schema/v4.0.json (accessible in build) Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): preserve original /doc/ paths in documentation Per user feedback, reverted path modifications: - No longer replace /doc/ paths in README files - Restored doc/ directory structure (docs/doc/) - Updated VitePress navigation to use /doc/ prefix - Edit links correctly map to source files in doc/ directory Changes: - setup-docs.mjs: removed path replacement, copy doc/ to docs/doc/ - config.mts: restored /doc/ prefix in all navigation and sidebar paths - URLs now match original documentation: /doc/docker, /doc/providers/dnspod This preserves the original documentation structure and paths as they appear in the source repository. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): remove /doc/ prefix from URLs and ignore intermediate files Per user feedback, changed URLs from /doc/xxx.html to /xxx.html: Changes: 1. Updated setup-docs.mjs to copy doc/ contents to docs/ root (not docs/doc/) 2. Modified path replacement to handle both links and image src attributes 3. Updated VitePress config.mts to remove /doc/ prefix from all nav/sidebar paths 4. Updated .gitignore to exclude intermediate copied files from commits 5. Removed docs/index.md and docs/en/index.md from git tracking URLs now: - /docker.html instead of /doc/docker.html - /providers/dnspod.html instead of /doc/providers/dnspod.html - /config/cli.html instead of /doc/config/cli.html - Images at /img/ddns.svg instead of /doc/img/ddns.svg - Schema files remain at /schema/v4.0.json Intermediate files generated during build are now gitignored and won't be committed. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): move build scripts to doc/ directory Moved documentation build scripts from root and scripts/ to doc/ directory: - Moved scripts/setup-docs.mjs → doc/setup-docs.mjs - Moved build_docs.sh → doc/build_docs.sh - Removed empty scripts/ directory - Updated package.json to reference new script locations - Updated BUILD_DOCS.md with new directory structure This organizes all documentation-related files under doc/ directory, keeping the repository root cleaner. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): consolidate into single doc/ directory Eliminated docs/ directory, consolidated everything under doc/: - Moved docs/.vitepress/ → doc/.vitepress/ - Removed docs/ directory entirely - Updated package.json to use doc/ instead of docs/ - Updated .gitignore to reflect new structure (doc/.vitepress/dist/, doc/index.md, doc/en/, doc/public/) - Updated setup-docs.mjs to generate files within doc/ - Updated BUILD_DOCS.md documentation Structure now: - doc/ contains source files, VitePress config, and generated intermediate files - All build artifacts stay within doc/.vitepress/dist/ - Simpler single-directory structure without doc/docs nesting Commands remain the same: - npm run build - npm run docs:dev - npm run docs:preview Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): move package.json to doc/ directory Moved package.json to doc/ directory to consolidate all documentation-related files: - Moved package.json from root → doc/package.json - Updated package.json scripts to use relative paths (. instead of doc) - Updated BUILD_DOCS.md with new usage instructions (cd doc first) - Updated build_docs.sh to work from within doc/ directory - .gitignore already handles node_modules/ globally All documentation dependencies and configuration now in single doc/ directory. Usage: ```bash cd doc npm install npm run build ``` Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * feat(docs): add install.sh to public, auto-redirects, and ensure README→index.html mapping Implemented three enhancements: 1. Copy install.sh to public/ directory - install.sh now accessible at /install.sh in build - Users can download directly from documentation site 2. Add automatic redirects for old URLs - Created custom VitePress theme with redirect logic - /doc/xxx URLs redirect to /xxx - /doc/xxx.en.html URLs redirect to /en/xxx.html - Maintains backward compatibility with old links 3. README.md renders as index.html with correct edit links - Already configured: index.md maps to README.md for editing - en/index.md maps to README.en.md for editing - Edit links work correctly for both Chinese and English homepages Updated BUILD_DOCS.md with new features documentation. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * feat(docs): upgrade to VitePress 2.0 (next) Upgraded VitePress from v1.x to v2.0 (next tag): - Updated package.json to use "vitepress": "next" - Currently using v2.0.0-alpha.15 - Tested build successfully - all features working - Updated BUILD_DOCS.md to reflect VitePress 2.0 VitePress 2.0 benefits: - Better performance and faster build times - Improved developer experience - Enhanced features and bug fixes - Future-ready with latest Vue 3 + Vite improvements Build tested and confirmed working with no breaking changes. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): remove redundant build script and fix copyright years Changes per user feedback: 1. Removed doc/build_docs.sh (redundant - standard npm commands sufficient) 2. Updated copyright in config.mts line 133: "Copyright © 2016 ~ 2024 NewFuture" 3. Updated copyright in config.mts line 305: "Copyright © 2016 ~ 2024 NewFuture" Usage now simplified to standard npm commands: - cd doc && npm install - npm run build - npm run docs:dev - npm run docs:preview Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): dynamic copyright year, move redirects to esa.js, update providers link Per user feedback: 1. Made copyright year dynamic: `${new Date().getFullYear()}` (line 305) 2. Moved redirect logic from theme/index.ts to esa.js for server-side handling 3. Changed providers link from "概述 /providers/README" to "所有服务商 /providers/index" (line 70) Changes: - config.mts: Dynamic copyright calculation, updated providers navigation - esa.js: Added redirect logic for /doc/ URLs (301 permanent redirects) - theme/index.ts: Removed client-side redirect logic (now handled server-side) Redirects now handled at edge function level for better SEO and performance. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): improve redirects, provider link, and add code-to-GitHub link conversion Per user feedback (comment #3736692270): 1. Moved .en.html redirect logic before general /doc/ redirect in esa.js 2. Added /index.en.html → /en/ redirect 3. Changed providers/README URL to providers/ (line 39) 4. Added markdown transformer to convert code links (e.g., /ddns/provider/dnspod.py) to GitHub links Changes: - esa.js: Reordered redirect logic (en first), added index.en.html redirect - config.mts: Changed providers link from /providers/README to /providers/ - config.mts: Added markdown.config to transform inline code paths to GitHub links Code paths like `/ddns/provider/dnspod.py` in documentation will now automatically link to GitHub repository. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * feat(docs): enable dead link check, add sitemap, llms.txt, and GitHub Actions build Per user feedback (comment #3736806631): 1. Changed redirects to 301 permanent redirects in esa.js (line 183) 2. Enabled dead link checking in config.mts (ignoreDeadLinks: false) 3. Added sitemap generation (sitemap.hostname: https://ddns.newfuture.cc) 4. Added llms.txt generation via buildEnd hook for AI/LLM context 5. Created GitHub Actions workflow (.github/workflows/build-docs.yml) to build docs on push Changes: - esa.js: Clarified 301 redirect comment - config.mts: Enabled dead link check, added sitemap config, added buildEnd hook for llms.txt - .github/workflows/build-docs.yml: New workflow to build and optionally deploy docs GitHub Action triggers on: - Push to master/main (doc/, README*, schema/ paths) - Pull requests - Manual workflow dispatch Build output includes sitemap.xml and llms.txt for better SEO and AI integration. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): update Node.js to v24, retention to 7 days, simplify BUILD_DOCS Per user feedback (comment #3736833266): 1. Updated Node.js version from v20 to v24 in build-docs.yml (line 33) 2. Changed artifact retention from 30 to 7 days (line 50) 3. Simplified BUILD_DOCS.md - removed verbose explanations, kept essentials Changes: - .github/workflows/build-docs.yml: Node 24, 7-day retention - BUILD_DOCS.md: Condensed from 327 to 40 lines, focused on quick start and essential commands BUILD_DOCS.md now provides concise reference instead of lengthy tutorial. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * refactor(docs): simplify link transformer, extract llms.txt template, add docs agent Per user feedback (comment #3737275691): 1. Simplified markdown transformer to only process link (a tag) hrefs instead of code_inline tokens 2. Extracted llms.txt content to separate template file (doc/llms.txt) with: - Complete documentation structure with all page URLs - All schema file URLs (v4.0, v2.8, v2) - Template variable {{DATE}} for build-time replacement 3. Deleted BUILD_DOCS.md and created .github/agents/docs.agent.md: - Comprehensive documentation maintenance agent - Full guide for updating docs, navigation, providers - Build/test procedures and common tasks - Guidelines for writing and link handling Changes: - config.mts: Transform link hrefs (not inline code), read llms.txt from template - doc/llms.txt: New template with full doc/schema URLs - .github/agents/docs.agent.md: New documentation maintenance agent - BUILD_DOCS.md: Deleted (replaced by agent instructions) Link transformer now only modifies existing <a> tags, preserving markdown styling. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): add metadata to docs agent, fix markdown syntax, add v4.1.json schema Per user feedback (comment #3737334654): 1. Added YAML metadata to docs.agent.md (name, description) following new-provider.agent.md format 2. Fixed markdown syntax to be GitHub-compatible: - Changed inline code blocks in list items to properly formatted code blocks - Ensured all code examples are in fenced code blocks 3. Added missing v4.1.json schema to llms.txt (was only showing v4.0, v2.8, v2) Changes: - .github/agents/docs.agent.md: Added YAML frontmatter, fixed markdown formatting - doc/llms.txt: Added v4.1 schema URL (first in list as newest version) All schema files now documented: v4.1, v4.0, v2.8, v2 Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): restructure to docs/ directory with cleaner organization Per user feedback (comment #3737399407): 1. Renamed doc/ → docs/ 2. Moved all .en.md files → docs/en/*.md (removed .en suffix) 3. Moved install.sh → docs/install.sh (source file, not copied) 4. Moved favicon.ico → docs/favicon.ico (source file) 5. Simplified setup-docs.mjs - no longer copies English files or install.sh 6. Updated all path references: - GitHub Actions workflow: doc/ → docs/ - .gitignore: doc/ → docs/ - VitePress config: edit links now map to docs/ - Documentation agent: updated structure docs New Structure: - docs/ (was doc/) - config/, providers/, dev/ (Chinese markdown) - en/ (English markdown, no .en suffix) - config/, providers/, dev/ - install.sh (source) - favicon.ico (source) - llms.txt (template) Build command unchanged: cd docs && npm run build All English documentation now sourced directly from docs/en/ instead of being generated. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): update documentation links from /doc/ to docs/ in README files Per user feedback (comment #3737497400): 1. Updated setup-docs.mjs to properly replace /doc/ → docs/ → / in README processing 2. Updated all /doc/ links to docs/ in README.md: - Image src: /doc/img/ddns.svg → docs/img/ddns.svg - Docker docs: /doc/docker.md → docs/docker.md - Config docs: /doc/config/* → docs/config/* - Provider docs: /doc/providers/* → docs/providers/* 3. Updated all /doc/ links to docs/en/ in README.en.md: - Image src: /doc/img/ddns.svg → docs/img/ddns.svg - Docker docs: /doc/docker.en.md → docs/en/docker.md - Config docs: /doc/config/*.en.md → docs/en/config/*.md - Provider docs: /doc/providers/*.en.md → docs/en/providers/*.md Changes: - docs/setup-docs.mjs: Two-step replacement (/doc/ → docs/ → /) for GitHub links - README.md: All documentation links now use docs/ prefix - README.en.md: All documentation links now use docs/en/ prefix Verified: No /doc/ links remain in README files or .github markdown files. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): simplify setup script and move to .vitepress directory Per user feedback (comment #3737562776): 1. Moved setup-docs.mjs to docs/.vitepress/ directory 2. Simplified link replacement logic: - Removed unnecessary /doc/ processing code - Now only converts docs/ → / (Chinese version) - And docs/en/ → / (English version) - Since README files already use correct docs/ prefix 3. Updated package.json script paths to reference .vitepress/setup-docs.mjs 4. Updated path variables in script to work from .vitepress/ location Changes: - docs/.vitepress/setup-docs.mjs: New location, simplified logic - docs/package.json: Updated setup script path - Removed obsolete /doc/ → docs/ replacement steps Build process now simpler and cleaner. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): fix all broken documentation links Per user feedback (comment #3737640946): Fixed all broken links throughout the documentation: 1. Fixed providers/README links → providers/ (clean URL) 2. Removed all .en.md suffixes from links (files now in docs/en/ with .md extension) 3. Fixed /doc/ prefix references → proper docs/ paths 4. Fixed cross-references between Chinese and English docs: - Chinese providers/README.md → ../en/providers/*.md for English docs - English docs use relative paths within en/ directory 5. Fixed redirect_to URLs in dnscom.md files 6. Fixed image URL: /doc/img/ → /img/ Changes affect 28 files: - All config documentation (cli.md, env.md, json.md) in both languages - All provider documentation in both languages - Developer documentation (dev/config.md) - Docker documentation - Provider README files All dead links now resolved. Documentation navigation works correctly. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): fix remaining dead links in generated index.md and provider files Per user feedback (comment #3737692822): Fixed all remaining dead links: 1. Enhanced setup-docs.mjs to handle ./doc/ prefix links: - Added replacement for (./doc/ → (/ - Added replacement for /providers/index → /providers/ - Now correctly converts README links to clean web URLs 2. Fixed provider documentation links: - callback.md and debug.md: Added "Return to All Providers" links - English versions: Added /en/providers/ links - Removed broken ./../../README links All dead links now resolved: - ./doc/install → /install - ./doc/providers/* → /providers/* - ./doc/config/* → /config/* - /providers/index → /providers/ - Provider files now link to /providers/ and /en/providers/ Dead link checking should now pass successfully. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): fix all remaining dead links in documentation Per user feedback (comment #3737728554): Fixed all remaining dead links throughout documentation: 1. Enhanced setup-docs.mjs: - Added replacement for ](doc/ pattern - Handles more link format variations 2. Fixed config files (6 files): - config/cli.md: providers/ → ../providers/, providers/callback → ../providers/callback - config/json.md: docker.md → ../docker.md, providers/ → ../providers/ - en/config/env.md: providers/callback → ../providers/callback, docker → ../docker, providers/ → ../providers/ - en/config/json.md: docker.md → ../docker.md, providers/ → ../providers/ 3. Fixed provider files (6 files): - providers/callback.md, debug.md, README.md: ../../README.md → / - en/providers/callback.md, debug.md: ../../README.md → /en/ - en/providers/he.md: ../json.md → ../config/json.md All dead links resolved: ✓ ./providers/index → ../providers/ ✓ ./providers/callback → ../providers/callback ✓ ./docker → ../docker ✓ ./../../README → / (or /en/) ✓ ../json → ../config/json ✓ ](doc/ → ](/ Dead link checking should now pass successfully with zero errors. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): add VitePress rewrites to map providers/README.md to /providers/ Per user feedback (comment #3737780259): Fixed `/providers/index` dead links by adding VitePress rewrites configuration. Changes to docs/.vitepress/config.mts: 1. Added rewrites mapping: - providers/README.md → providers/index.md - en/providers/README.md → en/providers/index.md 2. Updated sidebar links: - /providers/index → /providers/ - /en/providers/index → /en/providers/ This tells VitePress that the README.md files in providers directories should be accessible via the /providers/ URL (with cleanUrls enabled). All /providers/index links now correctly resolve to /providers/ Dead link checking should now pass with zero errors. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): fix providers/index links and simplify setup script Per user feedback (comment #3737836475): 1. Fixed dead links in config/env.md files: - ./providers/ → ../providers/ (both Chinese and English) 2. Simplified setup-docs.mjs: - Removed unnecessary doc/ processing (README no longer contains doc/) - Merged logic for both README files into single processReadme function - Cleaner, more maintainable code with less duplication Changes: - docs/config/env.md: Fixed providers/ link - docs/en/config/env.md: Fixed providers/ link - docs/.vitepress/setup-docs.mjs: Refactored with shared function Dead link checking should now pass with zero errors. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): remove providers/index replacement from setup script Per user feedback (comment #3737887893): Removed `/providers/index` → `/providers/` replacement from setup-docs.mjs. This should be fixed in markdown files instead, not in the setup script. Simplified setup script by removing unnecessary transformation logic. Changes: - docs/.vitepress/setup-docs.mjs: Removed line 29 replacement Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): update remaining /doc/ references to docs/ in README files Per user feedback (comment #3737970179): Updated all remaining /doc/ references to docs/ or docs/en/ in both README files. Changes in README.md: - doc/install.md → docs/install.md - All doc/providers/*.md → docs/providers/*.md (10 provider links) Changes in README.en.md: - doc/install.en.md → docs/en/install.md - doc/providers/dnspod.en.md → docs/en/providers/dnspod.md - doc/providers/alidns.en.md → docs/en/providers/alidns.md All documentation links now correctly use docs/ prefix for GitHub navigation. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * fix(docs): update all remaining doc/ references to docs/ in README files Per user feedback (comment #3738298603): Updated ALL remaining doc/ references to docs/ or docs/en/ in both README files. Changes in README.md (13 links): - doc/providers/edgeone.md → docs/providers/edgeone.md - doc/providers/noip.md → docs/providers/noip.md - doc/config/cli.md → docs/config/cli.md (3 occurrences) - doc/config/json.md → docs/config/json.md (2 occurrences) - doc/config/env.md → docs/config/env.md (2 occurrences) - doc/providers/ → docs/providers/ (3 occurrences) Changes in README.en.md (13 links): - doc/providers/*.en.md → docs/en/providers/*.md (9 provider links) - doc/config/cli.en.md → docs/en/config/cli.md - doc/config/json.en.md → docs/en/config/json.md - doc/config/env.en.md → docs/en/config/env.md - doc/providers/ → docs/en/providers/ All documentation links now use correct docs/ prefix with NO /doc/ references remaining. Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * refactor(docs): integrate setup logic into config.mts Per user feedback (comment #3738600577): Integrated setup-docs.mjs functionality into config.mts. Changes: 1. Removed standalone setup-docs.mjs file 2. Added setupDocs() function in config.mts that runs before config export 3. Simplified package.json scripts - removed setup step 4. Setup now runs automatically when config loads (works for both dev and build) Benefits: - Single configuration file - easier to maintain - No separate setup script needed - Automatic execution on both dev and build - Cleaner package.json scripts - Same functionality, simpler implementation Build command: `npm run build` or `npm run docs:dev` Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> * update link * /doc/img/ddns.svg * fix docs paths * fix docs * fix docs url --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NewFuture <6290356+NewFuture@users.noreply.github.com> Co-authored-by: New Future <NewFuture@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
DDNS
Automatically update DNS records to the current IP address, supporting IPv4 and IPv6, local (private) IP and public IP. Proxy mode supported, with automatic DNS record creation.
Features
-
Compatibility and Cross-Platform:
-
Configuration Methods:
- Command Line Arguments
- JSON Configuration File (supports single-file multi-provider, multiple config files, and remote URL)
- Environment Variables
- Provider Configuration Guide
-
Domain Support:
- Multiple domain support
- Multi-level domain resolution
- Automatic DNS record creation
- Multiple configuration files and multi-provider concurrent execution
-
IP Types:
- Private IPv4 / IPv6
- Public IPv4 / IPv6 (supports custom API)
- Custom commands (shell)
- Regex selection support (@rufengsuixing)
-
Network Proxy:
- HTTP proxy support
- Automatic multi-proxy switching
-
DNS Provider Support:
- DNSPOD China (Configuration Guide)
- Alibaba Cloud DNS (Configuration Guide) ⚡
- Alibaba Cloud ESA (Configuration Guide) ⚡
- DNS.COM (Configuration Guide) (@loftor-git)
- DNSPOD International (Configuration Guide)
- CloudFlare (Configuration Guide) (@tongyifan)
- HE.net (Configuration Guide) (@NN708) (Does not support auto-record creation)
- Huawei Cloud (Configuration Guide) (@cybmp3) ⚡
- NameSilo (Configuration Guide)
- Tencent Cloud DNS (Configuration Guide) ⚡
- Tencent Cloud EdgeOne (Configuration Guide) ⚡
- No-IP (Configuration Guide)
- Custom Callback API (Configuration Guide)
⚡ Providers marked with lightning use advanced HMAC-SHA256 signature authentication for enterprise-level security
-
Other Features:
- Configurable scheduled tasks
- TTL configuration support
- DNS line (ISP) configuration support (for domestic providers)
- Local file caching (reduces API requests)
- Custom callback API trigger on IP change (mutually exclusive with DDNS functionality)
Usage
① Installation
Choose one of the following methods: Docker, binary version, pip version, or source code execution.
Docker version is recommended for best compatibility, small size, and optimized performance.
-
Docker (Recommended)
For detailed instructions and advanced usage, see Docker Usage Documentation
Supports command line, configuration file, and environment variable parameters
-
Command line CLI
docker run newfuture/ddns -h -
Using configuration file (Docker working directory
/ddns/, default config location/ddns/config.json):docker run -d -v /host/config/:/ddns/ --network host newfuture/ddns -
Using environment variables:
docker run -d \ -e DDNS_DNS=dnspod \ -e DDNS_ID=12345 \ -e DDNS_TOKEN=mytokenkey \ -e DDNS_IPV4=ddns.newfuture.cc \ --network host \ newfuture/ddns
-
-
Binary Version (Single file, no Python required)
Go to releases to download the corresponding version
Or use the one‑click installation script to automatically download and install the binary for your platform:
curl -#fSL https://ddns.newfuture.cc/install.sh | shNote: Installing to system directories (e.g., /usr/local/bin) may require root or sudo; if permissions are insufficient, run as
sudo sh.For detailed instructions, see Installation Documentation
-
pip Installation (Requires pip or easy_install)
- Install ddns:
pip install ddnsoreasy_install ddns - Run:
ddns -horpython -m ddns
- Install ddns:
-
Source Code Execution (No dependencies, requires Python environment)
- Clone or download this repository and extract
- Run
python -m ddns
② Quick Configuration
-
Apply for API
token, fill in the correspondingidandtokenfields:- DNSPOD (China): Create token | Detailed Configuration
- Alibaba Cloud DNS: Apply for accesskey | Detailed Configuration
- Alibaba Cloud ESA: Apply for accesskey | Detailed Configuration
- DNS.COM: API Key/Secret | Detailed Configuration
- DNSPOD (International): Get token | Detailed Configuration
- CloudFlare: API Key (Besides
email + API KEY, you can also useToken, requires list Zone permission) | Detailed Configuration - HE.net: DDNS Documentation (Only fill the set password in the
tokenfield,idfield can be left empty) | Detailed Configuration - Huawei Cloud DNS: APIKEY Application (Click Access Keys on the left, then click Create Access Key) | Detailed Configuration
- NameSilo: API Key (Get API Key from API Manager) | Detailed Configuration
- Tencent Cloud DNS: Detailed Configuration
- No-IP: Username and Password (Use No-IP account username and password) | Detailed Configuration
- Custom Callback: For parameter configuration, please refer to the custom callback configuration instructions below
-
Modify the configuration file,
ipv4andipv6fields for domains to be updated, refer to configuration instructions for details
Detailed Configuration
All fields can be configured through three methods, with priority: Command Line Parameters > JSON Configuration File > Environment Variables
- Command Line Parameters
ddns --key=value(useddns -hfor details), highest priority - JSON Configuration File (null values are considered valid and will override environment variable settings; if no corresponding key exists, environment variables will be used)
- Environment Variables with DDNS_ prefix plus key in uppercase or lowercase, dots converted to underscores (
${ddns_id}or${DDNS_ID},${DDNS_LOG_LEVEL})
📖 Environment Variables Documentation: See Environment Variables Configuration for detailed usage and examples of all environment variables
config.json Configuration File
- A template configuration file will be automatically generated on first run
- Use
-cto specify a configuration file (defaults to config.json in the current directory) - Recommended to use editors that support JsonSchema like VSCode for editing configuration files
- See JSON Configuration File Documentation for complete configuration options and examples
ddns -c path/to/config.json
# Or run with Python
python -m ddns -c /path/to/config.json
# Remote configuration file
ddns -c https://ddns.newfuture.cc/tests/config/debug.json
Configuration Parameters Table
| key | type | required | default | description | tips |
|---|---|---|---|---|---|
| id | string | √ | N/A | API Access ID | Cloudflare uses email (leave empty when using Token) HE.net can be left empty Huawei Cloud uses Access Key ID (AK) |
| token | string | √ | N/A | API Auth Token | Some platforms call it secret key, remove when sharing feedback |
| dns | string | No | "dnspod" |
DNS Provider | Alibaba DNS: alidns, Alibaba ESA: aliesa, Cloudflare: cloudflare, DNS.COM: dnscom, DNSPOD China: dnspod, DNSPOD International: dnspod_com, HE.net: he, Huawei Cloud: huaweidns, NameSilo: namesilo, Tencent Cloud: tencentcloud, Tencent EdgeOne: edgeone, No-IP: noip, Custom Callback: callback. Some providers have detailed configuration docs |
| ipv4 | array | No | [] |
IPv4 Domain List | When [], IPv4 address will not be retrieved and updated |
| ipv6 | array | No | [] |
IPv6 Domain List | When [], IPv6 address will not be retrieved and updated |
| index4 | string|int|array | No | "default" |
IPv4 Get Method | Can set network interface, private, public, regex etc. |
| index6 | string|int|array | No | "default" |
IPv6 Get Method | Can set network interface, private, public, regex etc. |
| ttl | number | No | null |
DNS Resolution TTL | Uses DNS default policy when not set |
| proxy | string|array | No | N/A | HTTP Proxy Format: http://host:port |
Multiple proxies tried sequentially until success, DIRECT for direct connection |
| ssl | string|boolean | No | "auto" |
SSL Certificate Verification | true (force verify), false (disable verify), "auto" (auto downgrade) or custom CA certificate file path |
| debug | bool | No | false |
Enable Debug | Debug mode, only effective with command line parameter --debug |
| cache | string|bool | No | true |
Cache Records | Keep enabled normally to avoid frequent updates, default location is ddns.cache in temp directory, can also specify a specific path |
| log | object | No | null |
Log Config (Optional) | Log configuration object, supports level, file, format, datefmt parameters |
index4 and index6 Parameter Description
- Numbers (
0,1,2,3, etc.): The i-th network interface IP - String
"default"(or no this field): System default IP for external access - String
"public": Use public IP (query via public API, simplified URL mode) - String
"url:xxx": Open URLxxx(e.g.,"url:http://ip.sb"), extract IP address from returned data - String
"regex:xxx"Regular expression (e.g.,"regex:192.*"): Extract the first IP address matching fromifconfig/ipconfig, note JSON escaping (\should be written as\\)"192.*"matches all IPs starting with 192 (note:regex:cannot be omitted)- To match
10.00.xxxx, write as"regex:10\\.00\\..*"("\\"JSON escapes to\)
- String
"cmd:xxxx": Execute commandxxxxand use stdout output as target IP - String
"shell:xxx": Use system shell to runxxx, and use stdout result as target IP false: Force disable IPv4 or IPv6 DNS resolution updates- List: Execute index rules in the list sequentially, using the first successful result as target IP
- For example,
["public", "regex:172\\..*"]will first query public API, then look for local IPs starting with 172 if no IP is obtained
- For example,
Custom Callback Configuration
idfield: Fill in callback URL starting with HTTP or HTTPS, HTTPS recommended, supports variable replacementtokenfield: POST request parameters (JSON object or JSON string), use GET request if this field is empty or missing. When JSON parameter values contain constants from the table below, they will be automatically replaced with actual content
For detailed configuration guide, see: Callback Provider Configuration
| Constant Name | Constant Content | Description |
|---|---|---|
__DOMAIN__ |
DDNS Domain | |
__IP__ |
Obtained corresponding type IP address | |
__RECORDTYPE__ |
DDNS Record Type | |
__TTL__ |
DDNS TTL | |
__TIMESTAMP__ |
Request timestamp | With decimal |
Configuration Example
{
"$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
"id": "12345",
"token": "mytokenkey",
"dns": "dnspod or dnspod_com or alidns or aliesa or dnscom or cloudflare or he or huaweidns or namesilo or tencentcloud or noip or callback",
"ipv4": ["ddns.newfuture.cc", "ipv4.ddns.newfuture.cc"],
"ipv6": ["ddns.newfuture.cc", "ipv6.ddns.newfuture.cc"],
"index4": 0,
"index6": "public",
"ttl": 600,
"proxy": ["http://127.0.0.1:1080", "DIRECT"],
"log": {
"level": "DEBUG",
"file": "dns.log",
"datefmt": "%Y-%m-%dT%H:%M:%S"
}
}
Configuration Priority and Field Override Relationship
If the same configuration item is set in multiple places, the following priority rules apply:
- Command Line Parameters: Highest priority, overrides all other settings
- JSON Configuration File: Between command line and environment variables, overrides environment variable settings
- Environment Variables: Lowest priority, used when not set by other methods
Advanced Usage:
- JSON configuration file can contain only partial fields, missing fields will use environment variables
- Environment variables support both uppercase and lowercase formats
- Support for nested configuration through dot notation converted to underscores
Scheduled Tasks
Use built-in task command to set up scheduled tasks (checks IP every 5 minutes by default for automatic updates)
DDNS provides a built-in task subcommand for managing scheduled tasks with cross-platform automated deployment:
Basic Usage
# Install scheduled task (default 5-minute interval)
ddns task --install --dns dnspod --id your_id --token your_token --ipv4 your.domain.com
# Check task status
ddns task --status
# Uninstall scheduled task
ddns task --uninstall
Supported Systems
- Windows: Uses Task Scheduler
- Linux: Automatically selects systemd or crontab
- macOS: Uses launchd
Advanced Management
# Install with custom interval (minutes)
ddns task --install 10 -c /etc/ddns/config.json
# Enable/disable tasks
ddns task --enable
ddns task --disable
New Feature Advantages:
- ✅ Cross-platform automatic system detection
- ✅ Automatically overwrites existing tasks without manual uninstallation
- ✅ Supports all DDNS configuration parameters
- ✅ Unified command-line interface
For detailed configuration guide, see: CLI Parameters Documentation
Docker
Docker images, without additional parameters, have a scheduled task enabled by default that runs every 5 minutes
FAQ
Windows Server [SSL: CERTIFICATE_VERIFY_FAILED]
Windows Server default security policy will prohibit any untrusted SSL certificates. You can manually add the corresponding certificates #56
Use the system's built-in IE browser to visit the corresponding API once:
- alidns: https://alidns.aliyuncs.com
- aliesa: https://esa.cn-hangzhou.aliyuncs.com
- cloudflare: https://api.cloudflare.com
- dns.com: https://www.dns.com
- dnspod.cn: https://dnsapi.cn
- dnspod international: https://api.dnspod.com
- Huawei DNS: https://dns.myhuaweicloud.com
Troubleshooting and Feedback
- First confirm whether it's a system/network environment issue
- Search for similar issues in issues
- If neither of the above can solve the problem or you're sure it's a bug, create a new issue here
- Enable
--debug - Include these contents: running version and method, system environment, error logs, configuration file with id/token removed
- For source code execution, specify the Python environment used
- Enable