A syntax highlighting TextBox control for Avalonia with support for 37 programming languages and 14 built-in color themes. Features real-time highlighting, line numbers, and linting infrastructure.
$ dotnet add package SyntaxColorizerA syntax-highlighting TextBox control for Avalonia with support for multiple programming languages. Built using only native Avalonia features without external dependencies.


| Category | Languages |
|---|---|
| C-Family | C, C++, C#, Java, Kotlin, Scala, Swift, Objective-C |
| Scripting | JavaScript, TypeScript, Python, Ruby, PHP, Lua, Groovy, Elixir |
| Functional | F#, R, Haskell |
| Mobile | Dart |
| Systems | Rust, Go |
| Microsoft | Visual Basic .NET, PowerShell, MS SQL (T-SQL) |
| Database | Oracle SQL (PL/SQL) |
| Web | HTML, CSS, SCSS/Sass/Less, JSON, XML, YAML, Markdown, GraphQL |
| Config | TOML |
| DevOps | Bash, Dockerfile |
Install via the .NET CLI:
dotnet add package SyntaxColorizer
Or via the Package Manager Console in Visual Studio:
Install-Package SyntaxColorizer
Or add directly to your .csproj:
<ItemGroup>
<PackageReference Include="SyntaxColorizer" Version="1.0.0" />
</ItemGroup>
dotnet build
<ItemGroup>
<ProjectReference Include="path/to/SyntaxColorizer/SyntaxColorizer.csproj" />
</ItemGroup>
In your App.axaml, include the SyntaxColorizer styles:
<Application.Styles>
<FluentTheme />
<StyleInclude Source="avares://SyntaxColorizer/Controls/SyntaxHighlightingTextBox.axaml" />
</Application.Styles>
In your XAML file, add the namespace:
xmlns:controls="clr-namespace:SyntaxColorizer.Controls;assembly=SyntaxColorizer"
<controls:SyntaxHighlightingTextBox
Language="CSharp"
SyntaxTheme="{x:Static themes:BuiltInThemes.VisualStudioDark}"
ShowLineNumbers="True"
FontSize="14" />
using SyntaxColorizer;
using SyntaxColorizer.Controls;
using SyntaxColorizer.Themes;
// Set the language
editor.Language = SyntaxLanguage.CSharp;
// Set the theme
editor.SyntaxTheme = BuiltInThemes.VisualStudioDark;
// Get/set text
editor.Text = "public class Hello { }";
// Show/hide line numbers
editor.ShowLineNumbers = true;
| Property | Type | Description |
|---|---|---|
Text | string | The editable text content |
Language | SyntaxLanguage | The programming language for highlighting |
SyntaxTheme | SyntaxTheme | The color theme to use |
ShowLineNumbers | bool | Whether to show line numbers |
IsReadOnly | bool | Whether the text is read-only |
AcceptsReturn | bool | Whether Enter key inserts new lines |
AcceptsTab | bool | Whether Tab key inserts tabs |
UpdateDelay | int | Delay (ms) before updating highlighting |
| Theme | Style |
|---|---|
| Visual Studio Light | Light |
| Visual Studio Dark | Dark |
| Monokai | Dark |
| GitHub Light | Light |
| GitHub Dark | Dark |
| Solarized Light | Light |
| Solarized Dark | Dark |
| Dracula | Dark |
| One Dark | Dark |
| One Light | Light |
| Nord | Dark |
| Gruvbox Dark | Dark |
| Gruvbox Light | Light |
| Quiet Light | Light |
using SyntaxColorizer.Themes;
// Light themes
var vsLight = BuiltInThemes.VisualStudioLight;
var githubLight = BuiltInThemes.GitHubLight;
var solarizedLight = BuiltInThemes.SolarizedLight;
var oneLight = BuiltInThemes.OneLight;
var gruvboxLight = BuiltInThemes.GruvboxLight;
var quietLight = BuiltInThemes.QuietLight;
// Dark themes
var vsDark = BuiltInThemes.VisualStudioDark;
var monokai = BuiltInThemes.Monokai;
var githubDark = BuiltInThemes.GitHubDark;
var solarizedDark = BuiltInThemes.SolarizedDark;
var dracula = BuiltInThemes.Dracula;
var oneDark = BuiltInThemes.OneDark;
var nord = BuiltInThemes.Nord;
var gruvboxDark = BuiltInThemes.GruvboxDark;
The control includes a linting infrastructure for displaying code hints:
using SyntaxColorizer.Linting;
// Get a linter for the current language
var linter = LinterFactory.GetLinter(editor.Language);
// Run analysis
var hints = linter.Analyze(editor.Text);
// Add hints to the editor
foreach (var hint in hints)
{
editor.AddLintingHint(hint);
}
// Clear all hints
editor.ClearLintingHints();
using System.Text.RegularExpressions;
using SyntaxColorizer.Linting;
var linter = new CommonLinter(SyntaxLanguage.CSharp);
linter.AddRule(new LintingRule
{
Pattern = new Regex(@"\bmagic\b", RegexOptions.IgnoreCase),
Message = "Avoid using magic values",
Severity = LintingSeverity.Warning,
Code = "CUSTOM001"
});
Tokenization/Languages/:using System.Text.RegularExpressions;
using SyntaxColorizer.Tokenization;
public class MyLanguageTokenizer : LanguageTokenizerBase
{
private static readonly IReadOnlyList<TokenPattern> _patterns;
private static readonly IReadOnlyDictionary<string, TokenType> _keywords;
static MyLanguageTokenizer()
{
_keywords = new Dictionary<string, TokenType>
{
["if"] = TokenType.ControlKeyword,
["else"] = TokenType.ControlKeyword,
// ... more keywords
};
_patterns = new List<TokenPattern>
{
new(CommonPatterns.SingleLineComment, TokenType.Comment, 9),
new(CommonPatterns.DoubleQuotedString, TokenType.String, 6),
new(CommonPatterns.Identifier, TokenType.Identifier, 2),
// ... more patterns
};
}
public override SyntaxLanguage Language => SyntaxLanguage.MyLanguage;
protected override IReadOnlyList<TokenPattern> Patterns => _patterns;
protected override IReadOnlyDictionary<string, TokenType>? Keywords => _keywords;
}
Add the language to the SyntaxLanguage enum in SyntaxLanguage.cs
Register the tokenizer in TokenizerFactory.cs:
SyntaxLanguage.MyLanguage => new MyLanguageTokenizer(),
SyntaxColorizer/
├── src/
│ ├── SyntaxColorizer/ # Main library
│ │ ├── Controls/ # UI controls
│ │ ├── Linting/ # Linting infrastructure
│ │ ├── Themes/ # Color themes
│ │ └── Tokenization/ # Tokenizers
│ │ └── Languages/ # Language-specific tokenizers
│ └── SyntaxColorizer.Demo/ # Demo application
├── SyntaxColorizer.sln
└── README.md
cd src/SyntaxColorizer.Demo
dotnet run
The demo application demonstrates:
MIT License - see LICENSE file for details.
Contributions are welcome! Feel free to: