PHPackages                             geisi/laravel-dyndns - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. geisi/laravel-dyndns

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

geisi/laravel-dyndns
====================

Laravel DynDns helps you to publish your local public IP without using any external DynDns services

0.1.1(4y ago)010[3 issues](https://github.com/geisi/laravel-dyndns/issues)[3 PRs](https://github.com/geisi/laravel-dyndns/pulls)MITPHPPHP ^8.0

Since Jan 23Pushed 2y ago1 watchersCompare

[ Source](https://github.com/geisi/laravel-dyndns)[ Packagist](https://packagist.org/packages/geisi/laravel-dyndns)[ Docs](https://github.com/geisi/laravel-dyndns)[ GitHub Sponsors](https://github.com/geisi)[ RSS](/packages/geisi-laravel-dyndns/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (13)Versions (6)Used By (0)

Laravel DynDns easily replaces any external DynDNS Service
==========================================================

[](#laravel-dyndns-easily-replaces-any-external-dyndns-service)

[![Latest Version on Packagist](https://camo.githubusercontent.com/4b43750ba1508fbca9946be5b164097b84a0f7f524be83d2591cb958309a8731/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f67656973692f6c61726176656c2d64796e646e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/geisi/laravel-dyndns)[![GitHub Tests Action Status](https://camo.githubusercontent.com/186d9a4a8431dc7a447b056d7f2e4e7317085c13818899b6bd5bca85577437b4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f67656973692f6c61726176656c2d64796e646e732f72756e2d74657374733f6c6162656c3d7465737473)](https://github.com/geisi/laravel-dyndns/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/4e222edc0ea3bb9ba52c034c84513e2a4486c52b1bf9dc61ef4fd9d64862b465/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f67656973692f6c61726176656c2d64796e646e732f436865636b253230262532306669782532307374796c696e673f6c6162656c3d636f64652532307374796c65)](https://github.com/geisi/laravel-dyndns/actions?query=workflow%3A%22Check+%26+fix+styling%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/3cc618b322643cd734ef2466051ed33b7f2c01fb5a508cc8677ffb7385eeb827/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f67656973692f6c61726176656c2d64796e646e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/geisi/laravel-dyndns)

**Please take care this package is currently in beta state. It is not recommended using it in production.**

Laravel DynDNS is a lightweight package to help you to publish your local public IP to DNS records without using any external DynDNS service. Typically, this is needed when you want to expose any service from your local network to the internet. Your ISP provider might change your public IP address after some time.

This package keeps your DNS records in sync with your public IP address.

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require geisi/laravel-dyndns
```

You have to publish the config file with:

```
php artisan vendor:publish --tag="dyndns-config"
```

In the config file you have to set up all of your domains you want to sync with your local public IP address. By default our Cloudflare DynDNS adapter is used. If you don't already have a Cloudflare Account you can create a Cloudflare Account at [cloudflare.com](https://www.cloudflare.com/) for free.

When you have finished the domain setup process. You can proceed with configuring the package.

```
return [
/*
     * List of all domains which should be synchronized with the systems public IP address
     */
    'domains' => [
        [
            /*
             * Your full domain name e.g. dyndns.foo-bar.com
             */
            'domain_name' => env('DYNDNS_DOMAIN_NAME', ''),
            'dns_service' => [
                /*
                 * The dns service which you want to use to serve your Dns records. By default, this package runs with the Cloudflare Dns service.
                 * If you don't want to use Cloudflare you can create your own implementation.
                 * Your class has to implement the Geisi\DynDns\Contracts\HandlesDynDnsRecords interface.
                 */
                'adapter' => \Geisi\DynDns\Services\CloudflareDynDNS::class,

                /*
                 * The Cloudflare zone id this can be left empty. For performance reasons it is recommended to configure a zone id.
                 */
                'zone_id' => env('DYNDNS_ZONE_ID', ''),

                /*
                 * The Cloudflare dns record id this can be left empty. For performance reasons it is recommended to configure a dns record id.
                 */
                'record_id' => env('DYNDNS_RECORD_ID', ''),

                /*
                 * The Cloudflare DNS record details look Cloudflare API documentation for reference.
                 */
                'record_details' => [
                    'type' => 'A',
                    'proxied' => false,
                    'ttl' => 1
                ],

                /*
                 * The Cloudflare API token.
                 */
                'api_token' => env('CLOUDFLARE_TOKEN', '')
            ],
            /*
             * The public IP Address Resolver Service. By default, we are using the opendns.com resolver to query the current public IP address.
             * If you don't want to use opendns.com you can create your own implementation.
             * Your class has to implement the Geisi\DynDns\Contracts\DiscoversIpAddress interface.
             */
            'resolver_service' => Geisi\DynDns\Services\OpenDNSPublicIPResolver::class,
            /*
             * The email address which should be notified when the public IP address changes
             * leave empty if you want to disable mail notifications
             */
            'notification_email' => env('DYNDNS_NOTIFICATION_EMAIL', '')
        ]
    ]
];
```

When you just want a quick setup add following two entries to your .env file:

```
DYNDNS_DOMAIN_NAME="dyndns-subdomain.your-domain.com"
CLOUDFLARE_TOKEN=""

```

Usage
-----

[](#usage)

You can start the dyndns sync process with following command:

```
php artisan dyndns:run
```

We recommend using the laravel scheduler in the App/Console/Kernel.php file to keep your domains in sync with your IP address. Just add following line to the Kernel.php file schedule method:

```
 $schedule->command('dyndns:run')->everyMinute();
```

When you want to trigger the resync outside of the console you can use the Geisi\\DynDns\\Facades\\DynDns facade.

```
Geisi\DynDns\Facades\DynDns::handle();
```

Notifications
-------------

[](#notifications)

When you want to be informed when your public IP address has changed you can set the **notification\_email** configuration per domain. Please have in mind that you have to add a working mail configuration for sending out emails.

Events
------

[](#events)

Laravel DynDns triggers a `Geisi\DynDns\Events\DynDNSUpdated` event everytime your IP address changes. When the sync process fails a `Geisi\DynDns\Events\DynDNSUpdateError` event is dispatched.

You can listen for those events and implement your own application logic.

Adding new DNS Services
-----------------------

[](#adding-new-dns-services)

Technically every single DNS service which can be configured with a TTL by 1 minute can be used as your DynDNS service. Today we only support Cloudflare out of the box, but you can easily add another services by extending the **Geisi\\DynDns\\DynDnsProvider** class. You only have to implement two methods **getRecordIp** and **updateRecord**.

After creating a new DynDNSProvider you can add it to your domains configuration.

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [geisi](https://github.com/geisi)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 52.2% 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

1621d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/01edc74b3b6f2ecfe6106f68787500e5c46c51acc7fbe7aa04bb378c9190c79b?d=identicon)[geisi](/maintainers/geisi)

---

Top Contributors

[![geisi](https://avatars.githubusercontent.com/u/10728579?v=4)](https://github.com/geisi "geisi (24 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (11 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (11 commits)")

---

Tags

laravelgeisilaravel-dyndns

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/geisi-laravel-dyndns/health.svg)

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

###  Alternatives

[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.8M47](/packages/spatie-laravel-pdf)[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

329530.5k29](/packages/codewithdennis-filament-select-tree)[worksome/exchange

Check Exchange Rates for any currency in Laravel.

124603.0k](/packages/worksome-exchange)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[stephenjude/laravel-wallet

A simple wallet implementation for Laravel

26611.9k](/packages/stephenjude-laravel-wallet)[tarfin-labs/event-machine

Event-driven state machines for Laravel with event sourcing, type-safe context, and full audit trail.

199.4k](/packages/tarfin-labs-event-machine)

PHPackages © 2026

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