dotnet-repl 0.1.99

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global dotnet-repl --version 0.1.99                
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest # if you are setting up this repo
dotnet tool install --local dotnet-repl --version 0.1.99                
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=dotnet-repl&version=0.1.99                
nuke :add-package dotnet-repl --version 0.1.99                

dotnet-repl

REPL preview in C# and F#

This project is an experiment using .NET Interactive and Spectre.Console to create a polyglot .NET REPL for use on the command line.

This is a personal project. Hopefully you enjoy it and find it useful. Contributions are welcome.

NuGet Status Build status

Installation

To install dotnet-repl, run the following in your terminal:

> dotnet tool install -g dotnet-repl

Features

Here's what you can do with it:

Code in C#

You can start dotnet-repl in one of a number of different language modes. The default is C#, so the following two commands are equivalent:

> dotnet repl --default-kernel csharp
> dotnet repl

Once the REPL has started, you can type C# code at the prompt and run it by pressing Enter. (Note that this is the C# scripting dialect, which is also used in Visual Studio's C# Interactive Window and in .NET Interactive Notebooks.)

<img src="https://user-images.githubusercontent.com/547415/121456759-68a85000-c95b-11eb-83a0-3b0010067e7b.png" width="60%" />

One notable feature of C# scripting is the ability to specify a return value for a code submission using a "trailing expression":

<img src="https://user-images.githubusercontent.com/547415/121977410-d0cfab00-cd3a-11eb-84a0-ab4f8889c9c7.png" width="60%" />

Code in F#

You can also start up the REPL in F# mode with --default-kernel or set the environment variable DOTNET_REPL_DEFAULT_KERNEL to fsharp:

> dotnet repl --default-kernel fsharp
# DOTNET_REPL_DEFAULT_KERNEL=fsharp
> dotnet repl

<img src="https://user-images.githubusercontent.com/547415/121456837-8d9cc300-c95b-11eb-9a91-1daae2dbc655.png" width="60%" />

📝 Submit multi-line entries

By pressing Shift-Enter, you can add multiple lines before running your code using Enter. This can be useful for creating multi-line code constructs, including declaring classes.

<img src="https://user-images.githubusercontent.com/547415/121463971-dc505a00-c967-11eb-8a57-b976cc6b311b.png" width="60%" />

Another handy aspect of multi-line entries is that you no longer need to use the the F# Interactive convention of terminating a line with ;; to indicate that the accumulated submission should be run. Pressing Enter will submit the code, and if you need more than one line of code at a time, you can use Shift-Enter to add lines before submitting.

<img src="https://user-images.githubusercontent.com/547415/121977822-b5b16b00-cd3b-11eb-90d6-2798289a47d5.png" width="60%" />

🚥 Switch languages within the same session

<img src="https://user-images.githubusercontent.com/547415/121456913-ab6a2800-c95b-11eb-9a47-0f0828b2ba3b.png" width="60%" />

🎁 Add NuGet packages

You can use #r nuget to install a package for the duration of the current session.

<img src="https://user-images.githubusercontent.com/547415/121978012-235d9700-cd3c-11eb-89d0-ba367089208c.gif" width="60%" />

Initialize your REPL session using a notebook

You can use a notebook file (either .ipynb or .dib) as an initialization script for the REPL.

> dotnet repl --notebook /path/to/notebook.ipynb

<img src="https://user-images.githubusercontent.com/547415/121982282-13e24c00-cd44-11eb-9c00-b0e04bb18276.gif" width="60%" />

Run a notebook as a script

You might also want to just use a notebook as a non-interactive script. You can do this by adding the --exit-after-run flag.

> dotnet repl --notebook /path/to/notebook.ipynb --exit-after-run

Both .ipynb and .dib files are supported.

If all of the notebook's cells execute successfully, a 0 exit code is returned. Otherwise, 1 is returned. This can be used as a way to test notebooks.

<img width="60%" alt="image" src="https://user-images.githubusercontent.com/547415/176486922-8db22f68-3198-4a5f-bdf7-398805b9f295.png">

If you redirect output when using --exit-after-run, the output will be formatted using the .ipynb JSON format, allowing you to rerun the code or view the results in a notebook editor.

💁‍♀️ Ask for help

You can see help for the REPL by running the #!help magic command. I won't print it here because it's a work in progress. Just give it a try.

Keyboard shortcuts

dotnet-repl supports a number of keyboard shortcuts. These will evolve over time but for now, here they are:

Keybinding What it does
Enter Submit and run the current code
Shift+Enter Inserts a newline without submitting the current code
Tab Show next completion
Shift+Tab Show previous completion
Ctrl+C Exit the REPL
Ctrl+Up Go back through your submission history (current session only)
Ctrl+Down Go forward through your submission history (current session only)

🧙‍♂️ Magic commands

Because dotnet-repl is built on .NET Interactive, it supports "magic commands". You can recognize a magic command by the #! at the start of a line.

You can see the list of supported magic commands by running the #!help magic command.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last updated
0.1.216 55,257 1/31/2024
0.1.208 9,956 11/8/2023
0.1.205 9,005 10/3/2023
0.1.204 14,039 6/6/2023
0.1.192 12,708 12/28/2022
0.1.187 1,178 12/24/2022
0.1.182 52,055 10/21/2022
0.1.173 1,924 9/29/2022
0.1.169 1,336 9/28/2022
0.1.166 1,315 9/28/2022
0.1.163 1,368 9/26/2022
0.1.159 1,386 9/22/2022
0.1.149 2,424 8/27/2022
0.1.146 1,577 8/25/2022
0.1.127 1,472 8/5/2022
0.1.99 815 8/2/2022
0.1.94 1,802 7/1/2022
0.1.80 852 6/25/2022
0.1.75 2,955 4/23/2022
0.1.72 2,166 2/6/2022
0.1.69 670 2/5/2022
0.1.65 1,351 11/16/2021
0.1.60 1,317 9/1/2021
0.1.55 836 8/6/2021
0.1.44 1,104 6/29/2021
0.1.41 535 6/29/2021
0.1.35 1,101 6/19/2021
0.1.30 597 6/18/2021
0.1.11 1,550 6/15/2021