{"id":50486680,"url":"https://github.com/fieldcure/fieldcure-toolhost","last_synced_at":"2026-06-09T02:01:32.894Z","repository":{"id":358657197,"uuid":"1241985265","full_name":"fieldcure/fieldcure-toolhost","owner":"fieldcure","description":"Run .NET tools from NuGet without the .NET SDK — a dnx-compatible bridge for runtime-only environments (MS Store, MSIX, containers).","archived":false,"fork":false,"pushed_at":"2026-05-23T05:06:40.000Z","size":209,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T23:24:40.537Z","etag":null,"topics":["cli","dnx","dotnet","dotnet-tool","fxdnx","ms-store","msix","nuget","sdk-less","tool-runner"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/FieldCure.ToolHost","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/fieldcure.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-18T03:01:05.000Z","updated_at":"2026-05-23T05:06:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fieldcure/fieldcure-toolhost","commit_stats":null,"previous_names":["fieldcure/fieldcure-toolhost"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/fieldcure/fieldcure-toolhost","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fieldcure%2Ffieldcure-toolhost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fieldcure%2Ffieldcure-toolhost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fieldcure%2Ffieldcure-toolhost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fieldcure%2Ffieldcure-toolhost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fieldcure","download_url":"https://codeload.github.com/fieldcure/fieldcure-toolhost/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fieldcure%2Ffieldcure-toolhost/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34088013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cli","dnx","dotnet","dotnet-tool","fxdnx","ms-store","msix","nuget","sdk-less","tool-runner"],"created_at":"2026-06-01T23:01:41.478Z","updated_at":"2026-06-09T02:01:32.888Z","avatar_url":"https://github.com/fieldcure.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# FieldCure.ToolHost\n\n[![ToolHost](https://img.shields.io/nuget/v/FieldCure.ToolHost?label=ToolHost)](https://www.nuget.org/packages/FieldCure.ToolHost)\n[![ToolHost.Cli](https://img.shields.io/nuget/v/FieldCure.ToolHost.Cli?label=ToolHost.Cli)](https://www.nuget.org/packages/FieldCure.ToolHost.Cli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n**Run .NET tools from NuGet without the .NET SDK** — a `dnx`-compatible bridge for\nruntime-only environments (MS Store apps, MSIX-distributed software, runtime-only\ncontainers, CI bootstrappers).\n\nThis is a **time-bounded bridge** until Microsoft ships standalone `dnx`\n(tracking [dotnet/sdk#49796](https://github.com/dotnet/sdk/issues/49796)). When that\nships, this project enters maintenance and eventually deprecation. The API and CLI\nintentionally mirror `dnx` so migration is mechanical. See [ROADMAP.md](ROADMAP.md).\n\n## Why\n\n`dnx` is excellent — but it ships only with the .NET 10 SDK. If your software is\ndistributed through channels where users may have only the .NET *runtime* (the\nMicrosoft Store, MSIX installers, runtime-only Docker images, etc.), `dnx` is\nunavailable. `FieldCure.ToolHost` fills that gap with the same UX.\n\n## Prerequisites\n\nThis is a tool **runner**, not a runtime distributor. A .NET 8 or .NET 10\nruntime must be present on the host — ToolHost discovers the `dotnet` muxer\nthrough `PATH` or `DOTNET_ROOT` and uses it to launch tools. It deliberately\ndoes not ship a runtime of its own.\n\nIf you are shipping software to environments where users may not already have\na runtime (fresh PCs receiving your MS Store app, minimal Docker images, etc.),\nyou are responsible for bundling one alongside your application or guiding the\nuser to install it. ToolHost's job ends at \"find and use the runtime that's\navailable.\"\n\n## Two ways to use it\n\n### As a library (primary)\n\n```csharp\nusing FieldCure.ToolHost;\nusing System.Diagnostics;\n\nDotnetEnvironment env = await DotnetEnvironment.DetectAsync();\nDnxLiteRunner runner = new(env);\n\nusing Process tool = await runner.StartAsync(new ToolInvocationRequest\n{\n    PackageId = \"dotnetsay\",\n    ToolArguments = new[] { \"Hello from a runtime-only host!\" },\n    Policy = ToolVersionPolicy.CachedWithRefresh,\n});\n\ntool.StandardInput.Close();\nstring output = await tool.StandardOutput.ReadToEndAsync();\nawait tool.WaitForExitAsync();\nConsole.WriteLine(output);\n```\n\n### As a CLI (`fcdnx`)\n\n```bash\ndotnet tool install -g FieldCure.ToolHost.Cli\n\nfcdnx dotnetsay\nfcdnx dotnetsay@2.1.0\nfcdnx --prerelease MyTool.Preview\nfcdnx --add-source https://feed.example.com/v3/index.json MyCorp.Tool\n```\n\nSee [docs/flag-compatibility.md](docs/flag-compatibility.md) for the full flag matrix.\n\n## Scope\n\nIn scope:\n\n- Library + CLI (`fcdnx`) with full `dnx` flag parity for the v0.1 surface\n- NuGet global packages folder reuse (interoperates with `dotnet`/`dnx`)\n- Three resolution policies: `AlwaysLatest`, `CachedWithRefresh`, `CachedOnly`\n- Authenticated feeds via standard NuGet credential providers\n- Platform-agnostic .NET tools (`tools/{tfm}/any/`)\n- Opt-in child-process environment isolation for hosts that run untrusted tools\n  or MCP servers\n\nOut of scope and staying that way:\n\n- Tool installation/uninstallation (`dotnet tool install/update/uninstall`)\n- Replacing or wrapping the `dotnet` muxer\n- Features outside `dnx` parity, except narrow host-safety controls such as\n  environment inheritance isolation\n\nSee the **Lifecycle / Sunset Policy** section of [ROADMAP.md](ROADMAP.md). Feature\nrequests outside `dnx` parity will be politely closed.\n\n## Status\n\n- v0.1 — MVP: resolution + extraction + launch for managed tools, CLI parity for\n  the core flag set, NuGet credential plumbing.\n- v0.2 — Platform-specific tools (RID graph traversal), self-contained / NativeAOT\n  tools, expanded authenticated-feed test matrix.\n- v1.0 — API frozen, breaking changes require major bumps.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). Please read the scope discipline statement\nbefore opening a feature PR.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffieldcure%2Ffieldcure-toolhost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffieldcure%2Ffieldcure-toolhost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffieldcure%2Ffieldcure-toolhost/lists"}