Title: [Feature]: Promote `ssr` to Stable — freeze public API and define exit criteria · Issue #127 · bQuery/bQuery · GitHub
Open Graph Title: [Feature]: Promote `ssr` to Stable — freeze public API and define exit criteria · Issue #127 · bQuery/bQuery
X Title: [Feature]: Promote `ssr` to Stable — freeze public API and define exit criteria · Issue #127 · bQuery/bQuery
Description: Pre-flight checklist I searched existing issues and did not find a duplicate request. I explained the problem or use case, not just the desired API. Problem or use case ssr is one of the three modules still marked Experimental, yet it is...
Open Graph Description: Pre-flight checklist I searched existing issues and did not find a duplicate request. I explained the problem or use case, not just the desired API. Problem or use case ssr is one of the three modu...
X Description: Pre-flight checklist I searched existing issues and did not find a duplicate request. I explained the problem or use case, not just the desired API. Problem or use case ssr is one of the three modu...
Opengraph URL: https://github.com/bQuery/bQuery/issues/127
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Feature]: Promote `ssr` to Stable — freeze public API and define exit criteria","articleBody":"**Pre-flight checklist**\n- [x] I searched existing issues and did not find a duplicate request.\n- [x] I explained the problem or use case, not just the desired API.\n\n**Problem or use case**\n`ssr` is one of the three modules still marked **Experimental**, yet it is foundational to bQuery's \"one stack, client and server\" promise — teams cannot commit production SSR on a surface that may break between minors. The module's surface has churned across consecutive releases (`flushBoundary`, `createSSRCache`, `createSSRMetrics`, `createEdgeHandler` landed in 1.11.0; cache-aware `renderToResponse` and multi-chunk `renderToStream` evolved again by 1.14.0). There is no published checklist for what would move `ssr` out of Experimental, so adopters have no signal for when it is safe to depend on.\n\n**Proposed solution**\nDefine and publish concrete exit criteria for `ssr`, then freeze the public API for at least one full minor cycle to demonstrate stability. Criteria should cover: (a) a frozen, documented export surface; (b) a stated minimum test-coverage bar including streaming, suspense streaming, island hydration, and edge-handler paths; (c) resolution of the dependent capability gaps tracked in tickets #128, #129, and #130; (d) a documented SSR support matrix per runtime (Node ≥ 24, Bun, Deno, edge). This ticket is the tracking issue; #128–#130 are the substantive prerequisites.\n\n**Possible API or UX shape**\nNo new public API is required for the freeze itself. The deliverable is a \"Stability\" subsection in the SSR guide:\n\n```\n## Stability: targeting Stable in 1.15.0\nExit criteria:\n- [ ] Public exports frozen for one minor (no additive breaking changes)\n- [ ] Directive parity resolved or boundary documented (#128)\n- [ ] Resumability model finalized (#129)\n- [ ] Hydration-mismatch handling productionized (#130)\n- [ ] Per-runtime support matrix published\nFrozen surface: renderToString, renderToStream, renderToStreamSuspense, defer,\nrenderToResponse, createSSRCache, createSSRMetrics, createEdgeHandler,\nhydrateOnVisible|Idle|Interaction|Media, createResumableState\n```\n\n**Alternatives considered**\nLeaving `ssr` Experimental indefinitely while it accretes features — rejected because the competitive frameworks (SvelteKit, Nuxt, React 19 SSR) all offer production-grade SSR, and an Experimental label is the single biggest blocker to bQuery being evaluated for real apps. Promoting without a freeze period — rejected because it would violate the module's own semver promise.\n\n**Relevant area**\n`ssr`\n\n**Additional context**\nThe SSR guide currently lists `renderToString` support for only `bq-text, bq-html, bq-if, bq-show, bq-for, bq-class, bq-style, bq-bind:*`, and `createResumableState()` is described as \"a tiny key/value collector\" — both are tracked as prerequisites below. Competitive baseline: React 19 shipped stable Server Components and streaming SSR in December 2024; SvelteKit and Nuxt offer mature SSR with file-based data loading.\n","author":{"url":"https://github.com/JosunLP","@type":"Person","name":"JosunLP"},"datePublished":"2026-06-26T21:24:22.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/127/bQuery/issues/127"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:480ed6ad-0283-3a4b-ac19-e58efc075621 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AEC8:18EB8:13CFB4E:1CD87BC:6A4E424B |
| html-safe-nonce | 6fc1b90347d14f6579f2b556992cc7a0ce3cd50e4a786b6c80ddd92d222a01a7 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBRUM4OjE4RUI4OjEzQ0ZCNEU6MUNEODdCQzo2QTRFNDI0QiIsInZpc2l0b3JfaWQiOiIyMjk0NTAzNjcwMjcwNTQyNDExIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 6bc72d9069d379b57318d3b53583e750f4b828c09c137e2407a0bb081a2bd366 |
| hovercard-subject-tag | issue:4755233014 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/bQuery/bQuery/127/issue_layout |
| twitter:image | https://opengraph.githubassets.com/0a0c5868d8f910df40c9f70f9dd860e2d2cf71c1e96b67cf10f4623ffac03d21/bQuery/bQuery/issues/127 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/0a0c5868d8f910df40c9f70f9dd860e2d2cf71c1e96b67cf10f4623ffac03d21/bQuery/bQuery/issues/127 |
| og:image:alt | Pre-flight checklist I searched existing issues and did not find a duplicate request. I explained the problem or use case, not just the desired API. Problem or use case ssr is one of the three modu... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | JosunLP |
| hostname | github.com |
| expected-hostname | github.com |
| None | 030096ee0db095447bfe77409d33bfac127ca7128299c58deef27c52eaa1b1f0 |
| turbo-cache-control | no-preview |
| go-import | github.com/bQuery/bQuery git https://github.com/bQuery/bQuery.git |
| octolytics-dimension-user_id | 256381806 |
| octolytics-dimension-user_login | bQuery |
| octolytics-dimension-repository_id | 1139284244 |
| octolytics-dimension-repository_nwo | bQuery/bQuery |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1139284244 |
| octolytics-dimension-repository_network_root_nwo | bQuery/bQuery |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9fabff9b8b127e686a3ec86f91422e818056ca2c |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width