npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

domainarr

v0.0.1

Published

DNS sync CLI for Pi-hole and Cloudflare

Readme

Domainarr

DNS sync CLI for managing Pi-hole and Cloudflare DNS records together.

Keep your local Pi-hole DNS entries synchronized with Cloudflare DNS, enabling split-horizon DNS where local devices resolve to internal IPs while external clients use Cloudflare.

Table of Contents

Features

  • Dual-provider sync: Manage DNS records in both Pi-hole and Cloudflare from a single CLI
  • Pi-hole as source of truth: Sync command pushes Pi-hole records to Cloudflare
  • Backup & restore: Create timestamped backups and restore when needed
  • Interactive setup: domainarr init guides you through configuration
  • Idempotent operations: Safe to run multiple times without duplicating records

Installation

# Clone and build
git clone https://github.com/ryanbas21/domainarr.git
cd domainarr
pnpm install
pnpm build

# Link globally (optional)
pnpm link --global

Quick Start

  1. Configure your Pi-hole and Cloudflare credentials:

    domainarr init

    This creates ~/.config/domainarr/config.json with your settings.

  2. Add a DNS record to both providers:

    domainarr add homelab.example.com 192.168.1.100
  3. List all records with sync status:

    domainarr list
  4. Sync Pi-hole to Cloudflare:

    domainarr sync

Commands

| Command | Description | |---------|-------------| | domainarr add <domain> <ip> | Add DNS record to both Pi-hole and Cloudflare | | domainarr remove <domain> | Remove DNS record from both providers | | domainarr list | List all records with sync status | | domainarr sync | Sync Pi-hole records to Cloudflare (Pi-hole is source of truth) | | domainarr backup | Create a timestamped backup | | domainarr restore [file] | Restore from a backup file | | domainarr init | Interactive setup wizard |

Configuration

Configuration is stored at ~/.config/domainarr/config.json:

{
  "pihole": {
    "url": "http://pihole.local",
    "password": "your-pihole-password"
  },
  "dnsProvider": {
    "type": "cloudflare",
    "apiToken": "your-cloudflare-api-token",
    "zoneId": "your-zone-id",
    "zone": "example.com"
  },
  "backup": {
    "path": "/path/to/backups"
  }
}

Pi-hole Setup

  • Requires Pi-hole v6+ with REST API enabled
  • Password is your Pi-hole web interface password

Cloudflare Setup

  1. Create an API token at Cloudflare Dashboard
  2. Grant Zone:DNS:Edit permissions for your zone
  3. Find your Zone ID on the zone overview page

Backup & Restore

Create backups before making bulk changes:

# Create backup
domainarr backup
# Output: Backup saved to /path/to/backups/domainarr-backup-2024-01-15T10-30-00-000Z.json

# List available backups
domainarr restore
# Shows list of available backup files

# Restore from specific backup
domainarr restore domainarr-backup-2024-01-15T10-30-00-000Z.json

Backups include records from both Pi-hole and Cloudflare.

License

ISC