[{"data":1,"prerenderedAt":346},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Foverview":121,"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Foverview-surround":341},[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":66,"body":123,"description":333,"extension":334,"links":335,"meta":336,"navigation":337,"path":87,"seo":338,"stem":88,"__hash__":340},"docs\u002Fdocs\u002Fv1\u002F5.server-pro\u002F1.overview.md",{"type":124,"value":125,"toc":316},"minimark",[126,143,156,175,184,187,192,197,200,204,207,211,214,218,221,225,228,232,235,237,241,260,262,266,294,296,300],[127,128,129,133,134,138,139,142],"p",{},[130,131,132],"code",{},"tether\u002Fpro-server"," is a ",[135,136,137],"strong",{},"finished commercial add-on"," that installs on your Laravel server application on top of ",[130,140,141],{},"tether\u002Fserver",". It adds a production Laravel sync observability dashboard, request inspection, conflict review, replay tooling, and telemetry without modifying core sync behaviour.",[127,144,145,146,149,150,149,153,155],{},"The free packages (",[130,147,148],{},"tether\u002Fcore",", ",[130,151,152],{},"tether\u002Fclient",[130,154,141],{},") provide all correctness guarantees:",[157,158,159,163,166,169,172],"ul",{},[160,161,162],"li",{},"Idempotent mutation application",[160,164,165],{},"Deterministic conflict resolution",[160,167,168],{},"Replayable mutation logs",[160,170,171],{},"Offline-first local writes",[160,173,174],{},"Full push\u002Fpull sync",[127,176,177,179,180,183],{},[130,178,132],{}," adds ",[135,181,182],{},"visibility and resilience"," over that foundation - it does not change what the system does, only how observable and manageable it is in production.",[185,186],"hr",{},[188,189,191],"h2",{"id":190},"what-it-provides","What it provides",[193,194,196],"h3",{"id":195},"sync-observability-dashboard","Sync observability dashboard",[127,198,199],{},"An embedded Laravel dashboard for inspecting sync activity. View push\u002Fpull history across clients, request outcomes, mutation counts, latency, conflict rates, failure rates, top models, top clients, and a five-minute 24-hour health strip.",[193,201,203],{"id":202},"request-and-mutation-inspection","Request and mutation inspection",[127,205,206],{},"Logs redacted sync request and response payloads, server-side applied mutations, current server state before\u002Fafter processing, and field-level diff views. Large request pages are paginated so high-volume sync batches remain inspectable.",[193,208,210],{"id":209},"conflict-management-interface","Conflict management interface",[127,212,213],{},"Surfaces detected data conflicts with the client payload, server state, rejection reason, request context, and mutation metadata.",[193,215,217],{"id":216},"failure-and-error-tracking","Failure and error tracking",[127,219,220],{},"Captures failed or rejected sync operations with context, categorises outcomes, and makes repeated failure patterns easier to inspect across clients and models.",[193,222,224],{"id":223},"replay-and-debug-tools","Replay and debug tools",[127,226,227],{},"Provides config-gated replay tooling for push requests. You can preview each mutation against current database state before applying a cloned live replay with new mutation IDs and durable original-to-clone audit links.",[193,229,231],{"id":230},"sync-telemetry","Sync telemetry",[127,233,234],{},"Aggregates performance metrics: throughput, latency, conflict rate, failure rate, top models, top clients, and 24-hour health buckets.",[185,236],{},[188,238,240],{"id":239},"design-constraints","Design constraints",[157,242,243,248,251,254,257],{},[160,244,245,246],{},"Does not alter core sync logic in ",[130,247,141],{},[160,249,250],{},"Strictly observational and administrative - no new sync semantics",[160,252,253],{},"Safe to disable without affecting system behaviour",[160,255,256],{},"Recursively redacts configured sensitive payload keys before storage",[160,258,259],{},"Live replay is disabled by default and only available for push requests when explicitly enabled",[185,261],{},[188,263,265],{"id":264},"defaults","Defaults",[157,267,268,274,280,287],{},[160,269,270,271],{},"Dashboard: ",[130,272,273],{},"\u002Ftether\u002Fdashboard",[160,275,276,277],{},"Metrics API: ",[130,278,279],{},"GET \u002Ftether\u002Fdashboard\u002Fmetrics",[160,281,282,283,286],{},"Middleware: ",[130,284,285],{},"['web']"," by default; add your auth middleware in production",[160,288,289,290,293],{},"Replay preview and live apply: disabled unless ",[130,291,292],{},"tether-pro-server.replay.live_enabled"," is enabled",[185,295],{},[188,297,299],{"id":298},"licensing","Licensing",[127,301,302,304,305,310,311,315],{},[130,303,132],{}," is a commercial package distributed through your Tether account. See the ",[306,307,309],"a",{"href":308},"\u002Fadd-ons","Add-ons"," page for details, or open ",[306,312,314],{"href":313},"\u002Fapp\u002Faccount","My account"," to manage access and Composer credentials.",{"title":317,"searchDepth":318,"depth":319,"links":320},"",1,2,[321,330,331,332],{"id":190,"depth":319,"text":191,"children":322},[323,325,326,327,328,329],{"id":195,"depth":324,"text":196},3,{"id":202,"depth":324,"text":203},{"id":209,"depth":324,"text":210},{"id":216,"depth":324,"text":217},{"id":223,"depth":324,"text":224},{"id":230,"depth":324,"text":231},{"id":239,"depth":319,"text":240},{"id":264,"depth":319,"text":265},{"id":298,"depth":319,"text":299},"Learn how tether\u002Fpro-server adds a production Laravel dashboard for sync history, request inspection, conflict review, replay, and telemetry.","md",null,{"badge":61},true,{"title":339,"description":333},"Laravel Sync Observability Dashboard - tether\u002Fpro-server","K8sHn650N-ATQ2iCBgUc-TQTtwAh4c4OzaHGbAwbODc",[342,344],{"title":77,"path":78,"stem":79,"description":343,"children":-1},"Understand how NativePHP lifecycle and connectivity events map to Laravel events and automatic Tether sync jobs in mobile apps.",{"title":90,"path":91,"stem":92,"description":345,"children":-1},"Explore tether\u002Fpro-server features: sync observability, mutation inspection, conflict debugging, replay previews, live replay, and health telemetry.",1780481012713]