work-in-progress C# Lua interpreter
  • C# 99.7%
  • Nix 0.3%
Find a file
2026-07-03 20:48:40 -07:00
.vscode significant interpreter implementation 2026-06-04 21:12:56 -07:00
src significant lexer + parser work 2026-07-03 20:48:28 -07:00
.editorconfig VM pooling, statistics, fn, integer values, value accessors, fn type flattening, instruction set work 2026-06-04 21:13:00 -07:00
.envrc init 2026-06-04 21:12:47 -07:00
.gitignore significant interpreter implementation 2026-06-04 21:12:56 -07:00
CONTRIBUTING.md VM pooling, statistics, fn, integer values, value accessors, fn type flattening, instruction set work 2026-06-04 21:13:00 -07:00
flake.lock nix flake update 2026-07-03 20:28:36 -07:00
flake.nix init 2026-06-04 21:12:47 -07:00
LICENSE VM pooling, statistics, fn, integer values, value accessors, fn type flattening, instruction set work 2026-06-04 21:13:00 -07:00
LICENSE-dotnet VM pooling, statistics, fn, integer values, value accessors, fn type flattening, instruction set work 2026-06-04 21:13:00 -07:00
README.md update readme 2026-07-03 20:48:40 -07:00

UmbraSharp

a work-in-progress Lua interpreter written in C#, intended as an alternative to MoonSharp

goals

UmbraSharp will be backwards-compatible with MoonSharp syntax, and be able to compile Luau syntax (analysis will be left to luau-analyze, that is not the job of the compiler/interpreter)

it will not be a drop in replacement for MoonSharp

why

this project learns from the pain points of MoonSharp

  • performance (UmbraSharp uses structs over classes, a register machine over a stack machine, and avoids allocations like the plague)
  • documentation (upon completion, UmbraSharp will have detailed documentation, including on its bytecode)
  • bytecode focus (UmbraSharp focuses on both source and bytecode stability)
  • ownership (MoonSharp tracks and constantly checks the ownership of table/function/coroutine values. UmbraSharp is capable of handling values from other scripts, even within the same VM)

state of the project

critical

interpreter

  • data types (excl. coroutines)
  • instruction set
  • coroutines

compiler

  • lexing
  • parsing
  • generation of correct bytecode
  • optimizing (using more of the instruction set and being smarter about its behavior)

stdlib

  • lua parity
  • figure out debug library
  • moonsharp compat
  • umbrasharp specific libraries
  • yielding

non-critical

command-line interface

  • rudimentary CLI

debugger

  • comprehensive debugger protocol
  • implementation within the interpreter
  • client
  • debugger protocol documentation

testing

  • interpreter tests
  • stdlib tests
  • compiler tests

documentation

  • API docs
  • bytecode format
  • all internal documentation

misc

  • AOT support