Automerge یک دیتا استراکچر همچون JSON است که این قابلیت را دارا است تا به صورت همزمان توسط کاربران مختلف تغییریافته و مجدداً به صورت خودکار ادغام شود. Automerge یک لایبرری داده-محور است که برای ایجاد برنامههای مشترک در جاوااسکریپت به کار میرود (به برنامههایی مشترک گفته میشود که با مشارکت دو بخش مختلف تولید یا اجرا میشوند.)
یک رویکرد رایج در اجرای برنامهها در زبان برنامهنویسی جاوااسکریپت، نگهداری وضعیت (State) اپلیکیشن در مدل (نوعی آبجکت) است؛ مانند آبجکتهایی از جنس جیسون. به عنوان مثال، فرض کنیم یک اپلیکیشن ردیابی تَسک توسعه دادهاید که در آن هر تَسک با یک کارت نشان داده میشود. برای این اَپ، کدهای جاوااسکریپت به شکل زیر نوشته شدهاند:
var doc = {cards: []}
// User adds a card
doc.cards.push({title: 'Reticulate splines', done: false})
// User marks a task as done
doc.cards[0].done = true
// Save the document to disk
localStorage.setItem('MyToDoList', JSON.stringify(doc))
Automerge نیز به روش مشابه به کار گرفته میشود اما تفاوت بزرگ آن در این است که از همگامسازی (سینک) و ادغام خودکار پشتیبانی میکند که در ادامه برخی از شاخصترین قابلیتهایش را برخواهیم شمرد.
- کاربران میتوانند یک کپی از وضعیت نرمافزار را به صورت لوکال بر روی دیوایسهای مختلف داشته باشند (ممکن است این دیوایسها متعلق به یک کاربر یا هر کدام متعلق به کاربران مختلف باشند). هر کاربر میتواند به طور مستقل وضعیت برنامه را بر روی دیوایس لوکال خود آپدیت کند و آن را در سیستم لوکال خود ذخیره کند (در حالت آفلاین نیز امکان بهروزرسانی وجود دارد. این حالت مشابه سیستم مدیریت نسخهٔ Git است که امکان ویرایش فایل را برای کاربر فراهم میکند و کاربر میتواند این تغییرات را به صورت آفلاین در آنها اعمال کند).
- هنگامیکه به یک شبکه متصل هستید، Automerge تغییرات لازم را که باید از یک دیوایس به دیوایس دیگر سینک شود مشخص کرده و آنها را همگام کرده و به حالت یکسان میرساند (مشابه Git که به کاربر اجازه میدهد تغییرات اعمالشده در نرمافزار خود را پوش کند و در صورت آنلاین شدن، میتواند تغییرات سایر دولوپرها را پول کند.)
- اگر همزمان وضعیتی در دیوایسهای مختلف تغییر کند، Automerge به طور خودکار این تغییرات را باهم ادغام میکند به طوری که همهٔ دیوایسها در وضعیتی یکسان قرار میگیرند و همه تغییرات در دیوایسها سینک میشوند (این حالت با Git متفاوت است و هیچگونه ناسازگاری (کانفلیکت) در فرآیند ادغام وجود ندارد که نیاز به حلوفصل داشته باشد.)