Документ в A4
Договор на две страницы: заголовки, списки, таблица со сроками и суммой. Поправьте абзац — и увидите, как это выглядит внутри чужого приложения.
Microsoft Office ушёл из России, а договоры, сметы и акты никуда не делись: они по-прежнему живут в DOCX и XLSX. Замену продают целыми пакетами на рабочее место — но встроить её в свой продукт нельзя. FastOffice продаёт именно это: документный и табличный процессоры внутрь чужого продукта, под его именем и в его контуре. A4 работает с документами Word, F1 — с таблицами Excel.
Ниже — не планы. Каждое число снято с установленных сборок, а не выписано из дорожной карты: при каждом изменении документации сборка сверяет их с кодом продуктов и не проходит, если они разошлись.
Смыслом документа владеет собственное ядро на Rust: оно разбирает файл, считает вёрстку и формулы, ведёт историю и записывает результат. Это не обёртка вокруг чужого редактора — что это значит рядом с Excel.
Оба редактора открываются прямо на сайте, в браузере, без установки: это не запись экрана, а работающая программа. Документ и книга живут в вашей собственной кабинке — правки видите только вы. Если площадка в этот момент не поднята, на месте рамки будет снимок и подпись об этом.
Документ в A4
Договор на две страницы: заголовки, списки, таблица со сроками и суммой. Поправьте абзац — и увидите, как это выглядит внутри чужого приложения.
Смета в F1
Таблица с формулами. Измените количество или цену — суммы, доли и оба итога пересчитает ядро, а не разметка страницы.
A4 — документы Word
Редактор и процессор документов: открывает файл Word, размечает страницы, даёт править, сохраняет и открывает заново — всё внутри вашего окна. Снаружи это 28 команд одного протокола, и другого пути к документу нет.
F1 — таблицы Excel
Табличный процессор: формулы, история правок, чтение и сохранение книг. В память берётся только то, что нужно сейчас, поэтому большие книги открываются. Снаружи это один контракт операций — тот же самый и на рабочем месте, и в браузере, и на сервере: 203 операции описаны, 185 принимает ядро последнего выпуска.
Ваш продукт, а не чужое окно
Пользователь открывает документ из привычной карточки. Редактор появляется в том же окне и под тем же брендом; новая версия возвращается в существующий контур хранения и аудита.
Один источник правды о документе
Модель, формулы, история и запись файла живут в ядре. Второго движка на стороне страницы нет — значит документ значит одно и то же на рабочем месте, в браузере и на сервере.
Отказ вместо тихой порчи
Устаревшая ревизия, защищённый лист или неподдержанная операция дают явный отказ с причиной — до того, как файл изменится. Документа, изменённого наполовину, не возникает.
Агент работает как одна сделка
Он ходит тем же путём, что и человек: посмотреть, составить план, показать предпросмотр, дождаться согласия, применить, сохранить и открыть заново, записать в аудит. Не щелчки по чужому интерфейсу и не правка файла в обход редактора.
Три пути, и они разные с первого шага. Откройте свой — там всё по шагам, от «что взять из поставки» до «какой экран увидит пользователь». А если разбираться не хочется — отдайте задание Клоду, и он подключит редактор за вас.
В веб-приложение
Ваш продукт живёт в браузере. Редактор открывается прямо на вашей странице, файл остаётся в вашем контуре.
В настольное приложение
Учётная система, отраслевая платформа, надстройка над 1С. Ядро работает рядом отдельным процессом и говорит с вами строками JSON.
В мобильное приложение
Телефон и планшет: что работает сегодня, каким путём это делается и чего пока нет — без обещаний, которые нечем подтвердить.
Сборки есть для macOS, Windows и Linux. Под Windows — обе архитектуры, x64 и arm64; под Linux пока только x86-64. Для macOS у F1 есть сборки и под Apple Silicon, и под Intel, у A4 сейчас выложена только под Apple Silicon. Продукт в активной работе, поэтому сборки мы отдаём по заявке и вместе с ними предупреждаем об ограничениях текущей версии. Что делать после получения — установка A4 и установка F1.
Двадцать четыре проекта показаны целиком, файл за файлом: видно, сколько кода нужно написать для каждой задачи. В листах на месте ядра стоит дублёр, поэтому смотреть в них стоит на объём кода, а не на числа в ячейках — настоящий пересчёт живёт в живой таблице выше.
Живой пример A4: редактор в браузереработающий редактор документов прямо на странице и весь проект, которым он подключается
Минимальный листсколько строк нужно, чтобы получить работающий лист
Лист с лентойкак добавить нашу ленту, если она нужна
Встраивание в чужую страницучто будет с чужой страницей вокруг листа: её шрифт, фон и прокрутка
Миллион строкцена трёх жестов на предельной книге — прокрутки, протяжки и масштаба: кадр p50 и p95 и обращения к ядру числами, а не обещанием
Перекрестьеподсветка строки и столбца активной ячейки: выключена по умолчанию и включается свойством
Только чтениекнига видна, но не правится: команды серые с причиной, а не спрятаны, и правка не начинается вовсе
Свои заголовкиподписи строк и столбцов задаёт встраивающий, а ширина полосы считается по его тексту
Лист без полос заголовковполосы прячутся одним свойством, и освободившееся место занимает сам лист
Свой пункт менючужой пункт в нашем меню: за чертой, под именем владельца и со своей командой — притвориться нашим он не может
Своё сочетание клавишчужое сочетание срабатывает, а занятые листом (Ctrl+D, Ctrl+R, F2, Shift+Пробел) остаются за листом — отказ виден словами
Свой языкязыка нет в наших трёх — его приносит хозяин страницы: подписи переводятся, непереведённое идёт запасной цепочкой, а не пропадает
Перетащите книгу сюдачужой документ открывается байтами: оболочка доносит файл, разбор остаётся за швом контракта, а отказ приходит словами того, кто открывал — на витрине это заглушка, она берёт csv, tsv и txt, а на xlsx честно отказывает
Двое в одном документедве рамки рядом: двигаете выделение в одной — во второй виден чужой курсор с именем; и прямо на экране написано, что видны только окна этого браузера
Помощники ведут листдо десяти внешних участников, каждый в своём процессе: ходит по своей колонке, выделяет участок и вписывает итог — намерениями через тот же канал; отказ в лишнем виден и ему, и человеку; не запустили — страница так и говорит
Своё событиедве точки расширения наружу: onCommand отдаёт любое намерение поверхности (наше и чужое), onGesture — цену закончившегося жеста числами
Гиперссылкассылка — свойство ячейки: одна операция ядра ставит её вместе с текстом, снимает, оставляя текст, и сама называет ссылки листа
Найти и заменитьпоиск — один запрос, замена — два, и первый книгу не меняет: ядро вычисляет план правок, а пишет их та же дорога, что ввод
Примечанияшесть пунктов «Рецензирования» — одна операция контракта и поле intent; текст, номер и нормализованный адрес называет ядро
Структура листавосемь действий — одна операция: оболочка называет диапазон, ось и действие, а уровни и что спрятать считает ядро
Разметка страницгде ляжет разрыв — единственный метод SDK, который спрашивает и ничего не меняет; саму печать делает хост, и это граница, а не пробел
Разрешить изменение диапазоновшесть намерений одной операции: пароль уходит за шов и не возвращается — обратно приходит только способ защиты
Связи книгиформула считает по чужой книге: список связей, их состояние и адрес источника приходят от ядра, а открывает книгу хозяин окна
Голова без экранакнига открывается, правится и читается из Node — без единого обращения к DOMВсе примеры по продуктам: A4 и F1.