A .NET ascii/ansi console engine written in C# for MonoGame and XNA. Create your own text roguelike (or other) games!
Failed to load latest commit information.
Fonts Added another font to the repo Jul 7, 2016
SadConsole.Ansi.Windows Fixed bug with AnimatedTextSurface font clearing RenderCells. Jul 18, 2016
SadConsole.Ansi No more two props in console for the same textsurface. Data is rename… Jun 8, 2016
SadConsole.Controls.Windows Fixed issue #33 (keyboard settings affect controls) Jul 20, 2016
SadConsole.Controls Fixed issue #33 (keyboard settings affect controls) Jul 20, 2016
SadConsole.Core.Windows Fixed bug with AnimatedTextSurface font clearing RenderCells. Jul 19, 2016
SadConsole.Core Refactor string parser. It's too big now! New parser: blink. Jul 23, 2016
SadConsole.GameHelpers.Windows Fixed bug with AnimatedTextSurface font clearing RenderCells. Jul 19, 2016
SadConsole.GameHelpers Merged changes from another commit on gameobject. Jul 18, 2016
SadConsole.Platforms nuget and readme's... Jul 7, 2016
SampleGames Fixed minor refactor on Castle. Jul 18, 2016
StarterProject Update starter project to compile to latest source tree Jul 24, 2016
StarterProjectContentXNA Initial source commit Mar 28, 2014
packages Updated references to nuget path as resolved by Visual Studio. Apr 29, 2015
.gitattributes Setup for code Mar 28, 2014
.gitignore updating git ignore Mar 24, 2016
ChangeLog.md Found error with Fade.Equals. Removed all effet Equals. The effects s… Jul 12, 2016
LICENSE.md Create LICENSE.md Mar 28, 2014
README.md README: Badge update Jul 7, 2016
SadConsole - Windows.sln Forgot to update solution when adding SadRogueSharp back in. Jul 20, 2016
SadConsole.sln Added world generation to sample project. Apr 3, 2016



Join the chat at https://gitter.im/Thraka/SadConsole nugetpkg

SadConsole is an MonoGame 3.5-based game library (using .NET 4.6) that provides an engine to emulate old-school console and command prompt style graphics. One or more textures are used to represent the standard ascii character set. SadConsole allows you to create console instances which can be managed independently of each other. A console is made up of individual cells which can have a foreground, background, character, and a special effect applied to it.

Right now, SadConsole targets Windows and Linux using MonoGame 3.5.

There is source code for a screen editor written in SadConsole. It's the most comprehensive project to date using SadConsole and is available at https://github.com/Thraka/SadConsoleEditor/
NOTE: The editor is not yet upgraded to SadConsole 3.0 and cannot be used with it.

See the wiki for more information.

Some sample games are provided in the SampleGames folder and are now part of the Visual Studio solution file.


Here are some of the features SadConsole supports.

  • Show any number of consoles
  • Uses PNG graphic fonts supporting more than 256 characters
  • Multiple fonts in your game
  • Draggable console windows whithin the game
  • Text GUI controls
  • Full keyboard support
  • Full mouse support
  • Read ansi files from the good old DOS days
  • Animation engine
  • Instruction engine

Demo video



SadConsole 2.x uses NuGet dependencies for its .NET dependencies, but requires some external dependencies on MacOS and Linux.


As a MonoMac project, Xcode must be installed along with the full Xamarin development kit.


SadConsole for Linux has been built against the Debian package of Mono, on Ubuntu 14.04 LTS. It requires SDL dependencies, specifically libsdl-mixer and libsdl-gfx.

Starter Project

StarterProject demonstrates how to use SadConsole in a multi-platform environment.

2.0 --> 3.0 Migration Notes

If you're migrating an existing 2.0 project to 3.0 here are some things to remember.

  1. If you're using the SadConsole.Consoles.Console type, the structure has changed a bit.
    1. You do not need to access the CellData or _cellData variables to manipulate the surface. Do a find/replace with an empty string.
    2. Anything related to Character was changed to Glyph. For example SetCharacter is now SetGlyph and CharacterIndex is GlyphIndex.
    3. If you accessed the CellData[indexor] directly, use textSurface[indexor].
  2. The SadConsole.Entities namespace has been removed.
    1. There is no longer a specific entity type.
    2. The animation portion of an entity has moved to the SadConsole.Consoles.AnimatedTextSurface type.
      • You can render animations as the surface of any console because of this
    3. The GameHelpers library has a SadConsole.Game.GameObject type that acts like the old entity type.
      • This type though is not part of the console system like entity was.
  3. Initialization is simpler. Use this line now. No need to load a font or resize manually, it's all handled for you

    var rootConsole = SadConsole.Engine.Initialize(_graphics, "IBM.font", 80, 25);

    If you're using the game component, it has changed too:

    var sadConsoleComponent = new SadConsole.EngineGameComponent(this, graphics, "IBM.font", 80, 60, () =>
        // ... do init stuff, no need to resize or load the font.

    Also not that Engine.Initialize will return a console to the specified screen size (in this case 80x25) and automatically adds it to the SadConsole.Engine.ConsoleRenderStack.