Всем привет!

В мае я опубликовал на Хабре первую статью о MarkMello.

Сайт · GitHub · Telegram · Поддержать проект

Изначальная задача была простой: сделать лёгкое приложение, которое быстро открывает локальный Markdown-файл сразу в режиме чтения.

Без запуска IDE, обязательного workspace, облачного аккаунта, базы данных и прочего лишнего для этого сценария.

После публикации мне начали писать пользователи. В основном благодарили за программу, сообщали об ошибках и предлагали функции, которых им не хватало. Появились issues и внешние pull request’ы.

Некоторые предложения я сначала не хотел принимать. Любой небольшой viewer довольно легко превратить в тяжёлый редактор, который умеет всё, но перестаёт нормально выполнять исходную задачу.

При этом часть предложенных функций действительно была нужна. В том числе мне самому.

Поэтому в версии 0.4.0 MarkMello получил поддержку папок, вкладок, файловых операций и поиска. Основной single-file сценарий при этом остался отдельным и быстрым.

Что изменилось

Открытие папок

Теперь можно открыть не только отдельный файл, но и папку с документами:

  • через меню;

  • сочетанием Ctrl+Shift+O;

  • перетаскиванием папки в окно.

Слева появляется файловое дерево. Поддерживаемые документы открываются в MarkMello, остальные файлы видны, но отображаются приглушёнными и остаются инертными.

Дерево загружается лениво. При открытии папки читается только её корень, содержимое подкаталогов — при первом раскрытии. Предварительного рекурсивного обхода и индексирования нет.

Служебные каталоги .git, node_modules, bin и obj скрываются.

Вкладки

Документы из папки открываются во вкладках.

У каждой вкладки сохраняются:

  • позиция прокрутки;

  • режим редактирования;

  • несохранённые изменения;

  • текущее состояние документа.

Переключение вкладки не приводит к повторному чтению файла и пересборке документа. Есть Ctrl+W, Ctrl+Tab, обратное переключение и меню переполнения для вкладок, которые не помещаются в окно.

Вторая папка открывается в отдельном окне. У каждого окна свой набор вкладок и своя сессия.

При повторном открытии папки восстанавливаются открытые вкладки и раскрытые каталоги. При обычном запуске MarkMello последнюю папку автоматически не открывает.

Файловые операции

Из дерева можно:

  • создать файл или папку;

  • переименовать;

  • дублировать;

  • показать файл в системном файловом менеджере;

  • удалить.

Удаление отправляет объект в корзину ОС.

Если переименовать открытый файл, его вкладка обновит путь и продолжит работать. При удалении закрываются связанные вкладки, но несохранённые изменения не теряются молча.

Отслеживание внешних изменений

После открытия папки запускается файловый watcher.

Если файл изменён другой программой, MarkMello обновляет дерево и открытый документ. Чистая вкладка перезагружается автоматически.

Если во вкладке есть несохранённые изменения, приложение предлагает выбрать: загрузить внешнюю версию или оставить текущие правки.

Переименование и удаление файлов на диске также обрабатываются.

Watcher создаётся только для открытой папки. В обычном single-file запуске его нет.

Поиск файлов по имени

В сайдбаре появился поиск по именам файлов внутри открытой папки.

Это не полнотекстовый поиск и не индексатор. Содержимое документов не читается.

Поиск работает в фоне, предыдущий запрос отменяется при изменении строки. Количество просматриваемых файлов и результатов ограничено, чтобы большая директория не блокировала интерфейс.

Esc очищает строку поиска.

Поиск внутри документа

Добавлен обычный Ctrl+F.

Совпадения подсвечиваются в документе, между ними можно перемещаться вперёд и назад. Поиск работает как в режиме чтения, так и в редакторе.

Функцию реализовал mjalalimanesh в PR #29.

Отдельно благодарю его за полноценную реализацию с локализацией, тестами, навигацией и корректной работой при перестроении документа.

Работа с буфером обмена

У блоков кода появилась кнопка Copy, которая копирует исходный код без fence-маркеров и названия языка.

Для выделенного фрагмента доступны дополнительные действия:

  • скопировать ссылку;

  • скопировать несколько ссылок списком;

  • скопировать выделение для Telegram Desktop с сохранением форматирования и кликабельных ссылок.

Mermaid и локальные ссылки

MarkMello отображает Mermaid-диаграммы внутри документа.

Рендер выполняется локально, внутри процесса, без WebView, Node.js и сетевых запросов. Дополнительная обработка запускается только при наличии Mermaid-блока.

Также работают относительные ссылки между локальными Markdown-файлами. Теперь папку с документацией можно использовать как связанный набор документов, не открывая IDE.

Что со скоростью

Workspace-подсистема не создаётся при открытии отдельного файла. Сайдбар, вкладки, watcher и файловые операции не входят в single-file startup path.

Производительность измерялась на AOT-сборках после основных этапов реализации.

В финальном парном прогоне:

Метрика

До финального этапа

После

Документ готов к чтению

472,2 мс

479,5 мс

Рабочее множество

202,4 МБ

199,4 МБ

Разница по времени находится в пределах измерительного шума. Потребление памяти не выросло.

Дополнительная инициализация перенесена в момент открытия папки. Для меня это принципиальное ограничение: если работа с папками начинает замедлять обычное открытие одного файла, такая реализация в релиз не идёт.

Контрибьюторы

Благодарю разработчиков, чьи изменения вошли в MarkMello:

  • Alex-ok2005 — исправления Windows shell, запуск без лишней консоли и двойной клик по заголовку окна;

  • DemchaAV — корректное разворачивание окна на текущем мониторе в сложных многомониторных конфигурациях;

  • romanilyin — работа с буфером обмена, копирование для Telegram, встроенные data:image, autolinks, клавиатурная навигация и исправления выделения;

  • mjalalimanesh — поиск внутри документа.

Нужны ли MarkMello плагины

Мне предложили добавить поддержку плагинов.

Идея понятная: оставить ядро MarkMello небольшим, а специфические функции вынести в расширения. Тогда каждый сможет реализовать нужный ему сценарий, не добавляя его в основное приложение.

Но plugin runtime — это отдельная подсистема: API, жизненный цикл, совместимость версий, интеграция с интерфейсом, изоляция ошибок и контроль влияния на производительность.

Я пока не решил, нужна ли MarkMello такая система.

Интересно мнение пользователей и разработчиков. Нужны ли плагины в подобном приложении? Какие расширения вы бы установили или написали сами? Пишите в комментариях.

Заключение

MarkMello остаётся viewer-first приложением. Новые функции возможны, если они решают реальную задачу и не ухудшают основной сценарий.

Если у вас есть идеи или конкретные проблемы, создавайте issue на GitHub или пишите в Telegram.

Также я открыт к новым проектам и задачам по разработке и архитектуре. Связаться со мной можно в Telegram: @g2a_2.

Актуальный релиз: MarkMello 0.4.0

Тем, кто ждет сбросов лимитов Codex и Claude Code, есть мой открытый проект и канал в тг - https://t.me/quotaradar.

Сайт · GitHub · Telegram · Поддержать проект

Всем продуктивного кодинга!

P.S. Казанцев и жителей Татарстана с днем города и республики! Сау булыгыз!

Комментарии (9)


  1. UniInter
    30.08.2026 17:59

    Какие расширения вы бы установили...

    • Два окна - правка md-кода слева, парадный просмотр справа

    • Экспорт в HTML, PDF, DOCX


    1. yermolaev Автор
      30.08.2026 17:59

      • два окна - сейчас так и есть, или вы о другом?

      • Экспорт многие просили, думаю стоит его реализовать на уровне ядра, без плагина


      1. UniInter
        30.08.2026 17:59

        Если есть два окна - очень хорошо. Я статью проскнировал взглядом наискосок, посмотрел скриншоты, поэтому, не сориентировался. Править и сохранять - это практическая польза.

        Недавно возникла нужда в такой программе - нашел CuteMarkEd. Это ваш конкурент.


        1. yermolaev Автор
          30.08.2026 17:59

          Да, есть полноценный режим редактирования в двух окнах


  1. IvaYan
    30.08.2026 17:59

    Какие расширения вы бы установили

    Поддержку формул и таблиц


  1. faxenoff
    30.08.2026 17:59

    Привет! Постоянно использую MarkMello, доволен.

    Делал недавно большой документ с meramid-диаграмами и столкнулся с такими проблемами:

    • новый формат meramid не поддерживается

    • диаграммы слишком широко рендерятся (уходят за горизонт)

    • диаграммам нельзя делать pan&zoom (по mouse middle button), shift+скролл не скроллит горизонтально.

    • в диаграмме нельзя выделить и скопировать текст

    • нельзя копировать диаграммы

    Так же сталкивался с багом фокуса на minimap - если фокуса нет, то клик на любое место вне текущей зоны - не переключает на него.

    Так же хотел предложить:

    • контрол “переключение темы” убрать в настройки куда-нибудь (light/night/system)

    • контрол “настройки” убрать из правого верхнего угла, чтобы в этом углу всегда была одна большая кнопка “Редактировать” и всё. Чтобы не целиться каждый раз.

    • добавить оглавление\структуру слева (опциональную).

    • в режиме редактирования хочется нормально редактировать (нужна достаточная ширина), а смотреть результат в “полный рост” уже не так важно. когда включаешь редактирование сейчас - неудобно слева и неполноценно справа. Предлагаю частично сохранять концепцию “минимапа” и рендер уменьшить раза в два-три, чтобы было читаемо и соответствовало полному выводу - но место не занимало.

    • лично я бы предпочитаю D2lang вместо meramid, прошу посмотреть на него и подумать над реализацией.

    Плагины, я думаю, не нужны. Приоритет стоит делать на скорость и полноценность UX в базовом использовании. Не надо превращать простую приятную программу в комбайн. Obsidian это плохой пример, я считаю.


    1. yermolaev Автор
      30.08.2026 17:59

      Большое вам спасибо за фидбек, все пожелания максимально уместны, большую часть сразу закину в план, над другой будем думать. Большое спасибо!


  1. KyHTEP
    30.08.2026 17:59

    Portable сборку под Windows планируете?


    1. yermolaev Автор
      30.08.2026 17:59

      В планах не было, но стоит рассмотреть