Мой блог
Разработка заметочника Leaflet для Windows на C# и Avalonia без WebView
Создание компактного приложения для работы с Markdown-файлами без тяжелых веб-технологий позволяет эффективно организовать локальные текстовые архивы. В качестве альтернативы инструментам на базе Electron был спроектирован быстрый заметочник Leaflet на базе платформы Avalonia и языка C#, функционирующий напрямую в операционной системе Windows без использования сторонних браузерных движков.
Проект ориентирован на минималистичное хранение данных и высокую скорость работы, обеспечивая прямой доступ к структуре папок и сохранение файлов в исходном формате .md.



Что планировалось реализовать в проекте
Основная концепция программы заключалась в отказе от закрытых баз данных в пользу обычных текстовых файлов, размещенных в произвольных директориях пользователя. Приложение должно поддерживать внутренние перекрестные ссылки вида [[Имя]], указание конкретных разделов, альтернативные подписи для ссылок, хештеги вида #проект/сайт, а также сквозной поиск по всему архиву записей.
Важным требованием выступал живой просмотр содержимого непосредственно в редакторе: строка с активным курсором отображает исходную разметку Markdown, в то время как остальные строки рендерятся в оформленном виде. Кроме того, функциональность предусматривала экспорт документов в форматы HTML и PDF, а также распространение в виде портативной папки с исполняемым файлом, готовой к запуску на чистых версиях Windows 10 и 11 без предварительной инсталляции.
Архитектура и внутреннее устройство приложения
Модуль хранения Vault осуществляет чтение всех файлов с расширением .md из выбранной папки, игнорируя скрытые директории, формирует индекс связей и отслеживает изменения в файловой системе. Процесс записи документов выполняется через временный файл, предотвращающий повреждение данных в случае аварийного завершения работы. При перемещении или изменении названия заметки специальный алгоритм автоматически корректирует все ссылочные указатели в остальных файлах, сохраняя целостность структуры.
Интерфейс редактора построен на основе AvaloniaEdit. Живой просмотр реализован через систему генераторов элементов и трансформеров, скрывающих разметку на неактивных строках. Такой подход позволяет корректно обрабатывать таблицы, списки, изображения и встроенные блоки контента. Табличные данные преобразуются в отдельные графические элементы, списки сохраняют иерархическую структуру отступов, а встроенные теги отображаются в виде интерактивных элементов интерфейса.
Технические причины выбора Avalonia и особенности реализации
Использование связки WebView или Electron могло ускорить разработку визуальной части, однако привело бы к появлению тяжелого фонового процесса, росту потребления оперативности и увеличению времени старта. Платформа .NET 8 и графический движок Skia в составе Avalonia 12 обеспечивают запуск компактного нативного процесса. Из-за ограничений совместимости установленной версии SDK и компилятора весь пользовательский интерфейс был написан непосредственно на языке C# без использования XAML-разметки.

Показатели производительности на тестовой базе из более чем 5000 строк демонстрируют быстрый отклик интерфейса, минимальное потребление оперативной памяти и высокую скорость обработки пользовательского ввода. Экспорт в PDF выполняется силами библиотеки SkiaSharp, встроенной в графический стек, с применением кастомного алгоритма оптимизации шрифтов для уменьшения конечного размера документов.
Обеспечение надежности и обработка внештатных ситуаций
Поскольку программа работает с реальными пользовательскими файлами, разработчик уделил повышенное внимание безопасности данных. При внешнем изменении файла открытая вкладка переходит в режим конфликта, предлагая варианты разрешения ситуации. Фоновое сохранение черновиков срабатывает через полторы секунды после правки, а встроенная система снимков версий позволяет откатывать изменения.
Механизм контроля единственного экземпляра приложения использует системные мьютексы и поименованные каналы для передачи путей запуска. Логика позиционирования окон учитывает параметры масштабирования дисплеев и конфигурации многомониторных систем.
Сборка, поставка и текущие ограничения
Дистрибутив программы поставляется в виде ZIP-архива самодостаточной сборки, не требующей установленного .NET Runtime. В проекте отсутствуют поддержка плагинов, облачная синхронизация и мобильные версии, поскольку Leaflet задумывался как классический локальный заметочник для работы с файлами на ПК.
