PHPackages                             adgodev/xkpasswd-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. adgodev/xkpasswd-php

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

adgodev/xkpasswd-php
====================

Memorable password generator

v1.0.0(6y ago)91.2k1[1 issues](https://github.com/adriangonzales/xkpasswd-php/issues)GPL-2.0-or-laterPHP

Since Mar 13Pushed 6y ago1 watchersCompare

[ Source](https://github.com/adriangonzales/xkpasswd-php)[ Packagist](https://packagist.org/packages/adgodev/xkpasswd-php)[ RSS](/packages/adgodev-xkpasswd-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

xkpasswd
========

[](#xkpasswd)

*Memorable password generator, inspired by a PERL module powering xkpasswd.net/s/*

Based heavily on the [xkpasswd-node](https://github.com/vot/xkpasswd-node) package. Also a nod to [battery-staple](https://github.com/geekish/battery-staple) for the inspiration.

Install
=======

[](#install)

```
composer require adgodev/xkpasswd-php
```

Usage
=====

[](#usage)

You can use xkpasswd as a module in your application.

**EXAMPLES**

```
use Adgodev\Xkpasswd\PasswordGenerator;

PasswordGenerator::generate();

// valuable=bear=difference=53

PasswordGenerator::generate([
    'complexity' => 5,
    'separators' => '#+-'
]);

// addition#wheat#congress#manner#lonely#20

PasswordGenerator::generate([
    'wordList' => 'myWordList.json'
]);

// apple#grape#banana#40
```

Options
-------

[](#options)

You can specify `complexity` argument in accordance with [complexity levels table](#complexity-levels). Defaults to 2.

If specified `pattern` argument overrides the [pattern](#patterns) 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.

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.

**EXAMPLE** Default behaviour

```
use Adgodev\Xkpasswd\PasswordGenerator;

PasswordGenerator::generate();

// hide+threw+money+61
```

**EXAMPLE** Specify complexity

```
use Adgodev\Xkpasswd\PasswordGenerator;

PasswordGenerator::generate([
    'complexity' => 5
]);

// join=industrial=wide=direction=lungs=16

PasswordGenerator::generate([
    'complexity' => 6
]);

// 57!FIFTHLY!astronauts!AFFECTEDLY!nymphs!TRUSTLESSNESSES!06
```

**EXAMPLE** Specify custom pattern

```
use Adgodev\Xkpasswd\PasswordGenerator;

PasswordGenerator::generate([
    'pattern' => 'wdwd'
]);

// adjective3solar6
```

**EXAMPLE** Specify custom word list / dictionary

```
use Adgodev\Xkpasswd\PasswordGenerator;

PasswordGenerator::generate([
    'wordList' => 'myWordList.json'
]);

// orange.apple.banana
```

```
use Adgodev\Xkpasswd\PasswordGenerator;

PasswordGenerator::generate([
    'wordList' => 'myWordList.txt'
]);

// kiwi-strawberry-grape
```

Patterns
--------

[](#patterns)

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
-----------------

[](#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.

ComplexityPatternSeparators1wsw\#.-=+\_2wswsw\#.-=+\_3wswswsdd\#.-=+\_4wswswswsdd\#.-=+\_5wswswswswsd\#.-=+\_!$\*:~?6ddswswswswswsdd\#.-=+\_!$\*:~?%^&amp;;In addition level 6 alternates upper and lower case between words.

Release notes
-------------

[](#release-notes)

v1.0.0

Initial release

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity26

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2257d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9288f8cca697980d34f2d4d31234f752abe13eb65b5bb468355d95ad8a69867e?d=identicon)[adgodev](/maintainers/adgodev)

---

Top Contributors

[![adriangonzales](https://avatars.githubusercontent.com/u/486071?v=4)](https://github.com/adriangonzales "adriangonzales (6 commits)")

---

Tags

password-generatorxkcdxkcd-936xkcd-comicspasswordxkcd

### Embed Badge

![Health badge](/badges/adgodev-xkpasswd-php/health.svg)

```
[![Health](https://phpackages.com/badges/adgodev-xkpasswd-php/health.svg)](https://phpackages.com/packages/adgodev-xkpasswd-php)
```

###  Alternatives

[nette/utils

🛠 Nette Utils: lightweight utilities for string &amp; array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.

2.1k394.3M1.5k](/packages/nette-utils)[kevinlebrun/password.php

Helpers for password generation and validation

17142.3k1](/packages/kevinlebrun-passwordphp)[naif/generate-password

A Laravel Nova password field with generating random password option

1880.3k](/packages/naif-generate-password)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
