Unified API
Create, list, get, and delete repositories. Create, list, get, merge, and close pull requests through one contract.
A unified .NET abstraction for GitHub, GitLab, Azure DevOps, and Gitea. Create repositories and pull requests, merge or close them, and add retries, timeouts, logging, and telemetry without changing your application code.
GitHubwith one builder// GitHub
var provider = new VcsProviderBuilder()
.WithGitHub(options =>
{
options.Token = Environment
.GetEnvironmentVariable("VCS_GITHUB_TOKEN");
options.DefaultOwner = "my-org";
})
.Build();Repository and pull request automation that stays portable when the provider changes.
Create, list, get, and delete repositories. Create, list, get, merge, and close pull requests through one contract.
Use GitHub, GitLab, Azure DevOps, or Gitea without changing your application logic. Swap the package and configuration.
The core package has no provider SDK. Install only the provider packages your application uses.
One page shape with nullable totals and provider-driven next-page metadata. One exception family for every provider.
Add retries, timeouts, concurrency limits, logging, and OpenTelemetry without modifying provider code.
Configure with the fluent API, environment variables, or YAML. The last configuration source wins.
Register a provider, choose a configuration source, and build. Every source produces the same settings dictionary.
using VcsManager;
using VcsManager.Builder;
using VcsManager.GitHub;
await using var provider = new VcsProviderBuilder()
.WithGitHub(options =>
{
options.Token = Environment.GetEnvironmentVariable("VCS_GITHUB_TOKEN");
options.DefaultOwner = "my-org";
})
.Build();
var repository = await provider.GetRepositoryAsync(new RepositoryRef
{
Owner = "my-org",
Name = "payments-api",
});
Console.WriteLine(repository.FullName);
export VCS_PROVIDER=github
export VCS_GITHUB_TOKEN=<token>
export VCS_GITHUB_DEFAULT_OWNER=my-org
# In your C# code:
var provider = new VcsProviderBuilder()
.WithGitHub()
.FromEnvironment()
.Build();
# vcs.yaml
provider:
github:
token: <token>
default:
owner: my-org
var provider = new VcsProviderBuilder()
.WithGitHub()
.FromYamlFile("vcs.yaml")
.Build();