{"id":13494517,"url":"https://github.com/vslavik/winsparkle","last_synced_at":"2025-05-13T20:15:48.456Z","repository":{"id":777057,"uuid":"467582","full_name":"vslavik/winsparkle","owner":"vslavik","description":"App update framework for Windows, inspired by Sparkle for macOS","archived":false,"fork":false,"pushed_at":"2025-04-23T08:30:39.000Z","size":28321,"stargazers_count":1343,"open_issues_count":21,"forks_count":270,"subscribers_count":54,"default_branch":"master","last_synced_at":"2025-04-28T11:52:38.546Z","etag":null,"topics":["appcast","software-update","sparkle","update","windows"],"latest_commit_sha":null,"homepage":"http://winsparkle.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vslavik.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2010-01-11T16:13:10.000Z","updated_at":"2025-04-23T08:30:43.000Z","dependencies_parsed_at":"2023-07-06T11:01:25.635Z","dependency_job_id":"1b39b998-2895-4046-87cf-a4831d4f86f7","html_url":"https://github.com/vslavik/winsparkle","commit_stats":{"total_commits":426,"total_committers":51,"mean_commits":8.352941176470589,"dds":0.6009389671361502,"last_synced_commit":"54a95d96c38332ca13183ac101af698ebe038d92"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslavik%2Fwinsparkle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslavik%2Fwinsparkle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslavik%2Fwinsparkle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vslavik%2Fwinsparkle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vslavik","download_url":"https://codeload.github.com/vslavik/winsparkle/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254020640,"owners_count":22000756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appcast","software-update","sparkle","update","windows"],"created_at":"2024-07-31T19:01:25.714Z","updated_at":"2025-05-13T20:15:48.421Z","avatar_url":"https://github.com/vslavik.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg height=\"128\" src=\"https://github.com/vslavik/winsparkle/raw/refs/heads/master/artwork/WinSparkle.svg\" alt=\"WinSparkle\"/\u003e\n\u003c/p\u003e\n\nWinSparkle\n======\n\n**WinSparkle is a plug-and-forget software update library for Windows\napplications.**\n\n[![Build WinSparkle](https://github.com/vslavik/winsparkle/actions/workflows/build.yml/badge.svg)](https://github.com/vslavik/winsparkle/actions/workflows/build.yml)\n[![Crowdin](https://badges.crowdin.net/winsparkle/localized.svg)](https://crowdin.com/project/winsparkle)\n\nWinSparkle is heavily inspired by the Sparkle framework for Mac\nwritten by Andy Matuschak and others, to the point of sharing the same\nupdates format (appcasts) and having very similar user interface.\n\nSee https://winsparkle.org for more information about WinSparkle.\n\nDocumentation: [wiki](https://github.com/vslavik/winsparkle/wiki) and\nthe [winsparkle.h header](https://github.com/vslavik/winsparkle/blob/master/include/winsparkle.h).\n\n\n Using prebuilt binaries\n-------------------------\n\nThe easiest way to use WinSparkle is to either download the prebuilt `WinSparkle.dll`\nbinary from releases or use the `WinSparkle` [NuGet package](https://www.nuget.org/packages/WinSparkle/).\nPrebuilt binaries are available for x86, x64 and arm64 platforms.\n\n\n Bindings\n----------\n\nWinSparkle has a C API that makes it easy to use from many modern languages in addition to C/C++. In addition to that, several bindings for popular languages exist:\n\n* [How to use with C#/.NET](https://github.com/vslavik/winsparkle/wiki/Basic-Setup#managed-code--net--c-applications)\n* [Python](https://pypi.org/project/pywinsparkle/)\n* [Go](https://github.com/abemedia/go-winsparkle)\n* [Pascal](https://github.com/vslavik/winsparkle/tree/master/pascal) binding bundled with WinSparkle\n\n\n Building from sources\n-----------------------\n\nIf you prefer to build WinSparkle yourself, you can do so.  You'll have to\ncompile from a git checkout; some of the dependencies are included as git\nsubmodules.\n\nCheck the sources out and initialize the submodules:\n\n    $ git clone https://github.com/vslavik/winsparkle.git\n    $ cd winsparkle\n    $ git submodule init\n    $ git submodule update\n\nTo compile the library, just open `WinSparkle.sln` (or the one corresponding to\nyour compiler version) solution and build it.\n\nAt the moment, projects for Visual C++ (2010 and up) are provided, so you'll\nneed that (Express/Community edition suffices). In principle, there's nothing\nin the code preventing it from being compiled by other compilers.\n\nThere are also unsupported CMake build files in the cmake directory.\n\n Signing updates\n----------------\n\nUpdates must be cryptographically signed to prevent tampering. WinSparkle uses the same mechanism for signing and signature verification\nas [Sparkle Project](https://sparkle-project.org/documentation/#dsa-signatures) does. Its tools and verification methods are fully compatible.\n\nSignatures use the EdDSA algorithm with the Ed25519 curve. The public key is included in the app and enclosures in the appcast must have a signature attached to them.\n\nOlder DSA-based signatures are also supported, but they are deprecated and will be removed in a future version. [Upgrade your app to EdDSA](https://github.com/vslavik/winsparkle/wiki/Upgrading-from-DSA-to-EdDSA-signatures) if you still use DSA.\n\n### Companion tool\n\nWinSparkle provides a companion tool, `winsparkle-tool`, to generate keys and sign your updates using EdDSA signatures. This tool is included in the binary package under `bin` directory, in NuGet package (in `tools` directory, pointed to by `$(WinSparkleTool)` property), or you can be compile it from sources.\n\nSee the output of `winsparkle-tool --help` for more information.\n\n### Prepare signing with EdDSA signatures:\n\n1. First, make yourself a pair of EdDSA keys, using `winsparkle-tool generate-key`. This needs to be done only once.\n2. Back up your private key (eddsa_priv.pem) and keep it safe. You don’t want anyone else getting it, and if you lose it, you will not be able to issue any new updates!\n3. Add your public key to your project either as Windows resource or by calling `win_sparkle_set_eddsa_public_key()`\n\nFor example:\n```\n$ winsparkle-tool generate-key --file private.key\nPrivate key saved to private.key\nPublic key: pXAx0wfi8kGbeQln11+V4R3tCepSuLXeo7LkOeudc/U=\n\nAdd the public key to the resource file like this:\n\n    EdDSAPub EDDSA {\"pXAx0wfi8kGbeQln11+V4R3tCepSuLXeo7LkOeudc/U=\"}\n\nor use the API to set it:\n\n    win_sparkle_set_eddsa_public_key(\"pXAx0wfi8kGbeQln11+V4R3tCepSuLXeo7LkOeudc/U=\");\n```\n\n### Sign your update\n\nWhen your update is ready (e.g. `Updater.exe`), sign it and include signature\nto your appcast file:\n\n - Sign: `winsparkle-tool sign -f private.key Updater.exe`\n - Add standard output of previous command as `sparkle:edSignature` attribute\n of `enclosure` node of your appcast file.\n\nFor example:\n```\n$ winsparkle-tool sign --verbose --file private.key Updater.exe\nsparkle:edSignature=\"JhQ69mgRxjNxS35zmMu6bMd9UlkCC/tkCiSR4SXQOfBwwH1FkqYSgNyT5dbWjnw5F1c/6/LqbCGw+WckvJiOBw==\" length=\"1736832\"\n```\n\n\n### Legacy DSA signatures\n\nIf you still use DSA signatures, you can sign your updates using the `bin/legacy_*.bat` scripts and [the old instructions](https://github.com/vslavik/winsparkle/tree/v0.8.3?tab=readme-ov-file#dsa-signatures), as part of [transitioning to EdDSA signatures](https://github.com/vslavik/winsparkle/wiki/Upgrading-from-DSA-to-EdDSA-signatures).\n\n\n Where can I get some examples?\n--------------------------------\n\nDownload the sources archive and have a look at the\n[examples/](https://github.com/vslavik/winsparkle/tree/master/examples) folder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvslavik%2Fwinsparkle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvslavik%2Fwinsparkle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvslavik%2Fwinsparkle/lists"}