Linear sent me down a local-first rabbit hole 🔥 Горячее 💬 Длинная дискуссия
Начав использовать Linear, я углубился в «локально-ориентированные» приложения: клиент хранит полную БД, изменения сначала пишутся локально, а фоновый sync-рантайн рассылает их по WebSocket/GraphQL. Пользователь видит мгновенные обновления без сетевой задержки.
Проанализировав реверс-инжиниринг и доклады команды Linear, я понял: их sync-движок — это месяцы работы, чтобы решить офлайн-режим, конфликты, частичную синхронизацию, миграции схем и безопасность.
В 2025-м экосистема уже готова:
- Electric SQL — Postgres-синхронизация
- PowerSync — корпоративный уровень
- Jazz — «обновляешь локальный state — всё синхронизируется»
- Zero, Instant, Triplit, LiveStore — упрощают разработку
Jazz предлагает CoValues: схема на Zod + автоматическая репликация. Пример:
const Post = co.map({
title: z.string(),
comments: co.list(Comment)
});
Меняешь post.title
— изменение мгновенно отражается у всех участников.
Комментарии (197)
- Участники обсуждают преимущества и недостатки подходов local-first (Zero, Electric, Jazz, CRDT, PouchDB, Turso и др.).
- Ключевые плюсы: мгновенный UX, офлайн-работа, упрощённая синхронизация через запросы (Zero) и отсутствие конфликтов (CRDT).
- Минусы: рост данных, проблемы разрешения конфликтов, сложность прав и миграций, ограниченная поддержка SSR-ценящих разработчиков.
- Некоторые считают, что SSR всё ещё важен для первой загрузки, но не решает офлайн/коллаборацию.
- Подводный камень: большинство инструментов заточены под веб, хотя мобильные сценарии офлайна выглядят более естественными.