URI.js URI/IRI Parser

4.4.1 · active · verified Sun Apr 19

uri-js is a comprehensive JavaScript library designed for parsing, validating, resolving, normalizing, and comparing URIs and IRIs, strictly adhering to RFC 3986 (URI) and RFC 3987 (IRI) specifications. It also incorporates support for IDNA (RFC 5890), IPv6 Address (RFC 5952), and IPv6 Zone Identifier (RFC 6874). The current stable version is 4.4.1. The library is actively maintained, with a focus on robust RFC compliance and broad environment compatibility (browsers, Node.js). Key differentiators include its scheme-extendable architecture, extensive test suite, and compact size (6.4kb gzipped, 17kb deflated), making it a reliable choice for applications requiring precise URI manipulation without significant overhead. It offers granular control over parsing and serialization through an extensive options object.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates the core functionalities of URI.js including parsing, serializing, resolving, normalizing, and comparing URIs, alongside its specific support for Internationalized Resource Identifiers (IRIs).

import { parse, serialize, resolve, normalize, equal } from 'uri-js';

const exampleUri = "uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body";
const parsed = parse(exampleUri);

console.log("Parsed URI:", parsed);
// Expected: { scheme: 'uri', userinfo: 'user:pass', host: 'example.com', port: 123, path: '/one/two.three', query: 'q1=a1&q2=a2', fragment: 'body' }

const serialized = serialize({ scheme: "http", host: "example.com", fragment: "footer" });
console.log("Serialized URI:", serialized);
// Expected: http://example.com/#footer

const resolved = resolve("uri://a/b/c/d?q", "../../g");
console.log("Resolved URI:", resolved);
// Expected: uri://a/g

const normalized = normalize("HTTP://ABC.com:80/%7Esmith/home.html");
console.log("Normalized URI:", normalized);
// Expected: http://abc.com/~smith/home.html

// Demonstrating IRI support
const iriExample = "http://examplé.org/rosé";
const uriFromIri = serialize(parse(iriExample));
console.log("IRI to URI (punycode + escape):
", uriFromIri);
// Expected: http://xn--exampl-gva.org/ros%C3%A9

const iriFromUri = serialize(parse(uriFromIri), { iri: true });
console.log("URI to IRI (unescape punycode + percent):
", iriFromUri);
// Expected: http://examplé.org/rosé

console.log("Equality check:", equal("example://a/b/c/%7Bfoo%7D", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d"));
// Expected: true

view raw JSON →