Versions & changelog
HartiiLabs ships behind one version number, kept in sync everywhere it's checked: package.json's
version, the <meta name="application-version"> tag on every page, functions/_lib/version.js's
APP_VERSION (surfaced by GET /api/health as version), and the newest
dated entry in the app's own CHANGELOG.md — the app's test suite fails if any of these disagree.
SemVer
- MAJOR — a breaking public API or live-protocol change, or a launch-factory generation cutover (e.g. V3 → V4). This is the only kind of release that can break an integration.
- MINOR — a new capability or a measurable behaviour change (the 1.1.0 latency programme below is a MINOR release).
- PATCH — a fix with no new surface.
Smart-contract generations (TokenFactory V1–V4) are a separate, immutable axis from the app version — a contract generation is superseded, never "versioned up." See Contracts overview.
Where to read the live version
GET /api/health → version | the one-line check — see API reference |
<meta name="application-version"> | on every page's <head>, same number |
Git tag vX.Y.Z | on the exact commit that's live; every version that goes live gets one |
Changelog
A user-facing summary of the app's own CHANGELOG.md. Read the source file in the hartii-labs
repo for the full, line-level history.
1.1.0 — 2026-10-02 — latency programme
Everything the app controls on the token page is now measured and tuned toward ≤ 300 ms end-to-end. Quai's own block cadence (1–3 s) and the wallet's popup are additive, out of the app's control, and shown as separate states rather than counted against that budget.
- Reads go direct-RPC-first.
rpc.quai.network/cyprus1is the primary read path, with the/rpc/proxy kept as failover. - Submitting a trade is 2 round-trips before the wallet popup, not 3. The gas estimate now overlaps the fresh on-chain quote instead of waiting on it to finish first.
- The trade panel's preview is instant. A client-side mirror of the curve's own pricing math renders the buy/sell preview with no round trip at all; the real on-chain quote still gates what you actually sign.
- Confirmations show up sooner. Once a trade is broadcast, receipt polling now backs off 0.5 s → 2 s (was 1 s → 4 s).
- Live push is per-block instead of per-poll. The live hub subscribes directly to the chain
(
quai_subscribelogs + newHeads) and fans a trade out the moment its block lands, instead of waiting out a 4–15 s poll. The server-side switch was turned on the same evening (see 1.1.1 below); measured on a real trade, the chain's log notification reached the hub about 0.2 s before a 500 ms receipt poll even saw the receipt — see API reference › Live push.
1.2.0 — 2026-10-03 — latency programme, phase 2
- One round trip before the wallet popup. The real send is priced with the app's exact mirror
of the curve's
quoteBuy/quoteSellafter a single fresh on-chain read of the curve's state; the on-chain quote still runs afterwards to log any divergence, and the on-chain slippage floor is unchanged. (Build-time switch to restore the always-await path exists.) - Receipts confirm on the block, not on a timer. The hub broadcasts a
headframe per chain block; a pending trade checks its receipt the moment one arrives (polling stays as fallback). - Live push for every curve. The sitewide feed sees every launched token's trades, not only
the curves someone has open; new launches are picked up from the factories'
TokenLaunchedevents the moment they happen. - Fresh page loads are ~1 s behind the chain, not 60–90 s. Pushed trades land in the indexed trades/candles immediately (the indexer still reconciles and remains the authority for holders).
- Mobile: the live socket resumes and reconciles when a backgrounded tab comes back.
- Operators: a debug-only "Latency (this browser)" panel on
/statusand a committed end-to-end measurement script (scripts/latency-e2e.mjs) in the app repo.
1.1.1 — 2026-10-02 — rollout fixes
- The hub's upstream socket was being torn down ~8 s after opening by its own handshake timeout (trades silently fell back to the 10 s safety poll); fixed, and the upstream subscription has been on and stable since.
- The
application-versionmeta tag was missing from served pages (it sat inside the SEO block the edge rewrites per route); moved, so every page now carries the deployed version.
1.0.0 — 2026-10-02 — baseline
- TokenFactoryV4 (LP Reserve) live on mainnet — the current launch factory.
- Market-terminal redesign: grid-first home,
/flowcapital-flow terminal, one-page launch composer. - Wallet = signing only: every send is gas-estimated on the app's own read provider; a reverted receipt is always rejected, never reported as a success.