احیای نرمافزارهای محلی-اول: چرا اپها دوباره به دستگاه شما برمیگردند

در سال ۲۰۱۹، یک آزمایشگاه تحقیقاتی به نام Ink & Switch مقالهای منتشر کرد که ایده "نرمافزار محلی-اول" را توضیح میداد. فرضیه ساده بود و پیامدهایش بزرگ: اپلیکیشنها باید دادهها را روی دستگاه کاربر ذخیره کنند، بدون اینترنت کامل کار کنند و ابر را فقط یک لایه همگامسازی در نظر بگیرند، نه منبع حقیقت. واکنش جامعه توسعهدهندگان گرم و عمدتاً نظری بود. ابزارهای لازم برای ساخت اپهای محلی-اول در سطح تولید واقعاً وجود نداشت.
هفت سال بعد، این ابزارها وجود دارند. ElectricSQL در مارس ۲۰۲۵ نسخه ۱.۰ را منتشر کرد و همگامسازی پایدار Postgres را به SQLite محلی آورد. Automerge و Yjs — دو کتابخانه اصلی CRDT — به بلوغ رسیدهاند. کنفرانس Local-First در برلین محققان، استارتآپها و مهندسین شرکتهای معروف را گرد هم آورد. و هوش مصنوعی روی دستگاه، یک دلیل تجاری جدید به این معماری داده که فراتر از ایدئولوژی است.
محلی-اول دقیقاً یعنی چه
این واژه گاهی شلخته استفاده میشود، پس بهتر است دقیق باشیم. یک اپ محلی-اول دادههای اصلی را روی دستگاه کاربر ذخیره میکند — در یک دیتابیس محلی، فایلهای معمولی یا حافظه مرورگر — و سپس آن دادهها را به دستگاههای دیگر یا یک سرور همگام میکند. قانون اساسی طراحی این است که اپ بدون اتصال به اینترنت کامل کار کند. نه اینکه "دادههای کش شده را نشان دهد" — بلکه کار کند، بخواند و بنویسد، با همه قابلیتها.
هفت اصل اصلی Ink & Switch عبارتند از: عملیات فوری بدون اسپینر لودینگ، عملکرد آفلاین کامل، همگامسازی بیدردسر بین دستگاهها، همکاری بلادرنگ، ماندگاری داده (اپ حتی اگر شرکت تعطیل شود کار کند)، امنیت پیشفرض و مالکیت داده کاربر با قابلیت خروجی گرفتن. بیشتر اپهای ابر-اول حداقل چهارتا از اینها را ندارند. بیشتر اپهای محلی-اول ساخته شده با ابزار فعلی میتوانند هر هفتتا را پوشش دهند.
فناوری که این را ممکن میکند: CRDTها
دلیل اینکه همگامسازی محلی-اول قبلاً غیرعملی بود، تداخلهای ادغام (merge conflicts) است. اگر شما یک سند را در گوشی خود در حالت آفلاین ویرایش کنید و شخص دیگری همان سند را در لپتاپ خود ویرایش کند، وقتی گوشی دوباره متصل میشود چطور این دو نسخه را ادغام کنید؟ روش ساده انتخاب یک نسخه و دور انداختن دیگری است که برای همکاری فاجعه است. روش پیشرفته شامل تبدیلات عملیاتی (operational transforms) است — الگوریتمهای پیچیده که کار میکنند اما به یک سرور مرکزی برای داوری نیاز دارند.
CRDTها یا Conflict-Free Replicated Data Types این مشکل را با ریاضیات حل میکنند نه زیرساخت. یک CRDT یک ساختمان داده است که طوری طراحی شده که ویرایشهای همزمان روی چندین رپلیکا همیشه میتوانند به یک نتیجه سازگار ادغام شوند بدون نیاز به هماهنگکننده مرکزی. ریاضیات همگرایی نهایی (eventual consistency) را تضمین میکند — همه رپلیکاها به یک حالت میرسند — بدون اینکه نیازی به سرور برای قضاوت باشد. Google Docs، Figma و WhatsApp همگی از CRDTها برای ویژگیهای همکاری و همگامسازی بین دستگاه استفاده میکنند.
برای اپهای محلی-اول، این یعنی دو گوشی میتوانند همزمان یک سند را در حالت کاملاً آفلاین ویرایش کنند، دوباره متصل شوند و به طور خودکار به یک نتیجه ادغام شده درست برسند. کابوس تداخل ادغام که توسعهدهندگان از آن میترسیدند، در عمل برای سناریوهای معمول ویرایش سند و داده تقریباً وجود ندارد.
ابزارها آماده تولید هستند
Yjs استاندارد صنعت برای ویرایش متن مشارکتی بلادرنگ است. با JavaScript نوشته شده و یک پورت سریع Rust به نام Yrs دارد. با ProseMirror، Tiptap و CodeMirror یکپارچه میشود — یعنی بیشتر ویرایشگرهای متن غنی را پوشش میدهد. اگر در سه سال گذشته از یک ویرایشگر سند تحت وب استفاده کرده باشید، احتمالاً بدون اینکه بدانید از Yjs استفاده کردهاید.
Automerge رویکرد متفاوتی دارد: تاریخچه کامل هر تغییر را به عنوان یک شی درجه یک ذخیره میکند. این آن را شبیه Git برای دادههای اپ میکند: میتوانید branch بزنید، diff بگیرید، merge کنید و تغییرات را بین رپلیکاها cherry-pick کنید. برای استفاده روی وب به WebAssembly کامپایل شده است و footprint بزرگتری را با قابلیت تاریخچه غنیتر معاوضه میکند.
ElectricSQL جایگاه متفاوتی دارد: به جای مدیریت مستقیم CRDTها، زیرمجموعههایی از یک دیتابیس PostgreSQL را به SQLite محلی روی کلاینت همگام میکند. برای تیمهایی که از قبل Postgres دارند، این کماصطکاکترین مسیر به معماری محلی-اول است — دیتابیس موجودتان باقی میماند؛ فقط یک لایه همگامسازی جلوی آن اضافه میکنید. نسخه ۱.۱ که اوت ۲۰۲۵ منتشر شد، ۱۰۲ برابر نوشتن سریعتر و ۷۳ برابر خواندن سریعتر نسبت به نسخه قبلی ارائه داد. این سیستم در Trigger.dev در تولید است و میلیونها آپدیت روزانه را مدیریت میکند.
چرا زمانبندی در ۲۰۲۶ درست است
سه نیروی همگرا باعث علاقه دوباره به معماری محلی-اول فراتر از ایدهآلیسم توسعهدهندگان شده است.
اول: هوش مصنوعی روی دستگاه. واحدهای پردازش عصبی با بیش از ۷۰ TOPS اکنون در گوشیهای پرچمدار استاندارد شدهاند. Foundation Models اپل یک مدل زبانی ۳ میلیارد پارامتری را کاملاً روی دستگاه در iPhone و Mac اجرا میکند. وقتی استنتاج AI به دستگاه منتقل میشود، دادههایی که روی آن کار میکند طبیعتاً دنبال میکنند — شما نمیتوانید یک دستیار AI خصوصی واقعی داشته باشید اگر همه یادداشتها و اسنادتان روی سرور فروشنده زندگی کنند. معماری داده محلی-اول و استنتاج AI محلی یک جفت طبیعی هستند.
دوم: خستگی از ابر و مقررات حریم خصوصی. سالها نشت داده، سیاستهای مبهم آموزش AI و تعطیلی سرویسها هزینه وابستگی به ابر را در ذهن کاربران بالا برده است. رعایت GDPR، HIPAA و CCPA وقتی داده کاربر روی دستگاه خودش میماند، به طور چشمگیری سادهتر است. تیمهای بهداشتی، حقوقی و خدمات مالی به طور فزایندهای به ابزارهای محلی-اول جذب میشوند دقیقاً چون محاسبات انطباق را ساده میکنند.
سوم: عملکرد. ابزار مدیریت پروژه لینیر (Linear) — یکی از معروفترین نمونههای معماری محلی-اول — دادههای اصلی خود را در IndexedDB مرورگر ذخیره میکند و در پسزمینه همگام میکند. هر عملی اول یک نوشته محلی است. نتیجه یک UI است که در مقایسه با ابزارهای ابر-اول که باید هر کلیک را به سرور برگردانند، فوری به نظر میرسد. تیمها مدام آن را سریعترین ابزار مدیریت پروژهای میدانند که استفاده کردهاند. سرعت، نه فلسفه، چیزی است که کاربران را به جابجایی ترغیب میکند.
مشکل مدل کسبوکار و راهحل آن
اعتراض آشکار به نرمافزار محلی-اول از نظر تجاری: اگر کاربران مالک دادههای خود هستند و میتوانند آزادانه خروجی بگیرند، برای چه چیزی پول میدهید؟ اوبسیدین (Obsidian)، موفقترین اپ محلی-اول از نظر تعداد کاربر (بیش از یک میلیون کاربر فعال)، به این سوال پاسخ تمیزی داده است. این اپ رایگان و متنباز است. یادداشتها به صورت فایلهای Markdown معمولی ذخیره میشوند که کاملاً مال خودتان است. Obsidian Sync — یک افزونه اختیاری با قیمت ۴ دلار در ماه — همگامسازی رمزگذاری شده بین دستگاهها را فراهم میکند. شما بابت سرویس پول میدهید، نه بابت قفل داده. مدل کسبوکار کار میکند چون محصول عالی است، نه چون کاربران گیر افتادهاند.
ElectricSQL و PowerSync مدل open-core را انتخاب کردهاند: موتور همگامسازی را رایگان روی سرور خودتان اجرا کنید، و برای نسخه مدیریتشده ابری پول بدهید. لینیر برای ویژگیهای تیمی و یکپارچهسازیها هزینه اشتراک میگیرد، نه برای نگهداری داده. الگو در حال ظهور است: شرکتهای محلی-اول بابت راحتی، قابلیت اطمینان و ویژگیهای همکاری هزینه میگیرند — نه بابت گروگان گرفتن دادههای شما.
اکوسیستم هنوز از نظر آشنایی توسعهدهندگان اصلی زود است. ساختن یک اپ محلی-اول در سطح تولید نیاز به درک CRDTها، معناشناسی همگامسازی و حل تعارض در سطحی دارد که بیشتر توسعهدهندگان اپلیکیشن قبلاً نیاز نداشتند. ابزارها همچنان در حال بهبود هستند، اما دلیلی وجود دارد که مقاله Ink & Switch وضعیت توسعه محلی-اول در سال ۲۰۲۵ را با React در سال ۲۰۱۳ مقایسه کرد. فناوری آماده است. مستندات و تجربه توسعهدهندگان در حال رسیدن است.