Skip to content

Provider Overview

updater.zig supports multiple Git hosting providers with a consistent API.

Built-in Providers

ProviderTypeAPI
GitHubCloudREST API v3
GitLabCloudREST API v4
CodebergCloudGitea API v1
Self-hostedOn-premiseVarious
CustomUser-definedAny

Provider Comparison

FeatureGitHubGitLabCodebergGiteaCustom
Rate limitingYesYesYesVariesN/A
Auth requiredNo*No*No*VariesN/A
Prerelease supportYesYesYesYesCustom
Draft supportYesNoYesYesCustom

*Auth required for private repositories

Quick Usage

zig
const updater = @import("updater");

// Use built-in providers
const github_result = try updater.checkGitHub(allocator, "owner", "repo", "1.0.0");
const gitlab_result = try updater.checkGitLab(allocator, "owner", "repo", "1.0.0");
const codeberg_result = try updater.checkCodeberg(allocator, "owner", "repo", "1.0.0");

// Use self-hosted providers
const myGitea = updater.providers.gitea("https://git.example.com");
const myGitlab = updater.providers.selfHostedGitlab("https://gitlab.example.com");

// Use fully custom provider
const myProvider = updater.providers.custom("custom", buildFn, parseFn, &headers);

API Endpoints

GitHub

GET https://api.github.com/repos/{owner}/{repo}/releases/latest

GitLab

GET https://gitlab.com/api/v4/projects/{owner}%2F{repo}/releases/permalink/latest

Codeberg/Gitea

GET https://codeberg.org/api/v1/repos/{owner}/{repo}/releases/latest

Authentication

For private repositories, add authentication headers:

GitHub

zig
.{ .name = "Authorization", .value = "Bearer YOUR_TOKEN" }

GitLab

zig
.{ .name = "PRIVATE-TOKEN", .value = "YOUR_TOKEN" }

Gitea/Codeberg

zig
.{ .name = "Authorization", .value = "token YOUR_TOKEN" }

Error Handling

All providers handle common HTTP errors:

StatusMeaningHandling
200SuccessParse response
401UnauthorizedReturn error
403ForbiddenReturn error (may be rate limit)
404Not foundReturn error
429Rate limitedReturn error
5xxServer errorReturn error

Next Steps

Released under the MIT License.