ib-update

July 4, 2026 · View on GitHub

ib-update-rs

crates.io Documentation License

A lightweight library for software update.

Features:

  • Lightweight
    • Based on nyquest, can use either platform-native HTTP client or reqwest.
    • 333 KiB on x86_64-pc-windows-msvc with HTTPS update checking.
  • Supported update sources:
    • GitHub Releases
  • Semantic Versioning handling.
    • Optional pre-release update.
  • Provide both sync/async APIs.
  • Optional support for retrying multiple servers under unstable networks.

Usage:

// cargo add ib-update --features blocking
// cargo add nyquest-preset --features blocking
fn main() {
    nyquest_preset::register();

    let info = ib_update::github::UpdateConfig::builder()
        .owner("owner")
        .repo("repo")
        .current_version(env!("CARGO_PKG_VERSION"))
        .build_blocking()
        .check()
        .expect("failed to check for updates");

    if info.has_update() {
        println!("New version {} is available!", info.latest().tag);
    }
}

Ib.Update.NET

NuGet

Usage:

using System;
using Ib.Update;

try
{
    var updater = new GitHubUpdater("Chaoses-Ib", "IbEverythingExt", "v0.1");
    var release = await updater.CheckForNewRelease();
    if (release is null)
    {
        Console.WriteLine("No new release");
        return;
    }

    Console.WriteLine($"{release.TagName}, published at {release.PublishedAt}");
}
catch (Octokit.ApiException e)
{
    Console.WriteLine(e.Message);
}

ib-update-cpp

Usage:

#include <IbUpdate/GitHubUpdater.hpp>
#include <iostream>

int main() {
    try {
        GitHubUpdater updater{ "Chaoses-Ib", "IbEverythingExt", "v0.1" };
        YAML::Node release = updater.check_for_new_release();
        if (release.IsNull()) {
            std::cout << "No new release\n";
            return;
        }

        std::cout << release["tag_name"].as<std::string>()
            << ", published at " << release["published_at"].as<std::string>()
            << '\n';
    }
    catch (std::runtime_error& e) {
        std::cout << e.what() << '\n';
    }
}

Projects using this library