{"id":36704724,"url":"https://github.com/purejava/winsparkle-java","last_synced_at":"2026-01-12T11:41:41.205Z","repository":{"id":60637083,"uuid":"544406451","full_name":"purejava/winsparkle-java","owner":"purejava","description":"Java bindings for WinSparkle","archived":false,"fork":false,"pushed_at":"2026-01-10T10:03:48.000Z","size":8254,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2026-01-11T03:12:55.749Z","etag":null,"topics":["appcast","java","software-update","sparkle","update","windows"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/purejava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"purejava","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":["https://www.paypal.com/donate?hosted_button_id=XVX9ZM7WE4ANL"]}},"created_at":"2022-10-02T11:55:16.000Z","updated_at":"2026-01-10T10:00:29.000Z","dependencies_parsed_at":"2023-10-13T00:01:52.987Z","dependency_job_id":"413776bf-3afa-4e79-94b7-5ae53c7575a5","html_url":"https://github.com/purejava/winsparkle-java","commit_stats":{"total_commits":40,"total_committers":1,"mean_commits":40.0,"dds":0.0,"last_synced_commit":"8f80eb9868b6fc7af5389b5ce5c55cd41936e8da"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/purejava/winsparkle-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purejava%2Fwinsparkle-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purejava%2Fwinsparkle-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purejava%2Fwinsparkle-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purejava%2Fwinsparkle-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/purejava","download_url":"https://codeload.github.com/purejava/winsparkle-java/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purejava%2Fwinsparkle-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","java","software-update","sparkle","update","windows"],"created_at":"2026-01-12T11:41:36.546Z","updated_at":"2026-01-12T11:41:41.197Z","avatar_url":"https://github.com/purejava.png","language":"Java","funding_links":["https://github.com/sponsors/purejava","https://www.paypal.com/donate?hosted_button_id=XVX9ZM7WE4ANL"],"categories":[],"sub_categories":[],"readme":"# winsparkle-java\n![winsparkle-java](winsparkle-java.svg)\n\n[![License](https://img.shields.io/github/license/purejava/winsparkle-java.svg)](https://github.com/purejava/winsparkle-java/blob/master/LICENSE)\n[![Maven Central](https://img.shields.io/maven-central/v/org.purejava/winsparkle-java.svg?label=Maven%20Central)](https://central.sonatype.com/search?q=winsparkle-java\u0026smo=true\u0026namespace=org.purejava)\n\nJava bindings for WinSparkle in 100% pure Java\n\n# Requires\nJava 22\n\n# Usage\nThe bindings come in two flavors:\n\n## Dependency *including* WinSparkle.dll 0.9.1\n```java\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.purejava\u003c/groupId\u003e\n    \u003cartifactId\u003ewinsparkle-java\u003c/artifactId\u003e\n    \u003cversion\u003e1.3.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\nWinSparkle.dll gets loaded by the bindings. You don't need to worry about that.\n\n## Dependency *excluding* WinSparkle.dll 0.9.1\n```java\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.purejava\u003c/groupId\u003e\n    \u003cartifactId\u003ewinsparkle-java-without-dll\u003c/artifactId\u003e\n    \u003cversion\u003e1.3.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\nYou need to place WinSparkle.dll in the Java library path yourself and the bindings take care of loading the dll from there.\n\nAll of the API function names are the same as the [original WinSparkle project](https://github.com/vslavik/winsparkle).\n\n## Initialize WinSparkle\nYour app must call `win_sparkle_init()` somewhere to initialize WinSparkle and perform the check. The best place to do it is as soon after startup as possible, but no sooner than the app's main window is shown. WinSparkle may show its UI soon after this call, so it’s important that the user can immediately associate its updates popup window with your app.\n\nBefore calling `win_sparkle_init()`, you must set the appcast URL with `win_sparkle_set_appcast_url()`:\n```java\n// Initialize WinSparkle as soon as the app itself is initialized, right\n// before entering the event loop:\nwinsparkle_h.win_sparkle_set_appcast_url(\"https://winsparkle.org/example/appcast.xml\");\nwinsparkle_h.win_sparkle_init();\n```\n\nFinally, you should shut WinSparkle down cleanly when the app exits:\n```java\nwinsparkle_h.win_sparkle_cleanup();\n```\n\n## A note on callbacks\nWinSparkle provides a lot of useful callbacks. Using them requires a shared session and to allocate the memory for a callback (aka setting the pointer to a function that is executed as the callback) in the shared session:\n```java\n// Declare a variable for the session\nprivate MemorySession session;\n\n// Open the session on initializing WinSparkle\nsession = MemorySession.openShared();\n\n// Pass the session to the static method of the callback when memory for the callback is allocated\nwin_sparkle_did_not_find_update_callback_t.allocate(yourCallback, session);\n\n// Close the session when WinSparkle is shut down\nsession.close();\n```\n\n# Copyright\nCopyright (C) 2022 Ralph Plawetzki\n\nThe winsparkle-java logo is made from [Icon Fonts](http://www.onlinewebfonts.com/icon) and is licensed by CC BY 3.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpurejava%2Fwinsparkle-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpurejava%2Fwinsparkle-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpurejava%2Fwinsparkle-java/lists"}