Git Project Updater Control
A standalone updater suite for any GitHub project. Drop it in any folder, point it at a repository, and it handles downloading, extracting, and keeping your project up to date — automatically.
Updraft ships as three separate executables, available individually or bundled in simple-updater-win.zip from GitHub Releases:
SimpleUpdater.exe — The standalone version. It lives inside your project folder and reads its configuration from a local updater-info.ini file. No installation required, no external dependencies.
ManagedUpdater.exe — The managed version. It works identically to the standalone version but also registers itself with a central registry in %APPDATA%\SimpleUpdater. This allows the Update Manager to track and manage it.
UpdateManager.exe — A central dashboard for all managed instances. From a single window, you can check for updates, update all projects at once, manage file exclusions, customize project shortcuts, and adjust per-project or global settings.
When launched in a folder without an existing configuration, the updater opens a setup wizard:
- Enter a GitHub repository URL (
https://github.com/owner/repoor shorthandowner/repo). - Choose an update source:
- Release Page — select one or more release asset files to download with convenient Select All and Deselect All controls.
- Source Code — download the latest commit as a zip archive.
- Set completion options:
- Open 'main' folder when done.
- Delete temporary compressed archives.
- Run script on completion (
update-done.bat). - Create shortcuts for executables, links, Python scripts, and subfolders:
- Include shortcuts to subfolders (e.g.,
saves/,docs/,config/) - Configurable subfolder depth:
- Root level only (
main/) - Up to 1 level of subfolders (
main/*) (Recommended default) - Up to 2 levels of subfolders (
main/*/*) - Up to 3 levels of subfolders (
main/*/*/*) - All subfolder levels (Unlimited)
- Root level only (
- Include shortcuts to subfolders (e.g.,
The updater then:
- Creates a project folder named after the repository.
- Downloads and extracts files into a
main/subdirectory with no extra nesting. - Generates a blank
update-done.batfor post-update automation. - Creates Windows shortcuts (
.lnk), folder shortcuts, or.batlaunchers based on your selected preferences. - Saves configuration to
updater-info.ini.
The updater opens directly to the dashboard and displays the current version.
From here:
- Check for Update — queries GitHub for a newer release or commit. Shows a comparison before downloading. Preserves excluded files.
- Exclude-File — browse files in
main/, search, filter, and mark files to be protected from updates. - Setting — toggle post-download options, startup updates, app self-updates, subfolder depth, shortcut customization, and select which release files to download.
- Run bat script — execute
update-done.batin a visible terminal, starting inmain/. - Create Shortcuts — generate or regenerate Windows shortcuts, folder shortcuts, and launcher scripts in the project folder or dedicated
Shortcuts/directory.
Protect local configurations, save files, or custom scripts from being overwritten during updates.
- Real-time search: Search files instantly by filename or relative path with a single-click clear button.
- Multi-criteria filters: Filter by All Files, Excluded Only, Included Only, Updates Available, Executables, Configurations & Data, or Python & Scripts.
- Interactive sorting: Click column headers (Name, Folder, Excluded?, Size) to toggle ascending/descending sort, or pick from the Sort dropdown.
- View modes: Switch between Hierarchical Folder Tree and Flat List view.
- Quick selection and batch operations: One-click actions to Select All [✓], Deselect All [ ], or Invert Selection with keyboard shortcut support (Ctrl+A).
- Individual updates: Update a single protected file from the repository when a newer version is available.
Updraft provides an intelligent shortcut engine tailored for each individual project:
- Subfolder shortcuts: Creates Windows folder shortcuts (
.lnk) for subdirectories withinmain/(e.g.,saves/,docs/,config/), letting you jump straight into project directories with one click. - Python script launchers: Instead of raw shortcuts, Python scripts (
.py,.pyw) are wrapped in.batlaunchers that automatically detectpythonorpy, change to the script directory, and keep the command prompt open upon error. - Noise directory filtering: Automatically skips non-essential directories such as
.git,__pycache__,venv,node_modules,build, anddist. - Per-project personalization:
- Choose layout: place shortcuts directly in the project root or in a dedicated
Shortcuts/subfolder. - Set a custom shortcut prefix (e.g.,
Runor the project name). - Open the Customize Shortcuts dialog to selectively toggle any candidate and assign custom display names.
- Choose layout: place shortcuts directly in the project root or in a dedicated
Monitor, check, and update all managed Git installations across your PC from one central window.
- + Create Updater: Deploy a new managed updater into any selected folder directly from the manager dashboard. Built-in conflict detection prevents overwriting existing updaters or configurations. If setup is cancelled or fails, the deployed executable is automatically cleaned up.
- + Add Existing Folder: Quickly register existing folders containing
updater-info.ini. - Update Project Updaters: Distribute the latest updater binaries to all managed projects on startup and on demand.
- Supports one-click Check All Updates and Update All.
- Per-project actions: Check, Update, Exclude Files, Settings, Run Script, Create Shortcuts, or Open Folder.
Updraft can automatically check and update your managed projects in the background whenever your computer starts:
- Non-intrusive: Configured via the standard Windows user registry key (
HKCU\Software\Microsoft\Windows\CurrentVersion\Run), requiring no administrator privileges. - Headless background execution: Runs silently with
--startup, downloads and installs matched updates without interrupting your workflow, preserves excluded configuration files, and triggersupdate-done.batif configured. - Logging and notifications: Records all startup actions to
%APPDATA%\SimpleUpdater\startup_update.logand displays a Windows desktop notification whenever projects are updated. - How to enable:
- In
UpdateManager.exe, click Global Settings, check Check and update all managed projects on Windows startup, and click Save and Close. - Individual projects can opt out of startup updates via their respective Settings dialog.
- In
- Updraft self-update on startup: The background startup runner also checks for Updraft releases. When a new version is detected, it automatically updates all registered
ManagedUpdater.exeinstances and stagesUpdateManager.execleanly without disruptive window popups.
Updraft executables (SimpleUpdater.exe, ManagedUpdater.exe, and UpdateManager.exe) can update themselves directly:
- Dedicated update button: Click Update Updraft (v1.1.0) in the main updater or manager dashboard toolbar to immediately check for newer releases.
- Update all instances via Update Manager: When updating Updraft through Update Manager, it updates
UpdateManager.exeand automatically distributes the newManagedUpdater.exebinary across all registered project directories on your machine. - Automatic update on launch: When enabled (default: on), the application checks GitHub in the background upon launch and alerts you if a newer version is available with one-click installation.
- Seamless binary replacement: Since Windows locks running executables, Updraft stages the downloaded binary, coordinates a clean handoff through a detached helper, swaps the executable, and automatically restarts the new version.
- Configurable: Toggle application self-updates on or off in the Settings dialog.
When a new release is published, asset file names often change (e.g., app-win64-v1.0.zip becomes app-win64-v1.1.zip). Updraft resolves this automatically using a three-tier matching algorithm:
- Exact match — filename is identical.
- Tag substitution — replaces the old version tag with the new one.
- Version pattern masking — strips version segments using regex and matches by structure (prefix, suffix, extension).
If no match can be found — for example, when a maintainer completely renames a file — a dialog appears listing the new release assets so you can pick a replacement. Your selection is saved and used for future updates.
updraft/
├── assets/ # Multi-resolution icons, logo, and header graphics
├── core/
│ ├── asset_matcher.py # Smart release asset matching algorithm
│ ├── config.py # updater-info.ini and AppData registry
│ ├── downloader.py # Download, extraction, exclusion, and shortcut logic
│ ├── git_client.py # GitHub API client (releases, commits, assets)
│ ├── self_updater.py # In-place self-update and binary swap orchestration
│ ├── startup.py # Windows startup registry & silent background runner
│ ├── theme.py # Windows 7 Aero GUI styling & window icons
│ └── version.py # Application metadata and version definitions
├── gui/
│ ├── asset_picker_dialog.py # Fallback asset picker when filenames change
│ ├── exclude_window.py # File exclusion manager (search, filter, sort)
│ ├── install_wizard.py # First-run setup wizard
│ ├── manager_window.py # Update Manager central dashboard
│ ├── settings_window.py # Settings dialog
│ ├── shortcut_dialog.py # Shortcut customizer and preview dialog
│ └── updater_window.py # Main updater dashboard
├── tests/
│ └── test_all.py # Unit and integration tests (34 tests)
├── build.py # PyInstaller build script
├── standalone_updater.py # Entry point: SimpleUpdater.exe
├── managed_updater.py # Entry point: ManagedUpdater.exe
└── update_manager.py # Entry point: UpdateManager.exe
Requires Python 3.13+ and PyInstaller.
Install dependencies:
pip install requests pyinstaller pywin32 pillow
Build all three executables:
python build.py
Output goes to dist/:
dist/SimpleUpdater.exedist/ManagedUpdater.exedist/UpdateManager.exedist/simple-updater-win.zip(bundle containing all three executables)
Run tests:
python -m unittest discover -s tests
- Windows 7 or later (tested on Windows 10 and 11)
- GitHub repository (public or with token for private)
- Internet access for update checks
- Antigravity contributed to the development of this app.
- The
update-done.batfile is created blank on first install. Edit it to run any post-update commands (rebuild steps, restart scripts, etc.). - The
main/folder andupdater-info.iniare excluded from version control by default. Do not deleteupdater-info.iniunless you want to re-run the setup wizard. - Shortcuts: Automatically discovers executables (
.exe,.bat,.cmd,.ps1,.vbs, etc.), Python scripts (.py,.pyw), web/document links (.html,.htm,.url), and subfolders (e.g.saves/,docs/,config/) up to the configured folder depth (default: up to 1 level of subfolders). Subfolder shortcuts open directly in Windows Explorer. Python scripts are wrapped in launcher.batfiles that auto-detect python/py and pause on errors. Each project can personalize shortcut rules, prefixes, and target folder layout (project root or dedicatedShortcuts/folder) via the Shortcut Customizer dialog.
MIT





