Files
LazyBearWorks/docs/razorconsole/overview.md

4.3 KiB
Raw Blame History

RazorConsole — Обзор

Репозиторий: https://github.com/RazorConsole/RazorConsole
Лицензия: MIT
Последняя версия: v0.5.0 (март 2026)
NuGet: RazorConsole.Core

Что такое RazorConsole?

RazorConsole — это .NET-библиотека для построения интерактивных TUI-приложений (Terminal User Interface) с использованием синтаксиса Razor-компонентов и движка рендеринга Spectre.Console.

Библиотека заполняет разрыв между веб-разработкой на Blazor/Razor и консольными приложениями: разработчик пишет компоненты .razor, а на выходе получает полноценный интерактивный терминальный интерфейс.

Ключевые возможности

Возможность Описание
Компонентная архитектура Razor-компоненты с data binding, event handling и lifecycle
25+ встроенных компонентов Макет, ввод, отображение, утилиты
Интерактивность Кнопки, текстовые поля, селекторы, навигация клавиатурой
Hot Reload Обновление UI без перезапуска через metadata update handler
VDOM + Translators Виртуальный DOM с расширяемой системой трансляторов
DI интеграция Построен на Microsoft.Extensions.Hosting
Галерея компонентов Глобальный инструмент razorconsole-gallery

Технологический стек

  • Runtime: .NET 8 / .NET 9
  • SDK: Microsoft.NET.Sdk.Razor (обязателен в .csproj)
  • Рендеринг: Spectre.Console
  • DI/Host: Microsoft.Extensions.Hosting
  • Синтаксис подсветки: ColorCode

Установка

dotnet add package RazorConsole.Core

Минимальный проект

Файл проекта (.csproj)

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <!-- другие настройки -->
</Project>

Компонент Counter.razor

@using Microsoft.AspNetCore.Components
@using Microsoft.AspNetCore.Components.Web
@using RazorConsole.Components

<Columns>
  <p>Current count</p>
  <Markup Content="@currentCount.ToString()" Foreground="@Spectre.Console.Color.Green" />
</Columns>
<TextButton Content="Click me"
            OnClick="IncrementCount"
            BackgroundColor="@Spectre.Console.Color.Grey"
            FocusedColor="@Spectre.Console.Color.Blue" />

@code {
  private int currentCount = 0;
  private void IncrementCount() { currentCount++; }
}

Program.cs

using Microsoft.Extensions.Hosting;
using RazorConsole.Core;

IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args)
    .UseRazorConsole<Counter>();

IHost host = hostBuilder.Build();
await host.RunAsync();

Примеры приложений

Пример Демонстрирует
examples/Counter/ Основы: кнопки, состояние, layout, styled text
examples/LLMAgentTUI/ Интеграция с AI SDK (OpenAI/Ollama), чат-интерфейс
examples/LoginForm/ Форма с валидацией, маскирование пароля, состояния ошибок

Компонентная галерея

dotnet tool install --global RazorConsole.Gallery --version 0.0.3-alpha
razorconsole-gallery

Структура репозитория

src/                — исходный код библиотеки
examples/           — примеры приложений
design-doc/         — архитектурные документы
nuget/              — конфигурация NuGet
release-notes/      — история релизов
docfx/              — генерация документации
website/            — сайт проекта

Сообщество