DNS Related APIs
Symbol
dns
namespace dns
- function getCacheStats(): { cacheHitsCompleted: number; cacheHitsInflight: number; cacheMisses: number; errors: number; size: number; totalCount: number }
Experimental API
- function lookup(hostname: string, options?: { backend: 'libc' | 'c-ares' | 'system' | 'getaddrinfo'; family: 0 | 4 | 6 | 'IPv4' | 'IPv6' | 'any'; flags: number; port: number; socketType: 'udp' | 'tcp' }): Promise<DNSLookup[]>
Lookup the IP address for a hostname
Uses non-blocking APIs by default
@param hostnameThe hostname to lookup
@param optionsOptions for the lookup
Example
const [{ address }] = await Bun.dns.lookup('example.com');
Filter results to IPv4:
import { dns } from 'bun'; const [{ address }] = await dns.lookup('example.com', {family: 4}); console.log(address); // "123.122.22.126"
Filter results to IPv6:
import { dns } from 'bun'; const [{ address }] = await dns.lookup('example.com', {family: 6}); console.log(address); // "2001:db8::1"
DNS resolver client
Bun supports three DNS resolvers:
c-ares
- Uses the c-ares library to perform DNS resolution. This is the default on Linux.system
- Uses the system's non-blocking DNS resolver API if available, falls back togetaddrinfo
. This is the default on macOS and the same asgetaddrinfo
on Linux.getaddrinfo
- Uses the posix standardgetaddrinfo
function. Will cause performance issues under concurrent loads.
To customize the DNS resolver, pass a
backend
option todns.lookup
:import { dns } from 'bun'; const [{ address }] = await dns.lookup('example.com', {backend: 'getaddrinfo'}); console.log(address); // "19.42.52.62"
Experimental API
Prefetch a hostname.
This will be used by fetch() and Bun.connect() to avoid DNS lookups.
@param hostnameThe hostname to prefetch
import { dns } from 'bun'; dns.prefetch('example.com'); // ... something expensive await fetch('https://example.com');