{"id":19283046,"url":"https://github.com/vikashchauhan51/vconsole","last_synced_at":"2026-04-24T12:32:44.088Z","repository":{"id":176358562,"uuid":"655804838","full_name":"VikashChauhan51/vconsole","owner":"VikashChauhan51","description":"VConsole is a .NET library to parse command line arguments and execute commands.","archived":false,"fork":false,"pushed_at":"2023-07-12T04:48:52.000Z","size":1394,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-18T07:00:14.296Z","etag":null,"topics":["command-line","command-line-interface","command-line-parser","command-pattern","commandline","dotnet","dotnet-core"],"latest_commit_sha":null,"homepage":"","language":"C#","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/VikashChauhan51.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2023-06-19T16:23:26.000Z","updated_at":"2024-11-13T20:20:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"fb3348e8-2a09-48d4-a61b-fd5405c02632","html_url":"https://github.com/VikashChauhan51/vconsole","commit_stats":null,"previous_names":["vikashchauhan51/vconsole"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/VikashChauhan51/vconsole","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fvconsole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fvconsole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fvconsole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fvconsole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VikashChauhan51","download_url":"https://codeload.github.com/VikashChauhan51/vconsole/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VikashChauhan51%2Fvconsole/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32189678,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T15:28:30.493Z","status":"ssl_error","status_checked_at":"2026-04-23T15:28:29.972Z","response_time":53,"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":["command-line","command-line-interface","command-line-parser","command-pattern","commandline","dotnet","dotnet-core"],"created_at":"2024-11-09T21:29:32.136Z","updated_at":"2026-04-24T12:32:44.080Z","avatar_url":"https://github.com/VikashChauhan51.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VConsole\nVConsole is a .NET library to parse command line arguments and execute commands.\n\nThe **[VConsole](https://www.nuget.org/packages/VConsole)** command Line Parser Library offers CLR applications a clean and concise API for manipulating command line arguments and related tasks, such as defining switches, options and verb commands. It allows you to display a help screen with a high degree of customization and a simple way to report syntax errors to the end user.\n\n```cmd\n dotnet add package VConsole\n```\nor\n\n```cmd\n NuGet\\Install-Package VConsole\n```\n\n## At a glance:\n- Compatible with **.NET Core 6+**.\n- Doesn't depend on other packages (No dependencies beyond standard base libraries).\n- One line parsing using default singleton:` VConsole.Parser.Default.ParseArguments(...)` and multiples overload methods.\n- Map to scalar types, including `Enums`, `Guid`,`datetimeoffset` and **Nullable** scalar types, `Enums`,`datetimeoffset` and `Guid`.\n- Automatically ignore unused and additional provided parameters.\n- Automatically map parameter if value is:(with long name) `--url=value`, `-url=value`, `url=value` and (with short name) `--u=value`, `-u=value`, `u=value`.\n- Default `help` command: `myapp.exe help -c=command` or `myapp.exe --help`.\n- Default `version` command: `myapp.exe version` or `myapp.exe --version`.\n- Interactive mode support.\n- Support custom ***DependencyInjection*** to resolve the command dependencies with the help of `IDependencyResolver` interface.\n- Any **Culture** support as per your requirment. Default parser has ***InvariantCulture***.\n- Support custom parameter value separator. Default parser has `=` separator i.e.: `--parm=value`.\n\n\n## Quick Start Example\n- Create a class to define valid `command` with `varb` and `options` **attrbutes** to receive the parsed options.\n- Register commands using `RegisterCommand` or `RegisterCommandsFromAssembly` methods.\n- Call `ParseArguments` with the `args` string array.\n\nExample:\n\n``` C#\nusing VConsole;\n\n[Verb(\"clone\", HelpText = \"Clone a repository into a new directory.\")]\npublic class Clone : ICommand\n{\n    [Option('u', \"url\", Required = true, HelpText = \"Cloud repository URL.\")]\n    public string URL { get; set; } = string.Empty;\n    public Task Execute()\n    {\n        Console.WriteLine($\"Cloning a repository: {URL}\");\n        return Task.CompletedTask;\n    }\n}\n\n# top level statment in dotnet core\nawait Parser.Default\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n\nor\n\nstatic async Task Main(string[] args)\n{\n    await Parser.Default\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n}\n\n```\n\n```cmd\n# Build your application and run it like this:\nmyapp.exe clone --url=https://github.com/VikashChauhan51/vconsole.git\n\n ```\n\n\n## Dependency Resolver Example:\n\nHere we took an example with Microsoft ***Dependency Injection***, but you can use any one you prefer. Please add following nuget packages before to proceed:\n- VConsole\n- Microsoft.Extensions.DependencyInjection\n- Microsoft.Extensions.Logging.Console\n\n```C#\n// Crate a fake dependency service for command\n\npublic interface IFooService\n{\n    void DoThing(string message);\n}\n\npublic class FooService : IFooService\n{\n    private readonly ILogger\u003cFooService\u003e logger;\n    public FooService(ILoggerFactory loggerFactory)\n    {\n        logger = loggerFactory.CreateLogger\u003cFooService\u003e();\n    }\n\n    public void DoThing(string message)\n    {\n        logger.LogInformation($\"Doing the thing {message}\");\n    }\n}\n\n```\n\n```C#\n// Create a command with dependency\n\n[Verb(\"clone\", HelpText = \"Clone a repository into a new directory.\")]\npublic class Clone : ICommand\n{\n    [Option('u', \"url\", Required = true, HelpText = \"Cloud repository URL.\")]\n    public string URL { get; set; } = string.Empty;\n\n    private readonly IFooService fooService;\n    private readonly ILogger\u003cClone\u003e logger;\n    public Clone(IFooService fooService, ILogger\u003cClone\u003e logger)\n    {\n        this.fooService = fooService;\n        this.logger = logger;\n    }\n    public Task Execute()\n    {\n        fooService.DoThing(\"Pulling...\");\n        logger.LogInformation($\"Cloning a repository: {URL}\");\n        return Task.CompletedTask;\n    }\n}\n\n\n```\n\n``` C#\n// Create a service resolver\n\npublic class DependencyResolver : IDependencyResolver\n{\n    private readonly ServiceProvider serviceProvider;\n\n    public DependencyResolver(ServiceProvider serviceProvider)\n    {\n        this.serviceProvider = serviceProvider;\n    }\n    public object GetService(Type serviceType) =\u003e serviceProvider.GetService(serviceType) ?? throw new ArgumentOutOfRangeException(nameof(serviceType));\n\n}\n\n```\n\n``` C#\n// create DI container and parser. (Program.cs)\n\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\nusing VConsole;\n\n\n//setup our DI\nvar serviceProvider = new ServiceCollection()\n    .AddLogging(x =\u003e x.AddConsole())\n    .AddSingleton\u003cIFooService, FooService\u003e()\n    .BuildServiceProvider();\n\n//setup dependency resolver\nvar serviceResolver = new DependencyResolver(serviceProvider);\n\n//create parser\nvar parser = new Parser(serviceResolver);\n\n// configure commands\nawait parser\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n\n```\n\n```cmd\n# Build your application and run it like this:\n\nmyapp.exe clone --url=https://github.com/VikashChauhan51/vconsole.git\n\n```\n\n## Culture Example:\nDefault parser has ***InvariantCulture*** to parse command parameters values:\n\n``` C#\nusing VConsole;\n\n[Verb(\"clone\", HelpText = \"Clone a repository into a new directory.\")]\npublic class Clone : ICommand\n{\n    [Option('u', \"url\", Required = true, HelpText = \"Cloud repository URL.\")]\n    public string URL { get; set; } = string.Empty;\n    public Task Execute()\n    {\n        Console.WriteLine($\"Cloning a repository: {URL}\");\n        return Task.CompletedTask;\n    }\n}\n\n//create parser settings\nvar settings = new ParserSettings\n    {\n        // set current culture instead of Invariant.\n        ParsingCulture = Thread.CurrentThread.CurrentCulture\n    };\n\n//create parser with settings\nvar parser = new Parser(settings);\n\n// configure commands\nawait parser\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n\n```\n\n```cmd\n# Build your application and run it like this:\n\nmyapp.exe clone --url=https://github.com/VikashChauhan51/vconsole.git\n\n```\n\n## Interactive Mode Example:\nDefault parser has ***InteractiveMode*** off:\n\n``` C#\nusing VConsole;\n\n[Verb(\"clone\", HelpText = \"Clone a repository into a new directory.\")]\npublic class Clone : ICommand\n{\n    [Option('u', \"url\", Required = true, HelpText = \"Cloud repository URL.\")]\n    public string URL { get; set; } = string.Empty;\n    public Task Execute()\n    {\n        Console.WriteLine($\"Cloning a repository: {URL}\");\n        return Task.CompletedTask;\n    }\n}\n\n//create parser settings\nvar settings = new ParserSettings\n{\n    InteractiveMode = true\n};\n\n//create parser with settings\nvar parser = new Parser(settings);\n\n// configure commands\nawait parser\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n\n```\n\n```cmd\n# Build your application and run it without any arguments:\n\nmyapp.exe\n\n```\n\n## Custom Separator Example:\nDefault parser has `=` value for ***Separator***.\n\n``` C#\nusing VConsole;\n\n[Verb(\"clone\", HelpText = \"Clone a repository into a new directory.\")]\npublic class Clone : ICommand\n{\n    [Option('u', \"url\", Required = true, HelpText = \"Cloud repository URL.\")]\n    public string URL { get; set; } = string.Empty;\n    public Task Execute()\n    {\n        Console.WriteLine($\"Cloning a repository: {URL}\");\n        return Task.CompletedTask;\n    }\n}\n\n//create parser settings\nvar settings = new ParserSettings\n{\n    Separator = ':'\n};\n\n//create parser with settings\nvar parser = new Parser(settings);\n\n// configure commands\nawait parser\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n\n```\n\n```cmd\n# Build your application and run it like this:\n\nmyapp.exe clone --url:https://github.com/VikashChauhan51/vconsole.git\n\n```\n\n## Default Help Command Example:\n\n``` C#\nusing VConsole;\n\n[Verb(\"clone\", HelpText = \"Clone a repository into a new directory.\")]\npublic class Clone : ICommand\n{\n    [Option('u', \"url\", Required = true, HelpText = \"Cloud repository URL.\")]\n    public string URL { get; set; } = string.Empty;\n    public Task Execute()\n    {\n        Console.WriteLine($\"Cloning a repository: {URL}\");\n        return Task.CompletedTask;\n    }\n}\n\n// configure commands\nawait Parser.Default\n    .RegisterCommand\u003cClone\u003e()\n    .ParseArguments(args);\n\n```\n\n```cmd\n# Build your application and run it like this:\n\nmyapp.exe help --command=clone\nor\nmyapp.exe help -c=clone\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikashchauhan51%2Fvconsole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvikashchauhan51%2Fvconsole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvikashchauhan51%2Fvconsole/lists"}