tinybase 5.0.0-beta.26 → 5.0.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (741) hide show
  1. package/@types/_internal/ui-react/with-schemas/index.d.cts +274 -0
  2. package/@types/_internal/ui-react/with-schemas/index.d.ts +274 -0
  3. package/@types/checkpoints/index.d.cts +30 -1
  4. package/@types/checkpoints/index.d.ts +30 -1
  5. package/@types/checkpoints/with-schemas/index.d.cts +30 -1
  6. package/@types/checkpoints/with-schemas/index.d.ts +30 -1
  7. package/@types/common/index.d.cts +9 -0
  8. package/@types/common/index.d.ts +9 -0
  9. package/@types/common/with-schemas/index.d.cts +9 -0
  10. package/@types/common/with-schemas/index.d.ts +9 -0
  11. package/@types/index.d.cts +1 -0
  12. package/@types/index.d.ts +1 -0
  13. package/@types/indexes/index.d.cts +32 -1
  14. package/@types/indexes/index.d.ts +32 -1
  15. package/@types/indexes/with-schemas/index.d.cts +32 -1
  16. package/@types/indexes/with-schemas/index.d.ts +32 -1
  17. package/@types/mergeable-store/index.d.cts +0 -2
  18. package/@types/mergeable-store/index.d.ts +0 -2
  19. package/@types/mergeable-store/with-schemas/index.d.cts +2 -2
  20. package/@types/mergeable-store/with-schemas/index.d.ts +2 -2
  21. package/@types/metrics/index.d.cts +30 -4
  22. package/@types/metrics/index.d.ts +30 -4
  23. package/@types/metrics/with-schemas/index.d.cts +30 -4
  24. package/@types/metrics/with-schemas/index.d.ts +30 -4
  25. package/@types/persisters/index.d.cts +246 -62
  26. package/@types/persisters/index.d.ts +246 -62
  27. package/@types/persisters/persister-automerge/index.d.cts +13 -9
  28. package/@types/persisters/persister-automerge/index.d.ts +13 -9
  29. package/@types/persisters/persister-automerge/with-schemas/index.d.cts +13 -9
  30. package/@types/persisters/persister-automerge/with-schemas/index.d.ts +13 -9
  31. package/@types/persisters/persister-browser/index.d.cts +25 -15
  32. package/@types/persisters/persister-browser/index.d.ts +25 -15
  33. package/@types/persisters/persister-browser/with-schemas/index.d.cts +25 -15
  34. package/@types/persisters/persister-browser/with-schemas/index.d.ts +25 -15
  35. package/@types/persisters/persister-cr-sqlite-wasm/index.d.cts +12 -9
  36. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +12 -9
  37. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.cts +12 -9
  38. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +12 -9
  39. package/@types/persisters/persister-electric-sql/index.d.cts +12 -9
  40. package/@types/persisters/persister-electric-sql/index.d.ts +12 -9
  41. package/@types/persisters/persister-electric-sql/with-schemas/index.d.cts +12 -9
  42. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +12 -9
  43. package/@types/persisters/persister-expo-sqlite/index.d.cts +14 -10
  44. package/@types/persisters/persister-expo-sqlite/index.d.ts +14 -10
  45. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.cts +14 -10
  46. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +14 -10
  47. package/@types/persisters/persister-file/index.d.cts +14 -8
  48. package/@types/persisters/persister-file/index.d.ts +14 -8
  49. package/@types/persisters/persister-file/with-schemas/index.d.cts +14 -8
  50. package/@types/persisters/persister-file/with-schemas/index.d.ts +14 -8
  51. package/@types/persisters/persister-indexed-db/index.d.cts +13 -8
  52. package/@types/persisters/persister-indexed-db/index.d.ts +13 -8
  53. package/@types/persisters/persister-indexed-db/with-schemas/index.d.cts +13 -8
  54. package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +13 -8
  55. package/@types/persisters/persister-libsql/index.d.cts +13 -8
  56. package/@types/persisters/persister-libsql/index.d.ts +13 -8
  57. package/@types/persisters/persister-libsql/with-schemas/index.d.cts +13 -8
  58. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +13 -8
  59. package/@types/persisters/persister-partykit-client/index.d.cts +24 -13
  60. package/@types/persisters/persister-partykit-client/index.d.ts +24 -13
  61. package/@types/persisters/persister-partykit-client/with-schemas/index.d.cts +24 -13
  62. package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +24 -13
  63. package/@types/persisters/persister-partykit-server/index.d.cts +11 -3
  64. package/@types/persisters/persister-partykit-server/index.d.ts +11 -3
  65. package/@types/persisters/persister-partykit-server/with-schemas/index.d.cts +11 -3
  66. package/@types/persisters/persister-partykit-server/with-schemas/index.d.ts +11 -3
  67. package/@types/persisters/persister-powersync/index.d.cts +15 -9
  68. package/@types/persisters/persister-powersync/index.d.ts +15 -9
  69. package/@types/persisters/persister-powersync/with-schemas/index.d.cts +15 -9
  70. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +15 -9
  71. package/@types/persisters/persister-remote/index.d.cts +15 -10
  72. package/@types/persisters/persister-remote/index.d.ts +15 -10
  73. package/@types/persisters/persister-remote/with-schemas/index.d.cts +15 -10
  74. package/@types/persisters/persister-remote/with-schemas/index.d.ts +15 -10
  75. package/@types/persisters/persister-sqlite-wasm/index.d.cts +14 -9
  76. package/@types/persisters/persister-sqlite-wasm/index.d.ts +14 -9
  77. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.cts +14 -9
  78. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +14 -9
  79. package/@types/persisters/persister-sqlite3/index.d.cts +14 -9
  80. package/@types/persisters/persister-sqlite3/index.d.ts +14 -9
  81. package/@types/persisters/persister-sqlite3/with-schemas/index.d.cts +14 -9
  82. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +14 -9
  83. package/@types/persisters/persister-yjs/index.d.cts +13 -8
  84. package/@types/persisters/persister-yjs/index.d.ts +13 -8
  85. package/@types/persisters/persister-yjs/with-schemas/index.d.cts +13 -8
  86. package/@types/persisters/persister-yjs/with-schemas/index.d.ts +13 -8
  87. package/@types/persisters/with-schemas/index.d.cts +280 -63
  88. package/@types/persisters/with-schemas/index.d.ts +280 -63
  89. package/@types/queries/index.d.cts +64 -5
  90. package/@types/queries/index.d.ts +64 -5
  91. package/@types/queries/with-schemas/index.d.cts +64 -5
  92. package/@types/queries/with-schemas/index.d.ts +64 -5
  93. package/@types/relationships/index.d.cts +34 -1
  94. package/@types/relationships/index.d.ts +34 -1
  95. package/@types/relationships/with-schemas/index.d.cts +34 -1
  96. package/@types/relationships/with-schemas/index.d.ts +34 -1
  97. package/@types/store/index.d.cts +125 -0
  98. package/@types/store/index.d.ts +125 -0
  99. package/@types/store/with-schemas/index.d.cts +125 -0
  100. package/@types/store/with-schemas/index.d.ts +125 -0
  101. package/@types/synchronizers/index.d.cts +375 -41
  102. package/@types/synchronizers/index.d.ts +375 -41
  103. package/@types/synchronizers/synchronizer-broadcast-channel/index.d.cts +114 -0
  104. package/@types/synchronizers/synchronizer-broadcast-channel/index.d.ts +114 -0
  105. package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.cts +128 -0
  106. package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +128 -0
  107. package/@types/synchronizers/synchronizer-local/index.d.cts +62 -3
  108. package/@types/synchronizers/synchronizer-local/index.d.ts +62 -3
  109. package/@types/synchronizers/synchronizer-local/with-schemas/index.d.cts +77 -3
  110. package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +77 -3
  111. package/@types/synchronizers/synchronizer-ws-client/index.d.cts +110 -3
  112. package/@types/synchronizers/synchronizer-ws-client/index.d.ts +110 -3
  113. package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.cts +121 -3
  114. package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +121 -3
  115. package/@types/synchronizers/synchronizer-ws-server/index.d.cts +486 -7
  116. package/@types/synchronizers/synchronizer-ws-server/index.d.ts +486 -7
  117. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.cts +486 -7
  118. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +486 -7
  119. package/@types/synchronizers/with-schemas/index.d.cts +372 -42
  120. package/@types/synchronizers/with-schemas/index.d.ts +372 -42
  121. package/@types/tools/index.d.cts +22 -0
  122. package/@types/tools/index.d.ts +22 -0
  123. package/@types/tools/with-schemas/index.d.cts +22 -0
  124. package/@types/tools/with-schemas/index.d.ts +22 -0
  125. package/@types/ui-react/index.d.cts +375 -1
  126. package/@types/ui-react/index.d.ts +375 -1
  127. package/@types/ui-react/with-schemas/index.d.cts +100 -1
  128. package/@types/ui-react/with-schemas/index.d.ts +100 -1
  129. package/@types/ui-react-dom/index.d.cts +112 -0
  130. package/@types/ui-react-dom/index.d.ts +112 -0
  131. package/@types/ui-react-dom/with-schemas/index.d.cts +112 -0
  132. package/@types/ui-react-dom/with-schemas/index.d.ts +112 -0
  133. package/@types/ui-react-inspector/index.d.cts +6 -2
  134. package/@types/ui-react-inspector/index.d.ts +6 -2
  135. package/@types/ui-react-inspector/with-schemas/index.d.cts +118 -2
  136. package/@types/ui-react-inspector/with-schemas/index.d.ts +118 -2
  137. package/@types/with-schemas/index.d.cts +1 -0
  138. package/@types/with-schemas/index.d.ts +1 -0
  139. package/cjs/es6/index.cjs +49 -43
  140. package/cjs/es6/min/index.cjs +1 -1
  141. package/cjs/es6/min/index.cjs.gz +0 -0
  142. package/cjs/es6/min/metrics/index.cjs +1 -1
  143. package/cjs/es6/min/metrics/index.cjs.gz +0 -0
  144. package/cjs/es6/min/metrics/with-schemas/index.cjs +1 -1
  145. package/cjs/es6/min/metrics/with-schemas/index.cjs.gz +0 -0
  146. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  147. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  148. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  149. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  150. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs +1 -1
  151. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  152. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  153. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  154. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  155. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  156. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  157. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  158. package/cjs/es6/min/persisters/persister-libsql/index.cjs +1 -1
  159. package/cjs/es6/min/persisters/persister-libsql/index.cjs.gz +0 -0
  160. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  161. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  162. package/cjs/es6/min/persisters/persister-powersync/index.cjs +1 -1
  163. package/cjs/es6/min/persisters/persister-powersync/index.cjs.gz +0 -0
  164. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  165. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  166. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  167. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  168. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  169. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  170. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs +1 -1
  171. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  172. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  173. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  174. package/cjs/es6/min/queries/index.cjs +1 -1
  175. package/cjs/es6/min/queries/index.cjs.gz +0 -0
  176. package/cjs/es6/min/queries/with-schemas/index.cjs +1 -1
  177. package/cjs/es6/min/queries/with-schemas/index.cjs.gz +0 -0
  178. package/cjs/es6/min/synchronizers/index.cjs +1 -1
  179. package/cjs/es6/min/synchronizers/index.cjs.gz +0 -0
  180. package/cjs/es6/min/synchronizers/synchronizer-broadcast-channel/index.cjs +1 -0
  181. package/cjs/es6/min/synchronizers/synchronizer-broadcast-channel/index.cjs.gz +0 -0
  182. package/cjs/es6/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +1 -0
  183. package/cjs/es6/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs.gz +0 -0
  184. package/cjs/es6/min/synchronizers/synchronizer-ws-client/index.cjs +1 -1
  185. package/cjs/es6/min/synchronizers/synchronizer-ws-client/index.cjs.gz +0 -0
  186. package/cjs/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -1
  187. package/cjs/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs.gz +0 -0
  188. package/cjs/es6/min/synchronizers/with-schemas/index.cjs +1 -1
  189. package/cjs/es6/min/synchronizers/with-schemas/index.cjs.gz +0 -0
  190. package/cjs/es6/min/ui-react/index.cjs +1 -1
  191. package/cjs/es6/min/ui-react/index.cjs.gz +0 -0
  192. package/cjs/es6/min/ui-react/with-schemas/index.cjs +1 -1
  193. package/cjs/es6/min/ui-react/with-schemas/index.cjs.gz +0 -0
  194. package/cjs/es6/min/with-schemas/index.cjs +1 -1
  195. package/cjs/es6/min/with-schemas/index.cjs.gz +0 -0
  196. package/cjs/es6/persisters/index.cjs +5 -5
  197. package/cjs/es6/persisters/persister-automerge/index.cjs +5 -5
  198. package/cjs/es6/persisters/persister-automerge/with-schemas/index.cjs +5 -5
  199. package/cjs/es6/persisters/persister-browser/index.cjs +5 -5
  200. package/cjs/es6/persisters/persister-browser/with-schemas/index.cjs +5 -5
  201. package/cjs/es6/persisters/persister-cr-sqlite-wasm/index.cjs +11 -11
  202. package/cjs/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +11 -11
  203. package/cjs/es6/persisters/persister-electric-sql/index.cjs +11 -11
  204. package/cjs/es6/persisters/persister-electric-sql/with-schemas/index.cjs +11 -11
  205. package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +11 -11
  206. package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +11 -11
  207. package/cjs/es6/persisters/persister-file/index.cjs +5 -5
  208. package/cjs/es6/persisters/persister-file/with-schemas/index.cjs +5 -5
  209. package/cjs/es6/persisters/persister-indexed-db/index.cjs +5 -5
  210. package/cjs/es6/persisters/persister-indexed-db/with-schemas/index.cjs +5 -5
  211. package/cjs/es6/persisters/persister-libsql/index.cjs +11 -11
  212. package/cjs/es6/persisters/persister-libsql/with-schemas/index.cjs +11 -11
  213. package/cjs/es6/persisters/persister-partykit-client/index.cjs +5 -5
  214. package/cjs/es6/persisters/persister-partykit-client/with-schemas/index.cjs +5 -5
  215. package/cjs/es6/persisters/persister-powersync/index.cjs +11 -11
  216. package/cjs/es6/persisters/persister-powersync/with-schemas/index.cjs +11 -11
  217. package/cjs/es6/persisters/persister-remote/index.cjs +5 -5
  218. package/cjs/es6/persisters/persister-remote/with-schemas/index.cjs +5 -5
  219. package/cjs/es6/persisters/persister-sqlite-wasm/index.cjs +11 -11
  220. package/cjs/es6/persisters/persister-sqlite-wasm/with-schemas/index.cjs +11 -11
  221. package/cjs/es6/persisters/persister-sqlite3/index.cjs +11 -11
  222. package/cjs/es6/persisters/persister-sqlite3/with-schemas/index.cjs +11 -11
  223. package/cjs/es6/persisters/persister-yjs/index.cjs +5 -5
  224. package/cjs/es6/persisters/persister-yjs/with-schemas/index.cjs +5 -5
  225. package/cjs/es6/persisters/with-schemas/index.cjs +5 -5
  226. package/cjs/es6/synchronizers/index.cjs +49 -43
  227. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/index.cjs +628 -0
  228. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +628 -0
  229. package/cjs/es6/synchronizers/synchronizer-local/index.cjs +53 -48
  230. package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +53 -48
  231. package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +61 -62
  232. package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +61 -62
  233. package/cjs/es6/synchronizers/with-schemas/index.cjs +49 -43
  234. package/cjs/es6/ui-react/index.cjs +137 -75
  235. package/cjs/es6/ui-react/with-schemas/index.cjs +137 -75
  236. package/cjs/es6/ui-react-inspector/index.cjs +5 -5
  237. package/cjs/es6/ui-react-inspector/with-schemas/index.cjs +5 -5
  238. package/cjs/es6/with-schemas/index.cjs +49 -43
  239. package/cjs/index.cjs +49 -43
  240. package/cjs/min/index.cjs +1 -1
  241. package/cjs/min/index.cjs.gz +0 -0
  242. package/cjs/min/metrics/index.cjs +1 -1
  243. package/cjs/min/metrics/index.cjs.gz +0 -0
  244. package/cjs/min/metrics/with-schemas/index.cjs +1 -1
  245. package/cjs/min/metrics/with-schemas/index.cjs.gz +0 -0
  246. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  247. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  248. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  249. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  250. package/cjs/min/persisters/persister-electric-sql/index.cjs +1 -1
  251. package/cjs/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  252. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  253. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  254. package/cjs/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  255. package/cjs/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  256. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  257. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  258. package/cjs/min/persisters/persister-libsql/index.cjs +1 -1
  259. package/cjs/min/persisters/persister-libsql/index.cjs.gz +0 -0
  260. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  261. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  262. package/cjs/min/persisters/persister-powersync/index.cjs +1 -1
  263. package/cjs/min/persisters/persister-powersync/index.cjs.gz +0 -0
  264. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  265. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  266. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  267. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  268. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  269. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  270. package/cjs/min/persisters/persister-sqlite3/index.cjs +1 -1
  271. package/cjs/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  272. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  273. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  274. package/cjs/min/queries/index.cjs +1 -1
  275. package/cjs/min/queries/index.cjs.gz +0 -0
  276. package/cjs/min/queries/with-schemas/index.cjs +1 -1
  277. package/cjs/min/queries/with-schemas/index.cjs.gz +0 -0
  278. package/cjs/min/synchronizers/index.cjs +1 -1
  279. package/cjs/min/synchronizers/index.cjs.gz +0 -0
  280. package/cjs/min/synchronizers/synchronizer-broadcast-channel/index.cjs +1 -0
  281. package/cjs/min/synchronizers/synchronizer-broadcast-channel/index.cjs.gz +0 -0
  282. package/cjs/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +1 -0
  283. package/cjs/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs.gz +0 -0
  284. package/cjs/min/synchronizers/synchronizer-ws-client/index.cjs +1 -1
  285. package/cjs/min/synchronizers/synchronizer-ws-client/index.cjs.gz +0 -0
  286. package/cjs/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -1
  287. package/cjs/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs.gz +0 -0
  288. package/cjs/min/synchronizers/with-schemas/index.cjs +1 -1
  289. package/cjs/min/synchronizers/with-schemas/index.cjs.gz +0 -0
  290. package/cjs/min/ui-react/index.cjs +1 -1
  291. package/cjs/min/ui-react/index.cjs.gz +0 -0
  292. package/cjs/min/ui-react/with-schemas/index.cjs +1 -1
  293. package/cjs/min/ui-react/with-schemas/index.cjs.gz +0 -0
  294. package/cjs/min/with-schemas/index.cjs +1 -1
  295. package/cjs/min/with-schemas/index.cjs.gz +0 -0
  296. package/cjs/persisters/index.cjs +5 -5
  297. package/cjs/persisters/persister-automerge/index.cjs +5 -5
  298. package/cjs/persisters/persister-automerge/with-schemas/index.cjs +5 -5
  299. package/cjs/persisters/persister-browser/index.cjs +5 -5
  300. package/cjs/persisters/persister-browser/with-schemas/index.cjs +5 -5
  301. package/cjs/persisters/persister-cr-sqlite-wasm/index.cjs +11 -11
  302. package/cjs/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +11 -11
  303. package/cjs/persisters/persister-electric-sql/index.cjs +11 -11
  304. package/cjs/persisters/persister-electric-sql/with-schemas/index.cjs +11 -11
  305. package/cjs/persisters/persister-expo-sqlite/index.cjs +11 -11
  306. package/cjs/persisters/persister-expo-sqlite/with-schemas/index.cjs +11 -11
  307. package/cjs/persisters/persister-file/index.cjs +5 -5
  308. package/cjs/persisters/persister-file/with-schemas/index.cjs +5 -5
  309. package/cjs/persisters/persister-indexed-db/index.cjs +5 -5
  310. package/cjs/persisters/persister-indexed-db/with-schemas/index.cjs +5 -5
  311. package/cjs/persisters/persister-libsql/index.cjs +11 -11
  312. package/cjs/persisters/persister-libsql/with-schemas/index.cjs +11 -11
  313. package/cjs/persisters/persister-partykit-client/index.cjs +5 -5
  314. package/cjs/persisters/persister-partykit-client/with-schemas/index.cjs +5 -5
  315. package/cjs/persisters/persister-powersync/index.cjs +11 -11
  316. package/cjs/persisters/persister-powersync/with-schemas/index.cjs +11 -11
  317. package/cjs/persisters/persister-remote/index.cjs +5 -5
  318. package/cjs/persisters/persister-remote/with-schemas/index.cjs +5 -5
  319. package/cjs/persisters/persister-sqlite-wasm/index.cjs +11 -11
  320. package/cjs/persisters/persister-sqlite-wasm/with-schemas/index.cjs +11 -11
  321. package/cjs/persisters/persister-sqlite3/index.cjs +11 -11
  322. package/cjs/persisters/persister-sqlite3/with-schemas/index.cjs +11 -11
  323. package/cjs/persisters/persister-yjs/index.cjs +5 -5
  324. package/cjs/persisters/persister-yjs/with-schemas/index.cjs +5 -5
  325. package/cjs/persisters/with-schemas/index.cjs +5 -5
  326. package/cjs/synchronizers/index.cjs +49 -43
  327. package/cjs/synchronizers/synchronizer-broadcast-channel/index.cjs +500 -0
  328. package/cjs/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +500 -0
  329. package/cjs/synchronizers/synchronizer-local/index.cjs +53 -53
  330. package/cjs/synchronizers/synchronizer-local/with-schemas/index.cjs +53 -53
  331. package/cjs/synchronizers/synchronizer-ws-client/index.cjs +61 -62
  332. package/cjs/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +61 -62
  333. package/cjs/synchronizers/with-schemas/index.cjs +49 -43
  334. package/cjs/ui-react/index.cjs +139 -74
  335. package/cjs/ui-react/with-schemas/index.cjs +139 -74
  336. package/cjs/ui-react-inspector/index.cjs +5 -5
  337. package/cjs/ui-react-inspector/with-schemas/index.cjs +5 -5
  338. package/cjs/with-schemas/index.cjs +49 -43
  339. package/es6/index.js +49 -43
  340. package/es6/min/index.js +1 -1
  341. package/es6/min/index.js.gz +0 -0
  342. package/es6/min/metrics/index.js +1 -1
  343. package/es6/min/metrics/index.js.gz +0 -0
  344. package/es6/min/metrics/with-schemas/index.js +1 -1
  345. package/es6/min/metrics/with-schemas/index.js.gz +0 -0
  346. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  347. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  348. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  349. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  350. package/es6/min/persisters/persister-electric-sql/index.js +1 -1
  351. package/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  352. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  353. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  354. package/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  355. package/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  356. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  357. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  358. package/es6/min/persisters/persister-libsql/index.js +1 -1
  359. package/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  360. package/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  361. package/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  362. package/es6/min/persisters/persister-powersync/index.js +1 -1
  363. package/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  364. package/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  365. package/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  366. package/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  367. package/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  368. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  369. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  370. package/es6/min/persisters/persister-sqlite3/index.js +1 -1
  371. package/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  372. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  373. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  374. package/es6/min/queries/index.js +1 -1
  375. package/es6/min/queries/index.js.gz +0 -0
  376. package/es6/min/queries/with-schemas/index.js +1 -1
  377. package/es6/min/queries/with-schemas/index.js.gz +0 -0
  378. package/es6/min/synchronizers/index.js +1 -1
  379. package/es6/min/synchronizers/index.js.gz +0 -0
  380. package/es6/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  381. package/es6/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  382. package/es6/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  383. package/es6/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  384. package/es6/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  385. package/es6/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  386. package/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  387. package/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  388. package/es6/min/synchronizers/with-schemas/index.js +1 -1
  389. package/es6/min/synchronizers/with-schemas/index.js.gz +0 -0
  390. package/es6/min/ui-react/index.js +1 -1
  391. package/es6/min/ui-react/index.js.gz +0 -0
  392. package/es6/min/ui-react/with-schemas/index.js +1 -1
  393. package/es6/min/ui-react/with-schemas/index.js.gz +0 -0
  394. package/es6/min/with-schemas/index.js +1 -1
  395. package/es6/min/with-schemas/index.js.gz +0 -0
  396. package/es6/persisters/index.js +5 -5
  397. package/es6/persisters/persister-automerge/index.js +5 -5
  398. package/es6/persisters/persister-automerge/with-schemas/index.js +5 -5
  399. package/es6/persisters/persister-browser/index.js +5 -5
  400. package/es6/persisters/persister-browser/with-schemas/index.js +5 -5
  401. package/es6/persisters/persister-cr-sqlite-wasm/index.js +11 -11
  402. package/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +11 -11
  403. package/es6/persisters/persister-electric-sql/index.js +11 -11
  404. package/es6/persisters/persister-electric-sql/with-schemas/index.js +11 -11
  405. package/es6/persisters/persister-expo-sqlite/index.js +11 -11
  406. package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +11 -11
  407. package/es6/persisters/persister-file/index.js +5 -5
  408. package/es6/persisters/persister-file/with-schemas/index.js +5 -5
  409. package/es6/persisters/persister-indexed-db/index.js +5 -5
  410. package/es6/persisters/persister-indexed-db/with-schemas/index.js +5 -5
  411. package/es6/persisters/persister-libsql/index.js +11 -11
  412. package/es6/persisters/persister-libsql/with-schemas/index.js +11 -11
  413. package/es6/persisters/persister-partykit-client/index.js +5 -5
  414. package/es6/persisters/persister-partykit-client/with-schemas/index.js +5 -5
  415. package/es6/persisters/persister-powersync/index.js +11 -11
  416. package/es6/persisters/persister-powersync/with-schemas/index.js +11 -11
  417. package/es6/persisters/persister-remote/index.js +5 -5
  418. package/es6/persisters/persister-remote/with-schemas/index.js +5 -5
  419. package/es6/persisters/persister-sqlite-wasm/index.js +11 -11
  420. package/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +11 -11
  421. package/es6/persisters/persister-sqlite3/index.js +11 -11
  422. package/es6/persisters/persister-sqlite3/with-schemas/index.js +11 -11
  423. package/es6/persisters/persister-yjs/index.js +5 -5
  424. package/es6/persisters/persister-yjs/with-schemas/index.js +5 -5
  425. package/es6/persisters/with-schemas/index.js +5 -5
  426. package/es6/synchronizers/index.js +49 -44
  427. package/es6/synchronizers/synchronizer-broadcast-channel/index.js +626 -0
  428. package/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +626 -0
  429. package/es6/synchronizers/synchronizer-local/index.js +53 -48
  430. package/es6/synchronizers/synchronizer-local/with-schemas/index.js +53 -48
  431. package/es6/synchronizers/synchronizer-ws-client/index.js +61 -62
  432. package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +61 -62
  433. package/es6/synchronizers/with-schemas/index.js +49 -44
  434. package/es6/ui-react/index.js +137 -75
  435. package/es6/ui-react/with-schemas/index.js +137 -75
  436. package/es6/ui-react-inspector/index.js +5 -5
  437. package/es6/ui-react-inspector/with-schemas/index.js +5 -5
  438. package/es6/with-schemas/index.js +49 -43
  439. package/index.js +49 -43
  440. package/min/index.js +1 -1
  441. package/min/index.js.gz +0 -0
  442. package/min/metrics/index.js +1 -1
  443. package/min/metrics/index.js.gz +0 -0
  444. package/min/metrics/with-schemas/index.js +1 -1
  445. package/min/metrics/with-schemas/index.js.gz +0 -0
  446. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  447. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  448. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  449. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  450. package/min/persisters/persister-electric-sql/index.js +1 -1
  451. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  452. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  453. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  454. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  455. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  456. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  457. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  458. package/min/persisters/persister-libsql/index.js +1 -1
  459. package/min/persisters/persister-libsql/index.js.gz +0 -0
  460. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  461. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  462. package/min/persisters/persister-powersync/index.js +1 -1
  463. package/min/persisters/persister-powersync/index.js.gz +0 -0
  464. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  465. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  466. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  467. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  468. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  469. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  470. package/min/persisters/persister-sqlite3/index.js +1 -1
  471. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  472. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  473. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  474. package/min/queries/index.js +1 -1
  475. package/min/queries/index.js.gz +0 -0
  476. package/min/queries/with-schemas/index.js +1 -1
  477. package/min/queries/with-schemas/index.js.gz +0 -0
  478. package/min/synchronizers/index.js +1 -1
  479. package/min/synchronizers/index.js.gz +0 -0
  480. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  481. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  482. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  483. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  484. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  485. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  486. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  487. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  488. package/min/synchronizers/with-schemas/index.js +1 -1
  489. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  490. package/min/ui-react/index.js +1 -1
  491. package/min/ui-react/index.js.gz +0 -0
  492. package/min/ui-react/with-schemas/index.js +1 -1
  493. package/min/ui-react/with-schemas/index.js.gz +0 -0
  494. package/min/with-schemas/index.js +1 -1
  495. package/min/with-schemas/index.js.gz +0 -0
  496. package/package.json +109 -5
  497. package/persisters/index.js +5 -5
  498. package/persisters/persister-automerge/index.js +5 -5
  499. package/persisters/persister-automerge/with-schemas/index.js +5 -5
  500. package/persisters/persister-browser/index.js +5 -5
  501. package/persisters/persister-browser/with-schemas/index.js +5 -5
  502. package/persisters/persister-cr-sqlite-wasm/index.js +11 -11
  503. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +11 -11
  504. package/persisters/persister-electric-sql/index.js +11 -11
  505. package/persisters/persister-electric-sql/with-schemas/index.js +11 -11
  506. package/persisters/persister-expo-sqlite/index.js +11 -11
  507. package/persisters/persister-expo-sqlite/with-schemas/index.js +11 -11
  508. package/persisters/persister-file/index.js +5 -5
  509. package/persisters/persister-file/with-schemas/index.js +5 -5
  510. package/persisters/persister-indexed-db/index.js +5 -5
  511. package/persisters/persister-indexed-db/with-schemas/index.js +5 -5
  512. package/persisters/persister-libsql/index.js +11 -11
  513. package/persisters/persister-libsql/with-schemas/index.js +11 -11
  514. package/persisters/persister-partykit-client/index.js +5 -5
  515. package/persisters/persister-partykit-client/with-schemas/index.js +5 -5
  516. package/persisters/persister-powersync/index.js +11 -11
  517. package/persisters/persister-powersync/with-schemas/index.js +11 -11
  518. package/persisters/persister-remote/index.js +5 -5
  519. package/persisters/persister-remote/with-schemas/index.js +5 -5
  520. package/persisters/persister-sqlite-wasm/index.js +11 -11
  521. package/persisters/persister-sqlite-wasm/with-schemas/index.js +11 -11
  522. package/persisters/persister-sqlite3/index.js +11 -11
  523. package/persisters/persister-sqlite3/with-schemas/index.js +11 -11
  524. package/persisters/persister-yjs/index.js +5 -5
  525. package/persisters/persister-yjs/with-schemas/index.js +5 -5
  526. package/persisters/with-schemas/index.js +5 -5
  527. package/readme.md +10 -10
  528. package/releases.md +8 -8
  529. package/synchronizers/index.js +49 -44
  530. package/synchronizers/synchronizer-broadcast-channel/index.js +498 -0
  531. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +498 -0
  532. package/synchronizers/synchronizer-local/index.js +53 -53
  533. package/synchronizers/synchronizer-local/with-schemas/index.js +53 -53
  534. package/synchronizers/synchronizer-ws-client/index.js +61 -62
  535. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +61 -62
  536. package/synchronizers/with-schemas/index.js +49 -44
  537. package/ui-react/index.js +139 -74
  538. package/ui-react/with-schemas/index.js +139 -74
  539. package/ui-react-inspector/index.js +5 -5
  540. package/ui-react-inspector/with-schemas/index.js +5 -5
  541. package/umd/es6/index.js +52 -43
  542. package/umd/es6/min/index.js +1 -1
  543. package/umd/es6/min/index.js.gz +0 -0
  544. package/umd/es6/min/metrics/index.js +1 -1
  545. package/umd/es6/min/metrics/index.js.gz +0 -0
  546. package/umd/es6/min/metrics/with-schemas/index.js +1 -1
  547. package/umd/es6/min/metrics/with-schemas/index.js.gz +0 -0
  548. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  549. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  550. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  551. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  552. package/umd/es6/min/persisters/persister-electric-sql/index.js +1 -1
  553. package/umd/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  554. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  555. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  556. package/umd/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  557. package/umd/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  558. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  559. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  560. package/umd/es6/min/persisters/persister-libsql/index.js +1 -1
  561. package/umd/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  562. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  563. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  564. package/umd/es6/min/persisters/persister-powersync/index.js +1 -1
  565. package/umd/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  566. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  567. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  568. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  569. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  570. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  571. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  572. package/umd/es6/min/persisters/persister-sqlite3/index.js +1 -1
  573. package/umd/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  574. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  575. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  576. package/umd/es6/min/queries/index.js +1 -1
  577. package/umd/es6/min/queries/index.js.gz +0 -0
  578. package/umd/es6/min/queries/with-schemas/index.js +1 -1
  579. package/umd/es6/min/queries/with-schemas/index.js.gz +0 -0
  580. package/umd/es6/min/synchronizers/index.js +1 -1
  581. package/umd/es6/min/synchronizers/index.js.gz +0 -0
  582. package/umd/es6/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  583. package/umd/es6/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  584. package/umd/es6/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  585. package/umd/es6/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  586. package/umd/es6/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  587. package/umd/es6/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  588. package/umd/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  589. package/umd/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  590. package/umd/es6/min/synchronizers/with-schemas/index.js +1 -1
  591. package/umd/es6/min/synchronizers/with-schemas/index.js.gz +0 -0
  592. package/umd/es6/min/ui-react/index.js +1 -1
  593. package/umd/es6/min/ui-react/index.js.gz +0 -0
  594. package/umd/es6/min/ui-react/with-schemas/index.js +1 -1
  595. package/umd/es6/min/ui-react/with-schemas/index.js.gz +0 -0
  596. package/umd/es6/min/with-schemas/index.js +1 -1
  597. package/umd/es6/min/with-schemas/index.js.gz +0 -0
  598. package/umd/es6/persisters/index.js +5 -5
  599. package/umd/es6/persisters/persister-automerge/index.js +5 -5
  600. package/umd/es6/persisters/persister-automerge/with-schemas/index.js +5 -5
  601. package/umd/es6/persisters/persister-browser/index.js +5 -5
  602. package/umd/es6/persisters/persister-browser/with-schemas/index.js +5 -5
  603. package/umd/es6/persisters/persister-cr-sqlite-wasm/index.js +11 -11
  604. package/umd/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +11 -11
  605. package/umd/es6/persisters/persister-electric-sql/index.js +11 -11
  606. package/umd/es6/persisters/persister-electric-sql/with-schemas/index.js +11 -11
  607. package/umd/es6/persisters/persister-expo-sqlite/index.js +11 -11
  608. package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +11 -11
  609. package/umd/es6/persisters/persister-file/index.js +5 -5
  610. package/umd/es6/persisters/persister-file/with-schemas/index.js +5 -5
  611. package/umd/es6/persisters/persister-indexed-db/index.js +5 -5
  612. package/umd/es6/persisters/persister-indexed-db/with-schemas/index.js +5 -5
  613. package/umd/es6/persisters/persister-libsql/index.js +11 -11
  614. package/umd/es6/persisters/persister-libsql/with-schemas/index.js +11 -11
  615. package/umd/es6/persisters/persister-partykit-client/index.js +5 -5
  616. package/umd/es6/persisters/persister-partykit-client/with-schemas/index.js +5 -5
  617. package/umd/es6/persisters/persister-powersync/index.js +11 -11
  618. package/umd/es6/persisters/persister-powersync/with-schemas/index.js +11 -11
  619. package/umd/es6/persisters/persister-remote/index.js +5 -5
  620. package/umd/es6/persisters/persister-remote/with-schemas/index.js +5 -5
  621. package/umd/es6/persisters/persister-sqlite-wasm/index.js +11 -11
  622. package/umd/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +11 -11
  623. package/umd/es6/persisters/persister-sqlite3/index.js +11 -11
  624. package/umd/es6/persisters/persister-sqlite3/with-schemas/index.js +11 -11
  625. package/umd/es6/persisters/persister-yjs/index.js +5 -5
  626. package/umd/es6/persisters/persister-yjs/with-schemas/index.js +5 -5
  627. package/umd/es6/persisters/with-schemas/index.js +5 -5
  628. package/umd/es6/synchronizers/index.js +52 -43
  629. package/umd/es6/synchronizers/synchronizer-broadcast-channel/index.js +654 -0
  630. package/umd/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +654 -0
  631. package/umd/es6/synchronizers/synchronizer-local/index.js +56 -48
  632. package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +56 -48
  633. package/umd/es6/synchronizers/synchronizer-ws-client/index.js +64 -62
  634. package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +64 -62
  635. package/umd/es6/synchronizers/with-schemas/index.js +52 -43
  636. package/umd/es6/ui-react/index.js +135 -72
  637. package/umd/es6/ui-react/with-schemas/index.js +135 -72
  638. package/umd/es6/ui-react-inspector/index.js +5 -5
  639. package/umd/es6/ui-react-inspector/with-schemas/index.js +5 -5
  640. package/umd/es6/with-schemas/index.js +52 -43
  641. package/umd/index.js +52 -47
  642. package/umd/min/index.js +1 -1
  643. package/umd/min/index.js.gz +0 -0
  644. package/umd/min/metrics/index.js +1 -1
  645. package/umd/min/metrics/index.js.gz +0 -0
  646. package/umd/min/metrics/with-schemas/index.js +1 -1
  647. package/umd/min/metrics/with-schemas/index.js.gz +0 -0
  648. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  649. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  650. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  651. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  652. package/umd/min/persisters/persister-electric-sql/index.js +1 -1
  653. package/umd/min/persisters/persister-electric-sql/index.js.gz +0 -0
  654. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  655. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  656. package/umd/min/persisters/persister-expo-sqlite/index.js +1 -1
  657. package/umd/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  658. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  659. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  660. package/umd/min/persisters/persister-libsql/index.js +1 -1
  661. package/umd/min/persisters/persister-libsql/index.js.gz +0 -0
  662. package/umd/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  663. package/umd/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  664. package/umd/min/persisters/persister-powersync/index.js +1 -1
  665. package/umd/min/persisters/persister-powersync/index.js.gz +0 -0
  666. package/umd/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  667. package/umd/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  668. package/umd/min/persisters/persister-sqlite-wasm/index.js +1 -1
  669. package/umd/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  670. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  671. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  672. package/umd/min/persisters/persister-sqlite3/index.js +1 -1
  673. package/umd/min/persisters/persister-sqlite3/index.js.gz +0 -0
  674. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  675. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  676. package/umd/min/queries/index.js +1 -1
  677. package/umd/min/queries/index.js.gz +0 -0
  678. package/umd/min/queries/with-schemas/index.js +1 -1
  679. package/umd/min/queries/with-schemas/index.js.gz +0 -0
  680. package/umd/min/synchronizers/index.js +1 -1
  681. package/umd/min/synchronizers/index.js.gz +0 -0
  682. package/umd/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  683. package/umd/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  684. package/umd/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  685. package/umd/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  686. package/umd/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  687. package/umd/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  688. package/umd/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  689. package/umd/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  690. package/umd/min/synchronizers/with-schemas/index.js +1 -1
  691. package/umd/min/synchronizers/with-schemas/index.js.gz +0 -0
  692. package/umd/min/ui-react/index.js +1 -1
  693. package/umd/min/ui-react/index.js.gz +0 -0
  694. package/umd/min/ui-react/with-schemas/index.js +1 -1
  695. package/umd/min/ui-react/with-schemas/index.js.gz +0 -0
  696. package/umd/min/with-schemas/index.js +1 -1
  697. package/umd/min/with-schemas/index.js.gz +0 -0
  698. package/umd/persisters/index.js +5 -5
  699. package/umd/persisters/persister-automerge/index.js +5 -5
  700. package/umd/persisters/persister-automerge/with-schemas/index.js +5 -5
  701. package/umd/persisters/persister-browser/index.js +5 -5
  702. package/umd/persisters/persister-browser/with-schemas/index.js +5 -5
  703. package/umd/persisters/persister-cr-sqlite-wasm/index.js +11 -11
  704. package/umd/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +11 -11
  705. package/umd/persisters/persister-electric-sql/index.js +11 -11
  706. package/umd/persisters/persister-electric-sql/with-schemas/index.js +11 -11
  707. package/umd/persisters/persister-expo-sqlite/index.js +11 -11
  708. package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +11 -11
  709. package/umd/persisters/persister-file/index.js +5 -5
  710. package/umd/persisters/persister-file/with-schemas/index.js +5 -5
  711. package/umd/persisters/persister-indexed-db/index.js +5 -5
  712. package/umd/persisters/persister-indexed-db/with-schemas/index.js +5 -5
  713. package/umd/persisters/persister-libsql/index.js +11 -11
  714. package/umd/persisters/persister-libsql/with-schemas/index.js +11 -11
  715. package/umd/persisters/persister-partykit-client/index.js +5 -5
  716. package/umd/persisters/persister-partykit-client/with-schemas/index.js +5 -5
  717. package/umd/persisters/persister-powersync/index.js +11 -11
  718. package/umd/persisters/persister-powersync/with-schemas/index.js +11 -11
  719. package/umd/persisters/persister-remote/index.js +5 -5
  720. package/umd/persisters/persister-remote/with-schemas/index.js +5 -5
  721. package/umd/persisters/persister-sqlite-wasm/index.js +11 -11
  722. package/umd/persisters/persister-sqlite-wasm/with-schemas/index.js +11 -11
  723. package/umd/persisters/persister-sqlite3/index.js +11 -11
  724. package/umd/persisters/persister-sqlite3/with-schemas/index.js +11 -11
  725. package/umd/persisters/persister-yjs/index.js +5 -5
  726. package/umd/persisters/persister-yjs/with-schemas/index.js +5 -5
  727. package/umd/persisters/with-schemas/index.js +5 -5
  728. package/umd/synchronizers/index.js +52 -47
  729. package/umd/synchronizers/synchronizer-broadcast-channel/index.js +516 -0
  730. package/umd/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +516 -0
  731. package/umd/synchronizers/synchronizer-local/index.js +56 -57
  732. package/umd/synchronizers/synchronizer-local/with-schemas/index.js +56 -57
  733. package/umd/synchronizers/synchronizer-ws-client/index.js +64 -66
  734. package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +64 -66
  735. package/umd/synchronizers/with-schemas/index.js +52 -47
  736. package/umd/ui-react/index.js +140 -71
  737. package/umd/ui-react/with-schemas/index.js +140 -71
  738. package/umd/ui-react-inspector/index.js +5 -5
  739. package/umd/ui-react-inspector/with-schemas/index.js +5 -5
  740. package/umd/with-schemas/index.js +52 -47
  741. package/with-schemas/index.js +49 -43
@@ -395,8 +395,8 @@ const Persists = {
395
395
  };
396
396
  const scheduleRunning = mapNew();
397
397
  const scheduleActions = mapNew();
398
- const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
399
- persistable != Persists.StoreOnly && store.isMergeable()
398
+ const getStoreFunctions = (persist = Persists.StoreOnly, store) =>
399
+ persist != Persists.StoreOnly && store.isMergeable()
400
400
  ? [
401
401
  1,
402
402
  store.getMergeableContent,
@@ -405,7 +405,7 @@ const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
405
405
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
406
406
  store.setDefaultContent,
407
407
  ]
408
- : persistable != Persists.MergeableStoreOnly
408
+ : persist != Persists.MergeableStoreOnly
409
409
  ? [
410
410
  0,
411
411
  store.getContent,
@@ -422,7 +422,7 @@ const createCustomPersister = (
422
422
  addPersisterListener,
423
423
  delPersisterListener,
424
424
  onIgnoredError,
425
- persistable,
425
+ persist,
426
426
  extra = {},
427
427
  scheduleId = [],
428
428
  ) => {
@@ -440,7 +440,7 @@ const createCustomPersister = (
440
440
  getChanges,
441
441
  hasChanges,
442
442
  setDefaultContent,
443
- ] = getStoreFunctions(persistable, store);
443
+ ] = getStoreFunctions(persist, store);
444
444
  const run = async () => {
445
445
  /* istanbul ignore else */
446
446
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -576,7 +576,7 @@ const createJsonSqlitePersister = (
576
576
  addPersisterListener,
577
577
  delPersisterListener,
578
578
  onIgnoredError,
579
- persistable,
579
+ persist,
580
580
  [storeTableName, storeIdColumnName, storeColumnName],
581
581
  managedTableNames,
582
582
  db,
@@ -616,7 +616,7 @@ const createJsonSqlitePersister = (
616
616
  addPersisterListener,
617
617
  delPersisterListener,
618
618
  onIgnoredError,
619
- persistable,
619
+ persist,
620
620
  {[getThing]: () => db},
621
621
  db,
622
622
  );
@@ -629,7 +629,7 @@ const createTabularSqlitePersister = (
629
629
  addPersisterListener,
630
630
  delPersisterListener,
631
631
  onIgnoredError,
632
- persistable,
632
+ persist,
633
633
  [
634
634
  tablesLoadConfig,
635
635
  tablesSaveConfig,
@@ -723,7 +723,7 @@ const createTabularSqlitePersister = (
723
723
  addPersisterListener,
724
724
  delPersisterListener,
725
725
  onIgnoredError,
726
- persistable,
726
+ persist,
727
727
  {[getThing]: () => db},
728
728
  db,
729
729
  );
@@ -845,7 +845,7 @@ const createSqlitePersister = (
845
845
  delUpdateListener,
846
846
  onSqlCommand,
847
847
  onIgnoredError,
848
- persistable,
848
+ persist,
849
849
  db,
850
850
  getThing = 'getDb',
851
851
  useOnConflict,
@@ -896,7 +896,7 @@ const createSqlitePersister = (
896
896
  addPersisterListener,
897
897
  delPersisterListener,
898
898
  onIgnoredError,
899
- persistable,
899
+ persist,
900
900
  defaultedConfig,
901
901
  collValues(managedTableNamesSet),
902
902
  db,
@@ -72,8 +72,8 @@ const Persists = {
72
72
  };
73
73
  const scheduleRunning = mapNew();
74
74
  const scheduleActions = mapNew();
75
- const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
76
- persistable != Persists.StoreOnly && store.isMergeable()
75
+ const getStoreFunctions = (persist = Persists.StoreOnly, store) =>
76
+ persist != Persists.StoreOnly && store.isMergeable()
77
77
  ? [
78
78
  1,
79
79
  store.getMergeableContent,
@@ -82,7 +82,7 @@ const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
82
82
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
83
83
  store.setDefaultContent,
84
84
  ]
85
- : persistable != Persists.MergeableStoreOnly
85
+ : persist != Persists.MergeableStoreOnly
86
86
  ? [
87
87
  0,
88
88
  store.getContent,
@@ -99,7 +99,7 @@ const createCustomPersister = (
99
99
  addPersisterListener,
100
100
  delPersisterListener,
101
101
  onIgnoredError,
102
- persistable,
102
+ persist,
103
103
  extra = {},
104
104
  scheduleId = [],
105
105
  ) => {
@@ -117,7 +117,7 @@ const createCustomPersister = (
117
117
  getChanges,
118
118
  hasChanges,
119
119
  setDefaultContent,
120
- ] = getStoreFunctions(persistable, store);
120
+ ] = getStoreFunctions(persist, store);
121
121
  const run = async () => {
122
122
  /* istanbul ignore else */
123
123
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -72,8 +72,8 @@ const Persists = {
72
72
  };
73
73
  const scheduleRunning = mapNew();
74
74
  const scheduleActions = mapNew();
75
- const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
76
- persistable != Persists.StoreOnly && store.isMergeable()
75
+ const getStoreFunctions = (persist = Persists.StoreOnly, store) =>
76
+ persist != Persists.StoreOnly && store.isMergeable()
77
77
  ? [
78
78
  1,
79
79
  store.getMergeableContent,
@@ -82,7 +82,7 @@ const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
82
82
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
83
83
  store.setDefaultContent,
84
84
  ]
85
- : persistable != Persists.MergeableStoreOnly
85
+ : persist != Persists.MergeableStoreOnly
86
86
  ? [
87
87
  0,
88
88
  store.getContent,
@@ -99,7 +99,7 @@ const createCustomPersister = (
99
99
  addPersisterListener,
100
100
  delPersisterListener,
101
101
  onIgnoredError,
102
- persistable,
102
+ persist,
103
103
  extra = {},
104
104
  scheduleId = [],
105
105
  ) => {
@@ -117,7 +117,7 @@ const createCustomPersister = (
117
117
  getChanges,
118
118
  hasChanges,
119
119
  setDefaultContent,
120
- ] = getStoreFunctions(persistable, store);
120
+ ] = getStoreFunctions(persist, store);
121
121
  const run = async () => {
122
122
  /* istanbul ignore else */
123
123
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -49,8 +49,8 @@ const Persists = {
49
49
  };
50
50
  const scheduleRunning = mapNew();
51
51
  const scheduleActions = mapNew();
52
- const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
53
- persistable != Persists.StoreOnly && store.isMergeable()
52
+ const getStoreFunctions = (persist = Persists.StoreOnly, store) =>
53
+ persist != Persists.StoreOnly && store.isMergeable()
54
54
  ? [
55
55
  1,
56
56
  store.getMergeableContent,
@@ -59,7 +59,7 @@ const getStoreFunctions = (persistable = Persists.StoreOnly, store) =>
59
59
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
60
60
  store.setDefaultContent,
61
61
  ]
62
- : persistable != Persists.MergeableStoreOnly
62
+ : persist != Persists.MergeableStoreOnly
63
63
  ? [
64
64
  0,
65
65
  store.getContent,
@@ -76,7 +76,7 @@ const createCustomPersister = (
76
76
  addPersisterListener,
77
77
  delPersisterListener,
78
78
  onIgnoredError,
79
- persistable,
79
+ persist,
80
80
  extra = {},
81
81
  scheduleId = [],
82
82
  ) => {
@@ -94,7 +94,7 @@ const createCustomPersister = (
94
94
  getChanges,
95
95
  hasChanges,
96
96
  setDefaultContent,
97
- ] = getStoreFunctions(persistable, store);
97
+ ] = getStoreFunctions(persist, store);
98
98
  const run = async () => {
99
99
  /* istanbul ignore else */
100
100
  if (!mapGet(scheduleRunning, scheduleId)) {
package/readme.md CHANGED
@@ -1,4 +1,4 @@
1
- <section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2><p id="copy">Build blisteringly fast web apps that work both online and offline. Manage your state locally, synchronize it to the cloud when you need to, or even make it collaborative. But, most importantly... have fun building stuff again!</p></section><p><a href="https://beta.tinybase.org/guides/releases/#v5-0"><em>NEW!</em> v5.0 release</a> <span id="one-with">&quot;The One You Can Sync&quot;</span></p><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><ul><li>Manage <a href="#start-with-a-simple-key-value-store">key-value data</a>, <a href="#level-up-to-use-tabular-data">tabular data</a> - or both - with optional <a href="#apply-schemas-to-tables-values">schematization</a> to model your app&#x27;s data structures.</li><li><a href="#register-granular-listeners">Flexibly reactive</a> to reconciled updates, so you only spend rendering cycles on things that change.</li><li><a href="#build-complex-queries-with-tinyql">Powerful query engine</a> to select, join, filter, group, sort and paginate data - reactively - and without SQL.</li><li>Built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, <a href="#model-table-relationships">tabular relationships</a> - and even an <a href="#set-checkpoints-for-an-undo-stack">undo stack</a> for your app state.</li><li>Create <a href="#type-definitions-orm-like-apis">type definitions &amp; ORM-like APIs</a>, from schema or inference. <a href="#an-inspector-for-your-data">Inspect your data</a> (<em>new!</em>) directly in the browser.</li><li>Easily <a href="#persist-to-storage-sqlite-crdts">sync your data</a> to browser <a href="https://beta.tinybase.org/api/persister-browser">storage</a>, <a href="https://beta.tinybase.org/api/persister-indexed-db/">IndexedDB</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence/">SQLite</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/synchronizing-data/">CRDTs</a>; and (<em>new!</em>) <a href="https://beta.tinybase.org/api/persister-partykit-client/">PartyKit</a> and <a href="https://electric-sql.com/">ElectricSQL</a>.</li><li>Optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and (<em>new!</em>) <a href="#pre-built-reactive-components">pre-built components</a> that let you easily build fully reactive user interfaces.</li><li>Tiny by name, tiny by nature: <a href="#did-we-say-tiny">5.3kB - 12.6kB</a>, no dependencies. <a href="#well-tested-and-documented">100% tested</a>, <a href="https://beta.tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</li></ul><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends!</h2><div><a href="https://beta.tinybase.org/guides/building-uis/getting-started-with-ui-react"><img width="48" src="https://beta.tinybase.org/react.svg"> React</a></div><div><a href="https://beta.tinybase.org/api/persister-partykit-client"><img width="48" src="https://beta.tinybase.org/partykit.svg"> PartyKit</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/expo.svg">Expo SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/electric.svg">ElectricSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/sqlite.svg"> SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/turso.svg">Turso</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/powersync.svg">PowerSync</a></div><div><a href="https://beta.tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img width="48" src="https://beta.tinybase.org/indexeddb.svg"> IndexedDB</a></div><div><a href="https://beta.tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img width="48" src="https://beta.tinybase.org/yjs.svg"> YJS</a></div><div><a href="https://beta.tinybase.org/api/persister-cr-sqlite-wasm"><img width="48" src="https://beta.tinybase.org/crsqlite.png"> CR-SQLite</a></div><div><a href="https://beta.tinybase.org/api/persister-automerge"><img width="48" src="https://beta.tinybase.org/automerge.svg"> Automerge</a></div></section><hr><section id="follow"><a href="https://github.com/tinyplex/tinybase" target="_blank"><img src="https://img.shields.io/github/stars/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=GitHub&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://discord.com/invite/mGz3mevwP8" target="_blank"><img src="https://img.shields.io/discord/1027918215323590676?style=for-the-badge&amp;logo=discord&amp;logoColor=%23fff&amp;label=Discord&amp;labelColor=%233131e8&amp;color=%23333"> </a><a href="https://twitter.com/tinybasejs" target="_blank"><img src="https://img.shields.io/twitter/follow/tinybasejs?style=for-the-badge&amp;logo=x&amp;logoColor=%23fff&amp;label=Twitter&amp;labelColor=%23333&amp;color=%23333"></a><br><a href="https://github.com/tinyplex/tinybase/discussions" target="_blank"><img src="https://img.shields.io/github/discussions/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Ideas&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://github.com/tinyplex/tinybase/issues" target="_blank"><img src="https://img.shields.io/github/issues/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Issues&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="#well-tested-and-documented"><img src="https://img.shields.io/badge/Tests-100%25-green?style=for-the-badge&amp;logo=jest&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%2387c305"> </a><a href="https://www.npmjs.com/package/tinybase/v/5.0.0-beta.25" target="_blank"><img src="https://img.shields.io/npm/v/tinybase?style=for-the-badge&amp;logo=npm&amp;logoColor=%23fff&amp;labelColor=%23bd0005&amp;color=%23333"></a></section><hr><section><h2 id="start-with-a-simple-key-value-store">Start with a simple key-value store.</h2><p>Creating a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://beta.tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a>. And of course you can easily get them back out again.</p><p>Read more about using keyed value data in <a href="https://beta.tinybase.org/guides/the-basics/">The Basics</a> guide.</p></section>
1
+ <section id="hero"><h2 id="the-reactive-data-store-for-local-first-apps">The <em>reactive</em> data store for <span>local-first apps</span>.</h2><p id="copy">Build blisteringly fast web apps that work both online and offline. Manage your state locally, synchronize it to the cloud when you need to, or even make it collaborative. But, most importantly... have fun building stuff again!</p></section><p><a href="https://beta.tinybase.org/guides/releases/#v5-0"><em>NEW!</em> v5.0 release</a> <span id="one-with">&quot;The One You Can Sync&quot;</span></p><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><ul><li>Manage <a href="#start-with-a-simple-key-value-store">key-value data</a>, <a href="#level-up-to-use-tabular-data">tabular data</a> - or both - with optional <a href="#apply-schemas-to-tables-values">schematization</a> to model your app&#x27;s data structures.</li><li><a href="#register-granular-listeners">Flexibly reactive</a> to reconciled updates, so you only spend rendering cycles on things that change.</li><li><a href="#build-complex-queries-with-tinyql">Powerful query engine</a> to select, join, filter, group, sort and paginate data - reactively - and without SQL.</li><li>Built-in <a href="#create-indexes-for-fast-lookups">indexing</a>, <a href="#define-metrics-and-aggregations">metric aggregation</a>, <a href="#model-table-relationships">tabular relationships</a> - and even an <a href="#set-checkpoints-for-an-undo-stack">undo stack</a> for your app state.</li><li>Create <a href="#type-definitions-orm-like-apis">type definitions &amp; ORM-like APIs</a>, from schema or inference. <a href="#an-inspector-for-your-data">Inspect your data</a> (<em>new!</em>) directly in the browser.</li><li>Easily <a href="#persist-to-storage-sqlite-crdts">sync your data</a> to browser <a href="https://beta.tinybase.org/api/persister-browser">storage</a>, <a href="https://beta.tinybase.org/api/persister-indexed-db/">IndexedDB</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence/">SQLite</a>, <a href="https://beta.tinybase.org/guides/schemas-and-persistence/synchronizing-data/">CRDTs</a>; and (<em>new!</em>) <a href="https://beta.tinybase.org/api/persister-partykit-client/">PartyKit</a> and <a href="https://electric-sql.com/">ElectricSQL</a>.</li><li>Optional <a href="#call-hooks-to-bind-to-data">bindings to React</a> and (<em>new!</em>) <a href="#pre-built-reactive-components">pre-built components</a> that let you easily build fully reactive user interfaces.</li><li>Tiny by name, tiny by nature: <a href="#did-we-say-tiny">5.3kB - 12.7kB</a>, no dependencies. <a href="#well-tested-and-documented">100% tested</a>, <a href="https://beta.tinybase.org/guides/the-basics/getting-started/">fully documented</a>, and of course, <a href="https://github.com/tinyplex/tinybase">open source</a>!</li></ul><hr><section id="friends"><h2 id="tinybase-works-great-on-its-own-but-also-plays-well-with-friends">TinyBase works great on its own, but also plays well with friends!</h2><div><a href="https://beta.tinybase.org/guides/building-uis/getting-started-with-ui-react"><img width="48" src="https://beta.tinybase.org/react.svg"> React</a></div><div><a href="https://beta.tinybase.org/api/persister-partykit-client"><img width="48" src="https://beta.tinybase.org/partykit.svg"> PartyKit</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/expo.svg">Expo SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/electric.svg">ElectricSQL</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/sqlite.svg"> SQLite</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/turso.svg">Turso</a></div><div><a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence"><img width="48" src="https://beta.tinybase.org/powersync.svg">PowerSync</a></div><div><a href="https://beta.tinybase.org/api/persister-indexed-db/functions/creation/createindexeddbpersister"><img width="48" src="https://beta.tinybase.org/indexeddb.svg"> IndexedDB</a></div><div><a href="https://beta.tinybase.org/api/persister-yjs/functions/creation/createyjspersister"><img width="48" src="https://beta.tinybase.org/yjs.svg"> YJS</a></div><div><a href="https://beta.tinybase.org/api/persister-cr-sqlite-wasm"><img width="48" src="https://beta.tinybase.org/crsqlite.png"> CR-SQLite</a></div><div><a href="https://beta.tinybase.org/api/persister-automerge"><img width="48" src="https://beta.tinybase.org/automerge.svg"> Automerge</a></div></section><hr><section id="follow"><a href="https://github.com/tinyplex/tinybase" target="_blank"><img src="https://img.shields.io/github/stars/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=GitHub&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://discord.com/invite/mGz3mevwP8" target="_blank"><img src="https://img.shields.io/discord/1027918215323590676?style=for-the-badge&amp;logo=discord&amp;logoColor=%23fff&amp;label=Discord&amp;labelColor=%233131e8&amp;color=%23333"> </a><a href="https://twitter.com/tinybasejs" target="_blank"><img src="https://img.shields.io/twitter/follow/tinybasejs?style=for-the-badge&amp;logo=x&amp;logoColor=%23fff&amp;label=Twitter&amp;labelColor=%23333&amp;color=%23333"></a><br><a href="https://github.com/tinyplex/tinybase/discussions" target="_blank"><img src="https://img.shields.io/github/discussions/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Ideas&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="https://github.com/tinyplex/tinybase/issues" target="_blank"><img src="https://img.shields.io/github/issues/tinyplex/tinybase?style=for-the-badge&amp;logo=GitHub&amp;logoColor=%23fff&amp;label=Issues&amp;labelColor=%23d81b60&amp;color=%23333"> </a><a href="#well-tested-and-documented"><img src="https://img.shields.io/badge/Tests-100%25-green?style=for-the-badge&amp;logo=jest&amp;logoColor=%23fff&amp;color=%23333&amp;labelColor=%2387c305"> </a><a href="https://www.npmjs.com/package/tinybase/v/5.0.0-beta.27" target="_blank"><img src="https://img.shields.io/npm/v/tinybase?style=for-the-badge&amp;logo=npm&amp;logoColor=%23fff&amp;labelColor=%23bd0005&amp;color=%23333"></a></section><hr><section><h2 id="start-with-a-simple-key-value-store">Start with a simple key-value store.</h2><p>Creating a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> requires just a simple call to the <a href="https://beta.tinybase.org/api/store/functions/creation/createstore/"><code>createStore</code></a> function. Once you have one, you can easily set <a href="https://beta.tinybase.org/api/store/type-aliases/store/values/"><code>Values</code></a> in it by unique <a href="https://beta.tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a>. And of course you can easily get them back out again.</p><p>Read more about using keyed value data in <a href="https://beta.tinybase.org/guides/the-basics/">The Basics</a> guide.</p></section>
2
2
 
3
3
  ```js
4
4
  import {createStore} from 'tinybase';
@@ -58,7 +58,7 @@ console.log(app.innerHTML);
58
58
  // -> 'Color: walnut'
59
59
  ```
60
60
 
61
- <section><h2 id="pre-built-reactive-components">Pre-built reactive components.</h2><p>The <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module provides bare React components that let you build up a fully reactive user interface based on a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>.</p><p>For web applications in particular, the new <a href="https://beta.tinybase.org/api/ui-react-dom/"><code>ui-react-dom</code></a> module provides pre-built components for tabular display of your data, with lots of customization and interactivity options.</p><p>Try them out in the <a href="https://beta.tinybase.org/demos/ui-components/">UI Components</a> demos, and read more about the underlying <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module in the <a href="https://beta.tinybase.org/guides/building-uis/">Building UIs</a> guides.</p></section><img src="https://beta.tinybase.org/ui-react-dom.webp"><section><h2 id="an-inspector-for-your-data">An inspector for your data.</h2><p>If you are building a web application, the new <a href="https://beta.tinybase.org/api/ui-react-inspector/functions/development-components/inspector/"><code>Inspector</code></a> component lets you overlay a view of the data in your <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>, <a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a>, <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a>, and so on. You can even edit the data in place and see it update in your app immediately.</p><p>Read more about this powerful new tool in the <a href="https://beta.tinybase.org/guides/developer-tools/inspecting-data/">Inspecting Data</a> guide.</p></section><img src="https://beta.tinybase.org/store-inspector.webp"><section><h2 id="apply-schemas-to-tables-values">Apply schemas to tables &amp; values.</h2><p>By default, a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> can contain any arbitrary <a href="https://beta.tinybase.org/api/store/type-aliases/store/value/"><code>Value</code></a>, and a <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> can contain any arbitrary <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a>. But you can add a <a href="https://beta.tinybase.org/api/store/type-aliases/schema/valuesschema/"><code>ValuesSchema</code></a> or a <a href="https://beta.tinybase.org/api/store/type-aliases/schema/tablesschema/"><code>TablesSchema</code></a> to a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> to ensure that the values are always what you expect: constraining their types, and providing defaults.</p><p>In this example, we set a new <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> without the <code>sold</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> in it. The schema ensures it&#x27;s present with default of <code>false</code>.</p><p>Read more about schemas in the <a href="https://beta.tinybase.org/guides/schemas-and-persistence/using-schemas/">Using Schemas</a> guide.</p></section>
61
+ <section><h2 id="pre-built-reactive-components">Pre-built reactive components.</h2><p>The <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module provides bare React components that let you build up a fully reactive user interface based on a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>.</p><p>For web applications in particular, the new <a href="https://beta.tinybase.org/api/ui-react-dom/"><code>ui-react-dom</code></a> module provides pre-built components for tabular display of your data, with lots of customization and interactivity options.</p><p>Try them out in the <a href="https://beta.tinybase.org/demos/ui-components/">UI Components</a> demos, and read more about the underlying <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module in the <a href="https://beta.tinybase.org/guides/building-uis/">Building UIs</a> guides.</p></section><img src="https://beta.tinybase.org/ui-react-dom.webp"><section><h2 id="an-inspector-for-your-data">An inspector for your data.</h2><p>If you are building a web application, the new <a href="https://beta.tinybase.org/api/ui-react-inspector/functions/development-components/inspector/"><code>Inspector</code></a> component lets you overlay a view of the data in your <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>, <a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a>, <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a>, and so on. You can even edit the data in place and see it update in your app immediately.</p><p>Read more about this powerful new tool in the <a href="https://beta.tinybase.org/guides/developer-tools/inspecting-data/">Inspecting Data</a> guide.</p></section><img src="https://beta.tinybase.org/store-inspector.webp"><section><h2 id="apply-schemas-to-tables-values">Apply schemas to tables &amp; values.</h2><p>By default, a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> can contain any arbitrary <a href="https://beta.tinybase.org/api/store/type-aliases/store/value/"><code>Value</code></a>, and a <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> can contain any arbitrary <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a>. But you can add a <a href="https://beta.tinybase.org/api/store/type-aliases/schema/valuesschema/"><code>ValuesSchema</code></a> or a <a href="https://beta.tinybase.org/api/store/type-aliases/schema/tablesschema/"><code>TablesSchema</code></a> to a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> to ensure that the values are always what you expect: constraining their types, and providing defaults.</p><p>In this example, we set a new <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> without the <code>sold</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> in it. The schema ensures it&#x27;s present with default of <code>false</code>.</p><p>Read more about schemas in the <a href="https://beta.tinybase.org/guides/schemas/">Schemas</a> guide.</p></section>
62
62
 
63
63
  ```js
64
64
  store.setTablesSchema({
@@ -76,7 +76,7 @@ console.log(store.getRow('pets', 'polly'));
76
76
  store.delTablesSchema();
77
77
  ```
78
78
 
79
- <section><h2 id="persist-to-storage-sqlite-crdts">Persist to storage, SQLite, CRDTs.</h2><p>You can easily persist a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> between browser page reloads or sessions. You can also synchronize it with a web endpoint, or (if you&#x27;re using TinyBase in an appropriate environment), load and save it to a file. <a href="https://beta.tinybase.org/guides/releases/#v4-0">New in v4.0</a>, you can bind <a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence/">TinyBase to SQLite</a> via a range of modules, or to <a href="https://yjs.dev/">Yjs</a> or <a href="https://automerge.org/">Automerge</a> CRDT documents.</p><p>Read more about persisters in the <a href="https://beta.tinybase.org/guides/schemas-and-persistence/persisting-data/">Persisting Data</a> guide.</p></section>
79
+ <section><h2 id="persist-to-storage-sqlite-crdts">Persist to storage, SQLite, CRDTs.</h2><p>You can easily persist a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a> between browser page reloads or sessions. You can also synchronize it with a web endpoint, or (if you&#x27;re using TinyBase in an appropriate environment), load and save it to a file. <a href="https://beta.tinybase.org/guides/releases/#v4-0">New in v4.0</a>, you can bind <a href="https://beta.tinybase.org/guides/schemas-and-persistence/database-persistence/">TinyBase to SQLite</a> via a range of modules, or to <a href="https://yjs.dev/">Yjs</a> or <a href="https://automerge.org/">Automerge</a> CRDT documents.</p><p>Read more about persisters in the <a href="https://beta.tinybase.org/guides/persistence/">Persistence</a> guides.</p></section>
80
80
 
81
81
  ```js
82
82
  import {createSessionPersister} from 'tinybase/persisters/persister-browser';
@@ -102,7 +102,7 @@ persister.destroy();
102
102
  sessionStorage.clear();
103
103
  ```
104
104
 
105
- <section><h2 id="build-complex-queries-with-tinyql">Build complex queries with <a href="https://beta.tinybase.org/guides/making-queries/tinyql/">TinyQL</a>.</h2><p>The <a href="https://beta.tinybase.org/api/queries/interfaces/queries/queries/"><code>Queries</code></a> object lets you query data across tables, with filtering and aggregation - using a SQL-adjacent syntax called <a href="https://beta.tinybase.org/guides/making-queries/tinyql/">TinyQL</a>.</p><p>Accessors and listeners let you sort and paginate the results efficiently, making building rich tabular interfaces easier than ever.</p><p>In this example, we have two tables: of pets and their owners. They are joined together by the pet&#x27;s ownerId <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a>. We select the pet&#x27;s species, and the owner&#x27;s state, and then aggregate the prices for the combinations.</p><p>We access the results by descending price, essentially answering the question: &quot;which is the highest-priced species, and in which state?&quot;</p><p>Needless to say, the results are reactive too! You can add listeners to queries just as easily as you do to raw tables.</p><p>Read more about <a href="https://beta.tinybase.org/api/queries/interfaces/queries/queries/"><code>Queries</code></a> in the <a href="https://beta.tinybase.org/guides/releases/#v2-0">v2.0 Release Notes</a>, the <a href="https://beta.tinybase.org/guides/making-queries/">Making Queries</a> guide, and the <a href="https://beta.tinybase.org/demos/car-analysis/">Car Analysis</a> demo and <a href="https://beta.tinybase.org/demos/movie-database/">Movie Database</a> demo.</p></section>
105
+ <section><h2 id="build-complex-queries-with-tinyql">Build complex queries with <a href="https://beta.tinybase.org/guides/using-queries/tinyql/">TinyQL</a>.</h2><p>The <a href="https://beta.tinybase.org/api/queries/interfaces/queries/queries/"><code>Queries</code></a> object lets you query data across tables, with filtering and aggregation - using a SQL-adjacent syntax called <a href="https://beta.tinybase.org/guides/using-queries/tinyql/">TinyQL</a>.</p><p>Accessors and listeners let you sort and paginate the results efficiently, making building rich tabular interfaces easier than ever.</p><p>In this example, we have two tables: of pets and their owners. They are joined together by the pet&#x27;s ownerId <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a>. We select the pet&#x27;s species, and the owner&#x27;s state, and then aggregate the prices for the combinations.</p><p>We access the results by descending price, essentially answering the question: &quot;which is the highest-priced species, and in which state?&quot;</p><p>Needless to say, the results are reactive too! You can add listeners to queries just as easily as you do to raw tables.</p><p>Read more about <a href="https://beta.tinybase.org/api/queries/interfaces/queries/queries/"><code>Queries</code></a> in the <a href="https://beta.tinybase.org/guides/releases/#v2-0">v2.0 Release Notes</a>, the <a href="https://beta.tinybase.org/guides/using-queries/">Using Queries</a> guide, and the <a href="https://beta.tinybase.org/demos/car-analysis/">Car Analysis</a> demo and <a href="https://beta.tinybase.org/demos/movie-database/">Movie Database</a> demo.</p></section>
106
106
 
107
107
  ```js
108
108
  import {createQueries} from 'tinybase';
@@ -145,7 +145,7 @@ queries
145
145
  queries.destroy();
146
146
  ```
147
147
 
148
- <section><h2 id="define-metrics-and-aggregations">Define metrics and aggregations.</h2><p>A <a href="https://beta.tinybase.org/api/metrics/interfaces/metrics/metrics/"><code>Metrics</code></a> object makes it easy to keep a running aggregation of <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> values in each <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> of a <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a>. This is useful for counting rows, but also supports averages, ranges of values, or arbitrary aggregations.</p><p>In this example, we create a new table of the pet species, and keep a track of which is most expensive. When we add horses to our pet store, the listener detects that the highest price has changed.</p><p>Read more about <a href="https://beta.tinybase.org/api/metrics/interfaces/metrics/metrics/"><code>Metrics</code></a> in the <a href="https://beta.tinybase.org/guides/metrics-and-indexes/using-metrics/">Using Metrics</a> guide.</p></section>
148
+ <section><h2 id="define-metrics-and-aggregations">Define metrics and aggregations.</h2><p>A <a href="https://beta.tinybase.org/api/metrics/interfaces/metrics/metrics/"><code>Metrics</code></a> object makes it easy to keep a running aggregation of <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> values in each <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> of a <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a>. This is useful for counting rows, but also supports averages, ranges of values, or arbitrary aggregations.</p><p>In this example, we create a new table of the pet species, and keep a track of which is most expensive. When we add horses to our pet store, the listener detects that the highest price has changed.</p><p>Read more about <a href="https://beta.tinybase.org/api/metrics/interfaces/metrics/metrics/"><code>Metrics</code></a> in the <a href="https://beta.tinybase.org/guides/using-metrics/">Using Metrics</a> guide.</p></section>
149
149
 
150
150
  ```js
151
151
  import {createMetrics} from 'tinybase';
@@ -176,7 +176,7 @@ store.setCell('species', 'horse', 'price', 20);
176
176
  metrics.destroy();
177
177
  ```
178
178
 
179
- <section><h2 id="create-indexes-for-fast-lookups">Create indexes for fast lookups.</h2><p>An <a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a> object makes it easy to look up all the <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> objects that have a certain value in a <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a>.</p><p>In this example, we create an index on the <code>species</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> values. We can then get the the list of distinct <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> value present for that index (known as &#x27;slices&#x27;), and the set of <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> objects that match each value.</p><p><a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a> objects are reactive too. So you can set listeners on them just as you do for the data in the underlying <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>.</p><p>Read more about <a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a> in the <a href="https://beta.tinybase.org/guides/metrics-and-indexes/using-indexes/">Using Indexes</a> guide.</p></section>
179
+ <section><h2 id="create-indexes-for-fast-lookups">Create indexes for fast lookups.</h2><p>An <a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a> object makes it easy to look up all the <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> objects that have a certain value in a <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a>.</p><p>In this example, we create an index on the <code>species</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> values. We can then get the the list of distinct <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> value present for that index (known as &#x27;slices&#x27;), and the set of <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> objects that match each value.</p><p><a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a> objects are reactive too. So you can set listeners on them just as you do for the data in the underlying <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>.</p><p>Read more about <a href="https://beta.tinybase.org/api/indexes/interfaces/indexes/indexes/"><code>Indexes</code></a> in the <a href="https://beta.tinybase.org/guides/using-indexes/">Using Indexes</a> guide.</p></section>
180
180
 
181
181
  ```js
182
182
  import {createIndexes} from 'tinybase';
@@ -202,7 +202,7 @@ store.setRow('pets', 'lowly', {species: 'worm'});
202
202
  indexes.destroy();
203
203
  ```
204
204
 
205
- <section><h2 id="model-table-relationships">Model table relationships.</h2><p>A <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a> object lets you associate a <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> in a local <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a> with the <a href="https://beta.tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a> of a <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> in a remote <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a>. You can also reference a table to itself to create linked lists.</p><p>In this example, the <code>species</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> of the <code>pets</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a> is used to create a relationship to the <code>species</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a>, so that we can access the price of a given pet.</p><p>Like everything else, you can set listeners on <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a> too.</p><p>Read more about <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a> in the <a href="https://beta.tinybase.org/guides/relationships-and-checkpoints/using-relationships/">Using Relationships</a> guide.</p></section>
205
+ <section><h2 id="model-table-relationships">Model table relationships.</h2><p>A <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a> object lets you associate a <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> in a local <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a> with the <a href="https://beta.tinybase.org/api/common/type-aliases/identity/id/"><code>Id</code></a> of a <a href="https://beta.tinybase.org/api/store/type-aliases/store/row/"><code>Row</code></a> in a remote <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a>. You can also reference a table to itself to create linked lists.</p><p>In this example, the <code>species</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/cell/"><code>Cell</code></a> of the <code>pets</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a> is used to create a relationship to the <code>species</code> <a href="https://beta.tinybase.org/api/store/type-aliases/store/table/"><code>Table</code></a>, so that we can access the price of a given pet.</p><p>Like everything else, you can set listeners on <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a> too.</p><p>Read more about <a href="https://beta.tinybase.org/api/relationships/interfaces/relationships/relationships/"><code>Relationships</code></a> in the <a href="https://beta.tinybase.org/guides/using-relationships/">Using Relationships</a> guide.</p></section>
206
206
 
207
207
  ```js
208
208
  import {createRelationships} from 'tinybase';
@@ -227,7 +227,7 @@ console.log(
227
227
  relationships.destroy();
228
228
  ```
229
229
 
230
- <section><h2 id="set-checkpoints-for-an-undo-stack">Set checkpoints for an undo stack.</h2><p>A <a href="https://beta.tinybase.org/api/checkpoints/interfaces/checkpoints/checkpoints/"><code>Checkpoints</code></a> object lets you set checkpoints on a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>. Move forward and backward through them to create undo and redo functions.</p><p>In this example, we set a checkpoint, then sell one of the pets. Later, the pet is brought back to the shop, and we go back to that checkpoint to revert the store to its previous state.</p><p>Read more about <a href="https://beta.tinybase.org/api/checkpoints/interfaces/checkpoints/checkpoints/"><code>Checkpoints</code></a> in the <a href="https://beta.tinybase.org/guides/relationships-and-checkpoints/using-checkpoints/">Using Checkpoints</a> guide.</p></section>
230
+ <section><h2 id="set-checkpoints-for-an-undo-stack">Set checkpoints for an undo stack.</h2><p>A <a href="https://beta.tinybase.org/api/checkpoints/interfaces/checkpoints/checkpoints/"><code>Checkpoints</code></a> object lets you set checkpoints on a <a href="https://beta.tinybase.org/api/store/interfaces/store/store/"><code>Store</code></a>. Move forward and backward through them to create undo and redo functions.</p><p>In this example, we set a checkpoint, then sell one of the pets. Later, the pet is brought back to the shop, and we go back to that checkpoint to revert the store to its previous state.</p><p>Read more about <a href="https://beta.tinybase.org/api/checkpoints/interfaces/checkpoints/checkpoints/"><code>Checkpoints</code></a> in the <a href="https://beta.tinybase.org/guides/using-checkpoints/">Using Checkpoints</a> guide.</p></section>
231
231
 
232
232
  ```js
233
233
  import {createCheckpoints} from 'tinybase';
@@ -246,7 +246,7 @@ console.log(store.getCell('pets', 'felix', 'sold'));
246
246
  // -> false
247
247
  ```
248
248
 
249
- <section><h2 id="type-definitions-orm-like-apis">Type definitions &amp; ORM-like APIs</h2><p>TinyBase has comprehensive type definitions, and even offers definitions that infer API types from the data schemas you apply.</p><p>Furthermore, you can easily create TypeScript <code>.d.ts</code> definitions that model your data and encourage type-safety when reading and writing data - as well as <code>.ts</code> implementations that provide ORM-like methods for your named tables.</p><p>Read more about type support in the <a href="https://beta.tinybase.org/guides/the-basics/tinybase-and-typescript/">TinyBase and TypeScript</a> guide.</p></section>
249
+ <section><h2 id="type-definitions-orm-like-apis">Type definitions &amp; ORM-like APIs</h2><p>TinyBase has comprehensive type definitions, and even offers definitions that infer API types from the data schemas you apply.</p><p>Furthermore, you can easily create TypeScript <code>.d.ts</code> definitions that model your data and encourage type-safety when reading and writing data - as well as <code>.ts</code> implementations that provide ORM-like methods for your named tables.</p><p>Read more about type support in the <a href="https://beta.tinybase.org/guides/the-basics/tinybase-and-typescript/">TinyBase And TypeScript</a> guide.</p></section>
250
250
 
251
251
  ```js yolo
252
252
  const tools = createTools(store);
@@ -265,4 +265,4 @@ export const createShop: typeof createShopDecl = () => {
265
265
  };
266
266
  ```
267
267
 
268
- <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://beta.tinybase.org/api/store/"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>5.3kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>12.6kB</em>.</p><p>The optional <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.6kB</em>, the ui-react-dom components are another <em>2.5kB</em>, and everything is super fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th> </th><th>Minified .js.gz</th><th>Source .js</th></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.3kB</td></tr><tr><th class="right">tinybase (complete)</th><td>12.6kB</td><td>129.7kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react/">ui-react</a></th><td>4.6kB</td><td>47.2kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.5kB</td><td>20.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,377</td><td>2,377</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,561</td><td>2,561</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>1,000</td><td>1,000</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>951</td><td>951</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">6,720</td></tr><tr><th class="right">Assertions</th><td colspan="3">31,380</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img title="beekeeb" src="https://github.com/beekeeb.png?size=48" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img title="cancelself" src="https://github.com/cancelself.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img title="arpitBhalla" src="https://github.com/arpitBhalla.png?size=48" width="48" height="48"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/Apocalypsor" target="_blank"><img title="Apocalypsor" src="https://github.com/Apocalypsor.png?size=48" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img title="brentvatne" src="https://github.com/brentvatne.png?size=48" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img title="circadian-risk" src="https://github.com/circadian-risk.png?size=48" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img title="cubecull" src="https://github.com/cubecull.png?size=48" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img title="erwinkn" src="https://github.com/erwinkn.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img title="ezra-en" src="https://github.com/ezra-en.png?size=48" width="48" height="48"></a><a href="https://github.com/fdfontes" target="_blank"><img title="fdfontes" src="https://github.com/fdfontes.png?size=48" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img title="feychenie" src="https://github.com/feychenie.png?size=48" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img title="flaming-codes" src="https://github.com/flaming-codes.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/generates" target="_blank"><img title="generates" src="https://github.com/generates.png?size=48" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img title="Giulio987" src="https://github.com/Giulio987.png?size=48" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img title="itsdevcoffee" src="https://github.com/itsdevcoffee.png?size=48" width="48" height="48"></a><a href="https://github.com/jaysc" target="_blank"><img title="jaysc" src="https://github.com/jaysc.png?size=48" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img title="jbolda" src="https://github.com/jbolda.png?size=48" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img title="Kayoo-asso" src="https://github.com/Kayoo-asso.png?size=48" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img title="kotofurumiya" src="https://github.com/kotofurumiya.png?size=48" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img title="Kudo" src="https://github.com/Kudo.png?size=48" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img title="learn-anything" src="https://github.com/learn-anything.png?size=48" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img title="lluc" src="https://github.com/lluc.png?size=48" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img title="marksteve" src="https://github.com/marksteve.png?size=48" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img title="miking-the-viking" src="https://github.com/miking-the-viking.png?size=48" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img title="mjamesderocher" src="https://github.com/mjamesderocher.png?size=48" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img title="nikitavoloboev" src="https://github.com/nikitavoloboev.png?size=48" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img title="palerdot" src="https://github.com/palerdot.png?size=48" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img title="PorcoRosso85" src="https://github.com/PorcoRosso85.png?size=48" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img title="shaneosullivan" src="https://github.com/shaneosullivan.png?size=48" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img title="sudo-self" src="https://github.com/sudo-self.png?size=48" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img title="SuperSonicHub1" src="https://github.com/SuperSonicHub1.png?size=48" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img title="threepointone" src="https://github.com/threepointone.png?size=48" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img title="uptonking" src="https://github.com/uptonking.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a></section><hr><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://beta.tinybase.org/youtube.webp"></a></section>
268
+ <section><h2 id="did-we-say-tiny">Did we say tiny?</h2><p>If you use the basic <a href="https://beta.tinybase.org/api/store/"><code>store</code></a> module alone, you&#x27;ll only add a gzipped <em>5.3kB</em> to your app. Incrementally add the other modules as you need more functionality, or get it all for <em>12.7kB</em>.</p><p>The optional <a href="https://beta.tinybase.org/api/ui-react/"><code>ui-react</code></a> module is just <em>4.6kB</em>, the ui-react-dom components are another <em>2.5kB</em>, and everything is super fast. Life&#x27;s easy when you have zero dependencies!</p><p>Read more about how TinyBase is structured and packaged in the <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/architecture/">Architecture</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th> </th><th>Minified .js.gz</th><th>Source .js</th></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/store/">tinybase/store</a> (minimal)</th><td>5.3kB</td><td>52.3kB</td></tr><tr><th class="right">tinybase (complete)</th><td>12.7kB</td><td>129.8kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react/">ui-react</a></th><td>4.6kB</td><td>48.1kB</td></tr><tr><th class="right"><a href="https://beta.tinybase.org/api/ui-react-dom/">ui-react-dom</a></th><td>2.5kB</td><td>20.4kB</td></tr></tbody></table></div><section><h2 id="well-tested-and-documented">Well tested and documented.</h2><p>TinyBase has <em>100.0%</em> test coverage, including the code throughout the documentation - even on this page! The guides, demos, and API examples are designed to make it as easy as possible for you to get your TinyBase-powered app up and running.</p><p>Read more about how TinyBase is tested in the Unit <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/testing/">Testing</a> guide.</p></section><div class="table"><table class="fixed"><tbody><tr><th width="30%"> </th><th>Total</th><th>Tested</th><th>Coverage</th></tr><tr><th class="right">Lines</th><td>2,371</td><td>2,371</td><td>100.0%</td></tr><tr><th class="right">Statements</th><td>2,555</td><td>2,555</td><td>100.0%</td></tr><tr><th class="right">Functions</th><td>1,000</td><td>1,000</td><td>100.0%</td></tr><tr><th class="right">Branches</th><td>951</td><td>951</td><td>100.0%</td></tr><tr><th class="right">Tests</th><td colspan="3">6,747</td></tr><tr><th class="right">Assertions</th><td colspan="3">31,458</td></tr></tbody></table></div><hr><section id="sponsors"><h2 id="proud-to-be-sponsored-by">Proud to be sponsored by:</h2><a href="https://github.com/cpojer" target="_blank"><img title="cpojer" src="https://github.com/cpojer.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/beekeeb" target="_blank"><img title="beekeeb" src="https://github.com/beekeeb.png?size=48" width="48" height="48"></a><a href="https://github.com/cancelself" target="_blank"><img title="cancelself" src="https://github.com/cancelself.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a><a href="https://github.com/arpitBhalla" target="_blank"><img title="arpitBhalla" src="https://github.com/arpitBhalla.png?size=48" width="48" height="48"></a></section><section id="users"><h2 id="excited-to-be-used-by">Excited to be used by:</h2><a href="https://github.com/Apocalypsor" target="_blank"><img title="Apocalypsor" src="https://github.com/Apocalypsor.png?size=48" width="48" height="48"></a><a href="https://github.com/brentvatne" target="_blank"><img title="brentvatne" src="https://github.com/brentvatne.png?size=48" width="48" height="48"></a><a href="https://github.com/byCedric" target="_blank"><img title="byCedric" src="https://github.com/byCedric.png?size=48" width="48" height="48"></a><a href="https://github.com/circadian-risk" target="_blank"><img title="circadian-risk" src="https://github.com/circadian-risk.png?size=48" width="48" height="48"></a><a href="https://github.com/cpojer" target="_blank"><img title="cpojer" src="https://github.com/cpojer.png?size=48" width="48" height="48"></a><a href="https://github.com/cubecull" target="_blank"><img title="cubecull" src="https://github.com/cubecull.png?size=48" width="48" height="48"></a><a href="https://github.com/erwinkn" target="_blank"><img title="erwinkn" src="https://github.com/erwinkn.png?size=48" width="48" height="48"></a><a href="https://github.com/expo" target="_blank"><img title="expo" src="https://github.com/expo.png?size=48" width="48" height="48"></a><a href="https://github.com/ezra-en" target="_blank"><img title="ezra-en" src="https://github.com/ezra-en.png?size=48" width="48" height="48"></a><a href="https://github.com/fdfontes" target="_blank"><img title="fdfontes" src="https://github.com/fdfontes.png?size=48" width="48" height="48"></a><a href="https://github.com/feychenie" target="_blank"><img title="feychenie" src="https://github.com/feychenie.png?size=48" width="48" height="48"></a><a href="https://github.com/flaming-codes" target="_blank"><img title="flaming-codes" src="https://github.com/flaming-codes.png?size=48" width="48" height="48"></a><a href="https://github.com/fostertheweb" target="_blank"><img title="fostertheweb" src="https://github.com/fostertheweb.png?size=48" width="48" height="48"></a><a href="https://github.com/generates" target="_blank"><img title="generates" src="https://github.com/generates.png?size=48" width="48" height="48"></a><a href="https://github.com/Giulio987" target="_blank"><img title="Giulio987" src="https://github.com/Giulio987.png?size=48" width="48" height="48"></a><a href="https://github.com/itsdevcoffee" target="_blank"><img title="itsdevcoffee" src="https://github.com/itsdevcoffee.png?size=48" width="48" height="48"></a><a href="https://github.com/jaysc" target="_blank"><img title="jaysc" src="https://github.com/jaysc.png?size=48" width="48" height="48"></a><a href="https://github.com/jbolda" target="_blank"><img title="jbolda" src="https://github.com/jbolda.png?size=48" width="48" height="48"></a><a href="https://github.com/Kayoo-asso" target="_blank"><img title="Kayoo-asso" src="https://github.com/Kayoo-asso.png?size=48" width="48" height="48"></a><a href="https://github.com/kotofurumiya" target="_blank"><img title="kotofurumiya" src="https://github.com/kotofurumiya.png?size=48" width="48" height="48"></a><a href="https://github.com/Kudo" target="_blank"><img title="Kudo" src="https://github.com/Kudo.png?size=48" width="48" height="48"></a><a href="https://github.com/learn-anything" target="_blank"><img title="learn-anything" src="https://github.com/learn-anything.png?size=48" width="48" height="48"></a><a href="https://github.com/lluc" target="_blank"><img title="lluc" src="https://github.com/lluc.png?size=48" width="48" height="48"></a><a href="https://github.com/marksteve" target="_blank"><img title="marksteve" src="https://github.com/marksteve.png?size=48" width="48" height="48"></a><a href="https://github.com/miking-the-viking" target="_blank"><img title="miking-the-viking" src="https://github.com/miking-the-viking.png?size=48" width="48" height="48"></a><a href="https://github.com/mjamesderocher" target="_blank"><img title="mjamesderocher" src="https://github.com/mjamesderocher.png?size=48" width="48" height="48"></a><a href="https://github.com/mouktardev" target="_blank"><img title="mouktardev" src="https://github.com/mouktardev.png?size=48" width="48" height="48"></a><a href="https://github.com/nickmessing" target="_blank"><img title="nickmessing" src="https://github.com/nickmessing.png?size=48" width="48" height="48"></a><a href="https://github.com/nikitavoloboev" target="_blank"><img title="nikitavoloboev" src="https://github.com/nikitavoloboev.png?size=48" width="48" height="48"></a><a href="https://github.com/nkzw-tech" target="_blank"><img title="nkzw-tech" src="https://github.com/nkzw-tech.png?size=48" width="48" height="48"></a><a href="https://github.com/palerdot" target="_blank"><img title="palerdot" src="https://github.com/palerdot.png?size=48" width="48" height="48"></a><a href="https://github.com/PorcoRosso85" target="_blank"><img title="PorcoRosso85" src="https://github.com/PorcoRosso85.png?size=48" width="48" height="48"></a><a href="https://github.com/primodiumxyz" target="_blank"><img title="primodiumxyz" src="https://github.com/primodiumxyz.png?size=48" width="48" height="48"></a><a href="https://github.com/shaneosullivan" target="_blank"><img title="shaneosullivan" src="https://github.com/shaneosullivan.png?size=48" width="48" height="48"></a><a href="https://github.com/sudo-self" target="_blank"><img title="sudo-self" src="https://github.com/sudo-self.png?size=48" width="48" height="48"></a><a href="https://github.com/SuperSonicHub1" target="_blank"><img title="SuperSonicHub1" src="https://github.com/SuperSonicHub1.png?size=48" width="48" height="48"></a><a href="https://github.com/threepointone" target="_blank"><img title="threepointone" src="https://github.com/threepointone.png?size=48" width="48" height="48"></a><a href="https://github.com/uptonking" target="_blank"><img title="uptonking" src="https://github.com/uptonking.png?size=48" width="48" height="48"></a><a href="https://github.com/ViktorZhurbin" target="_blank"><img title="ViktorZhurbin" src="https://github.com/ViktorZhurbin.png?size=48" width="48" height="48"></a><a href="https://github.com/WonderPanda" target="_blank"><img title="WonderPanda" src="https://github.com/WonderPanda.png?size=48" width="48" height="48"></a></section><hr><p><a class="start" href="https://beta.tinybase.org/guides/the-basics/getting-started/">Get started</a></p><p><a href="https://beta.tinybase.org/demos/">Try the demos</a></p><p><a href="https://beta.tinybase.org/api/store/interfaces/store/store/">Read the docs</a></p><hr><section id="about"><h2 id="about">About</h2><p>Modern apps deserve better. Why trade reactive user experiences to be able to use relational data? Or sacrifice features for bundle size? And why does the cloud do all the work <a href="https://localfirstweb.dev/" target="_blank">anyway</a>?</p><p>Building TinyBase was originally an interesting exercise for <a rel="me" href="https://tripleodeon.com">me</a> in API design, minification, and documentation. But now it has taken on a life of its own, and has grown beyond my wildest expectations.</p><p>It could not have been built without these great <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#giants">projects</a> and <a href="https://beta.tinybase.org/guides/how-tinybase-is-built/credits/#and-friends">friends</a>, and I hope you enjoy using it as much as I do building it!</p></section><section id="story"><h2 id="the-story">The story</h2><a href="https://youtu.be/hXL7OkW-Prk?t=1232" target="_blank"><img src="https://beta.tinybase.org/youtube.webp"></a></section>