{"id":36632757,"url":"https://github.com/cibrandocampo/ovh-dyndns-client","last_synced_at":"2026-03-12T01:06:11.175Z","repository":{"id":185366775,"uuid":"479100374","full_name":"cibrandocampo/ovh-dyndns-client","owner":"cibrandocampo","description":"DynDNS Client for OVH","archived":false,"fork":false,"pushed_at":"2026-03-01T02:26:05.000Z","size":393,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-01T05:55:56.576Z","etag":null,"topics":["ipify-python","network","ovh-api"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cibrandocampo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-07T18:16:46.000Z","updated_at":"2026-03-01T02:26:08.000Z","dependencies_parsed_at":"2025-07-14T15:11:42.318Z","dependency_job_id":"7244a437-9273-4923-8bd6-8031f1145c34","html_url":"https://github.com/cibrandocampo/ovh-dyndns-client","commit_stats":null,"previous_names":["cibrandocampo/ovh-dyndns-client"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/cibrandocampo/ovh-dyndns-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cibrandocampo%2Fovh-dyndns-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cibrandocampo%2Fovh-dyndns-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cibrandocampo%2Fovh-dyndns-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cibrandocampo%2Fovh-dyndns-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cibrandocampo","download_url":"https://codeload.github.com/cibrandocampo/ovh-dyndns-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cibrandocampo%2Fovh-dyndns-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30410366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T00:40:14.898Z","status":"ssl_error","status_checked_at":"2026-03-12T00:40:08.439Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ipify-python","network","ovh-api"],"created_at":"2026-01-12T09:40:27.985Z","updated_at":"2026-03-12T01:06:11.170Z","avatar_url":"https://github.com/cibrandocampo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DynDNS Client for OVH\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/cibrandocampo/ovh-dyndns-client\"\u003e\u003cimg src=\"https://img.shields.io/badge/GitHub-Repository-blue?logo=github\" alt=\"GitHub\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/cibrandocampo/ovh-dyndns-client\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker%20Hub-Image-blue?logo=docker\" alt=\"Docker Hub\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/cibrandocampo/ovh-dyndns-client/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/cibrandocampo/ovh-dyndns-client\" alt=\"GitHub release\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.14-blue?logo=python\" alt=\"Python\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/cibrandocampo/ovh-dyndns-client\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/cibrandocampo/ovh-dyndns-client\" alt=\"Docker Pulls\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/cibrandocampo/ovh-dyndns-client\"\u003e\u003cimg src=\"https://codecov.io/gh/cibrandocampo/ovh-dyndns-client/graph/badge.svg\" alt=\"codecov\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/cibrandocampo/ovh-dyndns-client/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License MIT\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n*Your IP changes. Your domains shouldn't.* Point your OVH domains to a dynamic IP and forget about it — one container, no external dependencies, your server, your rules.\n\n![Dashboard Status](https://raw.githubusercontent.com/cibrandocampo/ovh-dyndns-client/main/docs/dashboard-status.png)\n\n---\n\n## A closer look — How it works?\n\n### Hosts — one entry per domain record\n\n\u003cimg src=\"https://raw.githubusercontent.com/cibrandocampo/ovh-dyndns-client/main/docs/dashboard-hosts.png\" align=\"left\" width=\"380\" alt=\"Hosts management screen with a list of configured OVH DynHost entries and their credentials\"/\u003e\n\nEach host corresponds to a DynHost entry in your OVH control panel. Add as many as you need — subdomains, multiple domains, different zones — each with its own OVH credentials. The client updates them all in parallel on every IP change.\n\nCreating a host takes seconds: hostname, OVH username, and password. That is all the client needs to keep the record in sync. Hosts can be edited or removed at any time without restarting the service.\n\n\u003cbr clear=\"left\"/\u003e\n\n---\n\n### Settings — tune the behaviour without touching a config file\n\n\u003cimg src=\"https://raw.githubusercontent.com/cibrandocampo/ovh-dyndns-client/main/docs/dashboard-settings.png\" align=\"right\" width=\"380\" alt=\"Settings screen with update interval selector and log level dropdown\"/\u003e\n\nThe check interval and log verbosity can be adjusted from the web interface at any time — no restart, no editing environment variables. Lower the interval if your IP changes frequently; raise it if you want to reduce external API calls.\n\nLog level controls how much detail appears in the container logs, useful when troubleshooting a failed update or verifying that a specific host was reached.\n\n\u003cbr clear=\"right\"/\u003e\n\n---\n\n## Features\n\n- **Web Interface** — Manage hosts, view status and history from a browser\n- **REST API** — Full-featured API with JWT authentication\n- **SQLite Database** — Persistent storage, no external dependencies\n- **Auto-updates** — Detects IP changes and updates DNS records automatically\n- **Auto-retry** — Failed updates are retried on the next cycle\n- **Docker-ready** — Multi-architecture support (amd64, arm64, arm/v7)\n\n---\n\n## Quick Start\n\n1. **Create `docker-compose.yaml`:**\n\n```yaml\nservices:\n  ovh-dyndns-client:\n    image: cibrandocampo/ovh-dyndns-client:stable\n    container_name: ovh-dyndns-client\n    restart: always\n    environment:\n      - JWT_SECRET=your-secret-key-min-32-chars-long!\n    ports:\n      - \"8000:8000\"\n    volumes:\n      - ./data:/app/data\n```\n\n2. **Run:**\n\n```bash\ndocker compose up -d\n```\n\n3. **Access:** Open http://localhost:8000\n\nDefault credentials: `admin` / `admin` (password change required on first login)\n\n---\n\n## Quality\n\nEvery change goes through a CI pipeline (GitHub Actions) with no shortcuts:\n\n- **Lint**: ruff check — enforces code style and catches common errors\n- **Format**: ruff format — consistent formatting across the codebase\n- **Tests**: pytest with a minimum **90% coverage** gate enforced in CI\n\nThe Codecov badge at the top of this page reflects the current state.\n\n---\n\n## Docker images\n\nPre-built multi-arch images (linux/amd64, linux/arm64, linux/arm/v7) are published to Docker Hub automatically.\n\n| Tag | When |\n|-----|------|\n| `latest` | Every push to `main` |\n| `stable` + `vX.Y.Z` | On GitHub release |\n\nImages are also rebuilt weekly to pick up base-image and dependency security patches.\n\n---\n\n## Documentation\n\n- [API Reference](https://github.com/cibrandocampo/ovh-dyndns-client/blob/main/docs/API.md) — REST API endpoints and examples\n- [Configuration](https://github.com/cibrandocampo/ovh-dyndns-client/blob/main/docs/CONFIGURATION.md) — Environment variables and settings\n- [Development](https://github.com/cibrandocampo/ovh-dyndns-client/blob/main/docs/DEVELOPMENT.md) — Architecture, dev setup, and Claude Code workflow\n\n## Development\n\nThe development environment runs entirely inside Docker — no Python on the host. See [docs/DEVELOPMENT.md](https://github.com/cibrandocampo/ovh-dyndns-client/blob/main/docs/DEVELOPMENT.md) for the full setup, including how to run tests, linters, and install the pre-commit hook.\n\n## Built with Claude Code\n\nThis project is developed with [Claude Code](https://claude.ai/code), Anthropic's AI coding assistant. Custom skills and commands are provided in `.claude/` to maintain project conventions and support a structured dev workflow. See [docs/DEVELOPMENT.md](https://github.com/cibrandocampo/ovh-dyndns-client/blob/main/docs/DEVELOPMENT.md#claude-code) for details.\n\n## Links\n\n- [GitHub Repository](https://github.com/cibrandocampo/ovh-dyndns-client)\n- [Docker Hub](https://hub.docker.com/r/cibrandocampo/ovh-dyndns-client)\n- [OVH DynHost Documentation](https://docs.ovh.com/gb/en/domains/hosting_dynhost/)\n\n## Support\n\n- **Issues**: [GitHub Issues](https://github.com/cibrandocampo/ovh-dyndns-client/issues)\n- **Email**: [hello@cibran.es](mailto:hello@cibran.es)\n\n## License\n\nReleased under the [MIT License](LICENSE) © 2022 Cibrán Docampo Piñeiro.\n\nYou are free to **use**, **modify**, **distribute**, and **self-host** this software — personally or commercially — as long as the original copyright notice is preserved. No warranty is provided.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcibrandocampo%2Fovh-dyndns-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcibrandocampo%2Fovh-dyndns-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcibrandocampo%2Fovh-dyndns-client/lists"}