[{"data":1,"prerenderedAt":1023},["ShallowReactive",2],{"navigation_docs_en":3,"landing_en":342},[4,45,91,137,195,236,257,291,327],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Getting Started","i-lucide-rocket","/en/getting-started","en/01.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"What is Qora?","/en/getting-started/what-is-qora","en/01.getting-started/2.what-is-qora","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/en/getting-started/installation","en/01.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Quick Start","/en/getting-started/quick-start","en/01.getting-started/4.quick-start",{"title":25,"path":26,"stem":27,"icon":28},"Comparison","/en/getting-started/comparison","en/01.getting-started/5.comparison","i-lucide-scale",{"title":30,"path":31,"stem":32,"icon":33},"Coming from TanStack Query","/en/getting-started/coming-from-tanstack-query","en/01.getting-started/6.coming-from-tanstack-query","i-lucide-arrow-left-right",{"title":35,"path":36,"stem":37,"icon":38},"Migrating from Other Libraries","/en/getting-started/migrating-from-other-libraries","en/01.getting-started/7.migrating-from-other-libraries","i-lucide-arrow-right-left",{"title":40,"path":41,"stem":42,"icon":43},"AI Assistants","/en/getting-started/ai-assistants","en/01.getting-started/8.ai-assistants","i-lucide-sparkles",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Core Concepts","i-lucide-book-open","/en/core-concepts","en/02.core-concepts",[51,56,61,66,71,76,81,86],{"title":52,"path":53,"stem":54,"icon":55},"Queries","/en/core-concepts/queries","en/02.core-concepts/1.queries","i-lucide-database",{"title":57,"path":58,"stem":59,"icon":60},"Query Keys","/en/core-concepts/query-keys","en/02.core-concepts/2.query-keys","i-lucide-key-round",{"title":62,"path":63,"stem":64,"icon":65},"Query States","/en/core-concepts/query-states","en/02.core-concepts/3.query-states","i-lucide-activity",{"title":67,"path":68,"stem":69,"icon":70},"Caching","/en/core-concepts/caching","en/02.core-concepts/4.caching","i-lucide-layers-3",{"title":72,"path":73,"stem":74,"icon":75},"Stale-While-Revalidate","/en/core-concepts/stale-while-revalidate","en/02.core-concepts/5.stale-while-revalidate","i-lucide-timer-reset",{"title":77,"path":78,"stem":79,"icon":80},"Deduplication","/en/core-concepts/deduplication","en/02.core-concepts/6.deduplication","i-lucide-copy-minus",{"title":82,"path":83,"stem":84,"icon":85},"Mutations & Invalidation","/en/core-concepts/mutations","en/02.core-concepts/7.mutations","i-lucide-pencil-line",{"title":87,"path":88,"stem":89,"icon":90},"Offline & Network","/en/core-concepts/offline","en/02.core-concepts/8.offline","i-lucide-wifi-off",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":44},"Flutter Integration","i-lucide-smartphone","/en/flutter-integration","en/03.flutter-integration",[97,102,107,112,117,122,127,132],{"title":98,"path":99,"stem":100,"icon":101},"Setup","/en/flutter-integration/setup","en/03.flutter-integration/1.setup","i-lucide-wrench",{"title":103,"path":104,"stem":105,"icon":106},"QoraScope","/en/flutter-integration/qora-scope","en/03.flutter-integration/2.qora-scope","i-lucide-share-2",{"title":108,"path":109,"stem":110,"icon":111},"QoraBuilder","/en/flutter-integration/qora-builder","en/03.flutter-integration/3.qora-builder","i-lucide-blocks",{"title":113,"path":114,"stem":115,"icon":116},"QoraMutationBuilder","/en/flutter-integration/qora-mutation-builder","en/03.flutter-integration/4.qora-mutation-builder","i-lucide-pencil",{"title":118,"path":119,"stem":120,"icon":121},"InfiniteQueryBuilder","/en/flutter-integration/infinite-query-builder","en/03.flutter-integration/5.infinite-query-builder","i-lucide-infinity",{"title":123,"path":124,"stem":125,"icon":126},"Hooks (flutter_hooks)","/en/flutter-integration/hooks","en/03.flutter-integration/6.hooks","i-lucide-anchor",{"title":128,"path":129,"stem":130,"icon":131},"Network Status Widgets","/en/flutter-integration/network-status","en/03.flutter-integration/7.network-status","i-lucide-wifi",{"title":133,"path":134,"stem":135,"icon":136},"Best Practices","/en/flutter-integration/best-practices","en/03.flutter-integration/8.best-practices","i-lucide-badge-check",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":44},"Recipes","i-lucide-chef-hat","/en/recipes","en/04.recipes",[143,147,152,157,162,166,171,176,181,186,191],{"title":144,"path":145,"stem":146,"icon":85},"Mutations","/en/recipes/mutations","en/04.recipes/02.mutations",{"title":148,"path":149,"stem":150,"icon":151},"Optimistic Updates","/en/recipes/optimistic-updates","en/04.recipes/03.optimistic-updates","i-lucide-zap",{"title":153,"path":154,"stem":155,"icon":156},"Persistence","/en/recipes/persistence","en/04.recipes/04.persistence","i-lucide-hard-drive",{"title":158,"path":159,"stem":160,"icon":161},"Network Aware","/en/recipes/network-aware","en/04.recipes/05.network-aware","i-lucide-signal",{"title":163,"path":164,"stem":165,"icon":121},"Infinite Queries","/en/recipes/infinite-queries","en/04.recipes/06.infinite-queries",{"title":167,"path":168,"stem":169,"icon":170},"Dependent Queries","/en/recipes/dependent-queries","en/04.recipes/07.dependent-queries","i-lucide-link-2",{"title":172,"path":173,"stem":174,"icon":175},"Cancellation","/en/recipes/cancel-token","en/04.recipes/08.cancel-token","i-lucide-circle-slash",{"title":177,"path":178,"stem":179,"icon":180},"SSR Hydration","/en/recipes/ssr-hydration","en/04.recipes/09.ssr-hydration","i-lucide-server",{"title":182,"path":183,"stem":184,"icon":185},"Error Handling","/en/recipes/error-handling","en/04.recipes/10.error-handling","i-lucide-shield-alert",{"title":187,"path":188,"stem":189,"icon":190},"Testing","/en/recipes/testing","en/04.recipes/11.testing","i-lucide-flask-conical",{"title":192,"path":193,"stem":194},"Route-Level Prefetching","/en/recipes/prefetch","en/04.recipes/12.prefetch",{"title":196,"icon":197,"path":198,"stem":199,"children":200,"page":44},"API Reference","i-lucide-file-code","/en/api-reference","en/05.api-reference",[201,206,210,214,219,224,228,232],{"title":202,"path":203,"stem":204,"icon":205},"QoraClient","/en/api-reference/qora-client","en/05.api-reference/1.qora-client","i-lucide-cpu",{"title":207,"path":208,"stem":209,"icon":60},"QoraKey","/en/api-reference/qora-key","en/05.api-reference/2.qora-key",{"title":211,"path":212,"stem":213,"icon":65},"QoraState","/en/api-reference/qora-state","en/05.api-reference/3.qora-state",{"title":215,"path":216,"stem":217,"icon":218},"QoraOptions","/en/api-reference/qora-options","en/05.api-reference/4.qora-options","i-lucide-sliders-horizontal",{"title":220,"path":221,"stem":222,"icon":223},"QoraClientConfig","/en/api-reference/qora-client-config","en/05.api-reference/5.qora-client-config","i-lucide-settings-2",{"title":225,"path":226,"stem":227,"icon":85},"Mutation API","/en/api-reference/qora-mutation","en/05.api-reference/6.qora-mutation",{"title":229,"path":230,"stem":231,"icon":156},"PersistQoraClient","/en/api-reference/persist-qora-client","en/05.api-reference/7.persist-qora-client",{"title":233,"path":234,"stem":235,"icon":121},"Infinite Query","/en/api-reference/infinite-query","en/05.api-reference/8.infinite-query",{"title":237,"icon":238,"path":239,"stem":240,"children":241,"page":44},"DevTools","i-lucide-bug","/en/devtools","en/06.devtools",[242,247,252],{"title":243,"path":244,"stem":245,"icon":246},"Overview","/en/devtools/overview","en/06.devtools/1.overview","i-lucide-layout-dashboard",{"title":248,"path":249,"stem":250,"icon":251},"In-App Overlay","/en/devtools/overlay","en/06.devtools/2.overlay","i-lucide-layers",{"title":253,"path":254,"stem":255,"icon":256},"Data Serialization","/en/devtools/data-display","en/06.devtools/4.data-display","i-lucide-eye",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":44},"Third Party","i-lucide-puzzle","/en/third-party","en/07.third-party",[263,268,272,277,282,286],{"title":264,"path":265,"stem":266,"icon":267},"With Provider","/en/third-party/with-provider","en/07.third-party/1.with-provider","i-lucide-plug",{"title":269,"path":270,"stem":271,"icon":111},"With BLoC","/en/third-party/with-bloc","en/07.third-party/2.with-bloc",{"title":273,"path":274,"stem":275,"icon":276},"With Riverpod","/en/third-party/with-riverpod","en/07.third-party/3.with-riverpod","i-lucide-droplets",{"title":278,"path":279,"stem":280,"icon":281},"With RxDart","/en/third-party/with-rxdart","en/07.third-party/4.with-rxdart","i-lucide-git-branch",{"title":283,"path":284,"stem":285},"With Dio","/en/third-party/with-dio","en/07.third-party/5.with-dio",{"title":287,"path":288,"stem":289,"icon":290},"With GraphQL","/en/third-party/with-graphql","en/07.third-party/6.with-graphql","i-lucide-binary",{"title":292,"icon":190,"path":293,"stem":294,"children":295,"page":44},"Examples","/en/examples","en/08.examples",[296,301,305,310,314,318,322],{"title":297,"path":298,"stem":299,"icon":300},"Case Study: User List & Detail","/en/examples/basic-query","en/08.examples/1.basic-query","i-lucide-play-circle",{"title":302,"path":303,"stem":304,"icon":151},"Case Study: Optimistic Mutations & Rollback","/en/examples/mutations-optimistic","en/08.examples/2.mutations-optimistic",{"title":306,"path":307,"stem":308,"icon":309},"Case Study: Infinite Scroll Feed","/en/examples/infinite-scroll","en/08.examples/3.infinite-scroll","i-lucide-scroll",{"title":311,"path":312,"stem":313,"icon":90},"Case Study: Offline-First Todo App","/en/examples/offline-first","en/08.examples/4.offline-first",{"title":315,"path":316,"stem":317,"icon":161},"Case Study: Network Awareness","/en/examples/network-awareness","en/08.examples/5.network-awareness",{"title":319,"path":320,"stem":321,"icon":126},"Case Study: Hooks Integration","/en/examples/hooks-integration","en/08.examples/6.hooks-integration",{"title":323,"path":324,"stem":325,"icon":326},"Case Study: Complete Todo App","/en/examples/complete-todo-app","en/08.examples/7.complete-todo-app","i-lucide-check-square",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"Help","i-lucide-life-buoy","/en/help","en/09.help",[333,338],{"title":334,"path":335,"stem":336,"icon":337},"FAQ","/en/help/faq","en/09.help/1.faq","i-lucide-circle-help",{"title":339,"path":340,"stem":341,"icon":101},"Troubleshooting","/en/help/troubleshooting","en/09.help/2.troubleshooting",{"id":343,"title":344,"body":345,"description":344,"extension":1015,"meta":1016,"navigation":603,"path":1017,"seo":1018,"stem":1021,"__hash__":1022},"landing_en/en/index.md","",{"type":346,"value":347,"toc":1013},"minimark",[348,773,825,941,999,1009],[349,350,352,362,365,375,389],"u-page-hero",{"orientation":351},"horizontal",[353,354,355,356],"template",{"v-slot:title":344},"Server state for Flutter apps that ",[357,358,361],"span",{"className":359},[360],"text-primary","keep working offline",[353,363,364],{"v-slot:description":344},"Qora fetches, caches and synchronizes server data, and keeps your app usable when the network is not. Saved data shows on a cold start, queries pause offline and resume on reconnect, and writes made offline are queued and replayed in order.",[353,366,367],{"v-slot:headline":344},[368,369,374],"u-badge",{"className":370,"color":372,"variant":373},[371],"rounded-full","success","outline","v1.3.1 is now available",[353,376,377,384],{"v-slot:links":344},[378,379,383],"u-button",{"color":380,"size":381,"to":17,"trailing-icon":382},"neutral","xl","i-lucide-arrow-right","Get started",[378,385,388],{"color":380,"size":381,"to":386,"icon":387,"variant":373},"https://github.com/meragix/qora","simple-icons-github","Star on GitHub",[390,391,392],"prose",{},[393,394,399],"pre",{"className":395,"code":396,"filename":397,"language":398,"meta":344,"style":344},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Cached data on the first frame, kept during refetches and errors.\nQoraBuilder\u003CUser>(\n  queryKey: ['users', userId],\n  fetcher: () => api.getUser(userId),\n  builder: (context, state, fetchStatus) => Column(children: [\n    if (fetchStatus == FetchStatus.paused) const OfflineBanner(),\n    if (state.dataOrNull case final user?) UserCard(user),\n  ]),\n)\n\n// Written offline: shown now, sent when the device reconnects.\nQoraMutationBuilder\u003CComment, String, void>(\n  mutator: (text) => api.postComment(text),\n  options: MutationOptions(\n    offlineQueue: true,\n    optimisticResponse: (text) => Comment.draft(text),\n    invalidates: [['comments']],\n  ),\n  builder: (context, state, mutate) => SendButton(onSend: mutate),\n)\n","user_screen.dart","dart",[400,401,402,410,426,452,481,515,548,584,592,598,605,611,634,659,673,684,708,727,735,768],"code",{"__ignoreMap":344},[357,403,406],{"class":404,"line":405},"line",1,[357,407,409],{"class":408},"sHwdD","// Cached data on the first frame, kept during refetches and errors.\n",[357,411,413,416,420,423],{"class":404,"line":412},2,[357,414,108],{"class":415},"sBMFI",[357,417,419],{"class":418},"sTEyZ","\u003C",[357,421,422],{"class":415},"User",[357,424,425],{"class":418},">(\n",[357,427,429,432,436,439,443,446,449],{"class":404,"line":428},3,[357,430,431],{"class":418},"  queryKey",[357,433,435],{"class":434},"sMK4o",":",[357,437,438],{"class":418}," [",[357,440,442],{"class":441},"sfazB","'users'",[357,444,445],{"class":434},",",[357,447,448],{"class":418}," userId]",[357,450,451],{"class":434},",\n",[357,453,455,458,460,463,466,469,472,476,479],{"class":404,"line":454},4,[357,456,457],{"class":418},"  fetcher",[357,459,435],{"class":434},[357,461,462],{"class":418}," () ",[357,464,465],{"class":434},"=>",[357,467,468],{"class":418}," api",[357,470,471],{"class":434},".",[357,473,475],{"class":474},"s2Zo4","getUser",[357,477,478],{"class":418},"(userId)",[357,480,451],{"class":434},[357,482,484,487,489,492,494,497,499,502,504,507,510,512],{"class":404,"line":483},5,[357,485,486],{"class":418},"  builder",[357,488,435],{"class":434},[357,490,491],{"class":418}," (context",[357,493,445],{"class":434},[357,495,496],{"class":418}," state",[357,498,445],{"class":434},[357,500,501],{"class":418}," fetchStatus) ",[357,503,465],{"class":434},[357,505,506],{"class":415}," Column",[357,508,509],{"class":418},"(children",[357,511,435],{"class":434},[357,513,514],{"class":418}," [\n",[357,516,518,522,525,528,531,533,536,540,543,546],{"class":404,"line":517},6,[357,519,521],{"class":520},"s7zQu","    if",[357,523,524],{"class":418}," (fetchStatus ",[357,526,527],{"class":434},"==",[357,529,530],{"class":415}," FetchStatus",[357,532,471],{"class":434},[357,534,535],{"class":418},"paused) ",[357,537,539],{"class":538},"spNyl","const",[357,541,542],{"class":415}," OfflineBanner",[357,544,545],{"class":418},"()",[357,547,451],{"class":434},[357,549,551,553,556,558,561,564,567,570,573,576,579,582],{"class":404,"line":550},7,[357,552,521],{"class":520},[357,554,555],{"class":418}," (state",[357,557,471],{"class":434},[357,559,560],{"class":418},"dataOrNull ",[357,562,563],{"class":520},"case",[357,565,566],{"class":538}," final",[357,568,569],{"class":418}," user",[357,571,572],{"class":434},"?",[357,574,575],{"class":418},") ",[357,577,578],{"class":415},"UserCard",[357,580,581],{"class":418},"(user)",[357,583,451],{"class":434},[357,585,587,590],{"class":404,"line":586},8,[357,588,589],{"class":418},"  ])",[357,591,451],{"class":434},[357,593,595],{"class":404,"line":594},9,[357,596,597],{"class":418},")\n",[357,599,601],{"class":404,"line":600},10,[357,602,604],{"emptyLinePlaceholder":603},true,"\n",[357,606,608],{"class":404,"line":607},11,[357,609,610],{"class":408},"// Written offline: shown now, sent when the device reconnects.\n",[357,612,614,616,618,621,624,627,629,632],{"class":404,"line":613},12,[357,615,113],{"class":415},[357,617,419],{"class":418},[357,619,620],{"class":415},"Comment",[357,622,623],{"class":418},", ",[357,625,626],{"class":415},"String",[357,628,623],{"class":418},[357,630,631],{"class":538},"void",[357,633,425],{"class":418},[357,635,637,640,642,645,647,649,651,654,657],{"class":404,"line":636},13,[357,638,639],{"class":418},"  mutator",[357,641,435],{"class":434},[357,643,644],{"class":418}," (text) ",[357,646,465],{"class":434},[357,648,468],{"class":418},[357,650,471],{"class":434},[357,652,653],{"class":474},"postComment",[357,655,656],{"class":418},"(text)",[357,658,451],{"class":434},[357,660,662,665,667,670],{"class":404,"line":661},14,[357,663,664],{"class":418},"  options",[357,666,435],{"class":434},[357,668,669],{"class":415}," MutationOptions",[357,671,672],{"class":418},"(\n",[357,674,676,679,681],{"class":404,"line":675},15,[357,677,678],{"class":418},"    offlineQueue",[357,680,435],{"class":434},[357,682,683],{"class":434}," true,\n",[357,685,687,690,692,694,696,699,701,704,706],{"class":404,"line":686},16,[357,688,689],{"class":418},"    optimisticResponse",[357,691,435],{"class":434},[357,693,644],{"class":418},[357,695,465],{"class":434},[357,697,698],{"class":415}," Comment",[357,700,471],{"class":434},[357,702,703],{"class":474},"draft",[357,705,656],{"class":418},[357,707,451],{"class":434},[357,709,711,714,716,719,722,725],{"class":404,"line":710},17,[357,712,713],{"class":418},"    invalidates",[357,715,435],{"class":434},[357,717,718],{"class":418}," [[",[357,720,721],{"class":441},"'comments'",[357,723,724],{"class":418},"]]",[357,726,451],{"class":434},[357,728,730,733],{"class":404,"line":729},18,[357,731,732],{"class":418},"  )",[357,734,451],{"class":434},[357,736,738,740,742,744,746,748,750,753,755,758,761,763,766],{"class":404,"line":737},19,[357,739,486],{"class":418},[357,741,435],{"class":434},[357,743,491],{"class":418},[357,745,445],{"class":434},[357,747,496],{"class":418},[357,749,445],{"class":434},[357,751,752],{"class":418}," mutate) ",[357,754,465],{"class":434},[357,756,757],{"class":415}," SendButton",[357,759,760],{"class":418},"(onSend",[357,762,435],{"class":434},[357,764,765],{"class":418}," mutate)",[357,767,451],{"class":434},[357,769,771],{"class":404,"line":770},20,[357,772,597],{"class":418},[774,775,776,779,782],"u-page-section",{},[353,777,778],{"v-slot:title":344},"Offline, built in",[353,780,781],{"v-slot:description":344},"Not a refetch-on-reconnect flag: three pieces that work together, wired by one widget.",[353,783,784,798,813],{"v-slot:features":344},[785,786,787,793],"u-page-feature",{"icon":156,"to":154},[353,788,789],{"v-slot:title":344},[357,790,792],{"className":791},[360],"Saved data on cold start",[353,794,795,797],{"v-slot:description":344},[400,796,229],{}," writes successful fetches to your storage and restores them before the first frame. Stale entries show immediately and revalidate in the background.",[785,799,800,806],{"icon":90,"to":88},[353,801,802],{"v-slot:title":344},[357,803,805],{"className":804},[360],"Queries that know they are offline",[353,807,808,809,812],{"v-slot:description":344},"Queries pause while the device is offline and report it through ",[400,810,811],{},"FetchStatus.paused",", so the UI can tell \"no network\" from \"loading\". They resume on reconnect, with jitter to avoid a thundering herd.",[785,814,816,822],{"icon":815,"to":312},"i-lucide-list-ordered",[353,817,818],{"v-slot:title":344},[357,819,821],{"className":820},[360],"Writes that wait for the network",[353,823,824],{"v-slot:description":344},"Mutations made offline return an optimistic result right away and are replayed in order on reconnect. The queue is held in memory today; persisting it across app restarts is the focus of 1.4.",[774,826,827,830],{},[353,828,829],{"v-slot:title":344},"Everything else you expect from a query library",[353,831,832,840,849,858,874,890,902,923,932],{"v-slot:features":344},[785,833,834,837],{"icon":70},[353,835,836],{"v-slot:title":344},"Stale-while-revalidate",[353,838,839],{"v-slot:description":344},"Cached data renders on the first frame; fresh data replaces it in the background.",[785,841,843,846],{"icon":842},"i-lucide-git-merge",[353,844,845],{"v-slot:title":344},"Request deduplication",[353,847,848],{"v-slot:description":344},"Ten widgets watching the same key share one cache entry and one network call.",[785,850,852,855],{"icon":851},"i-lucide-refresh-cw",[353,853,854],{"v-slot:title":344},"Precise invalidation",[353,856,857],{"v-slot:description":344},"By exact key, by key prefix, by predicate, or by tag. Mounted queries refetch automatically.",[785,859,860,863],{"icon":151},[353,861,862],{"v-slot:title":344},"Optimistic updates",[353,864,865,866,869,870,873],{"v-slot:description":344},"Update the cache in ",[400,867,868],{},"onMutate",", restore the snapshot in ",[400,871,872],{},"onError",", invalidate on success.",[785,875,877,880],{"icon":876},"i-lucide-split",[353,878,879],{"v-slot:title":344},"Two-axis state",[353,881,882,883,885,886,889],{"v-slot:description":344},"A sealed ",[400,884,211],{}," you can match exhaustively, plus a separate ",[400,887,888],{},"FetchStatus",". Previous data is never lost on refetch or error.",[785,891,892,895],{"icon":121},[353,893,894],{"v-slot:title":344},"Infinite queries",[353,896,897,898,901],{"v-slot:description":344},"Cursor or page based pagination with a ",[400,899,900],{},"maxPages"," memory window.",[785,903,904,907],{"icon":126},[353,905,906],{"v-slot:title":344},"Builders or hooks",[353,908,909,911,912,915,916,919,920,471],{"v-slot:description":344},[400,910,108],{}," widgets, or ",[400,913,914],{},"useQuery"," and ",[400,917,918],{},"useMutation"," with ",[400,921,922],{},"qora_hooks",[785,924,926,929],{"icon":925},"i-lucide-monitor",[353,927,928],{"v-slot:title":344},"In-app DevTools",[353,930,931],{"v-slot:description":344},"A debug-only overlay that shows every query, its state, its staleness and the mutation queue.",[785,933,935,938],{"icon":934},"i-lucide-package",[353,936,937],{"v-slot:title":344},"Pure Dart core",[353,939,940],{"v-slot:description":344},"No Flutter dependency and no code generation. Works in CLIs, servers and tests.",[774,942,943,946,949],{},[353,944,945],{"v-slot:title":344},"Works with what you already use",[353,947,948],{"v-slot:description":344},"Qora owns server data. Keep your state management for UI state, your HTTP client for transport.",[353,950,951,960,969,984],{"v-slot:features":344},[785,952,954,957],{"icon":953,"to":274},"i-lucide-boxes",[353,955,956],{"v-slot:title":344},"Riverpod",[353,958,959],{"v-slot:description":344},"Expose Qora queries to providers.",[785,961,963,966],{"icon":962,"to":270},"i-lucide-workflow",[353,964,965],{"v-slot:title":344},"BLoC",[353,967,968],{"v-slot:description":344},"Feed cubits and blocs from the cache.",[785,970,972,975],{"icon":971,"to":284},"i-lucide-globe",[353,973,974],{"v-slot:title":344},"Dio and GraphQL",[353,976,977,978,915,981,471],{"v-slot:description":344},"Map transport errors, refresh tokens, wrap ",[400,979,980],{},"graphql",[400,982,983],{},"ferry",[785,985,986,989],{"icon":38,"to":36},[353,987,988],{"v-slot:title":344},"Coming from another library",[353,990,991,992,623,995,998],{"v-slot:description":344},"API mapping from ",[400,993,994],{},"cached_query",[400,996,997],{},"flutter_query"," and TanStack Query.",[774,1000,1001],{},[1002,1003],"u-page-c-t-a",{":links":1004,"className":1005,"description":1007,"title":1008},"[{\"label\":\"Read the docs\",\"to\":\"/en/getting-started/installation\",\"trailingIcon\":\"i-lucide-arrow-right\",\"size\":\"xl\"},{\"label\":\"View on GitHub\",\"to\":\"https://github.com/meragix/qora\",\"target\":\"_blank\",\"variant\":\"outline\",\"icon\":\"i-simple-icons-github\",\"size\":\"xl\"}]",[1006],"dark:bg-neutral-950","Add one package, wrap your app with QoraScope.auto, and bind a query to a widget. No code generation, no provider scaffolding.","Your first query in five minutes",[1010,1011,1012],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":344,"searchDepth":412,"depth":412,"links":1014},[],"md",{},"/en",{"title":1019,"description":1020},"Server state for Flutter apps that keep working offline","Fetch, cache and sync server data in Flutter. Saved data on cold start, queries that pause offline, writes queued and replayed on reconnect. Inspired by TanStack Query, no code generation.","en/index","Fz1tEo6HpY3hFu-EaGRxldGpv6MQKrE7ROURDxdfbcA",1794040391775]