{"id":19541345,"url":"https://github.com/wingify/vwo-dotnet-sdk","last_synced_at":"2026-03-09T11:03:08.573Z","repository":{"id":38079857,"uuid":"203785996","full_name":"wingify/vwo-dotnet-sdk","owner":"wingify","description":"[DEPRECATED] VWO .NET SDK for server-side A/B Testing","archived":false,"fork":false,"pushed_at":"2025-03-25T14:04:45.000Z","size":489,"stargazers_count":5,"open_issues_count":4,"forks_count":6,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-07-23T12:19:22.558Z","etag":null,"topics":["dotnet","dotnet-sdk","murmurhash3","netstandard20","server-side","vwo","vwo-dotnet"],"latest_commit_sha":null,"homepage":"https://developers.vwo.com/docs/fullstack-overview","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wingify.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2019-08-22T12:00:07.000Z","updated_at":"2025-03-25T14:04:49.000Z","dependencies_parsed_at":"2023-09-28T10:43:12.446Z","dependency_job_id":"727afff5-49b7-4979-a6ad-3070638f36d1","html_url":"https://github.com/wingify/vwo-dotnet-sdk","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/wingify/vwo-dotnet-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wingify%2Fvwo-dotnet-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wingify%2Fvwo-dotnet-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wingify%2Fvwo-dotnet-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wingify%2Fvwo-dotnet-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wingify","download_url":"https://codeload.github.com/wingify/vwo-dotnet-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wingify%2Fvwo-dotnet-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30291844,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: 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":["dotnet","dotnet-sdk","murmurhash3","netstandard20","server-side","vwo","vwo-dotnet"],"created_at":"2024-11-11T03:09:59.158Z","updated_at":"2026-03-09T11:03:08.555Z","avatar_url":"https://github.com/wingify.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ⚠️ [DEPRECATED] VWO .NET SDK\n\n**⚠️ This project is no longer actively developed. ⚠️**\n\n**✅ We are only fixing critical bugs and security issues.**\n\n**❌ No new features, enhancements, or non-critical updates will be added.**\n\n#### Switch to *VWO Feature Management \u0026 Experimentation(FME)* – The Better Alternative! 🚀\n\nVWO’s FME product empowers teams to seamlessly test, release, optimize, and roll back features across their entire tech stack while minimizing risk and maximizing business impact.\n\n* Check out FME developer documentation [here](https://developers.vwo.com/v2/docs/fme-overview).\n* Check [this](https://developers.vwo.com/v2/docs/sdks-release-info ) for the list of all FME-supported SDKs.\n\n**💡 Need Help?**\nFor migration assistance or any questions, contact us at [support@vwo.com](support@vwo.com)\n\n------\n\n[![NuGet](https://img.shields.io/nuget/v/VWO.Sdk.svg?style=plastic)](https://www.nuget.org/packages/VWO.Sdk/)\n[![CI](https://github.com/wingify/vwo-dotnet-sdk/workflows/CI/badge.svg?branch=master)](https://github.com/wingify/vwo-dotnet-sdk/actions?query=workflow%3ACI)\n\n[![codecov](https://codecov.io/gh/wingify/vwo-dotnet-sdk/branch/master/graph/badge.svg?token=813UYYMWGM)](https://codecov.io/gh/wingify/vwo-dotnet-sdk)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n\nThis open source library allows you to A/B Test your Website at server-side.\n\n## Requirements\n\n- Works with NetStandard: 2.0 onwards.\n\n## Installation\n\n```bash\nPM\u003e Install-Package VWO.Sdk\n```\n\n## Basic usage\n\n**Using and Instantiation**\n\n```c#\nusing VWOSdk;\n\nSettings settingsFile = VWO.GetSettingsFile(accountId, sdkKey);     //  Fetch settingsFile from VWO.\nIVWOClient vwoClient = VWO.Launch(settingsFile);           //  Create VWO Client to user APIs.\n```\n\n**API usage**\n\n```c#\nusing System.Collections.Generic;\n\n// Activate API\n// Without Custom Variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e(){};\nstring variationName = vwoClient.Activate(campaignKey, userId, options);\n\n// With Custom Variable , variation targeting variable\npublic readonly static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    {\n        \"customVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"price\", 100.1}\n        },\n        \"variationTargetingVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"team\", \"qa-internal\"}\n        }\n    }\n};\n\nstring variationName = vwoClient.Activate(campaignKey, userId, options);\n\n// GetVariationName API\n// Without Custom Variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e(){};\nstring variationName = vwoClient.GetVariationName(campaignKey, userId, options);\n\n// With Custom Variable snd variation targeting variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    {\n        \"customVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"price\", '40'}\n        }\n        \"variationTargetingVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"team\", \"qa-internal\"}\n        }\n    }\n};\nstring variationName = vwoClient.GetVariationName(campaignKey, userId, options);\n\n// Track API\n// For CUSTOM CONVERSION Goal\nbool isSuccessful = vwoClient.Track(campaignKey, userId, goalIdentifier);\n\n// For Goal Conversion in Multiple Campaign\nDictionary\u003cstring, bool\u003e result = vwoClient.Track(List \u003cstring\u003e() { campaignKey1 campaignKey2 }, userId, goalIdentifier);\n\n// For Goal Conversion in All Possible Campaigns\nDictionary\u003cstring, bool\u003e result = vwoClient.Track(userId, goalIdentifier);\n\n// Without Revenue Value and Custom Variable\nDictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e(){};\nbool isSuccessful = vwoClient.Track(campaignKey, userId, goalIdentifier, options);\n\n// For only Revenue Value\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    { \"revenueValue\", 10.2 },\n};\nbool isSuccessful = vwoClient.Track(campaignKey, userId, goalIdentifier, options);\n\n// For only Custom Variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    {\n        \"customVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"location\", 'India'}\n        }\n    }\n};\nbool isSuccessful = vwoClient.Track(campaignKey, userId, goalIdentifier, options);\n\n// For Revenue Value and Custom Variable and Variation Targeting varaible\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    {\n        \"revenue_value\", 10\n    },\n    {\n      \"customVariables\", new Dictionary\u003cstring, dynamic\u003e()\n      {\n          {\n            \"gender\", \"f\"\n          }\n      }\n    },\n    {\n      \"variationTargetingVariables\", new Dictionary\u003cstring, dynamic\u003e()\n      {\n          {\n              \"abcd\", 1\n          }\n      }\n    }\n};\nbool isSuccessful = vwoClient.Track(campaignKey, userId, goalIdentifier, options);\n\n//IsFeatureEnabled API\n//Without Custom Variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e(){};\nbool isSuccessful = vwo.Client.IsFeatureEnabled(campaignKey, userId, options);\n\n//With Custom Variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    {\n        \"customVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"value\", 10}\n        }\n    }\n};\nbool isSuccessful = vwo.Client.IsFeatureEnabled(campaignKey, userId, options);\n\n//GetFeatureVariableValue API\n//Without Custom Variable\nDictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e(){};\ndynamic variableValue = vwo.Client.GetFeatureVariableValue(campaignKey, variableKey, userId, options);\n\n//With Custom Variable\npublic static Dictionary\u003cstring, dynamic\u003e options = new Dictionary\u003cstring, dynamic\u003e()\n{\n    {\n        \"customVariables\", new Dictionary\u003cstring, dynamic\u003e()\n        {\n            {\"value\", 10}\n        }\n    }\n};\ndynamic variableValue = vwo.Client.GetFeatureVariableValue(campaignKey, variableKey, userId, options);\n\n//Push API\nbool isSuccessful = vwo.Client.Push(tagKey, tagValue, userId);\n\n//Pass TagKey\nvar TagKey = \"abc\";\nbool isSuccessful = vwo.Client.Push(TagKey, tagValue, userId);\n\n//Pass TagValue\nvar TagValue = \"abc\";\nbool isSuccessful = vwo.Client.Push(tagKey, TagValue, userId);\n```\n\n**Configure Log Level**\n\n```c#\nVWO.Configure(LogLevel.DEBUG);\n```\n\n**Implement and Configure Custom Logger** - implement your own logger class\n\n```c#\nusing VWOSdk;\n\npublic class CustomLogWriter : ILogWriter\n{\n    public void WriteLog(LogLevel logLevel, string message)\n    {\n        // ...write to file or database or integrate with any third-party service\n    }\n}\n\n//  Configure Custom Logger with SDK.\nVWO.Configure(new CustomLogWriter());\n```\n\n**User Storage Service**\n\n```c#\nusing VWOSdk;\n\npublic class UserStorageService : IUserStorageService\n{\n    public UserStorageMap Get(string userId)\n    {\n        // ...code here for getting data\n        // return data\n    }\n\n    public void Set(UserStorageMap userStorageMap)\n    {\n        // ...code to persist data\n    }\n}\n\n\nvar settingsFile = VWO.GetSettingsFile(VWOConfig.AccountId, VWOConfig.SdkKey);\n\n//  Provide UserStorageService instance while vwoClient Instantiation.\nvar vwoClient = VWO.Launch(settingsFile, userStorageService: new UserStorageService());\n\n//  Set specific goalType to Track\n//  Available GoalTypes - GoalTypes.REVENUE, GoalTypes.CUSTOM, GoalTypes.ALL (Default)\nvar vwoClient = VWO.Launch(settingsFile, goalTypeToTrack: Constants.GoalTypes.REVENUE);\n\n//  Set if a return user should be tracked, default false\nvar vwoClient = VWO.Launch(settingsFile, shouldTrackReturningUser: true);\n```\n\n## Documentation\n\nRefer [Official VWO Documentation](https://developers.vwo.com/reference#fullstack-introduction)\n\n## Demo NetStandard application\n\n[vwo-dotnet-sdk-example](https://github.com/wingify/vwo-dotnet-sdk-example)\n\n## Setting Up development environment\n\n```bash\nchmod +x start-dev.sh;\nbash start-dev.sh;\n```\n\nIt will install the git-hooks necessary for commiting and pushing the code. Commit-messages follow a [guideline](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-guidelines). All test cases must pass before pushing the code.\n\n## Running Unit Tests\n\n```bash\ndotnet test\n```\n\n## Third-party Resources and Credits\n\nRefer [third-party-attributions.txt](https://github.com/wingify/vwo-dotnet-sdk/blob/master/third-party-attributions.txt)\n\n## Authors\n\n- Main Contributor - [Sidhant Gakhar](https://github.com/sidhantgakhar)\n- Repo health maintainer - [Varun Malhotra](https://github.com/softvar)([@s0ftvar](https://twitter.com/s0ftvar))\n\n## Changelog\n\nRefer [CHANGELOG.md](https://github.com/wingify/vwo-dotnet-sdk/blob/master/CHANGELOG.md)\n\n## Contributing\n\nPlease go through our [contributing guidelines](https://github.com/wingify/vwo-dotnet-sdk/CONTRIBUTING.md)\n\n## Code of Conduct\n\n[Code of Conduct](https://github.com/wingify/vwo-dotnet-sdk/blob/master/CODE_OF_CONDUCT.md)\n\n## License\n\n[Apache License, Version 2.0](https://github.com/wingify/vwo-dotnet-sdk/blob/master/LICENSE)\n\nCopyright 2019-2021 Wingify Software Pvt. Ltd.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwingify%2Fvwo-dotnet-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwingify%2Fvwo-dotnet-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwingify%2Fvwo-dotnet-sdk/lists"}