PHPackages                             michaelesmith/dyndns-kit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. michaelesmith/dyndns-kit

ActiveLibrary[Framework](/categories/framework)

michaelesmith/dyndns-kit
========================

a framework for creating a dyn dns compatible server

0.1.1(7y ago)049[1 issues](https://github.com/michaelesmith/dyndns-kit/issues)2MITPHPPHP ^7.1

Since Nov 2Pushed 7y ago1 watchersCompare

[ Source](https://github.com/michaelesmith/dyndns-kit)[ Packagist](https://packagist.org/packages/michaelesmith/dyndns-kit)[ RSS](/packages/michaelesmith-dyndns-kit/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (4)Versions (2)Used By (2)

[![Build Status](https://camo.githubusercontent.com/504ae7bc8f0b23c3c1c5be68c0f62ebe61b70e4d127d634a8a87d7a41930e56f/68747470733a2f2f7472617669732d63692e6f72672f6d69636861656c65736d6974682f64796e646e732d6b69742e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/michaelesmith/dyndns-kit)

What is this?
=============

[](#what-is-this)

This is a framework that will allow you to easily create and use a simple DynDNS implementation in PHP while being easily hackable to add new features and processors. This project was born out of my frustration in trying to find a simple PHP DynDNS implementation that would allow me to use Digital Ocean as the backend DNS. This project solved my problem, hopefully it will be useful to someone else.

Install
=======

[](#install)

`composer require "michaelesmith/dyndns-kit"`

Overview
========

[](#overview)

`Server`: basic unit that will try to execute a request

- `Handler`: operates on a specific type of request. A generic handler for typical dyndns requests is provided but you could create one to handle API request for instance.
    - `Transformer`: this transforms a raw request into a `Query`
    - `Authenicator`: this allows us to authenticate the request based on many factors. The included authenticator will use an http basic username and password and can limit users to specific domains.
    - `Processor`: this processes our given query and stores the result.

How do I use it
===============

[](#how-do-i-use-it)

To see a full example usage please refer to the [example project](https://github.com/michaelesmith/dyndns-example).

Basic usage
-----------

[](#basic-usage)

```
$server = new Server([
    new GenericHandler(
        new DynDNSTransformer(),
        new HttpBasicAuthenticator([new RegexUser('testuser', 's3cret', '.+')]),
        new JsonProcessor(__DIR__ . '/var/dns.json')
    ),
]);
$server->execute(Request::createFromGlobals());
```

In this example we use only a single `GenericHandler`, the standard `DynDNSTransformer`, the `HttpBasicAuthenticator` with a single user that will allow any domain and the included `JsonProcessor`. The `JsonProcessor` is probably not very useful in real life but it allows us to easily test this setup without the need for other components. Using the curl example below will create the file dns.json and store the address in it.

More advanced usage
-------------------

[](#more-advanced-usage)

```
$server = new Server([
    new GenericHandler(
        new DynDNSTransformer(),
        new HttpBasicAuthenticator([new RegexUser('testuser', 's3cret', '.+')]),
        new CacheProcessor(
            new DigitalOceanApiProcessor(['example.com'], new DigitalOceanV2(new GuzzleHttpAdapter('my_api_token'))),
            new FilesystemCachePool(new Filesystem(new Local(__DIR__ . '/../var/')))
        )
    ),
]);
$server->execute(Request::createFromGlobals());
```

This example uses the exact same setup as before except for the processor. Here we use a caching processor so only new or updated requests are actually sent to the embedded processor which in this case updates the DNS entry for a domain hosted at Digital Ocean.

Try it out
==========

[](#try-it-out)

Example curl command

`curl "testuser:s3cret@localhost:9001/nic/update?hostname=test.example.com&myip=127.0.0.1"`

Example with multiple hosts

`curl "testuser:s3cret@localhost:9001/nic/update?hostname=test1.example.com,test2.example.com&myip=127.0.0.1"`

Example without IP (if no IP is given the client IP address will be used)

`curl "testuser:s3cret@localhost:9001/nic/update?hostname=test.example.com"`

Other processors
================

[](#other-processors)

- [Cache](https://github.com/michaelesmith/dyndns-processor-cache) - allows an embedded processor to only be called with new or updated requests
- [DigitalOcean](https://github.com/michaelesmith/dyndns-processor-digitalocean) - allows the you to update dns entries via the Digital Ocean API

Contributing
============

[](#contributing)

Have an idea to make something better? Submit a pull request. Need integration of some other backend service? Build it. I would be happy to add a link here. PR's make the open source world turn. 🌎 🌏 🌍 ![:octocat:](https://github.githubassets.com/images/icons/emoji/octocat.png ":octocat:") Happy Coding!

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

2748d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/181546?v=4)[Michael Smith](/maintainers/michaelesmith)[@michaelesmith](https://github.com/michaelesmith)

---

Top Contributors

[![michaelesmith](https://avatars.githubusercontent.com/u/181546?v=4)](https://github.com/michaelesmith "michaelesmith (8 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/michaelesmith-dyndns-kit/health.svg)

```
[![Health](https://phpackages.com/badges/michaelesmith-dyndns-kit/health.svg)](https://phpackages.com/packages/michaelesmith-dyndns-kit)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M17.0k](/packages/laravel-framework)[symfony/framework-bundle

Provides a tight integration between Symfony components and the Symfony full-stack framework

3.6k235.4M9.7k](/packages/symfony-framework-bundle)[laravel/reverb

Laravel Reverb provides a real-time WebSocket communication backend for Laravel applications.

1.5k9.4M48](/packages/laravel-reverb)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

19462.3M1.3k](/packages/drupal-core)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
