Skip to content
Memorable password generator in Node.js
Branch: master
Clone or download
vot v1.0.5: Custom word lists (#8)
* Adding support for custom/word lists
* Improved linting profile
* v1.0.5 updates (readme + package)

wordList option can be specified through CLI or programmatically as:
- JSON file
- text file
- an array of strings
- a string with individual words separated by commas
Latest commit 919fb6b Apr 3, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci v1.0.5: Custom word lists (#8) Apr 3, 2018
.editorconfig Added Testing, Linting, npmignore & Editorconfig Mar 21, 2017
.eslintrc.json v1.0.5: Custom word lists (#8) Apr 3, 2018
cli.js v1.0.5: Custom word lists (#8) Apr 3, 2018
index.js v1.0.5: Custom word lists (#8) Apr 3, 2018
package.json v1.0.5: Custom word lists (#8) Apr 3, 2018 v1.0.5: Custom word lists (#8) Apr 3, 2018


NPM Version NPM Downloads Build status Coveralls coverage

Memorable password generator, inspired by a PERL module powering

Also available in Go: xkpasswd-go

Using as a node module

You can use xkpasswd as a module in your application.


var xkpasswd = require('xkpasswd');


console.log(xkpasswd({complexity: 5, separators: '#+-'}));

console.log(xkpasswd({wordList: __dirname + '/myWordList.json'}));

Using as a command in terminal

You can also use xkpasswd command in your terminal if you install the package globally (npm install xkpasswd -g).


xkpasswd --complexity <number> --separators <string> --pattern <string> --transform <string> --number <number> --wordList <string>

xkp alias for is also provided for convenience. You can use it interchangeably with xkpasswd command.

You can specify complexity argument in accordance with complexity levels table. Defaults to 2.

If specified pattern argument overrides the pattern derived from complexity level.

If separators are provided they are used instead of the standard set (see complexity levels). One separator is used per password, picked randomly from the provided set.

You can set transform option to alternate or uppercase to trigger case transformation.

To generate multiple passwords at once you can specify the desired amount with the number argument. Defaults to 1.

Finally if you'd like to use a custom list of words you can provide it as a JSON file, text file or an array via wordList function.

Using hyphen (-) as a separator

Due to the way the arguments are parsed make sure to use equals sign instead of space if you'd like to use a hyphen (-) as your separator: xkpasswd -s=-.

EXAMPLE Default behaviour

$ xkpasswd

EXAMPLE Specify complexity

$ xkpasswd -c 5

$ xkpasswd -c 6

EXAMPLE Specify custom pattern

$ xkpasswd -p wdwd


EXAMPLE Specify custom word list / dictionary

$ xkpasswd -wordList myWordList.json
$ xkpasswd -dict myWordList.txt


EXAMPLE Specify complexity, custom separators and number of passwords

$ xkpasswd -c 3 -s '#!+' -n 5



Patterns can consist of any combination of words, digits and separators. The first letters (w, d and s respectively) are used in pattern string provided to the password generation function.

For example:

  • w will return a single word (i.e. demographics). Use w for lowercase and W for uppercase.
  • wsd will return a word and a digit, separated by one of the permitted separators (i.e. storm#7)
  • wswsdd will return two words followed by a two digit number, all with separators between (i.e. delates+dissembled+16)

Complexity levels

There are 6 complexity levels specified which can be used to provide default patterns as well as trigger additional features, such as alternate casing between words and expanded sets of separators.

Complexity Pattern Separators
1 wsw #.-=+_
2 wswsw #.-=+_
3 wswswsdd #.-=+_
4 wswswswsdd #.-=+_
5 wswswswswsd #.-=+_!$*:~?
6 ddswswswswswsdd #.-=+_!$*:~?%^&;

In addition level 6 alternates upper and lower case between words.

Release notes


  • Added support for custom word lists
  • Improved linting profile


  • Added Coveralls integration and badge


  • Added tests and linting (thanks @yogendra)


  • Added transform option (thanks @yogendra)


  • Using a cleaned up list of words


  • updated complexity levels
  • fixed uppercase/lowercase transformation
  • cleaned up code and documentation
You can’t perform that action at this time.