GeneralUpdate.Tools is a user-friendly desktop application that helps developers create and manage software update packages. It's part of the GeneralUpdate ecosystem - a complete solution for implementing automatic updates in your applications.
Think of it as your "Update Package Workshop" π where you can:
- π¦ Create differential update packages (only ship what changed!)
- π Generate version configuration files
- π§© Package and manage application extensions
- π‘ Beginner-Friendly: Simple visual interface - no complex command lines
- β‘ Save Bandwidth: Create differential packages that only include changed files
- π― Cross-Platform: Works on Windows and Linux
- π§ All-in-One: Three powerful tools in one application
Create differential update packages for your applications. Instead of shipping the entire application again, only include the files that changed!
What it does:
- Compares your old version with the new version
- Identifies only the changed files
- Creates a compressed update package (.zip)
- Optionally includes driver files
Perfect for: Reducing download sizes and update times
Generate version.json configuration files that tell your application where and how to download updates.
What it does:
- Creates version configuration in JSON format
- Specifies update package URLs and metadata
- Manages version history
- Supports hash verification for security
Perfect for: Managing update metadata and version tracking
Package your application extensions into distributable packages with proper metadata.
What it does:
- Compresses extension directories into .zip files
- Generates manifest.json with extension metadata
- Supports custom properties and dependencies
- Platform-specific targeting (Windows/Linux/MacOS)
Perfect for: Creating plugin systems and extension marketplaces
Before you begin, make sure you have:
- β Operating System: Windows 10+ or Linux (Ubuntu 20.04+)
- β .NET Runtime: .NET 8.0 SDK or Runtime
- β Disk Space: At least 200MB free space
- Go to the Releases page
- Download the latest version for your platform
- Extract the ZIP file to a folder
- Run the executable:
- Windows: Double-click
GeneralUpdate.Tool.Avalonia.exe - Linux: Run
./GeneralUpdate.Tool.Avaloniain terminal
- Windows: Double-click
# 1. Clone the repository
git clone https://github.com/GeneralLibrary/GeneralUpdate.Tools.git
cd GeneralUpdate.Tools
# 2. Navigate to the source folder
cd src
# 3. Restore dependencies
dotnet restore
# 4. Build the project
dotnet build
# 5. Run the application
dotnet runLet's create a differential update package step by step!
Scenario: You have version 1.0.0 of your app and want to update it to version 2.0.0
You need three folders:
- App Directory (π Old Version): Contains your version 1.0.0 files
- Release Directory (π New Version): Contains your version 2.0.0 files
- Patch Directory (π Output): Where the differential files will be saved
Example structure:
C:/MyApp/v1.0.0/ β Old version
C:/MyApp/v2.0.0/ β New version
C:/MyApp/patch/ β Temporary output folder
- Launch GeneralUpdate.Tools
- Click on the "Packet" tab at the top
- You'll see a form with several fields
Fill in the fields:
| Field | What to Enter | Example |
|---|---|---|
| Name | Package filename | MyApp_Update_v2.0.0 |
| App Directory | Path to old version | C:/MyApp/v1.0.0/ |
| Release Directory | Path to new version | C:/MyApp/v2.0.0/ |
| Patch Directory | Temp output path | C:/MyApp/patch/ |
| Format | Compression format | .zip (default) |
| Encoding | Text encoding | UTF-8 (recommended) |
If your update includes driver files:
- Click "Select" next to "Driver Directory"
- Choose the folder containing your driver files
- They'll be automatically placed in a
drivers/folder inside the package
- Click the "Build" button π¨
- Wait for processing (may take a few moments)
- Success! π You'll see a message "Build success"
- Your update package is saved in the parent directory of your Patch Directory
Result: You now have a .zip file containing only the changed files!
Now let's create a version.json file that tells your application about available updates.
- Click on the "OSS Packet" tab
- You'll see fields for version information
Fill in the details for your update:
| Field | What to Enter | Example |
|---|---|---|
| Version | Version number | 2.0.0.0 |
| Packet Name | Name of your .zip file | MyApp_Update_v2.0.0.zip |
| URL | Download URL | https://updates.myapp.com/packages/MyApp_Update_v2.0.0.zip |
| Date | Release date | 2026-02-11 |
| Time | Release time | 16:30:00 |
- Click the "Hash" button π
- Select your
.zippackage file - The tool will calculate a SHA256 hash
- This ensures the download wasn't corrupted or tampered with
- Click "Append" β to add this version to the list
- You can add multiple versions (version history)
- The JSON preview will update automatically
- Click "Build" button πΎ
- Choose where to save your
version.jsonfile - Success! You can now upload this file to your server
Result: You have a version.json file that looks like this:
[
{
"Version": "2.0.0.0",
"PacketName": "MyApp_Update_v2.0.0.zip",
"Url": "https://updates.myapp.com/packages/MyApp_Update_v2.0.0.zip",
"Hash": "abc123def456...",
"Date": "2026-02-11T16:30:00"
}
]Create a distributable extension package with metadata.
Make sure you have:
- A folder containing your extension files
- Extension metadata (name, version, description)
- Click on the "Extension" tab
- You'll see a comprehensive form
| Field | What to Enter | Example |
|---|---|---|
| Name | Extension identifier | MyAwesomePlugin |
| Display Name | User-friendly name | My Awesome Plugin |
| Version | Version number | 1.0.0.0 |
| Description | What it does | Adds awesome features to your app |
| Publisher | Your name/company | Your Company Name |
- Extension Directory: Click "Select" and choose your extension folder
- Export Path: Click "Select" and choose where to save the package
- Platform: Select target platform (Windows/Linux/MacOS/All)
- License: Enter license type (e.g., "MIT", "Apache-2.0")
- Categories: Enter categories separated by commas (e.g., "Tools, Productivity")
- Dependencies: Enter required extension IDs (comma-separated)
- Min/Max Host Version: Specify compatible app versions
- Custom Properties: Add key-value pairs for extra metadata
- Click "Generate" button π
- Wait for compression
- Success! Your extension package is created
Result: You get a .zip file like MyAwesomePlugin_1.0.0.0.zip containing:
- All your extension files
- A
manifest.jsonwith all the metadata
βββββββββββββββββββββββββββββββββββββββ
β [Packet] [OSS Packet] [Extension] β β Tabs
βββββββββββββββββββββββββββββββββββββββ€
β β
β Feature Content Area β
β β
β (Forms and controls for selected β
β feature appear here) β
β β
βββββββββββββββββββββββββββββββββββββββ
- π¨ Build/Generate: Creates the package/file
- π Select: Opens folder picker
- β Append: Adds item to list
- ποΈ Clear: Resets form fields
- π Copy: Copies content to clipboard
- π Hash: Calculates file hash
A: Think of it this way:
- Packet Builder creates the actual update files (the .zip package)
- OSS Packet Builder creates the configuration that tells where to download it
You need both! First create the package, then create the configuration file.
A: No! That's the beauty of differential updates. The tool automatically:
- Compares old vs. new versions
- Only includes changed/new files
- Removes deleted files during update
This saves bandwidth and speeds up downloads! π
A: The hash is like a fingerprint for your file. It ensures:
- β File wasn't corrupted during download
- β File wasn't tampered with
- β Users get exactly what you published
Always calculate and include the hash for security!
A: Yes! The project uses Apache 2.0 license, which allows commercial use. See LICENSE for details.
A: The tool runs on:
- β Windows 10 and later
- β Linux (Ubuntu, Debian, Fedora, etc.)
Generated packages can target:
- β Windows
- β Linux
- β MacOS (via Extension Manager)
A: Check out the main project:
Solutions:
- β Check that all directory paths exist
- β Ensure you have write permissions
- β Make sure disk has enough free space
- β Verify .NET 8.0 is properly installed
Solutions:
- β Run the application as administrator (Windows)
- β Check folder permissions
- β Make sure files aren't locked by another program
Solutions:
- β Install .NET 8.0 Runtime
- β Check system requirements
- β Try extracting to a different folder
- β Disable antivirus temporarily (some may block it)
Solutions:
- β Normal for large files (>500MB)
- β Be patient - it ensures security!
- β Consider splitting very large packages
We welcome contributions! Whether you:
- π Found a bug
- π‘ Have a feature idea
- π Want to improve documentation
- π§ Want to submit code
Please:
- Check existing issues
- Open a new issue to discuss
- Fork the repository
- Submit a pull request
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
You are free to:
- β Use commercially
- β Modify
- β Distribute
- β Sublicense
- GeneralUpdate - The main update framework
- GeneralUpdate.Core - Core update library
Need help? Have questions?
- π¬ GitHub Discussions
- π Report Issues
- β Star this repo if you find it useful!
Made with β€οΈ by the GeneralUpdate Team
