chriskiehl/Gooey
52.1
Weak · 19 September 2026
14.2k
lines of production code
Python
primary language
1
measurement over time
What this system is
Gooey is a Python library that converts command-line argument parsers into graphical user interfaces. It provides a modern, component-based architecture for rendering input widgets, managing application state, and controlling subprocess execution. The system supports internationalization, dynamic form validation, and robust packaging for distribution.
How it got here
2014 — Initial scaffolding and GUI refactoring
9 changes.
The project established its foundational structure, documentation, and packaging support while introducing comprehensive internationalization and prefix-based search features. A major architectural shift occurred through the rewrite of the GUI using a React-style component model and the creation of a new python\_bindings module to handle argument parsing and configuration generation.
2018 — GUI framework migration and widget rewrite
6 changes.
The project underwent a major architectural shift by migrating its GUI framework from wxPython to rewx, restructuring the application into a modular component-based system. This period also saw a comprehensive rewrite of core and widget components, introducing new date, time, and color pickers while enhancing layout, styling, and internationalization support.
2019–2022 — UI robustness and test coverage
4 changes.
This period focused on stabilizing the Gooey GUI by introducing a custom text wrapping component to fix layout issues and implementing a structured options module with validation support. Significant effort was also dedicated to expanding test coverage, including integration tests for core workflows and specific tests for dynamic form validation and process controller behavior.
Features
Added functional utility helpers for immutable data manipulation
A new \functional.py\ module has been added to \gooey/util\ providing a suite of helper functions for working with nested dictionaries and collections. These utilities include \getin\ and \associn\ for safely reading and updating nested paths, \assoc\ and \dissoc\ for copy-on-write key management, and \merge\ for combining maps. Additional tools like \flatmap\, \indexunique\, \compact\, and \lift\ (which wraps functions to return \Try\ results) are also available to support functional programming patterns within the application.
gooey/util · high confidence
Added prefix-based search filtering for dropdown components
Users can now benefit from faster, trie-backed substring matching in dropdown lists via the new PrefixSearch and PrefixTokenizers classes. This change introduces configurable search options, including case-insensitivity, AND/OR logical operators for multiple tokens, and suffix indexing, allowing for more flexible and performant filtering of large option sets in the GUI.
gooey · high confidence
Expanded language support with new and updated localization files
The application now supports a wider range of languages, including new additions for Hindi, Bosnian, Croatian, Czech, Greek, Hebrew, Japanese, Korean, Polish, Serbian, Tamil, and Vietnamese. Existing language files for Dutch, French, German, Italian, Portuguese, Russian, Spanish, and Traditional Chinese have been updated or refined. Additionally, the English base file has been updated to include new keys for dialog buttons and dropdown messages, ensuring consistent terminology across all supported locales.
gooey/languages · high confidence
Initial project scaffolding and documentation
Establishes the foundational structure for the Gooey project by adding essential configuration and documentation files. This includes a comprehensive README with installation and usage instructions, a CONTRIBUTING guide for developers, an issue template, and a MIT license. It also introduces packaging support via setup.py (targeting Python 3.6+ with wxPython 4.1.0+), a deployment script (pip\_deploy.py), and a git submodule for external images.
(repo-wide) · high confidence
Introduction of a new python\_bindings module for Gooey configuration and argument handling
A new \python\_bindings\ package has been added to the Gooey library, introducing a structured approach to converting \argparse\ definitions into Gooey's JSON build specifications. This module includes \argparse\_to\_json.py\ for mapping parser actions to UI widgets, \config\_generator.py\ for assembling the final build spec, and \control.py\ to manage the bootstrap process, including support for loading and dumping build configurations. It also introduces \cmd\_args.py\ to allow command-line arguments to override default values, \gooey\_parser.py\ for custom argument group handling, and \dynamics.py\ for advanced validation and error collection via monkey-patching. The package is supported by type definitions in \types.py\, schema validation in \schema.py\, and communication utilities in \coms.py\.
_gooey/python\bindings · high confidence
Introduction of internationalization (i18n) support
The application now supports multiple languages through a new i18n module. This change introduces a system for loading translation dictionaries from JSON files, allowing users to see the interface in their preferred language. A configuration file sets the default language to English, and a convenience function is provided to retrieve translated strings based on keys.
gooey/gui/lang · high confidence
New date and time picker dialogs
Added new CalendarDlg and TimeDlg widgets that provide localized date and time selection interfaces. These dialogs share a common BaseDialog implementation, allowing users to select dates and times via native wxPython pickers with consistent styling and i18n support.
gooey/gui/components/widgets/dialogs · high confidence
New utility modules for packaging, drag-and-drop, and UI styling
This change introduces a new \gooey.gui.util\ package containing several helper modules. It adds \freeze.py\ to handle resource path resolution for PyInstaller and cx\_Freeze packaged applications, ensuring correct behavior when the app is frozen. A new \filedrop.py\ module provides a \FileDrop\ class to enable drag-and-drop support for file paths in text fields. Additionally, \wx\_util.py\ offers pre-styled widget creation helpers (headers, bold text, colors) and thread-safe UI wrappers, while \casting.py\, \quoting.py\, \time.py\, and \functional.py\ provide utilities for safe type conversion, platform-aware shell quoting, progress bar timing estimates, and dictionary merging.
gooey/gui/util · high confidence
Architecture
Major GUI framework migration to rewx and architectural restructuring
The Gooey application has been refactored to use the rewx library for rendering UI components, replacing the previous wxPython-centric implementation. This change introduces a new component-based architecture in the containers module, where the main application window and its sub-components (header, footer, console, navigation) are now managed through rewx's render and update cycle. Users will experience this as a foundational update to the application's core structure, enabling more modular UI development and potentially affecting how custom themes or integrations interact with the main window lifecycle.
gooey/gui/containers · high confidence
Behavioural changes
Add empty images package module
The gooey/images directory now includes an \_\init\\_.py file, initializing it as a Python package. This change prepares the directory structure for storing image assets, such as icons, which are referenced in other parts of the application for UI customization and packaging.
gooey/images · medium confidence
Gooey GUI rewritten with React-style components and pubsub event system
The Gooey GUI has been completely refactored to use a React-style component model (via the rewx library) and a centralized pubsub event system for communication. This change introduces a new application structure with dedicated modules for state management, CLI command building, and process control, replacing the previous monolithic implementation. Users benefit from improved stability and compatibility with both wxPython 3 and 4, as well as new features like configurable headers, footers, and progress timing displays.
gooey/gui · high confidence
Improved text wrapping for group descriptions
The UI now correctly wraps long text in group descriptions and other static text elements, preventing layout issues like skinny columns or ugly background 'boxing' that occurred previously. This is achieved by introducing a custom \AutoWrappedStaticText\ component that handles size events more reliably than the standard wxWidgets controls, ensuring text fits within the available width.
gooey/gui/components/util · high confidence
New options module with initial\_value support and validation
The gooey/gui/components/options module has been introduced, providing a structured way to define widget options. This change adds support for the \initial\_value\ parameter across various input widgets (such as TextField, PasswordField, IntegerField, Slider, DecimalField, TextArea, ListBox, Dropdown, Counter, and CheckBox), allowing users to set default values in the UI. Additionally, a new validation system (\validators.py\) has been implemented to enforce type and value constraints for options like colors, booleans, and integers, ensuring robust configuration of the GUI components.
gooey/gui/components/options · high confidence
Rewrite of core chooser and text input widgets
The core widget components in gooey/gui/components/widgets/core have been rewritten to support new input types and improved configuration. This update introduces new widgets for selecting dates (DateChooser), times (TimeChooser), and colors (ColourChooser), alongside existing file and directory pickers. The FileChooser, MultiFileChooser, FileSaver, DirChooser, and MultiDirChooser widgets now support additional configuration options including wildcards, custom messages, and default file/directory paths. Additionally, the MultiDirChooser now correctly handles Windows volume labels in file paths, and drag-and-drop functionality has been refined to work consistently with multi-file selection logic.
gooey/gui/components/widgets/core · high confidence
Rewritten core GUI components with improved layout, styling, and console features
The core GUI components in gooey/gui/components have been rewritten to improve layout, styling, and user interaction. The footer now displays elapsed and estimated remaining time on the progress bar, and its button sizing has been fixed. The console component now supports clickable hyperlinks in rich text output and allows configuration of terminal font, color, and family. Group descriptions in the configuration page are now auto-wrapped, and tabbed group titles are correctly translated. The header component now correctly respects the show\_header\_title setting for visibility. Additionally, the menubar supports configurable menu items, and modals and dialogs have been updated to support internationalization (i18n).
gooey/gui/components · high confidence
Rewritten widget components with new features and fixes
The widget components in gooey/gui/components/widgets have been rewritten to introduce several new capabilities and fix existing behaviors. A new FilterableDropdown widget provides auto-complete and filtering for dropdown selections, while new ColorChooser and TimeChooser widgets allow users to select colors and times. The RichTextConsole now supports clickable hyperlinks and zooming via Control+scrollwheel. Additionally, the system now supports an initial\_value option that supersedes default values, checkboxes honor their label options, and various bugs related to radio group selection, dropdown validation, and listbox updates have been resolved.
gooey/gui/components/widgets · high confidence
Test coverage
Added comprehensive test suite for Gooey widgets and configuration; Added integration test suite for Gooey run modes; Added tests for dynamic form validation and process controller behavior.
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 52.
Lenses
- Code Health 94
- Architecture 98
- Maturity 44
- Readiness 34
- Security 90
Changes since last survey
- 300 commits — 260 feature/other, 40 fixes
By area
- gooey/gui — 96 commits
- (root) — 87 commits
- gooey/python_bindings — 32 commits
- gooey/languages — 27 commits
- docs/releases — 16 commits
- gooey/tests — 12 commits
- docs/packaging — 10 commits
- docs/Gooey-Options.md — 5 commits
- gooey/init.py — 4 commits
- gooey/images — 4 commits
- docs/Using-Richtext-Controls.md — 2 commits
- docs/pull_request_template.md — 2 commits
- (repo) — 1 commit
- docs/Filterable-Dropdown-Guide.md — 1 commit
- docs/Other-Languages.md — 1 commit
Notable commits
- fix: Add regression test for language files
- fix: Fix Hebrew translations
- fix: Fix Issue 550: MultiDirChooser cannot handle paths with spaces
- fix: Fix Issue 553: Handle Windows volume labels correctly in MultiDirChooser.
- fix: Fix a small column chewing bug in the README.md
- fix: Fix bug where cli termination marker wasn't being set
- fix: Fix crash when no default on listbox
- fix: Fix exclusive groups spacing.
- fix: Fix hard coded absolute path in tests
- fix: Fix implicit float to int conversion raising DeprecationWarning
- fix: Fix incorrect option name if config section
- fix: Fix missing keys in langauages files
- fix: Fix show_stop_warning
- fix: Fix text wrapping in 1.0.3-release
- fix: Issue 554: Fix MultiFileChooser output formatting.
- fix: Patch regression causing listbox defaults to not be applied
- fix: Pre-fill counter dropdowns with 0 (not 1) to 10 inclusive. Fixes issue #569.
- fix: Revert "Improved the iter_parsers function of the argparse_to_json.py to allow"
- fix: Revert "fallback when decoding errors happen"
- fix: [fix] install dataclasses pkg only in python 3.6
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
chriskiehl/Gooey was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit c4994c12f1826034525a5e5cca184e16c0092ff1 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.