PHPackages                             gabrielesbaiz/password-toolkit - 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. gabrielesbaiz/password-toolkit

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

gabrielesbaiz/password-toolkit
==============================

A lightweight helper package to generate nice passwords.

1.7.0(1mo ago)09.0k↑6500%[1 PRs](https://github.com/gabrielesbaiz/password-toolkit/pulls)MITPHPPHP ^8.0CI failing

Since Mar 2Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/gabrielesbaiz/password-toolkit)[ Packagist](https://packagist.org/packages/gabrielesbaiz/password-toolkit)[ Docs](https://github.com/gabrielesbaiz/password-toolkit)[ GitHub Sponsors]()[ RSS](/packages/gabrielesbaiz-password-toolkit/feed)WikiDiscussions main Synced 2d ago

READMEChangelog (7)Dependencies (27)Versions (13)Used By (0)

🔐 PasswordToolkit
=================

[](#-passwordtoolkit)

[![Latest Version on Packagist](https://camo.githubusercontent.com/93b4ab01e47e9a774a0f38cd086df5652f724ec0f8e0e0daa5e676c850fc31a9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6761627269656c65736261697a2f70617373776f72642d746f6f6c6b69742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/gabrielesbaiz/password-toolkit)[![Total Downloads](https://camo.githubusercontent.com/42a767d92bc45c5011f3fa9e318eb847a3f362b20dce355cf430932d09527fa7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6761627269656c65736261697a2f70617373776f72642d746f6f6c6b69742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/gabrielesbaiz/password-toolkit)[![License](https://camo.githubusercontent.com/e3b6d1393d822cd9a07dfd4b7b0aac3a00ad9788657b7db197f03974b9a8790f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6761627269656c65736261697a2f70617373776f72642d746f6f6c6b69742e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)[![PHP Version](https://camo.githubusercontent.com/4b0512f3f6b429c4fb6e5b89743781797b883854769970f7eda753beb5d1a431/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6761627269656c65736261697a2f70617373776f72642d746f6f6c6b69742e7376673f7374796c653d666c61742d737175617265)](composer.json)

> Generate **memorable, human-friendly passwords** with style — `Goldrake-Mitico-4271`, `Ferrari-Veloce-9912`, `Cannolo-Goloso-3301`. No more `xK#9$!qZ`.

`PasswordToolkit` is a tiny, zero-dependency-friendly Laravel package that crafts passwords by mashing up curated **names** (Disney, Star Wars, Harry Potter, Studio Ghibli, Italian chefs, philosophers, Formula 1 drivers, Pixar, Game of Thrones, gelato flavors, pasta shapes…) with **gender-aware Italian adjectives**, optional **digits**, and even **leetspeak**. Easy to remember. Fun to use. Battle-tested in real apps.

---

✨ Features
----------

[](#-features)

- 🎭 **91 curated dictionaries** (49 People + 42 Things) — pop-culture icons, Italian legends, foods, wines, cars and more
- 🧠 **Gender-aware adjectives** — agreement is correct (Italian/multilingual safe)
- 🔢 **Optional digits** at start, middle or end with configurable length
- 🤖 **Leetspeak modes** — `none`, `basic`, `advanced` (`901d24k3-M171c0-4271`)
- 🎚️ **Pick &amp; mix categories** — toggle each dictionary on/off via config
- 🪄 **Laravel-native** — facade, service provider, auto-discovery
- 🪶 **Lightweight** — pure PHP, only Spatie package-tools as runtime dep
- ✅ **Pest 3 test suite**, Laravel **10/11/12** compatible

---

📦 Installation
--------------

[](#-installation)

```
composer require gabrielesbaiz/password-toolkit
```

Publish the config:

```
php artisan vendor:publish --tag="password-toolkit-config"
```

---

🚀 Quick start
-------------

[](#-quick-start)

```
use Gabrielesbaiz\PasswordToolkit\Facades\PasswordToolkit;

PasswordToolkit::generate();
// => "Goldrake-Mitico-4271"
```

Or instantiate directly:

```
use Gabrielesbaiz\PasswordToolkit\PasswordToolkit;

echo PasswordToolkit::generate();
```

### Batch generation

[](#batch-generation)

```
PasswordToolkit::generate(10);
// => ["Goldrake-Mitico-4271", "Vespa-Veloce-9921", ...] (array of 10)

PasswordToolkit::generateManyWithReport(5);
// => [['password' => '...', 'report' => StrengthReport], ...]
```

`generate(1)` (default) returns a string. `generate(N)` with `N > 1` returns an array.

### Sample output

[](#sample-output)

All rows below show the same picked name (`Goldrake`) + adjective (`Mitico`) + number (`4271`), so you can compare exactly what each option changes.

ConfigExampledefaults`Goldrake-Mitico-4271``separator_symbol => '_'``Goldrake_Mitico_4271``numbers_position => 'start'``4271-Goldrake-Mitico``numbers_position => 'middle'``Goldrake-4271-Mitico``leetspeak_conversion => 'basic'``901d24k3-M171c0-4271``leetspeak_conversion => 'advanced'``901d24| [
        'people' => [ /* 49 dictionaries — true/false */ ],
        'things' => [ /* 42 dictionaries — true/false */ ],
    ],

    // Separator between segments. Any symbol, or null.
    'separator_symbol' => '-',

    // Replace spaces in multi-word names with the separator (true)
    // or strip them entirely (false).
    'name_separator' => true,

    // Append a random numeric segment.
    'add_numbers'      => true,
    'numbers_digits'   => 4,           // length of the number
    'numbers_position' => 'end',       // start | middle | end

    // Leetspeak transform: 'no' | 'basic' | 'advanced'.
    'leetspeak_conversion' => 'no',
];
```

### Leetspeak cheat sheet

[](#leetspeak-cheat-sheet)

charbasicadvanceda`4``4`e`3``3`i / l`1``1`o`0``0`s`$``$`m—`|V|`w—`\\/\\/`n—`|\\|``advanced` mode expands character count — useful for stricter length policies.

---

🛡️ Strength reporter
--------------------

[](#️-strength-reporter)

Two entry points:

```
use Gabrielesbaiz\PasswordToolkit\Facades\PasswordToolkit;

// Score an arbitrary password (charset model)
$report = PasswordToolkit::strength('Goldrake-Mitico-4271');
$report->score;              // 0..4
$report->label;              // very_weak | weak | fair | strong | very_strong
$report->entropyBits;        // float
$report->charsetFlags;       // ['lower'=>true,'upper'=>true,'digits'=>true,'symbols'=>true]
$report->crackTimeHuman;     // "12 years"

// Generate + structural report (knowledge of dictionaries — more honest)
['password' => $pwd, 'report' => $report] = PasswordToolkit::generateWithReport();
$report->components;         // ['name'=>x,'adjective'=>y,'number'=>z,'leetspeak_bonus'=>b,'total'=>t]
```

### Score thresholds

[](#score-thresholds)

bitsscorelabel`< 28`0very\_weak`28–35`1weak`36–59`2fair`60–127`3strong`≥ 128`4very\_strongCrack time defaults to `1e10` guesses/sec (offline GPU vs fast hash). Override via `config/password-toolkit.php`:

```
'strength' => ['guesses_per_second' => 1e12],
```

The structural model accounts for the fact a dictionary-aware attacker only searches the package's pool space, not the full charset — usually a much lower (and more realistic) entropy figure.

---

🧪 Testing
---------

[](#-testing)

```
composer test
```

---

🛣️ Roadmap ideas
----------------

[](#️-roadmap-ideas)

- Locale-aware adjective packs (EN / ES / FR)
- Custom user dictionaries via config

PRs welcome. 🙌

---

📝 Changelog
-----------

[](#-changelog)

See [CHANGELOG](CHANGELOG.md).

🤝 Contributing
--------------

[](#-contributing)

See [CONTRIBUTING](CONTRIBUTING.md).

🛡️ Security
-----------

[](#️-security)

⚠️ Memorable passwords trade entropy for usability. For high-security secrets (API keys, root creds) prefer `Str::random()` or `random_bytes()`. PasswordToolkit shines for **user onboarding, default credentials, share links, demo accounts**.

Report vulnerabilities via [our security policy](../../security/policy).

🙏 Credits
---------

[](#-credits)

- [Gabriele Sbaiz](https://github.com/gabrielesbaiz)
- [All Contributors](../../contributors)

📄 License
---------

[](#-license)

[MIT](LICENSE.md).

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance89

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

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

Every ~62 days

Recently: every ~108 days

Total

8

Last Release

56d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/97040fb60637d4b81897347524bc9343ffa6b978d4b19c0c28ea0823e2a1752b?d=identicon)[gabrielesbaiz](/maintainers/gabrielesbaiz)

---

Top Contributors

[![gabrielesbaiz](https://avatars.githubusercontent.com/u/22818698?v=4)](https://github.com/gabrielesbaiz "gabrielesbaiz (13 commits)")

---

Tags

laravel-packagephplaravelGabriele Sbaizpassword-toolkit

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/gabrielesbaiz-password-toolkit/health.svg)

```
[![Health](https://phpackages.com/badges/gabrielesbaiz-password-toolkit/health.svg)](https://phpackages.com/packages/gabrielesbaiz-password-toolkit)
```

###  Alternatives

[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.8M47](/packages/spatie-laravel-pdf)[codewithdennis/filament-select-tree

The multi-level select field enables you to make single selections from a predefined list of options that are organized into multiple levels or depths.

329530.5k29](/packages/codewithdennis-filament-select-tree)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3914.6k](/packages/rawilk-profile-filament-plugin)[worksome/exchange

Check Exchange Rates for any currency in Laravel.

124603.0k](/packages/worksome-exchange)[tarfin-labs/event-machine

Event-driven state machines for Laravel with event sourcing, type-safe context, and full audit trail.

199.4k](/packages/tarfin-labs-event-machine)

PHPackages © 2026

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