{"slug": "fluid-script-simple-net-server-side-scripting-with-browser-breakpoints", "title": "Fluid Script: Simple .NET server side scripting with browser breakpoints", "summary": "FluidScript, a statically checked scripting language for .NET applications from developer jorgeleo, compiles scripts to verified, deterministic P-code that runs on a purpose-built virtual machine with capability-based embedding and no implicit file system, network, process, or CLR reflection access. The language targets .NET 10 and ships with a Monaco-based browser playground supporting editing, syntax highlighting, diagnostics, execution, source-level breakpoints, and detached debug checkpoints, which the documentation describes as \"a development sample, not a production-ready multi-user execution service.\" Release helpers increment the patch version in fluid-script/FluidScript.csproj and create a Release package in artifacts/nuget/, persisting the version only after packaging succeeds.", "body_md": "**FluidScript** is a small, statically checked scripting language for .NET\napplications. It is designed for products that need approachable, user-authored\nautomation or business rules without granting scripts ambient access to the\nfile system, network, processes, or arbitrary CLR reflection.\n\nScripts compile to verified, deterministic P-code and run on a purpose-built virtual machine. Your application explicitly chooses the functions, data, and CLR types a script may use.\n\n- **Friendly authoring model** — readable declarations, functions, types,\narrays, dictionaries, string interpolation, JSON, error handling, and\nfamiliar`if` ,`while` ,`for` , and`switch` control flow.\n- **Early, useful feedback** — the compiler reports source-mapped diagnostics\nwith stable codes before a script runs; runtime faults retain their source\nlocation and script function context.\n- **Capability-based embedding** — the host registers only the operations and\nCLR types it intends to expose. There is no implicit I/O, process, network,\nor reflection capability.\n- **Predictable execution** — a verified stack VM with configurable instruction\nlimits, a bounded call depth, deterministic P-code serialization, and\nexplicit values flowing across the host boundary.\n- **Debuggable scripts** — debug P-code preserves source spans. The VM can stop\non source lines and create a portable, self-contained checkpoint that another\nprocess can validate and resume.\n\n```\nfunction greeting(name: string): string\n    return \"Hello, {name}!\"\nend\n\ndim names = [\"Ada\", \"Grace\", \"Lin\"]\nfor index = 0 to 2\n    print(greeting(names[index]))\nend\n```\n\nThe standard library is available automatically, including `String`, `RegExp`,\n`Number`, and `Math`:\n\n```\ndim amount = Number.parseFloat(\"19.95\")\ndim tax = Math.round(amount * 0.08 * 100) / 100\nprint(\"Total tax: {tax}\")\n```\n\nFluidScript fits well when an application needs controlled extensibility, for example:\n\n- configurable business rules, calculations, and validations;\n- workflow steps and domain-specific automation;\n- user-authored formulas and transformations over application-supplied data;\n- scripted behavior in a .NET desktop, service, or web application; and\n- an editor/playground experience with compiler diagnostics and source-level breakpoints.\n\nIt is not a replacement for unrestricted application code. The host owns security policy, data access, and every external capability exposed to a script. Give untrusted scripts only narrowly scoped functions and a suitable instruction budget.\n\nFluidScript targets .NET 10. Build and run the test suite from the repository root:\n\n```\ndotnet test FluidScript.sln --configuration Release --no-restore\n```\n\nTo try the included Monaco-based browser playground:\n\n```\ndotnet run --project fluid-script-monaco/FluidScript.Monaco.csproj\n```\n\nOpen the local URL printed by ASP.NET Core (normally\n`http://localhost:5000` or `https://localhost:5001`). The playground supports\nediting, syntax highlighting, diagnostics, execution, breakpoints, detached\ndebug checkpoints, and JSON-native variable edits. It is a development sample,\nnot a production-ready multi-user execution service.\n\nThe release helpers increment the patch component in\n`fluid-script/FluidScript.csproj`, create a Release package in\n`artifacts/nuget/`, and persist the version only after packaging succeeds.\n\nOn Windows:\n\n```\npack-nuget.bat\n```\n\nOn macOS or another zsh host:\n\n```\n./pack-nuget.sh\n```\n\n- [User manual](https://github.com/jorgeleo/fluid-script/blob/main/docs/user_manual.md) — learn the language, values, functions,\nflow control, JSON, imports, and the standard libraries.\n- [Integration guide](https://github.com/jorgeleo/fluid-script/blob/main/docs/integration.md) — add FluidScript to a .NET project,\nexecute and debug scripts, register application libraries/CLR types, persist\nP-code, and provide a module resolver.\n- [Language contract](https://github.com/jorgeleo/fluid-script/blob/main/docs/language.md) — the normative language semantics and\ndiagnostic behavior.\n- [P-code format](https://github.com/jorgeleo/fluid-script/blob/main/docs/pcode.md) — serialization and detached-debugging\ncontracts.\n- [Monaco sample](https://github.com/jorgeleo/fluid-script/blob/main/fluid-script-monaco/README.md) — details of the browser\nplayground and its HTTP protocol.\n\n`import` is intentionally host-resolved: an application supplies an\n`IFluidModuleResolver` that maps a script-visible name to source. Imports\ncurrently validate and compile dependencies, including missing-module and\ncycle detection. They do not yet execute modules, export symbols, or create\nscript namespaces. Use explicit host capabilities for shared behavior until\nthe staged module-linking features are available.\n\n```\nfluid-script/         Compiler, P-code model, virtual machine, and host API\nfluid-script.test/    MSTest coverage for language and runtime behavior\nfluid-script-monaco/  ASP.NET Core Monaco playground\ndocs/                 User, integration, language, P-code, and architecture docs\n```\n\n", "url": "https://wpnews.pro/news/fluid-script-simple-net-server-side-scripting-with-browser-breakpoints", "canonical_source": "https://github.com/jorgeleo/fluid-script", "published_at": "2026-09-15 18:09:05+00:00", "updated_at": "2026-09-15 18:19:41.559178+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["FluidScript", ".NET", "jorgeleo", "Monaco", "FluidScript.Monaco.csproj", "FluidScript.csproj", "ASP.NET Core"], "alternates": {"html": "https://wpnews.pro/news/fluid-script-simple-net-server-side-scripting-with-browser-breakpoints", "markdown": "https://wpnews.pro/news/fluid-script-simple-net-server-side-scripting-with-browser-breakpoints.md", "text": "https://wpnews.pro/news/fluid-script-simple-net-server-side-scripting-with-browser-breakpoints.txt", "jsonld": "https://wpnews.pro/news/fluid-script-simple-net-server-side-scripting-with-browser-breakpoints.jsonld"}}