Linear быстрый. Отдадим должное. Они серьёзно вложились в воспринимаемую производительность, и для большинства команд это лучший SaaS-трекер. Но «лучший SaaS» несёт ограничения, с которыми некоторые разработчики не могут смириться: данные живут на чужих серверах, рабочий процесс подстраивается под чужие мнения, и каждое взаимодействие платит налог на сетевой round-trip.
Этот пост для разработчиков, которые столкнулись с этими стенами. Может, вы управляете флотом ИИ-агентов, создающим 50 задач в час. Может, работаете в изолированной сети или в офлайн-режиме. Может, просто не хотите экран логина между собой и своими задачами. Вот что мы узнали, создавая Beadbox — нативный десктопный трекер, хранящий всё локально.
Переходите к тому, что вам важно:
- Скорость local-first — замеры на CLI и UI на реальных датасетах
- Git-нативная история — ветвление, diff и мерж базы задач
- Офлайн / изолированная сеть — без сети, без демона, без проблем
- Скриптинг и агенты — три готовых рабочих процесса
- Компромиссы — честные ограничения до того, как вы вложите время
- Матрица выбора для команды — какой инструмент подходит какой команде
- Миграция с Linear — что есть и чего нет
Почему разработчики ищут альтернативы Linear
Стандартный ответ — «Linear слишком навязывает свои мнения». Это правда, но неточно. Linear навязывает циклы, структуры команд и состояния рабочего процесса, предполагая, что вы — продуктовая команда с двухнедельными спринтами. Если это про вас, Linear отлично подходит. Если вы — соло-разработчик, координирующий ИИ-агентов, или исследовательская команда с нестандартными итерациями, или DevOps-группа, которой нужны задачи, привязанные к git-коммитам, а не к Slack-тредам, — мнения Linear становятся трением.
Более глубокая проблема — архитектурная. Linear — облачный SaaS-продукт. Каждая мутация проходит через их серверы и обратно. Каждый запрос зависит от их аптайма. Ваши данные задач живут в их базе, запрашиваемые через их API, на их условиях. Для большинства команд — приемлемый компромисс. Для разработчиков, заботящихся о суверенитете данных, офлайн-доступе или чистой скорости запросов на больших датасетах — это стоп-фактор.
Чего Beadbox не умеет
Прежде чем перейти к сильным сторонам Beadbox, скажем, где он не подходит. Пропустить этот раздел — не поможет; упереться в эти стены после внедрения — поможет ещё меньше.
Нет многопользовательских прав и контроля доступа. Нет аккаунтов, нет ролей, нет ограничений видимости по задачам. Любой, кто имеет доступ к файловой системе .beads/ (или серверу Dolt), может читать и писать всё. Если нужно ограничивать доступ — Beadbox пока не для вас.
Ограниченная совместная работа в реальном времени. Два человека могут работать с одним набором задач, но модель — push/pull (как Git), а не живые курсоры и индикаторы присутствия. В серверном режиме Beadbox опрашивает изменения каждые 3–5 секунд. Во встроенном режиме файловый мониторинг обнаруживает изменения быстрее (менее секунды), но параллельная запись двух процессов в одну базу Dolt может привести к сбою. Безопасный паттерн: один писатель за раз, или серверный режим, где Dolt управляет параллелизмом.
Нет интеграций со Slack, GitHub, Figma и другими SaaS-инструментами. Точка расширения — CLI bd и shell-скрипты. Если рабочий процесс зависит от «задача закрыта — отправить сообщение в Slack», придётся написать этот клей самостоятельно.
Потолок масштабируемости реален, но далёк. Мы тестируем на 10K и 20K задач (см. бенчмарки ниже). Всё работает хорошо. Стресс-тест на 100K+ задачах не проводился. Если вы крупная организация, генерирующая сотни тысяч задач в год, — это непроверенная территория.
Нет доступа для нетехнических заинтересованных сторон. Нет веб-портала, нет гостевого просмотра, нет URL дашборда для расшаривания. Beadbox — десктопное приложение, читающее локальную базу. Показать прогресс PM, не использующему вашу машину, — значит расшарить экран или написать bd-скрипт для генерации отчёта.
Как работает Beadbox (за 30 секунд)
Прежде чем бенчмарки будут понятны, вот архитектура:
Встроенный режим: База Dolt лежит в .beads/ на вашей файловой системе. Нет серверного процесса, нет демона. CLI bd читает и пишет напрямую. Beadbox обнаруживает изменения через fs.watch() с дебаунсом 250ms и вещает по WebSocket в UI. Путь с нулевой настройкой.
Серверный режим: Процесс dolt sql-server запускается отдельно (локально или в сети). CLI bd подключается по протоколу MySQL. Beadbox опрашивает сервер каждые 3–5 секунд вместо мониторинга файловой системы. Этот режим поддерживает несколько параллельных писателей.
Каждая операция GUI проходит через CLI bd. Beadbox никогда не касается базы напрямую. Если bd show и Beadbox расходятся — это баг Beadbox.
Производительность: реальные бенчмарки на датасете 10K задач
beads CLI публикует бенчмарки, которые можно воспроизвести на своём железе. Вот реальные цифры с M2 Pro при запуске Go-бенчмарков на базе Dolt из 10 000 задач:
| Операция | Время | Память | Датасет |
|---|---|---|---|
| Фильтр готовой работы (незаблокированные) | 30ms | 16.8 MB | 10K задач |
| Поиск (все открытые, без фильтра) | 12.5ms | 6.3 MB | 10K задач |
| Создание задачи | 2.5ms | 8.9 KB | 10K задач |
| Обновление задачи (смена статуса) | 18ms | 17 KB | 10K задач |
| Обнаружение циклов (линейная цепочка 5K) | 70ms | 15 KB | 5K зависимостей |
| Массовое закрытие (100 задач) | 1.9s | 1.2 MB | Последовательная запись |
| Sync-мерж (10 создаёт + 10 обновляет) | 29ms | 198 KB | Пакетная операция |
Это бенчмарки уровня CLI: время чтения/записи bd в локальную базу Dolt. UI Beadbox добавляет накладные расходы рендеринга сверху. Наши целевые показатели полного стека (вызов CLI + рендер React + распространение WebSocket):
| UI-операция | Целевой показатель |
|---|---|
| Рендер дерева эпика (100+ задач) | < 500ms |
| Применение/сброс фильтра | < 200ms |
| Переключение воркспейса | < 1 секунды |
| Распространение обновлений (встроенный) | < 2 секунд |
| Холодный старт до рабочего состояния | < 5 секунд |
Мы не публикуем сравнительные бенчмарки с Linear или другими трекерами, потому что не проводили контролируемых сравнений, а выборочные цифры были бы нечестны. Что мы можем сказать: весь путь данных — локальный. Между кликом по фильтру и результатом нет сетевого прыжка. Важно ли это вам — зависит от вашей базовой линии. Если Linear ощущается достаточно быстрым для вашего объёма данных и местоположения — вероятно, так и есть. Если вы чувствовали задержку на 500 задачах с Wi-Fi в отеле — вы знаете, какую проблему решают эти цифры.
Для воспроизведения: клонируйте beads, запустите go test -tags=bench -bench=. -benchmem ./internal/storage/dolt/... и сравните на своём железе. Кэшированные датасеты в /tmp/beads-bench-cache/.
Глубина Git-интеграции: больше, чем привязка коммитов к задачам
Большинство трекеров рассматривают Git-интеграцию как галочку: упомяните ID задачи в коммит-мессадже — и на задаче появится ссылка. Полезно, но поверхностно.
Beadbox построен на beads — трекере, где семантика Git является слоем хранения, а не приклеенной интеграцией. Dolt, база данных под капотом, реализует модель данных merkle tree от Git для структурированных данных. Каждое изменение задачи — коммит. У каждого коммита есть родитель. Вы получаете dolt diff, dolt log и dolt merge на истории задач с той же семантикой, что и на коде.
Что это означает на практике:
История задач аудируема. Сама база — граф коммитов. Можно сделать diff между любыми двумя точками и увидеть, какие поля каких задач изменились. Это не «функция аудит-лога», прикрученная сверху. Формат хранения и есть аудит-трейл.
Ветвление работает для задач, не только для кода. Dolt нативно поддерживает ветки. Можно создать ветку базы задач для эксперимента с реорганизацией, а потом смерджить обратно или выбросить.
Синхронизация — push/pull, а не API-вызовы. Совместная работа на нескольких машинах работает как git push и git pull. Без API-токенов, без вебхуков, без OAuth. Укажите Dolt remote на сервер (или DoltHub) и пушьте. Другая машина пуллит.
Замечание о конфликтах: Dolt использует трёхстороннее слияние, как Git. Если два человека редактируют разные поля одной задачи — мерж разрешается автоматически. Если оба редактируют одно и то же поле — получите конфликт, требующий ручного разрешения через Dolt CLI (dolt conflicts resolve). У Beadbox пока нет UI для разрешения конфликтов; конфликты обрабатываются на уровне dolt. На практике конфликты редки, когда каждый работает над разными задачами — это типичный паттерн. Но если команда часто параллельно редактирует одни и те же задачи, это потенциальное трение. Документация Dolt по мержу описывает процесс подробно.
Нативный рендеринг: зачем мы встраиваем Node.js внутрь Tauri
Linear работает во вкладке браузера. Как и Jira, Asana и все остальные SaaS-трекеры. Вкладки конкурируют за память, приостанавливаются ОС и рендерятся через композитор, добавляющий кадры задержки.
Beadbox — нативное десктопное приложение на Tauri. Приложения Tauri обычно крошечные (рантайм Tauri — считанные мегабайты), потому что используют нативный WebView ОС вместо Chromium. Наш бандл больше типичных приложений Tauri — около 160MB, и это осознанный компромисс, который стоит объяснить.
84MB из них — встроенный Node.js. Мы используем sidecar-архитектуру: Tauri запускает сервер Next.js как дочерний процесс, который обрабатывает серверный рендеринг, Server Actions и WebSocket-слой для обновлений реального времени. WebView Tauri указывает на этот локальный сервер. Мы выбрали это вместо чистого Rust-бэкенда, потому что экосистема Next.js даёт React Server Components, Server Actions и скорость итераций на UI. Цена — размер бандла. Эквивалентное Electron-приложение было бы 400MB+. Чистое Rust + Tauri было бы меньше 10MB, но заняло бы втрое больше времени и потеряло бы экосистему React.
Практическая разница с вкладкой браузера: Beadbox рендерится в выделенном WebView-процессе, не разделяющем память с другими 47 вкладками. Раскрытие дерева эпика со 100+ задачами, применение фильтров, переключение воркспейсов — эти операции ощущаются качественно иначе, когда рендерер не конкурирует за ресурсы.
Расширение через CLI, а не REST API
У Linear есть GraphQL API. Он хорошо спроектирован. Но расширение Linear означает написание кода, который общается с их серверами, аутентифицируется их токенами и обрабатывает их лимиты.
Beadbox идёт другим путём: CLI bd и есть API. Каждая операция GUI проходит через bd — тот же инструмент, что вы используете в терминале.
Вот три рабочих процесса, которые можно скопировать прямо сейчас:
Массовое обновление приоритетов для сортировки:
# Установить приоритет 1 (критический) для всех открытых багов
bd list --status=open --type=bug --json | \
jq -r '.[].id' | \
xargs -I{} bd update {} --priority=1
Генерация ежедневной сводки:
# Что изменилось за последние 24 часа?
echo "=== Closed today ==="
bd list --status=closed --json | \
jq -r '.[] | select(.updated > (now - 86400 | todate)) | "\(.id) \(.title)"'
echo "=== Currently blocked ==="
bd blocked --json | \
jq -r '.[] | "\(.id) \(.title) (blocked by: \(.blocked_by | join(", ")))"'
echo "=== Ready to work ==="
bd ready --json | jq -r '.[] | "\(.id) [P\(.priority)] \(.title)"'
ИИ-агент создаёт и берёт задачу:
# Агент обнаруживает баг, фиксирует и берёт его
ISSUE_ID=$(bd create \
--title "Fix race condition in auth middleware" \
--type bug \
--priority 1 \
--json | jq -r '.id')
bd update "$ISSUE_ID" --status=in_progress --assignee=agent-3
# ... агент делает работу ...
bd update "$ISSUE_ID" --status=closed
bd comments add "$ISSUE_ID" --author agent-3 \
"Fixed in commit abc1234. Root cause: mutex not held during token refresh."
Если вы используете ИИ-кодинг-агентов (Claude Code, Cursor, Copilot Workspace), они уже знают, как выполнять CLI-команды. Без клиентских библиотек, без танцев с аутентификацией. Просто Unix-пайпы и shell-скрипты.
Попробуйте Beadbox, чтобы увидеть визуализацию этих процессов в реальном времени.
Офлайн-first — это не фича, это архитектура
Некоторые облачные трекеры предлагают «офлайн-режим», кэширующий недавние данные и синхронизирующий при переподключении. Это фича, прикрученная к принципиально онлайн-архитектуре. Режимы отказа предсказуемы: устаревший кэш, конфликты синхронизации, операции, молча встающие в очередь и потом падающие.
Beadbox работает офлайн, потому что никогда не был онлайн. Во встроенном режиме вся база задач — директория на вашей файловой системе. Нет серверного процесса. Нет демона. Нет сетевого сокета. CLI bd читает и пишет в эту директорию. Beadbox следит через fs.watch() и рендерит найденное.
Нечего синхронизировать, потому что нет ничего удалённого. Если позже захотите совместной работы — push/pull Dolt обеспечит явную, видимую синхронизацию. Но по умолчанию — локально. По умолчанию — ваше.
Как с безопасностью? Если вы оцениваете Beadbox для изолированных или чувствительных сред:
- Шифрование в покое: Beadbox не шифрует директорию
.beads/сам. Он опирается на шифрование на уровне ОС (FileVault на macOS, LUKS на Linux, BitLocker на Windows). Если ваша модель угроз требует шифрования на уровне базы данных — это пробел. - Бэкапы: Директория
.beads/— обычная директория.cp -r,rsync, Time Machine илиdolt pushна удалённый — всё работает. История коммитов Dolt означает, что случайные изменения можно откатить черезdolt reset. - Что покидает машину: Во встроенном режиме — ничего. Ноль сетевых вызовов. В десктопном приложении есть два опциональных исходящих соединения: GitHub API для проверки обновлений Beadbox (можно отключить в настройках) и PostHog-аналитика по opt-in (по умолчанию отключена, PII не собирается). Ни то, ни другое не передаёт данные задач.
Для изолированных сред, секретных проектов или разработчиков в самолётах и поездах — это не приятный бонус. Это единственная работающая архитектура.
Выбор подходящего инструмента для команды
Нет универсально правильного инструмента. Честная раскладка:
Выбирайте Linear, если:
- Команда 10+ человек, нужно централизованное управление проектами
- Вы зависите от интеграций Slack/GitHub/Figma
- Нетехническим заинтересованным сторонам нужен доступ к трекеру
- Хотите управляемую инфраструктуру без операционных расходов
- Вы продуктовая команда с регулярными циклами выпуска
Выбирайте Beadbox, если:
- Вам важен суверенитет данных (задачи никогда не покидают машину)
- Вы регулярно работаете офлайн или в ограниченных сетях
- Управляете ИИ-агентами, которым нужно программно читать и писать задачи
- Хотите Git-нативную историю задач (ветки, diff, мерж)
- Предпочитаете CLI-first рабочие процессы с визуальным помощником
- Вы соло-разработчик или небольшая команда (1–10), которой не нужны enterprise-фичи
Оставайтесь на текущем инструменте, если:
- Стоимость перехода превышает текущее трение
- Команда вложилась в интеграции, зависящие от API текущего трекера
- Рабочий процесс уже соответствует инструменту
Миграция с Linear (или других трекеров)
Скажем прямо: автоматического инструмента миграции Linear-to-Beadbox сегодня нет. Нет визарда импорта CSV, нет API-моста, нет UI для маппинга статусов.
Если начинаете с нуля — без проблем. bd init, создавайте задачи — Beadbox видит их сразу. Ноль трения.
Если есть существующий проект Linear — рабочий путь сейчас скриптовый: экспорт через API Linear (они поддерживают CSV и API-экспорт), трансформация данных, bd create в цикле. Вы потеряете Linear-специфичные метаданные (циклы, виды проектов, SLA-таймеры), но сохраните заголовки, описания, приоритеты и статусы. Скрипт миграции — проект на выходные, не на квартал.
Мы понимаем, что для команд с тысячами задач и многолетней историей этого мало. Полноценный импорт-пайплайн в нашем роадмапе, но ещё не выпущен. Если трение миграции — главная забота, подождите, или оцените, приемлем ли свежий старт.
Начало работы
Beadbox бесплатен во время бета-тестирования. Установите через Homebrew:
brew tap beadbox/cask && brew install --cask beadbox
Если вы уже используете beads, Beadbox автоматически обнаружит ваши воркспейсы .beads/. Откройте приложение — ваши задачи на месте. Без импорта. Без создания аккаунта.
Если вы новичок в beads, Beadbox проведёт через инициализацию первого воркспейса. Менее чем за 60 секунд вы увидите свои задачи.
Скачайте Beadbox или посмотрите beads, чтобы оценить, подходит ли local-first трекинг вашему рабочему процессу.