
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
🔗 A tiny (< 500B), 0-dependency, immutable URL library, backed by the native whatwg URL. 🎉 Now with immutable `Headers` support!
🔗 A tiny (< 500B), 0-dependency, immutable URL library, backed by the native whatwg URL. 🎉 Now with immutable Headers support!
npm install immurl
Because immurl uses the native whatwg URL API under the hood you'll need a polyfill to support environments that don't implement this API eg. IE11.
ImmutableURLImmutableURL works as you expect, it contains all of the properties of the native URL API.
import { ImmutableURL } from 'immurl';
const url = new ImmutableURL('https://example.com');
console.log(url.href); // 'https://example.com'
// Set properties with the .set() method
let newUrl = url.set('pathname', '/login');
// Because the set API is immutable you can chain calls to .set()
newUrl = url.set('pathname', '/bar').set('hash', '#heading'); // https://example.com/bar#heading
ImmutableURLSearchParamsimmurl also contains an immutable version of the URLSearchParams API; ImmutableURLSearchParams.
The API for ImmutableURLSearchParams is exactly the same as the native version except the methods that usually mutate (.append(), .delete(), .sort()) return a new ImmutableURLSearchParams instance.
import { ImmutableURLSearchParams } from 'immurl';
let params = new ImmutableURLSearchParams('q=URLUtils.searchParams&topic=api');
params = params.append('foo', 'bar').delete('q'); // topic=api&foo=bar
The searchParams property of ImmutableURL returns an ImmutableURLSearchParams.
const url = new ImmutableURL('https://example.com?foo=bar');
const newParams = url.searchParams
.append('q', 'search-term')
.set('foo', 'fuz')
.sort();
// url.searchParams is unaffected (thanks to immutability 🎉)
// We can pass our newParams into url.set() to create a new url with the updated params
const newUrl = url.set('searchParams', newParams);
// The following code is equvalent to the above
const newUrl2 = url.set(
'searchParams',
url.searchParams.append('q', 'search-term').set('foo', 'fuz').sort()
);
ImmutableHeadersNot strictly related to whatg URLs, but it's shoehorned in here because it's kinda related and they're usually used together.
import { ImmutableHeaders } from 'immurl';
const headers = new ImmutableHeaders({
foo: 'bar'
});
const newHeaders = headers.set('foo', 'fuz');
console.log(headers.get('foo')); // Logs "bar"
console.log(newHeaders.get('foo')); // Logs "fuz"
See the docs at https://immurl.netlify.app/
FAQs
🔗 A tiny (< 500B), 0-dependency, immutable URL library, backed by the native whatwg URL. 🎉 Now with immutable `Headers` support!
We found that immurl demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.