From the server to SQLite to reactive Svelte state
Comments on “From the server to SQLite to reactive Svelte state”
Claim-checked. Scored by all three judges, and its checkable claims were compared with the sources it cites. How far stories are checked
Milieu's engineering team describes a local-first design in which a new browser starts as a server-rendered SvelteKit app while a worker downloads the account's SQLite file. The tab switches to the in-browser database (SQLite on WebAssembly, stored in OPFS) only once its per-owner cursors reach the highest server state the tab has seen, so the screen never goes backwards. Pending changes are replayed on the server's state rather than merged with CRDTs. The claims come from the company's own post, with no independent verification.
Why it ranked
No. 7 of 51 with a score of 0.67. The panel rated it highest on technical depth (0.94) and new information (0.91), lowest on significance (0.55). Placed No. 7, No. 8 by score alone: the placement terms moved other stories past it.
- AI judgeJudge 2claude-haiku-5-5
- Detailed engineering write-up of an offline-first sync architecture using SQLite in browser and server, with concrete mechanisms and testing approaches; practical for builders but niche in audience and largely unverified claims about a single product.'
- AI judgeJudge 3gpt-5.6-luna
- A detailed, technically specific engineering account of hybrid server/local SQLite synchronization, offline-first state, consistency, reactive queries, browser storage, testing, and recovery. It offers broadly reusable implementation lessons, though its scope is one product.
Each judge wrote its line after answering the rubric, with the site and the author still hidden. Every answer behind this is in the table under Score.
Score
0.67total under rubric v2.3
- Significance0.55
- Reader interest0.82
- Audience breadth0.56
- Practical relevance0.75
- Substantiated0.62
- Technical depth0.94
- New information0.91
- Counts against: Promotional0.12
- Counts against: Overclaim0.15
Each judge’s answer per question (0–1), their mean and spread, and what the question adds to the score (weight × mean).
| Question | Judge 1 | Judge 2 | Judge 3 | Mean | Spread | Weight | Contribution (weight times mean) |
|---|---|---|---|---|---|---|---|
| SignificanceHow much does this change what people in tech know or can do? | 0.58 | 0.35 | 0.72 | 0.55 | 0.37 | +0.24 | +0.132 |
| Reader interestWould a well-informed senior engineer or tech founder want to read this today, and likely pass it on? | 0.76 | 0.80 | 0.90 | 0.82 | 0.14 | +0.26 | +0.213 |
| Audience breadthHow many people who build technology does it concern? | 0.49 | 0.50 | 0.68 | 0.56 | 0.19 | +0.13 | +0.072 |
| Practical relevanceHow useful is it to someone who builds software or tech products? | 0.80 | 0.60 | 0.85 | 0.75 | 0.25 | +0.22 | +0.165 |
| SubstantiatedHow well is it backed? Consider whether it is the primary source, and whether its main claims come with data, code, a demo, a reproducible method or citations. | 0.53 | 0.50 | 0.83 | 0.62 | 0.33 | +0.05 | +0.031 |
| Technical depthHow technically substantive is it? | 0.97 | 0.90 | 0.95 | 0.94 | 0.07 | +0.05 | +0.047 |
| New informationDoes it contain information absent from the stories covered in the last 7 days (list provided)? | 0.88 | 0.90 | 0.96 | 0.91 | 0.08 | +0.05 | +0.046 |
| PromotionalIs it mainly marketing with little substance (a press release, ad or sponsored post with no real information)? A launch post that carries real news is not promotional. | 0.07 | 0.20 | 0.08 | 0.12 | 0.13 | −0.19 | −0.022 |
| OverclaimDo the headline or conclusions claim more than the body supports? | 0.12 | 0.20 | 0.12 | 0.15 | 0.08 | −0.11 | −0.016 |
| Sum of contributions | +0.668 | ||||||
| Claim-check penalty | 0.000 | ||||||
| Total, as published | 0.668 | ||||||
Spread is the highest minus the lowest judge answer. marks a spread above 0.40: the judges disagree, and the story is marked contested.
The badge for this ranking, for the author's page or anyone's: one line of HTML, and it links back here.
<a href="https://rubric.hrih.si/editions/2026-11-08/7/"><img src="https://rubric.hrih.si/badge/2026-11-08/7.svg" alt="Ranked #7 on Rubric, 8 Nov 2026" width="231" height="28"></a>Claim check
Claim check: 8 no source given. Each claim is compared with the source the article itself cites; a flag is published only when both checkers agree.
No source givenNumber
Milieu's fingerprint check splits each table into ranges of about a thousand rows, each with a row count and a 32-bit sum of row hashes over the synced columns.
The article gives no link or citation for it.
The article says “the engine splits each table into ranges of about a thousand rows. Each range gets a row count and a 32-bit sum of row hashes over the synced columns”
The source says No source to compare with.
No source givenNumber
Milieu's engine removes a pending change and keeps it in Settings → Unsaved if the server refuses it or it still fails after five attempts.
The article gives no link or citation for it.
The article says “If the server refuses a change, or it still fails after five attempts, the engine removes the guess and keeps the change in Settings → Unsaved”
The source says No source to compare with.
No source givenFirst, only or fastest
Milieu starts a new browser on the server and moves it to a local SQLite database mid-session, unlike PowerSync, where a local copy is needed first.
The article gives no link or citation for it.
The article says “Your tab doesn’t wait for a local copy before you can work; it begins as an ordinary server-rendered app and moves onto your browser mid-session”
The source says No source to compare with.
No source givenCausal conclusion
Milieu's tab hands over to the local database only when the browser's cursor for every owner is at least the tab's mark, which prevents screens from going back in time.
The article gives no link or citation for it.
The article says “The tab hands over only when, for every owner in its mark: browser_cursor[owner] >= tab_mark[owner”
The source says No source to compare with.
No source givenCausal conclusion
Milieu's server keeps each push batch outcome until the browser confirms receipt, so resending a batch identifier returns the recorded outcome rather than running the changes twice.
The article gives no link or citation for it.
The article says “resending the same identifier returns the recorded outcome instead of running your changes twice”
The source says No source to compare with.
No source givenCausal conclusion
Only one tab's worker can hold the OPFS database files at a time, because synchronous access handles are exclusive and only available in dedicated workers.
The article gives no link or citation for it.
The article says “SQLite reaches them through synchronous access handles, which are fast but exclusive, and only available in dedicated workers. That means only one tab’s worker can hold the files at a…”
The source says No source to compare with.
No source givenCausal conclusion
Milieu uses per-owner counters rather than a global sequence, so unrelated accounts never queue behind each other and changes are ordered without trusting clocks.
The article gives no link or citation for it.
The article says “Counters put changes in order without trusting anyone’s clock, and having one per owner means unrelated accounts never queue behind a single global sequence”
The source says No source to compare with.
No source givenGeneralization
Milieu tests its browser engine against the server's real implementation using property tests that compare browser predictions with server state after sync and with a freshly built account file.
The article gives no link or citation for it.
The article says “We test the browser’s engine against the server’s real implementation. Property tests generate sequences of operations and compare the browser’s guesses with the state after the server has run them…”
The source says No source to compare with.
Also covered by
No other coverage was clustered with this story.
Elsewhere
Elsewhere: HN 1 pts, not on front page
Recorded for context only, checked 8 Nov 2026, 05:46 UTC. It played no part in the ranking.