nonwordgen - because real words are overrated!
nonwordgen is a multilingual text generator that creates fake words, sentences, and paragraphs that look like they belong to real languages - but aren’t.
It’s ideal for lorem ipsum–style filler text, UI design, test data, creative writing, or anywhere you need realistic-looking nonsense.
Under the hood, it uses a phonotactic syllable model, language plugins, and dictionary-based filters to ensure generated text looks plausible while avoiding real vocabulary.
But using it is easy: pick a language, choose strictness, and generate.
- ✔️ Generate nonwords, sentences, and full paragraphs
- ✔️ Supports 29 languages with accurate orthography
- ✔️ Plugin-based architecture for easy language expansion
- ✔️ Optional dictionary filtering
- ✔️ GUI, CLI, and Python API
- ✔️ Works on Windows and Linux
macOS users:
The project will probably run on macOS, but I don’t have access to a Mac to test or build for it.
If you're a macOS user and try it out, feedback is appreciated!
Since nonwordgen is not yet published to PyPI, download it directly from GitHub Releases:
➡ Download the latest wheel or source package:
nonwordgen Releases
Install using pip (point to your downloaded file):
# Install from wheel
python -m pip install nonwordgen-<version>-py3-none-any.whl
# Or install from source
python -m pip install nonwordgen-<version>.tar.gzFor development:
git clone https://github.com/taggedzi/nonwordgen.git
cd nonwordgen
python -m pip install -e ".[dev]"Extras are available if you want GUI or dictionary support during development as well:
# GUI support
python -m pip install ".[gui]"
# Dictionary / wordfreq support
python -m pip install ".[dictionaries]"from nonwordgen import WordGenerator, Strictness
gen = WordGenerator(
min_length=5,
max_length=9,
strictness=Strictness.MEDIUM,
language="english", # default plugin
)
print(gen.generate_one())
print(gen.generate_many(10))Words (English):
nonwordgen -n 20 --min-length 4 --max-length 8 --strictness strictWords (Spanish):
nonwordgen -n 20 --language spanish --min-length 4 --max-length 8Sentences:
nonwordgen sentences -n 5 --language french --min-words 3 --max-words 8Paragraphs:
nonwordgen paragraphs -p 2 --language german --min-sentences 2 --max-sentences 4Launch GUI:
nonwordgen guiYou can also launch the GUI directly via the separate entry point:
nonwordgen-guiSelect your language, chose your options and click generate!
nonwordgen includes plugins for:
english, spanish, french, portuguese, indonesian, swahili, german, turkish, russian, vietnamese, hindi, korean, italian, dutch, tagalog, romanian, swedish, norwegian, danish, afrikaans, yoruba, polish, czech, hungarian, greek, thai, hebrew, scb, malay
To inspect programmatically:
import nonwordgen
print(nonwordgen.available_languages())These are optional and must be installed separately if desired:
wordfreq- frequency-based dictionary filteringPyQt6- enables the GUI
Install one or more manually:
pip install wordfreq
pip install PyQt6
# Or via extras when installing from source / editable:
python -m pip install ".[dictionaries]"
python -m pip install ".[gui]"Install dev dependencies and nox:
python -m pip install -e ".[dev]"
python -m pip install noxCommon tasks via nox:
nox # run default sessions (tests + lint)
nox -s tests # run test suite
nox -s coverage # run tests with coverage + coverage.xml
nox -s lint # run Ruff lint checks
nox -s format # auto-fix with Ruff + Black
nox -s typecheck # run mypy
nox -s spdx # run test to confirm spdx license text included
nox -s spdx -- add # Add the spdx license text to any file that does not have it.
nox -s build # build GUI release via build_release.py
nox -s build_package # build wheel + sdist into dist/
nox -s build_dist # Linux-only sdist + wheel build (CI-friendly)
nox -s build_exe # build standalone Windows EXE (no-op on non-Windows)
nox -s bundle_release # bundles artifacts/files into a versioned Zip for release
nox -s publish_release -- 1.2.1 # publishes a release, update changelog, commit, create tags, push to github for release generationYou can still run pytest or python -m build directly if you prefer, but the GitHub Actions CI uses the nox sessions above so you can reproduce CI locally with the same commands.
Artifacts from builds appear under dist/ (wheels/sdists from build_package, and the Windows executable from build / build_exe).
-
Update version in
pyproject.toml([project].version) -
Run tests & build artifacts
-
Commit → tag → push
-
Draft a GitHub Release
- Upload
.whland.tar.gzfiles - Add changelog notes
- Upload
No PyPI steps required unless you publish there later.
MIT License - see LICENSE.
Some documentation and text were drafted with assistance from OpenAI models and reviewed manually.
- PyQt6 - GUI backend
- wordfreq - Apache-2.0 licensed
All optional extras are installed separately and not bundled by default.
This project follows a simple, respectful Code of Conduct. By participating, you agree to uphold these guidelines and help keep the community welcoming and constructive.
If you believe you’ve found a security issue, please review the project’s Security Policy.
This project is maintained by a single developer with limited availability. I may not always be able to respond quickly, but I take security concerns seriously and appreciate responsible disclosure.
For a history of changes, see the Changelog.
The changelog is generated automatically from git tags and commit messages.
