[{"data":1,"prerenderedAt":470},["ShallowReactive",2],{"navigation":3,"add-ons":121},[4],{"title":5,"path":6,"stem":7,"children":8,"page":44},"Docs","\u002Fdocs","docs",[9],{"title":10,"path":11,"stem":12,"children":13,"page":44},"V1","\u002Fdocs\u002Fv1","docs\u002Fv1",[14,18,22,45,58,80,93,111],{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fv1\u002Fintroduction","docs\u002Fv1\u002F0.introduction",{"title":19,"path":20,"stem":21},"How It Works","\u002Fdocs\u002Fv1\u002Fhow-it-works","docs\u002Fv1\u002F1.how-it-works",{"title":23,"icon":24,"path":25,"stem":26,"children":27,"page":44},"Client","i-lucide-laptop","\u002Fdocs\u002Fv1\u002Fclient","docs\u002Fv1\u002F2.client",[28,32,36,40],{"title":29,"path":30,"stem":31},"Client Setup","\u002Fdocs\u002Fv1\u002Fclient\u002Fsetup","docs\u002Fv1\u002F2.client\u002F1.setup",{"title":33,"path":34,"stem":35},"Syncing","\u002Fdocs\u002Fv1\u002Fclient\u002Fsyncing","docs\u002Fv1\u002F2.client\u002F2.syncing",{"title":37,"path":38,"stem":39},"Events","\u002Fdocs\u002Fv1\u002Fclient\u002Fevents","docs\u002Fv1\u002F2.client\u002F3.events",{"title":41,"path":42,"stem":43},"Configuration","\u002Fdocs\u002Fv1\u002Fclient\u002Fconfiguration","docs\u002Fv1\u002F2.client\u002F4.configuration",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Server","i-lucide-server","\u002Fdocs\u002Fv1\u002Fserver","docs\u002Fv1\u002F3.server",[51,55],{"title":52,"path":53,"stem":54},"Server Setup","\u002Fdocs\u002Fv1\u002Fserver\u002Fsetup","docs\u002Fv1\u002F3.server\u002F1.setup",{"title":41,"path":56,"stem":57},"\u002Fdocs\u002Fv1\u002Fserver\u002Fconfiguration","docs\u002Fv1\u002F3.server\u002F2.configuration",{"title":59,"icon":60,"badge":61,"path":62,"stem":63,"children":64,"page":44},"NativePHP","i-lucide-smartphone","Commercial","\u002Fdocs\u002Fv1\u002Fnativephp","docs\u002Fv1\u002F4.nativephp",[65,69,73,76],{"title":66,"path":67,"stem":68},"Overview","\u002Fdocs\u002Fv1\u002Fnativephp\u002Foverview","docs\u002Fv1\u002F4.nativephp\u002F1.overview",{"title":70,"path":71,"stem":72},"Setup","\u002Fdocs\u002Fv1\u002Fnativephp\u002Fsetup","docs\u002Fv1\u002F4.nativephp\u002F2.setup",{"title":41,"path":74,"stem":75},"\u002Fdocs\u002Fv1\u002Fnativephp\u002Fconfiguration","docs\u002Fv1\u002F4.nativephp\u002F3.configuration",{"title":77,"path":78,"stem":79},"Lifecycle & Events","\u002Fdocs\u002Fv1\u002Fnativephp\u002Flifecycle","docs\u002Fv1\u002F4.nativephp\u002F4.lifecycle",{"title":81,"icon":82,"badge":61,"path":83,"stem":84,"children":85,"page":44},"Server Pro","i-lucide-bar-chart-2","\u002Fdocs\u002Fv1\u002Fserver-pro","docs\u002Fv1\u002F5.server-pro",[86,89],{"title":66,"path":87,"stem":88},"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Foverview","docs\u002Fv1\u002F5.server-pro\u002F1.overview",{"title":90,"path":91,"stem":92},"Features","\u002Fdocs\u002Fv1\u002Fserver-pro\u002Ffeatures","docs\u002Fv1\u002F5.server-pro\u002F2.features",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":44},"Advanced","i-lucide-settings-2","\u002Fdocs\u002Fv1\u002Fadvanced","docs\u002Fv1\u002F6.advanced",[99,103,107],{"title":100,"path":101,"stem":102},"Service Container","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fservice-container","docs\u002Fv1\u002F6.advanced\u002F0.service-container",{"title":104,"path":105,"stem":106},"Conflict Resolution","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fconflict-resolution","docs\u002Fv1\u002F6.advanced\u002F1.conflict-resolution",{"title":108,"path":109,"stem":110},"Payload Mapping","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fpayload-mapping","docs\u002Fv1\u002F6.advanced\u002F2.payload-mapping",{"title":112,"icon":113,"path":114,"stem":115,"children":116,"page":44},"Examples","i-lucide-book-open","\u002Fdocs\u002Fv1\u002Fexamples","docs\u002Fv1\u002F7.examples",[117],{"title":118,"path":119,"stem":120},"Task Manager","\u002Fdocs\u002Fv1\u002Fexamples\u002Ftask-manager","docs\u002Fv1\u002F7.examples\u002F1.task-manager",{"id":122,"title":123,"body":124,"description":133,"extension":461,"meta":462,"navigation":463,"path":464,"seo":465,"stem":468,"__hash__":469},"addons\u002Fadd-ons.md","Add Ons",{"type":125,"value":126,"toc":457},"minimark",[127,158,198,201,279,386],[128,129,130,144],"u-page-hero",{},[131,132,134],"template",{"v-slot:title":133},"",[135,136,137,138],"p",{},"Tether ",[139,140,143],"span",{"className":141},[142],"text-primary","Add-ons",[131,145,146],{"v-slot:description":133},[135,147,148,149,153,154,157],{},"The core Tether packages - ",[150,151,152],"code",{},"tether\u002Fclient"," and ",[150,155,156],{},"tether\u002Fserver"," - are free and MIT licensed forever. Add-ons are optional commercial extensions for NativePHP offline sync automation and a production Laravel sync observability dashboard.",[159,160,163,168],"u-page-section",{":ui":161,"orientation":162},"{\"features\":\"sm:grid-cols-2 lg:grid-cols-2 max-w-5xl mx-auto\"}","vertical",[131,164,165],{"v-slot:title":133},[135,166,167],{},"Commercial packages",[131,169,170,185],{"v-slot:features":133},[171,172,175,180],"u-page-feature",{"icon":60,"className":173,"orientation":162},[174],"text-center",[131,176,177],{"v-slot:title":133},[135,178,179],{},"tether\u002Fnativephp-client",[131,181,182],{"v-slot:description":133},[135,183,184],{},"NativePHP offline sync automation for iOS and Android apps. Syncs when the app resumes, when connectivity is restored, and optionally in the background - without writing a line of native code.",[171,186,188,193],{"icon":82,"className":187,"orientation":162},[174],[131,189,190],{"v-slot:title":133},[135,191,192],{},"tether\u002Fpro-server",[131,194,195],{"v-slot:description":133},[135,196,197],{},"Production Laravel sync observability for your Tether server. Understand sync history, inspect captured requests, review conflicts, track failures, preview replay diffs, and monitor sync health from an embedded dashboard.",[199,200],"add-ons-pricing",{},[159,202,203,207,215,260],{},[131,204,205],{"v-slot:title":133},[135,206,179],{},[131,208,209],{"v-slot:description":133},[135,210,211,212,214],{},"Install NativePHP offline sync automation on any NativePHP Mobile app that uses ",[150,213,152],{},".",[131,216,217,230,243],{"v-slot:features":133},[171,218,220,225],{"icon":219},"i-lucide-zap",[131,221,222],{"v-slot:title":133},[135,223,224],{},"Sync on app resume",[131,226,227],{"v-slot:description":133},[135,228,229],{},"Auto sync data when the app comes to the foreground. A configurable cooldown prevents redundant syncs on rapid background\u002Fforeground cycles.",[171,231,233,238],{"icon":232},"i-lucide-wifi",[131,234,235],{"v-slot:title":133},[135,236,237],{},"Sync on connectivity",[131,239,240],{"v-slot:description":133},[135,241,242],{},"Dispatches a push job the moment the device reconnects to a network. Works on both Wi-Fi and cellular.",[171,244,246,251],{"icon":245},"i-lucide-clock",[131,247,248],{"v-slot:title":133},[135,249,250],{},"Background sync",[131,252,253],{"v-slot:description":133},[135,254,255,256,259],{},"Optional background task scheduling via ",[150,257,258],{},"nativephp\u002Fmobile-background-tasks"," if you have one purchased already. Set an interval, a network constraint, and optionally mark as long-running.",[131,261,262,272],{"v-slot:links":133},[263,264,269],"u-button",{"color":265,"size":266,"to":67,"variant":267,"trailing-icon":268},"neutral","lg","outline","i-lucide-arrow-right",[135,270,271],{},"Read the docs",[263,273,276],{"color":265,"size":266,"to":274,"variant":267,":external":275},"\u002Fapp\u002Faccount\u002Fpackages","true",[135,277,278],{},"Open account",[159,280,281,285,293,376],{},[131,282,283],{"v-slot:title":133},[135,284,192],{},[131,286,287],{"v-slot:description":133},[135,288,289,290,292],{},"Install a Laravel sync observability dashboard on your server on top of ",[150,291,156],{},". It observes the sync layer you already run; it does not change the sync protocol or core reconciliation behaviour.",[131,294,295,308,321,334,347,360],{"v-slot:features":133},[171,296,298,303],{"icon":297},"i-lucide-layout-dashboard",[131,299,300],{"v-slot:title":133},[135,301,302],{},"Observability dashboard",[131,304,305],{"v-slot:description":133},[135,306,307],{},"View push and pull history across clients, request outcomes, mutation counts, failure rates, conflict rates, latency, and 24-hour sync health - all in an embedded Laravel dashboard.",[171,309,311,316],{"icon":310},"i-lucide-search",[131,312,313],{"v-slot:title":133},[135,314,315],{},"Mutation inspection",[131,317,318],{"v-slot:description":133},[135,319,320],{},"Inspect redacted request and response payloads, individual mutation outcomes, server state before\u002Fafter processing, and field-level payload diffs.",[171,322,324,329],{"icon":323},"i-lucide-git-merge",[131,325,326],{"v-slot:title":133},[135,327,328],{},"Conflict management",[131,330,331],{"v-slot:description":133},[135,332,333],{},"See every detected conflict in context: the client payload, the server state, the rejection reason, and the request that produced it.",[171,335,337,342],{"icon":336},"i-lucide-rotate-ccw",[131,338,339],{"v-slot:title":133},[135,340,341],{},"Replay and debug tools",[131,343,344],{"v-slot:description":133},[135,345,346],{},"Preview each mutation in a captured push request against the current database state, then apply a config-gated cloned live replay with new mutation IDs and an audit trail.",[171,348,350,355],{"icon":349},"i-lucide-activity",[131,351,352],{"v-slot:title":133},[135,353,354],{},"Sync telemetry",[131,356,357],{"v-slot:description":133},[135,358,359],{},"Aggregated metrics for throughput, latency, conflict rate, failure rate, top models, top clients, and five-minute health buckets across the last 24 hours.",[171,361,363,368],{"icon":362},"i-lucide-shield",[131,364,365],{"v-slot:title":133},[135,366,367],{},"Safe to disable",[131,369,370],{"v-slot:description":133},[135,371,372,373,375],{},"Strictly observational. Does not alter core sync logic. Disabling ",[150,374,192],{}," has no effect on sync correctness or behaviour.",[131,377,378,382],{"v-slot:links":133},[263,379,380],{"color":265,"size":266,"to":87,"variant":267,"trailing-icon":268},[135,381,271],{},[263,383,384],{"color":265,"size":266,"to":274,"variant":267,":external":275},[135,385,278],{},[159,387,388,393,405],{},[131,389,390],{"v-slot:title":133},[135,391,392],{},"Frequently asked questions",[131,394,395],{"v-slot:description":133},[135,396,397,398,214],{},"Have a question not answered here? ",[399,400,404],"a",{"href":401,"rel":402},"https:\u002F\u002Fgithub.com\u002Flrakauskas\u002Ftether-core\u002Fdiscussions",[403],"nofollow","Open a discussion on GitHub",[131,406,407,425,444],{"v-slot:features":133},[171,408,410,415],{"icon":409},"i-lucide-circle-check",[131,411,412],{"v-slot:title":133},[135,413,414],{},"Are the core packages really free?",[131,416,417],{"v-slot:description":133},[135,418,419,420,153,422,424],{},"Yes. ",[150,421,152],{},[150,423,156],{}," are MIT licensed and will remain free forever. The commercial add-ons are optional extensions - the free packages contain the core sync engine and do not depend on the paid layer.",[171,426,428,433],{"icon":427},"i-lucide-key",[131,429,430],{"v-slot:title":133},[135,431,432],{},"What does a license cover?",[131,434,435],{"v-slot:description":133},[135,436,437,438,440,441,443],{},"Licenses for ",[150,439,179],{}," & ",[150,442,192],{}," are sold separately. Once purchased, each package can be used freely across all your projects - no per-project licensing or fees. The license is for the individual or organization, not the project.",[171,445,447,452],{"icon":446},"i-lucide-calendar",[131,448,449],{"v-slot:title":133},[135,450,451],{},"How long will the project be supported?",[131,453,454],{"v-slot:description":133},[135,455,456],{},"There is no planned end-of-life for Tether. The core packages will remain free and open source indefinitely. Commercial add-ons will continue to receive updates, improvements, and support as long as there is demand.",{"title":133,"searchDepth":458,"depth":459,"links":460},1,2,[],"md",{},true,"\u002Fadd-ons",{"title":466,"description":467},"Laravel Tether Add-ons - NativePHP Sync & Server Dashboard","Commercial Tether add-ons for NativePHP offline sync automation and production Laravel sync observability, replay, conflict inspection, and telemetry.","add-ons","pc72F1B8_SAli34cJ9fA86MmpIKETHpbKvqiN4gg-3E",1780481011826]