Fuzr (pronounced fuser) is a wrapper, collection, or container (call it whatever you like) for .NET 10 file-based apps.
If you haven’t heard yet, starting with .NET 10, Microsoft introduced file-based apps, also known as scripting mode.
This means you can execute a single .cs file without needing a .csproj or any other project structure.
When I first discovered this feature, I was amazed! For someone like me who works across multiple platforms, this makes scripting much easier. Normally, I’d use PowerShell for Windows and Bash for Linux/macOS, but now I can write scripts once in C# and run them anywhere.
That’s where Fuzr comes in — it compiles all your scripts into a single executable. You can simply copy that one file, and inside it, you’ve got a bunch of scripts ready to go.
Example use case:
A DevOps engineer wants to run scripts on a server without installing anything. With Fuzr, you can run those scripts because the compiled binary already includes the .NET runtime.
The only requirement is that you have some .NET 10 file-based scripts. Then, compile them using the steps below — or use the included GitHub Actions workflow.
💡 Note: The binary might be large, but you can compress it. Still, it’s better than installing .NET on every machine.
Fuzr is most useful if you have multiple scripts. If you only have one, you can just compile it the usual way withdotnet build.
You can also modify CMakeLists.txt to change the assembly name, version, and other details to suit your program or company.
- Git
- CMake (multi-platform and easy to use)
- .NET 10 or later
-
Clone with submodules
git clone --recurse-submodules https://github.com/Fuzr-Project/Fuzr.git
-
Enter the
Fuzrfolder and generate the makefilescmake -S . -B build -
Build everything
cmake --build build
-
If everything is okay, a
binfolder will be created containing the Fuzr executable.
For production builds, it’s recommended to edit CMakeLists.txt and update:
FUZR_ASSEMBLY_NAME=> Change it to any name you likeSCRIPTS_VERSION=> Optional but can be useful
Each script needs a config file.
You can find an example in Scripts/Example/config.yaml.
Important notes:
- The
namefield is used to call your script inside the Fuzr executable. - The
nameshould match your script filename (without the.csextension).
For example:
If your script isexport-db.cs, set:name: export-db
Other fields are just for showing information on the help page.
Fuzr comes with a GitHub Actions workflow for automated builds.
Check the .github/workflows folder for examples.
- The compiled binary is large, but can be compressed to reduce size.
- Designed for .NET 10+ file-based apps only.
- Best used for multiple scripts rather than a single one.
- Runtime is included in the binary, which increases size but improves portability.
Contributions are welcome!
Feel free to open issues or submit pull requests to improve Fuzr.
Just make sure your code works on Windows, Linux, and macOS.
You can download the Fuzr executable from the Releases page and try it right away.
Example commands:
-
Help page
./FuzrExample help -
Check version
./FuzrExample version
-
Run example script
./FuzrExample example
-
Run rainbow script
./FuzrExample rainbow "this text is rainbow now"
-
Clone this repo with submodules, see Build Instructions.
-
Create a simple
.csscript (example:hello.cs) and put it in theScripts/hello-testdirectory:#!/usr/bin/env dotnet Console.WriteLine("Hello from Fuzr!");
-
Add a matching config file (
config.yaml):name: hello version: 1.0.0 categories: - example - testing shortDescription: short Description fullDescription: full Description helpText: help Text
-
Edit
FUZR_ASSEMBLY_NAMEinCMakeLists.txtto anything you like. For example,coolfuzr. -
Compile Fuzr (see Build Instructions) and run:
./coolfuzr hello