Skip to content
A validator for domain names and top level domains, driven by and ICANN's generic TLDs.
Find file
Latest commit a4401c7 @cmtt Bumping to 0.2.6
Failed to load latest commit information.
build Bumping to 0.2.6
lib Bumping to 0.2.4
test Bumping to 0.2.4
.gitignore Bumping version to 0.2.1 Bumping to 0.2.6
config.js Bumping to 0.2.5
delete_list.js Minor enhancements, bumping version to 0.1.31
gulpfile.js Bumping to 0.2.6
index.js Bumping to 0.2.3
package.json Bumping to 0.2.6


This module validates domain names and top level domains, making use of the Public Suffix List used internally by modern web browsers.


The module can be installed via npm or by cloning this repository manually.

npm install publicsuffixlist
# - or -
git clone

A current copy of Mozilla's Public Suffix List will be downloaded automatically when npm is used.

After a manual installation, it is necessary to run the download_list.js script in the root folder in order to download this list.

Running the unit tests

Please download and install the Mocha test framework globally (you might have to have superuser rights):

npm install mocha -g

Then run the following command:



var PublicSuffixList = require('publicsuffixlist');

// Create a new PublicSuffixList instance
var psl = new PublicSuffixList(options);

psl.initialize(function (err) { // initialize psl asynchronously or
  // Use the methods described below

psl.initializeSync(); // initialize psl synchronously
// Use the methods described below


filename {string}

Supplies a filename as source for the data file. This will be Mozilla's "effective_tld_names.dat" by default.

buffer {object}

Supplies a buffer as source for the data file.

lines {string[]}

Supplies an array of strings as source for the data file.



Loads all rules from the specified source.


Loads all rules synchronously from the specified source.

In order to use this module, it must be initialized synchronously or asynchronously with a ruleset. By default, the ruleset is loaded from disk.



lookup() returns an object providing the distinct results for the queried string or null in case of an invalid query.

var result = psl.lookup('');

/* result === { domain: 'domain',
              tld: 'com',
              subdomain: 'www' } */

Get the assignable domain from the fully qualified domain name.

var result = psl.domain('');

/* result === '' */
.validateTLD (tld)

Validates the provided top level domain. Returns true or false.

var validTLD = psl.validateTLD('de'); // true
var invalidTLD = psl.validateTLD('ed'); // false
.validate (domainString)

Returns true when the provided domain is valid, otherwise false.

var validDomain = psl.validate(''); // true
var invalidDomain = psl.validate('domain.yz'); // false


Tests are included in the test/ directory. In order to run these, you will need to install the Mocha testing framework and execute the following command:

# - or -
gulp mocha



  • Updating build system using gulp-di

0.2.4, 0.2.5

  • addressing certificate validation issues
  • adding gulp tasks "jshint" and "mocha"


  • correcting a rule lookup issue


  • Adding an initializeSync() method
  • fixed some typing and syntax errors


  • Loading Mozilla's public suffix list by default when nothing else was declared


  • Adding ability to load rules from buffers, files and arrays of rules
  • API change: removing .parse(), asynchronous initialization
  • adding .domain()
  • re-written unit tests
  • changing the publicsuffix list URL


  • adapting to current Node's API changes in order to remove the warning messages
  • updated tests
  • fixed some typing and syntax errors


  • added support for generic TLDs
  • added lookup() and validateTLD()

0.1.1, 0.1.2

  • Removed dependency on Underscore.js
  • added support for automatic installation on the Windows platform


  • first release

Further reading


  • Kristof Csillag disabled certificate validation while installing due to an temporary issue with's SSL certificate
  • Kirill Dmitrenko added loading Mozilla's public suffix list by default (if nothing else was declared)
  • Morton Swimmer forked this library, added a .domain() method and updated the URL of the list
  • Simone Carletti


MIT License.

Something went wrong with that request. Please try again.