The REPL and script runner (gsi)
gsi is G#'s interactive REPL and single-file script runner. It ships as
the Gsharp.Repl .NET
global tool and is the fastest way to try the language without creating a
project. It is a full-screen, keyboard-first TUI built on
Spectre.Console that reuses the same Core compilation engine and
LanguageServer analysis as the compiler, so the prompt behaves like a
small editor (live syntax colors, completion, hover, and diagnostics)
rather than a plain line reader.
Install
gsi requires a .NET 10 runtime.
dotnet tool install --global Gsharp.Repl
Update or remove it with the usual global-tool commands:
dotnet tool update --global Gsharp.Repl
dotnet tool uninstall --global Gsharp.Repl
Command-line usage
Usage: gsi [file.gs] [/r:<assembly> ...] [--engine <name>] [--help] [--version]
file.gs Run the given G# script and exit.
/r:<file> Reference an assembly (repeatable).
/reference:<file> Alias for /r: (also -r: and --reference:).
--engine <name> Interactive engine: 'emit' (the default and only
engine; also via GSI_ENGINE). The legacy 'evaluator'
engine has been removed.
--help, -h Show this help and exit.
--version Show the gsi version and exit.
(no args) Start the interactive REPL.
Interactive REPL
Run gsi with no arguments in an interactive terminal to open the REPL:
gsi
Each submission becomes a transcript "cell" (your input plus its result or diagnostics). Because the session state carries forward, you can build up definitions incrementally:
» let xs = [1, 2, 3]
» import System.Linq
» xs.Select((x int32) -> x * 2).Sum()
= 12
The REPL is organised into keyboard-selectable tabs — REPL,
History, Variables, Diagnostics, Help, and Settings —
and includes a command palette (open it with :) for session commands:
| Command | Effect |
|---|---|
reset | Clear all accumulated session state and start fresh. |
clear | Clear the current editor input. |
theme [name] | Switch the color theme, or cycle themes when no name is given. |
load <file.gs> | Evaluate a .gs file into the current session. |
exit / quit | Leave the REPL. |
gsi needs an interactive terminal; if its input is redirected it exits
with a message instead of starting the UI.
Run a script and exit
Pass a .gs file to emit and run it.
This is handy for quick experiments and shell one-offs — no .gsproj
required:
gsi hello.gs
package Hello
import System
func greet(name string) string {
return "Hello, $name!"
}
Console.WriteLine(greet("world"))
Diagnostics are written to standard error, and the process exits with a
non-zero status if evaluation fails, so gsi file.gs composes cleanly in
scripts and CI checks.
Use /r:<path> or /reference:<path> to load an external runtime
assembly before evaluation:
gsi /r:/path/to/MyLibrary.dll hello.gs
The installed Gsharp.Repl tool bundles and loads Gsharp.Extensions
automatically, so scripts can use its optional and sequence helpers
without adding an explicit reference.
How it relates to gsc
Every driver uses the emitter, including gsi file.gs and the
interactive REPL. --engine emit explicitly selects the only engine;
any other command-line or GSI_ENGINE value is rejected. Both direct
gsc modes use the emitter, with /out: only controlling whether the
assembly is saved. See the
gsc reference and introduction for details.