Skip to main content
The library works in all JavaScript runtimes with automatic runtime detection.

Runtime support

@layered/dns-records is designed to work seamlessly across all JavaScript runtimes:
  • Node.js - Full support with multiple resolver options
  • Browsers - Full support using DNS over HTTPS
  • Deno - Full support with fetch-based resolvers
  • Bun - Full support with fetch-based resolvers
  • CloudFlare Workers - Full support with optimized resolver selection

DNS resolver compatibility

Different DNS resolvers are available depending on your runtime environment.
Node.js supports all DNS resolvers:
import { getDnsRecords } from '@layered/dns-records'

// Using node-dns (default in Node.js)
const records1 = await getDnsRecords('example.com', 'A')

// Using node-dig (requires dig command)
const records2 = await getDnsRecords('example.com', 'TXT', 'node-dig')

// Using cloudflare-dns
const records3 = await getDnsRecords('example.com', 'MX', 'cloudflare-dns')

// Using google-dns
const records4 = await getDnsRecords('example.com', 'AAAA', 'google-dns')
node-dns is automatically selected as the default resolver in Node.js environments.

Automatic resolver selection

The library automatically selects the best DNS resolver for your runtime environment.
import { getDnsRecords, getAllDnsRecords } from '@layered/dns-records'

// Resolver is automatically selected based on runtime
const records = await getDnsRecords('example.com', 'A')
const allRecords = await getAllDnsRecords('example.com')

Selection logic

The resolver selection follows this priority:
  1. Node.js - Uses node-dns (native Node.js DNS module)
  2. CloudFlare Workers - Uses cloudflare-dns (optimized for CF infrastructure)
  3. Other runtimes - Uses google-dns (works everywhere with fetch)
The automatic resolver selection is implemented in get-dns-records.ts:5-13:
function bestDnsResolverForThisRuntime(): string {
  if (globalThis.process?.release?.name === 'node') {
    return 'node-dns'
  } else if (globalThis.navigator?.userAgent === 'Cloudflare-Workers') {
    return 'cloudflare-dns'
  } else {
    return 'google-dns'
  }
}

Resolver comparison

Choose the right resolver based on your runtime environment and requirements.
ResolverSpeedRuntime requirementNotes
node-dnsFastNode.js onlyUses native DNS module
node-digFastNode.js + dig commandRequires dig installed
cloudflare-dnsFastRequires fetchOptimized for CF Workers
google-dnsFastRequires fetchUniversal fallback
deno-dns-Deno onlyNot yet implemented

Example: Universal DNS lookup

Create a DNS lookup function that works in any runtime:
import { getDnsRecords } from '@layered/dns-records'

export async function universalDnsLookup(domain: string, type: string = 'A') {
  try {
    // Resolver is automatically selected
    const records = await getDnsRecords(domain, type)
    return {
      success: true,
      records,
      count: records.length
    }
  } catch (error) {
    return {
      success: false,
      error: error.message
    }
  }
}

// Works in Node.js, browsers, Deno, Bun, CloudFlare Workers
const result = await universalDnsLookup('example.com', 'TXT')
console.log(result)

Build docs developers (and LLMs) love