| Crates.io | xpg |
| lib.rs | xpg |
| version | 0.19.0 |
| created_at | 2019-09-08 15:18:20.722029+00 |
| updated_at | 2025-08-28 12:44:22.200651+00 |
| description | xkcd-style password generator |
| homepage | |
| repository | https://github.com/qtfkwk/xpg |
| max_upload_size | |
| id | 163235 |
| size | 329,042 |
xkcd-style password generator

$ xpg -h
xpg 0.19.0 <https://crates.io/crates/xpg>
xkcd-style password generator
Usage: xpg [OPTIONS] [PATTERNS]...
Arguments:
[PATTERNS]... Pattern(s) (see note 1) [default: `wwww`, `-L`: `{a}`]
Options:
-s, --shuffle Shuffle characters
-c, --count <NUMBER> Number of passwords (0:∞ ) [default: 1]
-l, --length <NUMBER> Length
-m, --minimum <NUMBER> Minimum length
-M, --maximum <NUMBER> Maximum length
-a, --attempts <NUMBER> Attempts (see note 2) [default: 10]
-C, --config <PATH> Configuration file
-e, --extended Merge extended words (see note 3)
-A, --apply-case <STYLE> Apply case style [possible values: upper, lower,
title, toggle, camel, pascal, upper-camel, snake,
constant, upper-snake, screaming-snake, kebab,
cobol, upper-kebab, train, flat, upper-flat,
alternating, random, pseudo-random, sentence]
-L, --list List words in `{sub}`(s)
-d, --dump-config Print configuration
-r, --readme Print readme
-h, --help Print help
-V, --version Print version
---
Notes
1. Patterns
* Words
* `W`: WORD
* `w`: word
* `T`: Word
* `k`: `shuffle(cccc(c|d)(C|c))`
* `{sub}`: see `WordKind`s section in readme
* Characters
* `C`: A-Z
* `c`: a-z
* `d`: 0-9
* `s`: `~!@#$%^&*-_=+;:,./?()[]{}<>`
* `a`: `C` | `c` | `d` | `s`
* Special
* `keychain`
* `codename`
* `codename-series`
* `haiku--` | `haiku-condensed`
* `haiku-` | `haiku-with-syllables-condensed`
* `haiku`
* `haiku+` | `haiku-with-syllables`
* `haiku++` | `haiku-full`
* `haiku+++` | `haiku-full-with-syllables`
2. Ten attempts are made to satisfy the given length requirements by default;
use `-a N` and set `N` to the number of attempts to increase chances.
It will exit with an error if unable to satisfy requirements; some
configurations will always produce an error.
3. Extended words are only available in exclusively extended word kinds by
default; however, with `-e`, they are merged with regular word kinds; use
with the `-L` option to see its effect.
$ xpg -V
xpg 0.19.0
See also the Configuration section below.
$ xpg
blackmoleculesfoolheld
$ xpg -c 10
floridanetherlandsstillguess
mayorseedsenoughgrew
withsometimesjumpedneed
trackflowersverbcost
seedpleasantrestfive
fruitnorthernappearhawaii
leaderinsteadhaveloud
themselvesaugustwheelsscene
givessettledexercisethem
whitefancystarthome
or until Ctrl+C / SIGINT
$ xpg -c 0
feetvermontdestroynotice
mexicoseptemberfinesignal
savepreparedraiseworkers
answerwifebottledinner
sufferpaintsignaloxygen
explainironwhichname
carryfacearizonacried
girljourneysomeonestar
dealwritetrustscene
incheswhatbehindboard
^C
$ xpg wwwwwwww
throughcongoyesterdayscalestudylightweightover
$ xpg wwwwwwww -c 10
trackequalexpectflowroundspecialchildcause
observeneptunereplysleptoutsidecriedhopeshoe
kissslowwornmarkbookgavewednesdayshake
industrycarefullydutypartysurfacehandstudentbelieve
deadcausebattlefactorstalkcapitalexperimenttruck
succeeditalybelieveoctoberyourselfneighborwindowsmoke
fellowparticularthereforelossentirevenussubjectshop
pageorderfactorscontrolhorsedetailstrieschoose
rulegiveplaincountryclothescopenhagenlegsaustralia
galaxyamericabrazilonlyyourselfeffectshoulderfear
$ xpg wwddd
singlemonth871
$ xpg wwss
clockpain]]
$ xpg wwds
worldindia2<
$ xpg wwwwcc
squaresilentenoughwashcc
$ xpg wwwwCC
patternrealizeexperiencejapanJS
$ xpg TTTT
LaughedEachControlBill
$ xpg WWWW
GERMANYSPREADWHEELSCAPTAIN
An "any" character can be a lowercase letter, uppercase letter, digit, or symbol.
$ xpg wwwwaaaaa
devicehomegaveworkersly)ET
$ xpg www -m 15
europegreenweak
$ xpg www -M 20
arizonaraisecents
$ xpg www -m 20 -M 25 -a 1000
ringincreaseamsterdam
See also Usage note 2.
$ xpg wwddds -l 16 -a 1000
chartsuppose909!
See also Usage note 2.
1, 2 title case words, and !$ xpg '1TT!'
1StateBall!
$ xpg 's{adj}{adj}{n}dd'
+separatetruestar38
$ xpg 'ww{ext}'
ruletrainingorthosie
$ xpg 'ww{T:ext}'
toldconditionTitania
$ xpg 'ww{W:ext}'
wheelsimportantHELIKE
$ xpg -ec 10 TTTT
SwedenSlowMeetTest
SisterLendHeavenReady
GirlMotherPublicReceived
DelightJanuarySendMneme
TravelBelieveProbableWorkers
BeganWalesShotRepresent
EverHeavyEggsRock
ShareLifeStationAddition
SleepMatterDeepWithin
SignAoedeFearWritten
$ xpg keychain
lwidnX-bmcbwu-tkegp2
$ xpg codename
SEEN UNIT
$ xpg codename-series
SIMILARSTORY EQUALSOLDIERS
SIMILARSTORY GRAVEGAIN
SIMILARSTORY OUTSIDETRAIN
SIMILARSTORY THOSEPLAN
SIMILARSTORY STRAIGHTTRAINING
SIMILARSTORY JAPANESEWOMAN
SIMILARSTORY BRITISHSECTION
SIMILARSTORY AFTERHURRY
SIMILARSTORY FIFTYHEAD
SIMILARSTORY FULLDOUBT
$ xpg codename-series -c 20
FOREVERBREAD CLEANCOAT
FOREVERBREAD BOTTOMSHOW
FOREVERBREAD IRONSTEEL
FOREVERBREAD SILENTBATTERY
FOREVERBREAD USUALLYNECK
FOREVERBREAD LIVEPASS
FOREVERBREAD EVENKIND
FOREVERBREAD GENERALTRIP
FOREVERBREAD BROADEDGE
FOREVERBREAD SEVENMATERIAL
FOREVERBREAD SICKWEST
FOREVERBREAD EACHTEMPERATURE
FOREVERBREAD SMALLBEING
FOREVERBREAD EASTTROUBLE
FOREVERBREAD BRITISHJOURNEY
FOREVERBREAD YOURGRAVE
FOREVERBREAD FINALLYASIA
FOREVERBREAD FIFTYSTATE
FOREVERBREAD NEXTFOOL
FOREVERBREAD HOWEVERHEAT
$ xpg haiku
Considerable / Gentleman Jerusalem / Colombia home
$ xpg haiku+
Bear mail farmers feet (1,1,2,1) / Therefore wild Arizona (2,1,4) / Information last (4,1)
$ xpg haiku-
Considerable(5)/Therefore-interest-kitchen(2,3,2)/Electricity(5)
$ xpg haiku--
Considerable/Europe-arrive-coast-business/Lisbon-pull-suffix
$ xpg haiku++
Pushed gentleman could
February Finland soft
Track gather game rise
$ xpg haiku+++
Considerable (5)
Electricity river (5,2)
Carefully told care (3,1,1)
$ xpg -e haiku
North America / North Carolina months tried / Underline science
$ xpg aaaaaaaaaaaaaaaaaaaa
.l0L{vAKoe,9DPW;kLhs
This works because a character-only pattern is padded to the minimum length with the last character.
$ xpg a -m 20
Ndo6)m7gzg{SZ/!B%%N=
$ xpg cccccCds
yfqxbW5{
$ xpg -s cccccCds
xrz1d=Qd
This works because a character-only pattern is padded to the minimum length with the last character.
$ xpg -sm 8 Cdsc
v8e{saLz
$ xpg wwww WWWW TTTT
landsquaremayorentire
PARTSTARHEARSUCH
MoscowTriangleLateMouth
$ xpg -A upper 'T T T T'
TOGETHER RHYTHM DREAM SWEET
$ xpg -A lower 'T T T T'
eight team president might
$ xpg -A title 'T T T T'
Summer Shot Favor Bring
$ xpg -A toggle 'T T T T'
lEAVE tHINK sALT iCELAND
$ xpg -A camel 'T T T T'
fruitIndianMilkFrom
$ xpg -A pascal 'T T T T'
DestroyFarmersEnoughSoldier
$ xpg -A upper-camel 'T T T T'
ColumnRaiseDenmarkTied
$ xpg -A snake 'T T T T'
toward_opposite_machine_sister
$ xpg -A upper-snake 'T T T T'
PASSED_STRANGER_DANCE_SAND
$ xpg -A screaming-snake 'T T T T'
SEVEN_BALL_APRIL_NOTE
$ xpg -A kebab 'T T T T'
quiet-hunger-suddenly-says
$ xpg -A cobol 'T T T T'
WHOM-INCREASE-INSIDE-SEVEN
$ xpg -A upper-kebab 'T T T T'
ENGLISH-FORWARD-HUGE-STORE
$ xpg -A train 'T T T T'
Wings-Person-Listen-Girl
$ xpg -A flat 'T T T T'
possiblestrengthpickedalways
$ xpg -A upper-flat 'T T T T'
COWSCURRENTEVENINGDOUBLE
$ xpg -A alternating 'T T T T'
wEsT pUbLiC lEaSt BrOuGhT
$ xpg -A random 'T T T T'
pRePARed sEll racE Mark
$ xpg -A pseudo-random 'T T T T'
sIgHT ceNt ShOW maNNeR
$ xpg '{a:1}-{W:a:2}-{T:a:3}-{olympian:4}-{T:ext:5}'
kind-WRITTEN-Industry-aphrodite-Philophrosyne
{color}$ xpg -L '{color}'
black
blue
brown
gray
green
white
yellow
{color} in uppercase$ xpg -L '{W:color}'
BLACK
BLUE
BROWN
GRAY
GREEN
WHITE
YELLOW
{color} in title case$ xpg -L '{T:color}'
Black
Blue
Brown
Gray
Green
White
Yellow
{color}$ xpg -L '{color}' |wc -l
7
{color} and Element / {W:el}$ xpg -L '{color}' '{W:el}'
black
blue
brown
gray
green
white
yellow
GOLD
IRON
LEAD
MERCURY
OXYGEN
SILVER
$ xpg -L |wc -l
1257
$ xpg -Le |wc -l
1403
See config.json or use -d for the default configuration compiled into the
binary executable.
If another file is placed at any of the following locations or the path provided
via the -C option at runtime, it will be used instead.
/home/username/.config/xpg/config.jsonC:\Users\username\AppData\Roaming\qtfkwk\xpg\config\config.json/Users/username/Library/Application Support/com.qtfkwk.xpg/config.jsonWordKinds{a.ext}
{a}
{adj}
{color}{nat}{adv}{conj}{i}{n}
{n.pl}{n.pro}{n.s}
{ast}
{moon}{planet}{color}{day}{mon}{n.prop}
{el}{name}
{fname}{mname}{place}
{city}{cont}{country}{us-state}{myth}
{greekmyth}
{olympian}{chthonic}{romanmyth}{prep}{v}
{v.aux}{v.int}{v.tr}{v.past}{ext}
{n}
{n.s}
{ast}
{moon}
{marsmoon}{jupitermoon}{saturnmoon}{uranusmoon}{neptunemoon}Notes
WordKind / {sub}
It is only necessary to set the most descriptive WordKind(s) since they are
automatically included in the larger word kinds.
The characters object value must contain the C, c, and d keys with
non-empty values.
Additional keys/values can be added and used.
{sub}s produce lowercase words by default, but if prefixed with W: or
T: words will be uppercase or title case, respectively: i.e. {W:sub} or
{T:sub} (replace sub with an actual {sub} name above).
{sub}s include all words by default, but if suffixed with :N where N is
a number, it will only include words with that number of syllables: i.e.
{sub:N} (replace sub with an actual {sub} name above and N with the
desired number of syllables ~1-5).
Please find the CHANGELOG.md in the repository.