
is-localhost-ip
Zero-dependency Node.js utility that checks whether a hostname or IPv4/IPv6 address refers to the local machine.
This package aims to be strict and comprehensive:
- Validates input as an IP address or a syntactically valid hostname (including bracketed IPv6).
- Treats private/loopback/link-local ranges as local.
- Optionally verifies the address exists on the current machine by attempting to bind to it.
- Falls back to DNS resolution, so it works with hostnames mapped in
/etc/hosts or a local resolver.
Installation
npm i is-localhost-ip
yarn add is-localhost-ip
pnpm add is-localhost-ip
Requires Node.js >=18.
Usage
const isLocalhost = require("is-localhost-ip");
(async () => {
await isLocalhost("127.0.0.1");
await isLocalhost("::ffff:127.0.0.1");
await isLocalhost("192.168.0.12");
await isLocalhost("192.168.0.12", true);
await isLocalhost("184.55.123.2");
await isLocalhost("tino.local");
await isLocalhost("localhost");
await isLocalhost("microsoft.com");
})();
API
isLocalhost(ipOrHostname, canBind?)
Returns a Promise<boolean>.
ipOrHostname (string): IP address (v4/v6) or a hostname.
canBind (boolean, default false): when true, additionally checks that the local machine can bind to the
address (i.e., it is configured on a local interface).
The function throws for invalid inputs (non-string values or syntactically invalid hostnames).
Caveats
Internationalized domain names (IDNs) are not supported. If you need IDNs, use
Punycode.js (or another punycode implementation) to convert the input
to ASCII before calling this function:
const isLocalhost = require("is-localhost-ip");
const punycode = require("punycode");
(async () => {
await isLocalhost(punycode.toASCII("свобода.рф"));
await isLocalhost(punycode.toASCII("私の.家"));
})();
License
is-localhost-ip is available under the MIT license.