Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.5.2¶
Changed¶
- Release flow reworked so the version bump always lands before the tag. New
release.yml(workflow_dispatch, patch/minor/major) runsuv version --bump, commits it, then tags that commit — the tag can no longer point at a pre-bump commit. It stops at the tag; the GitHub Release is still created by hand, because releases created byGITHUB_TOKENdon't triggerpublish.yml publish.ymlnow fails fast when the tag doesn't match the packaged version, replacing PyPI's opaque400 File already existswith a clear error
0.5.1¶
Fixed¶
uv syncfailing withduplicate keyon[project.scripts]when the host has uv >= 0.8. Modernuv init .scaffolds a packaged app (src/ layout,uv_buildbackend, and a[project.scripts]table already present), which then collided with the sectionconfigure_pyproject()appends.run_uv_init()now passes--app --no-packageto pin the bare-application scaffold (rootmain.py, no build system, no[project.scripts]) across uv versions
0.5.0¶
Flet 0.86.5 upgrade and a partial move to Flet's declarative (@ft.component) style, plus a
round of dead-code removal. No user-facing feature changes — the UI behaves as it did in 0.4.0.
Changed¶
- Flet 0.82.2 → 0.86.5, with
flet-code-editorin lockstep (it pins Flet exactly) andfce-enhanced→ 0.2.2. Brings 3.2–6.7× faster control diffing and smarter.update() AppStateis now@ft.observable; imperative code keeps working. Three consequences needed handling and are pinned by 12 new tests: sets are not wrapped by Flet (sodev_packagesrebinds instead of mutating),dataclasses.asdict()raises on the wrappers (addedmodels.to_plain()at the preset/history boundary), andreset()was assigning a throwaway instance's collections- Packages display converted to a declarative component (
ui/packages_panel.py) — the imperative rebuild of the container's.controlslist is gone, and rendering is one pure function of state - Project structure display converted to a declarative component (
ui/folders_panel.py) — root files, folders, nested subfolders, selection, override indicator, and both context menus. Replaces_create_item_container(88 lines) and_process_folder_recursive get_canonical_file_path()moved fromhandlers/folder_handlers.pytocore/models.py; it is a pure function over folder dicts and the UI layer needs it- Refactoring pass across
core/andhandlers/: duplication removed, helpers merged, dead code deleted (~700 lines net) - CI:
actions/checkout→ v5,astral-sh/setup-uv→ v7 - 781 tests, up from 776
Fixed¶
- File editor, broken by the Flet upgrade.
fce-enhanced0.1.6 setself._dirty = Falseon anft.Columnsubclass, colliding with Flet's reservedBaseControl._dirtydict (new in 0.83) and blowing up the nextpage.update()on a mounted tree. Fixed upstream by extendingEditorHandle; uv-forger now drives the editor through the public handle instead of 15 private members - Pinned
pygments < 2.20, which was breaking code blocks in the docs site
0.4.0¶
Added¶
- Import tree structure from text — paste a box-drawing or indented text tree to define a complete project layout (folders, subfolders, files, and root-level files)
- Import dialog with live preview showing parsed folder/file/root-file counts
- Replace or Merge import modes — replace current structure entirely or merge with existing folders
- Root-level files from imported trees displayed individually in the main window folder display (selectable, editable, deletable)
- Root file content editing — edit imported root files (including UV-generated files like pyproject.toml, README.md) before build; edited content overrides UV defaults
- Imported structure builds at project root without app/ wrapper — all folders created directly at the project root level
- Tree parser handles
__init__.py→create_init: Trueconversion, root wrapper stripping, deeply nested structures, and both box-drawing and plain indentation formats - Imported structure state persisted in project history and presets
uv.lockadded to UV-generated files skip set to prevent empty lockfile parse errors- 71 new tests for tree parser, canonical path resolution, and filesystem handler — 776 total
0.3.5¶
Changed¶
- Renamed project and package to uv-forger and uv_forge to sync with PyPi release.
0.3.4¶
Changed¶
- Replaced non-functional "Save to config" checkbox with a Save as Preset button in the Project Structure section — opens the Presets dialog for proper, persistent configuration saving
- Button enables automatically when you modify the project configuration (select a framework/project type, add packages, or edit the folder structure)
- Added ⌘S / Ctrl+S keyboard shortcut to save as preset
Removed¶
- Removed unused save_config() method that wrote to the installed package directory (would be wiped on upgrade)
- Removed auto_save_folders state field and on_auto_save_toggle handler (dead code)
0.3.3 - 2026-03-18¶
Fixed¶
- Custom dropdown in light mode
0.3.2 - 2026-3-16¶
Internal¶
- Fixed image link
0.3.1 - 2026-03-15¶
Added¶
- Import existing folder from disk into project template
- "Import from Disk..." button in Add File/Folder dialog (Folder type)
- Right-click context menu on folders: "Import Folder from Disk..."
- Recursive directory scanner with depth (5) and file (50) limits
- Reads content of importable file types (.py, .json, .toml, .md, .yaml, .html, .css, .js, .ts, etc.)
- Skips hidden dirs, pycache, node_modules, .venv, dist, build, and other noise
- Skips binary/non-UTF-8 files gracefully with skipped count reported
- Imported file contents stored as overrides and written during build
- Context menu on folders (previously only files had one)
Changed¶
- Added httpx to FastAPI project type packages
- Updated FastAPI built-in preset to include httpx and pydantic as runtime deps
Internal¶
- Extracted
IMPORTABLE_EXTENSIONSconstant (was duplicated in two places) - 14 new tests (scanner, context menu, dialog) — 719 total
0.3.0 - 2026-03-15¶
Added¶
- Browse button in Add File dialog — import existing files from disk when adding to the folder tree (name auto-fills, content stored for build)
- FCE-enhanced file editor integration with syntax highlighting, search & replace, diff pane, and user templates
- File content editing via right-click context menu on files in the folder tree (Preview, Edit, Import from File, Reset to Default)
- Full-screen code editor powered by fce-enhanced with syntax highlighting, search & replace, diff pane, command palette, and font zoom
- User templates system — save custom boilerplate that persists across sessions and overrides built-in content
- Custom content indicators (✎ pencil icon) in the folder tree for files with overrides
- Edit File toolbar button for quick access to the editor
- Custom Templates Path setting for user-level boilerplate directory
- File overrides applied during build with priority over boilerplate
Changed¶
- Boilerplate fallback chain updated to check user templates first
- In-app docs (Help, About, Cheat Sheet) updated to cover file editor features
Fixed¶
- FilePicker API corrected from broken
get_file_path()topick_files()(Flet 0.80+ compatible)
0.2.0 - 2026-03-11¶
Added¶
- Configurable git remote mode: Local Bare Repo (default), GitHub (via
gh repo create), or None (local only) - GitHub CLI pre-flight checks (
ghinstalled and authenticated) before GitHub-mode builds - Settings for git remote mode, GitHub username/org, and private/public repo visibility
- Per-build git remote mode override in the Confirm Build dialog
- "Check gh status" button in Settings dialog
- GitHub Actions workflow for automatic docs deployment to GitHub Pages
Changed¶
- Git integration documentation rewritten across README, HELP, Cheat Sheet, and mkdocs guide pages
0.1.0 - 2026-03-10¶
Added¶
- Initial release of UV Forger
- Flet desktop GUI for scaffolding Python projects with UV
- 10 UI framework templates (Flet, PyQt6, PySide6, tkinter, customtkinter, Kivy, Pygame, NiceGUI, Streamlit, Gradio)
- 21 project type templates (Django, FastAPI, Flask, data science, ML, CLI tools, APIs, web scraping, and more)
- JSON-based template system with fallback hierarchy and intelligent merging
- Smart scaffolding with boilerplate file content and
{{project_name}}placeholder substitution - PyPI name availability checker with PEP 503 normalization
- Two-phase git integration (local repo + bare hub, auto commit and push)
- Dev dependency support (
uv add --dev) with amber badge in UI - Project metadata dialog (author, email, description, SPDX license)
- Post-build automation with configurable shell commands
- Rollback system for cleanup on build failure
- Named project presets with 4 built-in starters
- Recent projects history (last 5 builds)
- Persistent settings (project path, GitHub root, Python version, IDE, git defaults)
- Colour-coded log viewer with clickable source locations
- Dark and light theme toggle