| Crates.io | xpg |
| lib.rs | xpg |
| version | 0.19.4 |
| created_at | 2019-09-08 15:18:20.722029+00 |
| updated_at | 2025-11-14 12:45:09.165486+00 |
| description | xkcd-style password generator |
| homepage | |
| repository | https://github.com/qtfkwk/xpg |
| max_upload_size | |
| id | 163235 |
| size | 329,217 |
xkcd-style password generator

$ xpg -h
xpg 0.19.4 <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.4
See also the Configuration section below.
$ xpg
weightsuggestedseenmatter
$ xpg -c 10
nailreachleftshoes
restweekplacenation
valueaugustminutesmusic
osloaustriatradethem
spreadarrivedwerewire
indicateeightbridgewoman
alabamachoosetemperaturesell
easybrotherallowhundred
companyvaluewrongiron
eachbeyondsellfiji
or until Ctrl+C / SIGINT
$ xpg -c 0
mustpressheremillion
toolstoldeachalong
languageneighborenterheart
spreadhurrytwentyberlin
mexicovenushonorprobable
pointcrossfoodbottom
lakebelgiumespeciallysingle
quickwallwalknine
beartookbeatplant
pulledturnideabecause
^C
$ xpg wwwwwwww
feelingsnowplainsthankexplainimportantalonegather
$ xpg wwwwwwww -c 10
amsterdamfielddevelopedheightdaughterslowjunestation
sweetseasongreencenterbelldelawaretailflat
minutesproducemarchmovesentenceweightfiguretwelve
scenewriteoutsideincreasejoinedwhetherdenmarkfair
outsidethreeappearrollgreencurrentwaitsupply
powerthosemakeneptunewantnorthernindeedmorning
inchesdressshoutedadjectiveseemtrustscotlandpromise
tubepreparebeanfreshremembercontinuesoldiersball
noticefreetabletradequickwearouterdevice
milkjupiterfirmlifefurtherlaughedpushfinger
$ xpg wwddd
tieddevice325
$ xpg wwss
mistercattle@_
$ xpg wwds
promiseever8^
$ xpg wwwwcc
kindhersviewqueengz
$ xpg wwwwCC
thinkafraidfortiethsaveSV
$ xpg TTTT
ReceiveFrontLeastTaste
$ xpg WWWW
SEVERALNERVESAFETYWARSAW
An "any" character can be a lowercase letter, uppercase letter, digit, or symbol.
$ xpg wwwwaaaaa
receiveironstarkorea=o*qX
$ xpg www -m 15
thrownexcitingstudent
$ xpg www -M 20
meetdoctorstop
$ xpg www -m 20 -M 25 -a 1000
fellowinterestacross
See also Usage note 2.
$ xpg wwddds -l 16 -a 1000
friendsdream436_
See also Usage note 2.
1, 2 title case words, and !$ xpg '1TT!'
1ParkUsually!
$ xpg 's{adj}{adj}{n}dd'
]outsidethroughedge44
$ xpg 'ww{ext}'
rightviewdionysus
$ xpg 'ww{T:ext}'
shoutnationAmalthea
$ xpg 'ww{W:ext}'
whoserideAPOLLO
$ xpg -ec 10 TTTT
EvenCareWesternMiss
TaygeteFridayNorthdakotaForget
DearBillDemandFamily
StoodMinnesotaStrengthSurface
EastTillSuchNewyork
LegsEuporieGateScale
ValetudoBodyWonderLittle
SpringRiseFingersSpoke
TurnFeelShallHalt
KoreaJordanMoneyLaughed
$ xpg keychain
bhNybr-sljzqq-v0uhrs
$ xpg codename
LESS PARTIAL
$ xpg codename-series
BACKMONTHS GENTLEFACE
BACKMONTHS LIVEMOTHER
BACKMONTHS TIEDIDEA
BACKMONTHS AFRAIDCORN
BACKMONTHS WORTHNOTICE
BACKMONTHS THREECLOTHES
BACKMONTHS THROWNCORNER
BACKMONTHS HALFSCIENTISTS
BACKMONTHS THERESPACE
BACKMONTHS WORNPROBLEM
$ xpg codename-series -c 20
DIFFERENTEUROPE AGREEDSECTION
DIFFERENTEUROPE BROKECOLLEGE
DIFFERENTEUROPE BROADWAVE
DIFFERENTEUROPE WHICHCOPY
DIFFERENTEUROPE USUALVALUE
DIFFERENTEUROPE SOUTHWORLD
DIFFERENTEUROPE RAISEDDREAM
DIFFERENTEUROPE HOWEVERNEEDLE
DIFFERENTEUROPE CONSONANTMINUTES
DIFFERENTEUROPE EASYPOWER
DIFFERENTEUROPE IRONTRUCK
DIFFERENTEUROPE FULLLEADER
DIFFERENTEUROPE ADVANCEFLOW
DIFFERENTEUROPE FUTURESQUARE
DIFFERENTEUROPE ANIMALREASON
DIFFERENTEUROPE NICESCENE
DIFFERENTEUROPE ABLEDRAW
DIFFERENTEUROPE FAMOUSSTATION
DIFFERENTEUROPE BACKCENTS
DIFFERENTEUROPE RICHFRIDAY
$ xpg haiku
Considerable / Copenhagen England cows / Resent triangle
$ xpg haiku+
Sorry brother rose (2,2,1) / November feet white Silver (3,1,1,2) / Capital people (3,2)
$ xpg haiku-
Especially-health(4,1)/Addition-this-lower-stay(3,1,2,1)/Considerable(5)
$ xpg haiku--
Factories-paper/Farmers-possible-correct/Jordan-Australia
$ xpg haiku++
Course necessary
Broken Ireland seem class
Will clock spend symbols
$ xpg haiku+++
Necessary great (4,1)
Keep anything very fine (1,3,2,1)
Winter soldier cloth (2,2,1)
$ xpg -e haiku
Entire will right / Saturn enemy mail Lead / Africa prepare
$ xpg aaaaaaaaaaaaaaaaaaaa
6=pf}2#[;>)Dk44W3zZs
This works because a character-only pattern is padded to the minimum length with the last character.
$ xpg a -m 20
&FoI*<*iib{!cIH::zyW
$ xpg cccccCds
weiqwO3$
$ xpg -s cccccCds
znPjx[6f
This works because a character-only pattern is padded to the minimum length with the last character.
$ xpg -sm 8 Cdsc
)6iyQgua
$ xpg wwww WWWW TTTT
plainsometimesthousandtree
GENERALJAPANESERECORDWHOLE
ThereWorkFinallyFive
$ xpg -A upper 'T T T T'
KITCHEN PAGE PART FARMERS
$ xpg -A lower 'T T T T'
effect bottom hall expect
$ xpg -A title 'T T T T'
Kiss School Part Upon
$ xpg -A toggle 'T T T T'
tRUCK sTEEL mOLECULES bRIGHT
$ xpg -A camel 'T T T T'
numberScotlandGoneControl
$ xpg -A pascal 'T T T T'
RolledCharacterOfficeAround
$ xpg -A upper-camel 'T T T T'
SoldierWhileAheadPractice
$ xpg -A snake 'T T T T'
stretched_destroy_answer_expect
$ xpg -A upper-snake 'T T T T'
HEART_EXACTLY_TALK_VARIOUS
$ xpg -A screaming-snake 'T T T T'
SIZE_SIDE_MATERIAL_MOTHER
$ xpg -A kebab 'T T T T'
proud-outer-every-especially
$ xpg -A cobol 'T T T T'
SHOP-ALABAMA-GUARD-FACTORS
$ xpg -A upper-kebab 'T T T T'
COLOR-RESENT-STORM-DISH
$ xpg -A train 'T T T T'
Learn-Beauty-Usual-Possible
$ xpg -A flat 'T T T T'
decimalagreedstudentsless
$ xpg -A upper-flat 'T T T T'
STRAIGHTVARIOUSTRIEDSILVER
$ xpg -A alternating 'T T T T'
nExT oCtObEr QuEeN hUsBaNd
$ xpg -A random 'T T T T'
aWaY heavy BreAK mIgHT
$ xpg -A pseudo-random 'T T T T'
FinGeRS moUNtaIn BeYOnD mOlEcuLeS
$ xpg '{a:1}-{W:a:2}-{T:a:3}-{olympian:4}-{T:ext:5}'
earth-BODY-Molecules-aphrodite-Northcarolina
{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.