SadConsole 9.2.2

.NET 5.0 .NET Core 3.1 .NET Standard 2.1
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package SadConsole --version 9.2.2
NuGet\Install-Package SadConsole -Version 9.2.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SadConsole" Version="9.2.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SadConsole --version 9.2.2
#r "nuget: SadConsole, 9.2.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SadConsole as a Cake Addin
#addin nuget:?package=SadConsole&version=9.2.2

// Install SadConsole as a Cake Tool
#tool nuget:?package=SadConsole&version=9.2.2

SadConsole Logo

Chat on discord NuGet

SadConsole is a generic library that emulates old-school console game systems. It provides command prompt-style graphics where one or more tile textures are used to represent an ASCII character set. Console's are made up of a grid of cells, each of which can have its own foreground, background, glyph, and special effect applied to it.

While SadConsole is a generic library that doesn't provide any rendering capabilities, "host" libraries are provided that add renderers to SadConsole. The two hosts provided by this library are for MonoGame and SFML.

SadConsole currently targets .NET 6, .NET 5, .NET Core 3.1, and .NET Standard 2.1.

For the latest changes in this release, see the notes below


Here are some of the features SadConsole supports:

  • Show any number of consoles.
  • Uses graphical tile-based images to build out an ASCII-character font with support for more than 256 characters.
  • Use more than one font file. However, each console is restricted to a single font.
  • Independently controlled entities for game objects.
  • Keyboard and Mouse support.
  • Text UI control framework.
  • Windowing capabilities.
  • Importers for DOS ANSI files, TheDraw text fonts, RexPaint, and Playscii.
  • Animation support.
  • Translating images to text-blocks.
  • Highly customizable system.
String display and parsing

string pic

GUI library

GUI library pic


scrolling console


SadConsole uses NuGet for its .NET dependencies:

Latest changes

v9.2.2 (01/22/2022)

(v9.2.2 Fix conversion of Mirror to SpriteEffects) (v9.2.1 Fix API documentation generation)


Breaking changes

  • [Breaking] Print(int x, int y, ColoredGlyph glyph) renamed to SetGlyph.
  • [Breaking] Surface SetEffect method signatures have changed.
  • [Breaking] Renamed Animation.ConvertImageFile to Animation.FromImage.
  • [Breaking] Removed ColorGradient as this type is implemented in the SadRogue.Primitives library as Gradient.

Behavioral changes

  • [Behavior] ColoredString.String.Set forced the string through the parser. This has now changed to use the characters directly.
  • [Behavior] All ColoredString contructors that used the (string) overload used the string parser. This is no longer the case.
  • [Behavior] ColoredString.IgnoreEffect no longer defaults to true.
  • [Behavior] Using Surface.Print methods that used the string parser for fore/back/mirror will force those settings after the string was parsed and not before.
  • [Behavior] Surface Clear and Fill methods now clear the effect.
  • [Behavior] Print statements have been updated to all act the same.
    • New overload added that accepts decorators.
    • Print clears the effect over the glyphs printed.
    • Print that uses the string processor now processes the string and then sets the appropriate overloaded settings. For example, the overload that sets the foreground and background colors will process the string and then set the foreground and background of the entire string. This is a change from previous behavior which set the colors at the start of the string processor and allowed the processor to override the overload.

Host changes

  • [MonoGame] Added DrawCallManager to allow injecting custom sprite batch rendering during final scene composition.
  • [MonoGame/SFML] Fixed a bug that caused all surfaces to redraw all cells 100% of the time even if nothing changed. Should bring 300%-400% fps increase in surfaces that aren't changing content.
  • [MonoGame/SFML] ITexture improvements for GetPixel/SetPixel; Demos on editing textures. (RychuP)
  • [MonoGame/SFML] The game host now has a FrameNumber property that increments each frame cycle.
  • [SFML] Fixed Settings.UnlimitedFPS. This now works.

Other changes

  • [Core] Fixed bug that caused redraws every frame even if nothing had changed.
  • [Core] Cursor didn't respect Cursor.UseStringParser because of how ColoredString was always using the string parser. This is fixed now.
  • [Core] Cursor has a Cursor.MouseClickRepositionHandlesMouse property which sets the handled flag on mouse left-click for the cursor reposition.
  • [Core] Cursor updates the space character appearance while printing. Previously only the first character was used to determine the space's appearance.
  • [Core] DrawString instruction overrides reset now, fixing a bug with having the instruction run more than once.
  • [Core] Surface.ShiftLeft|Right|Up\Down methods now move decorators.
  • [Core] New Surface.ShiftRow and Surface.ShiftColumn methods added. (Chris3606)
  • [Core] ColoredString.SetDecorators added, to fit in with SetForeground, SetBackground, etc.
  • [Core] Renamed EffectsChain to EffectSet and added new CodeEffect type.
  • [Core] Effects use TimeSpan instead of double.
  • [Core] The EffectsManager used by a surface now works on cell instances, not cell indices.
  • [Core] Resizing a surface without the clear parameter keeps existing effects instead of dropping them.
  • [Core] AnimatedSurface.FromImage helper added which converts image-based animations to an animated surface. (RychuP)
  • [Core] Added TheDraw font reader: SadConsole.Readers.TheDrawFont. Not a SadConsole Font.
  • [Core] Playscii support added in the SadConsoles.Readers namespace. (RychuP)
  • [Core] Entity renderer has a RemoveAll method to clear out all the entities.
  • [Core] Entity renderer now has a SkipExistsChecks property which can greatly improve performance when adding/removing entities (when you already have a lot of entities).
  • [Core] For entities, added AnimatedAppearanceComponent which can be added to an entity to animate the glyph like the AnimatedSurface did for the old entity type.
  • [UI] Fix various minor bugs with controls.
  • [UI] Textbox has more events related to text changing.
  • [UI] Textbox behaviors have changed slightly. For example, EditingText event doesn't fire when the text ends up being the same before editing.
  • [UI] ListBox items can be inserted as a ValueTuple<string, object> which will use the string (can be a ColoredString) as the display text of the item.
  • [StringParser] Introduced new interface for string parsing: StringParser.IParser.
  • [StringParser] Moved current parse code to StringParser.Default.
  • [StringParser] ColoredString.Parse is obsolete and forwards to ColoredString.Parser.Parse.
  • [StringParser] String processor now has a decorators command: [c:d glyph:mirror:color[:count]]
  • [StringParser] String processor no longer hides effects until they're used. All processed strings will set a null effect that will be set on the cells that are printed.
  • [ExtendedLib] Added ClassicConsoleKeyboardHandler and C64KeyboardHandler for cursor handlers.
  • [ExtendedLib] Added MoveViewPortKeyboardHandler component.
  • [ExtendedLib] Added surface.PrintFadingText extension method that prints text using the DrawString instruction with an effect.
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  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. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 is compatible. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on SadConsole:

Package Downloads

A canvas class that works with SadConsole and MonoGame host.


A graphics hosting library for SadConsol that targets MonoGame.


A graphics hosting library for SadConsole. Targets SFML and .NET 6.


A library of common classes that extend SadConsole with new controls, windows, and more.


A helper library for SadConsole games built with GoRogue.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on SadConsole:

Repository Stars
A .NET ascii/ansi console engine written in C# for MonoGame and XNA. Create your own text roguelike (or other) games!
Version Downloads Last updated
10.0.0-alpha1-debug 34 6/4/2023
9.2.2 2,376 1/22/2022
9.2.2-debug 112 1/22/2022
9.2.1 736 1/4/2022
9.2.0 1,179 12/31/2021
9.2.0-debug 95 12/31/2021
9.1.1 2,170 8/7/2021
9.1.1-debug 212 8/7/2021
9.1.0 801 7/6/2021
9.1.0-debug 184 7/6/2021
9.0.0 1,534 6/6/2021
9.0.0-debug 186 6/6/2021
9.0.0-beta4 363 1/15/2021
9.0.0-beta3 409 12/19/2020
9.0.0-beta2 357 10/9/2020
9.0.0-beta1 437 8/1/2020
9.0.0-alpha9 492 7/25/2020
9.0.0-alpha8 295 7/13/2020
9.0.0-alpha7 432 7/11/2020
9.0.0-alpha6 502 5/28/2020
9.0.0-alpha5 393 5/26/2020
9.0.0-alpha4 334 5/1/2020
9.0.0-alpha3 387 5/1/2020
9.0.0-alpha2 345 3/14/2020
9.0.0-alpha1 635 1/26/2020
8.99.3 2,432 8/15/2020
8.99.3-debug 306 8/15/2020
8.99.2 594 7/14/2020
8.99.2-debug 288 7/14/2020
8.99.1 1,215 4/11/2020
8.99.1-debug 343 4/11/2020
8.99.0 1,218 11/27/2019
8.99.0-debug 339 11/27/2019
8.9.1 1,051 11/5/2019
8.9.1-debug 327 11/5/2019
8.9.0 978 9/7/2019
8.9.0-debug 467 9/7/2019
8.8.1 936 7/28/2019
8.8.1-debug 476 7/28/2019
8.8.0 647 7/27/2019
8.8.0-debug 459 7/27/2019
8.7.1 775 6/22/2019
8.7.1-debug 475 6/22/2019
8.7.0 620 6/22/2019
8.7.0-debug 483 6/22/2019
8.6.0 915 4/14/2019
8.6.0-debug 500 4/14/2019
8.5.0 783 4/2/2019
8.5.0-debug 547 4/2/2019
8.4.1 740 3/19/2019
8.4.1-debug 516 3/19/2019
8.4.0 660 3/17/2019
8.4.0-debug 499 3/17/2019
8.3.0 705 3/10/2019
8.3.0-debug 510 3/10/2019
8.2.0 723 3/2/2019
8.2.0-debug 543 3/2/2019
8.1.0 702 2/28/2019
8.1.0-debug 511 2/28/2019
8.0.0 782 2/24/2019
8.0.0-pre5 592 2/19/2019
8.0.0-pre4 576 1/31/2019
8.0.0-pre2 619 12/30/2018
8.0.0-pre1 574 12/30/2018
7.3.0 795 12/29/2018
7.2.0 935 11/20/2018
7.1.0 964 10/19/2018
7.0.4 940 9/8/2018
7.0.3 830 9/8/2018
7.0.2 1,127 8/31/2018
7.0.0 868 8/29/2018
7.0.0-pre1 674 8/22/2018
6.5.0 1,069 6/12/2018
6.4.11 1,167 4/13/2018
6.4.11-pre1 989 4/6/2018
6.4.10 1,064 3/18/2018
6.4.9 1,007 3/18/2018
6.4.8 1,009 3/18/2018
6.4.7 1,042 3/16/2018
6.4.6 1,249 2/14/2018
6.4.5 1,093 2/3/2018
6.4.3 1,081 11/14/2017
6.4.2 1,147 8/11/2017
6.4.1 980 8/10/2017
6.4.0 1,038 7/25/2017
6.3.0 1,098 6/9/2017
6.2.2 1,056 5/20/2017
6.2.1 1,164 4/23/2017
6.2.0 1,003 4/22/2017
6.1.4 1,025 4/17/2017
6.1.3 1,671 4/3/2017
6.1.2 990 4/1/2017
6.1.1 999 4/1/2017
6.1.0 978 3/31/2017
6.0.1 1,068 3/19/2017
6.0.0 966 3/18/2017

9.2.0 contains lots of changes, including breaking changes. See NuGet or GitHub documentation for more information. 9.2.1 only fixes API documentation. 9.2.2 hardcodes the mirror enum values.