SingBoxLib 1.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package SingBoxLib --version 1.1.0
                    
NuGet\Install-Package SingBoxLib -Version 1.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SingBoxLib" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SingBoxLib" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="SingBoxLib" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SingBoxLib --version 1.1.0
                    
#r "nuget: SingBoxLib, 1.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=SingBoxLib&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=SingBoxLib&version=1.1.0
                    
Install as a Cake Tool

<div align="center">

SingBoxLib

Configure and run sing-box with ease.
Based on sing-box's official documentation.

Nuget Nuget GitHub

</div>

Usage examples

Mixed inbound with Trojan outbound and grpc transport with tls:

var config = new SingBoxConfig
{
    Inbounds = new()
    {
        new MixedInbound
        {
            Listen = "127.0.0.1",
            ListenPort = 2080
        }
    },
    Outbounds = new()
    {
        new TrojanOutbound
        {
            Server = "yourserver.server",
            Port = 443,
            Password = "my top secret password!",
            Transport = new GrpcTransport
            {
                ServiceName = "grpcSeviceNameGoesHere",
            },
            Tls = new()
            {
                Enabled = true,
                ServerName = "sniGoesHere",
                Alpn = new() { "listOfAplnsGoHere" }
            }
        }
    }
};

Tun inbound:

var config = new SingBoxConfig
{
    Inbounds = new()
    {
        new TunInbound
        {
            InterfaceName = "myTunInterface",
            INet4Address = "172.19.0.1/30",
            Stack = TunStacks.gVisor,
            Mtu = 1500,
            AutoRoute = true,
        }
    },
    Route = new()
    {
        AutoDetectInterface = true
    }
};

Parse profiles

At this moment the following formats are supported: VMess VLess Shadowsocks Trojan Socks Http

var myProfileUrl = "trojan://myLovelyPassword@myserver.server:443?security=tls&sni=mySni&type=grpc&serviceName=myGrpcPath#MyTrojanServer";
var myProfile = ProfileParser.ParseProfileUrl(myProfileUrl);

// convert to outbound and use directly in sing-box config:
var myOutbound = myProfile.ToOutboundConfig();

Additionally you can convert parsed profiles back to string url:

var myProfileUrl = myProfile.ToProfileUrl();

Url testing

You can use UrlTester and ParallelUrlTester classes to easily test if the proxies are healthy and valid

var myProfileUrl = "trojan://myLovelyPassword@myserver.server:443?security=tls&sni=mySni&type=grpc&serviceName=myGrpcPath#MyTrojanServer";
var myProfile = ProfileParser.ParseProfileUrl(myProfileUrl);

var urlTester = new UrlTester(
    new SingBoxWrapper("sing-box-path"),
    // local port
    2080,
    // timeout in miliseconds
    3000,
    // retry count (will still do the retries even if proxy works, returns fastest result)
    5,
    // url to test using the proxy, defauts to http://cp.cloudflare.com, optional
    null
    );

var testResult = await urlTester.TestAsync(myProfile);
Console.WriteLine($"Success: {testResult.Success}, Delay: {testResult.Delay}");

Parallel:

var parallelTester = new ParallelUrlTester(
        new SingBoxWrapper("sing-box-path"),
    // A list of open local ports, must be equal or bigger than total test thread count
    // make sure they are not occupied by other applications running on your system
    new int[] { 2080, 2081, 2082, 2083, 2084, 2085 },
    // max number of concurrent testing
    6,
    // timeout in miliseconds
    3000,
    // retry count (will still do the retries even if proxy works, returns fastest result)
    5,
    // url to test using the proxy, defauts to http://cp.cloudflare.com, optional
    null);

List<ProfileItem> profilesToTest = GetMyProfilesFormSomewhere();
var results = new ConcurrentBag<UrlTestResult>();

await parallelTester.ParallelTestAsync(profilesToTest, new Progress<UrlTestResult>((result =>
{
    results.Add(result);
})), default(CancellationToken));
Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on SingBoxLib:

Package Downloads
Pouyan.SingBox

quieckly to create a vpn client that's support v2ray protocols

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on SingBoxLib:

Repository Stars
Mahdi0024/ProxyCollector
Automatically collects and tests v2ray proxies and puts them in github for everyone to use.
Version Downloads Last Updated
1.2.1 805 1/7/2025
1.2.0 116 1/7/2025
1.1.11 18,200 12/1/2023
1.1.10 1,080 11/15/2023
1.1.9 449 11/15/2023
1.1.8 475 11/15/2023
1.1.7 456 11/15/2023
1.1.6 467 11/14/2023
1.1.5 458 11/14/2023
1.1.4 484 10/27/2023
1.1.2 548 10/17/2023
1.1.1 1,300 9/30/2023
1.1.0 530 9/25/2023
1.0.9 567 9/23/2023
1.0.8 1,048 9/20/2023
1.0.7 719 9/18/2023
1.0.6 568 9/18/2023
1.0.5 545 9/18/2023
1.0.4 574 9/18/2023
1.0.3 546 9/13/2023