Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


URI parsing and manipulation for node.js and the browser.

Build Status


Pass any URL into the constructor:

var uri = new Uri('')

Use property methods to get at the various parts:

uri.protocol()    // http
uri.userInfo()    // user:pass        //
uri.port()        // 81
uri.path()        // /index.html
uri.query()       // q=books
uri.anchor()      // fragment

Property methods accept an optional value to set:

uri.toString()    //'')
uri.toString()    //

Chainable setter methods help you compose strings:

new Uri()
    .setQuery('?page=1')                   // /archives/1979?page=1

new Uri()
    .setQuery('this=that&some=thing')      //

new Uri('')
    .setProtocol('https')                  //

Query param methods

Returns the first query param value for the key:

new Uri('?cat=1&cat=2&cat=3').getQueryParamValue('cat')             // 1

Returns all query param values for the given key:

new Uri('?cat=1&cat=2&cat=3').getQueryParamValues('cat')            // [1, 2, 3]

Internally, query key/value pairs are stored as a series of two-value arrays in the Query object:

new Uri('?a=b&c=d').query().params                  // [ ['a', 'b'], ['c', 'd']]

Add query param values:

new Uri().addQueryParam('q', 'books')               // ?q=books

new Uri('')
    .addQueryParam('testing', '123')
    .addQueryParam('one', 1)                        //

// insert param at index 0
new Uri('?b=2&c=3&d=4').addQueryParam('a', '1', 0)  // ?a=1&b=2&c=3&d=4

Replace every query string parameter named key with newVal:

new Uri().replaceQueryParam('page', 2)     // ?page=2

new Uri('?a=1&b=2&c=3')
    .replaceQueryParam('a', 'eh')          // ?a=eh&b=2&c=3

new Uri('?a=1&b=2&c=3&c=4&c=5&c=6')
    .replaceQueryParam('c', 'five', '5')   // ?a=1&b=2&c=3&c=4&c=five&c=6

Removes instances of query parameters named key:

new Uri('?a=1&b=2&c=3')
    .deleteQueryParam('a')                 // ?b=2&c=3

new Uri('')
    .deleteQueryParam('a', 'eh')           //

Test for the existence of query parameters named key:

new Uri('?a=1&b=2&c=3')
    .hasQueryParam('a')                    // true

new Uri('?a=1&b=2&c=3')
    .hasQueryParam('d')                    // false

Create an identical URI object with no shared state:

var baseUri = new Uri('http://localhost/')

baseUri.clone().setProtocol('https')   // https://localhost/
baseUri                                // http://localhost/

This project incorporates the parseUri regular expression by Steven Levithan.