Parse, format and compare IPv4/6 addresses


562.1.02 years ago5 years agoMinified + gzip package size for @hownetworks/ipv46 in KB


ipv46 CircleCI

ipv46 is a small JavaScript library for parsing, formatting and sorting IPv4/6 addresses. It works on both Node.js and browser environments.


$ npm install @hownetworks/ipv46


const { IP } = require("@hownetworks/ipv46");


Returns the given string parsed into an IPv4 or IPv6 address object. If the string is not a valid address then the result is null.

IP.parse("");             // IPv4 { ... }
IP.parse("2001:db8::1");           // IPv6 { ... }
IP.parse("non-address");           // null

IP.parse supports IPv6 addresses with embedded IPv4 addresses.

IP.parse("2001:db8::");   // IPv6 { ... }


Valid IPv4/6 address objects have their version as an attribute.

IP.parse("").version;     // 4
IP.parse("2001:db8::1").version;   // 6


Address objects implement the toString method for turning the addresses back into strings. The strings are printed lower-cased sans any extra leading zeroes. IPv6 formatting follows the RFC 5952 recommendations, except that formatting doesn't output IPv6 addresses with embedded IPv4 addresses.

IP.parse("").toString();            // ''
IP.parse("2001:db8::1").toString();          // '2001:db8::1'
IP.parse("2001:db8::").toString();  // '2001:db8::c000:201'


Compare and sort addresses. IP.cmp(a, b) returns:

  • -1 if a is sorted before b
  • 0 if a equals b
  • 1 otherwise
const a = IP.parse("");
const b = IP.parse("");

IP.cmp(a, a);         // 0
IP.cmp(a, b);         // -1
IP.cmp(b, a);         // 1

IPv4 addresses are always sorted before IPv6 addresses.

const ipv4 = IP.parse("");
const ipv6 = IP.parse("2001:db8::1");

IP.cmp(ipv4, ipv6);   // -1

Parsed addresses get normalized. For example extra leading zeroes don't matter in comparisons.

const a = IP.parse("2001:0db8::1");
const b = IP.parse("2001:0db8:0000::0001")

IP.cmp(a, b);         // 0

IP.cmp is directly compatible with Array#sort.

const a = IP.parse("2001:0db8::2");
const b = IP.parse("2001:0db8::1")
const c = IP.parse("2001:0db8::")

[a, b, c].sort(IP.cmp);  // [c, b, a]

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.