UpdateSystem is a lightweight, self-contained auto-update launcher written in Python.
It checks for new versions, downloads updates, installs them, and launches your application — regardless of the language it is written in.
This system is ideal for small and medium projects that need a simple update mechanism without external dependencies or complex installers.
- Version checking via a remote version.txt
- Automatic update download from a ZIP archive
- Automatic extraction into the application directory
- Launches any type of program (Python, EXE, shell script, Java, Node, etc.)
- Customizable UI (title, theme, app name)
- No external libraries required
- Works on Windows, Linux, macOS
- The launcher starts and displays a small Tkinter window.
- It reads the local version from:
core/version.txt
- It fetches the remote version from:
http://yourserver/version.txt
- If a newer version exists, the user is prompted to update.
- If accepted, the launcher downloads:
latest.zip
- The ZIP is extracted into the application directory.
- The main program is launched.
UpdateSystem can launch any executable, not just Python scripts.
Modify this line in the launcher:
subprocess.Popen(["python3", PROGRAM_PATH])
Examples:
subprocess.Popen([PROGRAM_PATH])
subprocess.Popen([PROGRAM_PATH])
subprocess.Popen(["bash", PROGRAM_PATH])
subprocess.Popen(["java", "-jar", PROGRAM_PATH])
subprocess.Popen(["node", PROGRAM_PATH])
As long as the program can be executed from a command, UpdateSystem can launch it.
At the top of the launcher script, you can customize:
LAUNCHER_TITLE = "MyApp Launcher"
LAUNCHER_APP_NAME = "MyApp"
LAUNCHER_THEME = "clam"
- clam
- alt
- default
- classic
- vista (Windows)
- xpnative (Windows)
Your update server must provide two files:
Contains only the version number, for example:
1.2
or:
1.2.5
A ZIP archive containing the updated files.
The ZIP must mirror the structure of your application directory.
UpdateSystem compares versions as plain strings, not semantic version numbers.
This means:
- 1.2 works
- 1.10 works
- 1.2.5 works
- 2024.01.15 works
You are not limited to two digits — any consistent version format works.
If needed, the system can be upgraded to use semantic versioning or numeric comparison.
You can test updates using a local HTTP server:
python3 -m http.server 8000
Place version.txt and latest.zip in the directory where you run the server.
Then set:
REMOTE_VERSION_URL = "http://localhost:8000/version.txt"
REMOTE_ZIP_URL = "http://localhost:8000/latest.zip"
UpdateSystem/
├─ launcher/
│ └─ launcher.py
├─ core/
│ ├─ myprogram.py
│ └─ version.txt
└─ updates/
└─ latest.zip (downloaded automatically)
Make the launcher executable (Linux/macOS):
chmod +x launcher.py
Run it:
./launcher.py
Or simply:
python3 launcher.py
This project is free to use and modify.
No attribution required, but appreciated.