TSX rendu côté serveur,
propulsé par le moteur.
PRISM est le framework TSX server-first de bext — un runtime JSX natif sans React, un compile pass, des signaux fins et des îlots dans le runtime de votre choix. Il compile votre TSX en bundles V8 et les exécute dans le même processus bext qui gère TLS, routage et cache.
La place de PRISM dans une requête
bext est le moteur. PRISM est l'étape de rendu à l'intérieur — pas un outil séparé à lancer ou déployer.
Requête
- HTTP/1.1 · 2 · 3
- N'importe quel domaine
bext
- Terminaison TLS
- Routage + proxy inverse
- Cache · compression · WAF
PRISM render
- TSX natif → HTML
- Pool d'isolats V8
- Sortie vers ISR · cache · HTTP
PRISM natif, ou l’adaptateur React de bext
PRISM est le chemin TSX → HTML natif. Pour une app React ou Next.js existante, bext fournit un adaptateur séparé ; les mesures de cette page concernent uniquement PRISM natif.
React / Next.js existant
Choisissez [framework] type = "nextjs" pour conserver React, RSC et les conventions App Router. Ce chemin n’utilise pas le renderer PRISM natif.
- Async server components, <Suspense> and the use(promise) hook
- "use client" islands hydrated automatically
- React Server Components & server actions
- next/font, next/image, next/link
- Most Next.js App Router apps migrate with minimal changes
Aller tout-en-PRISM
Abandonnez React et utilisez les primitives propres de PRISM pour une stack plus légère, server-first.
- Its own h() JSX runtime — light, server-first, no React required
- Fine-grained signals + <List> / <Show> / <Switch>
- Bext Query, server-action <Form>s, native Tailwind
- Signed sessions, OAuth, role gating, object storage, SSE, MDX
- Islands in React, Preact, Solid, or signals — your choice per component
De page.tsx à HTML streamé
Écrire un page.tsx
Routage par fichiers, server components async, layouts, loaders et route handlers — les conventions que vous connaissez déjà.
Le compile pass plie le TSX
Les balises et sous-arbres statiques deviennent des fragments HTML ; les listes deviennent des boucles avec un seul accumulateur.
Rendu dans V8
Le bundle mis en cache s’exécute dans un isolat V8 chaud. Le runtime JSX automatique gère les parties dynamiques non pliées, sans React ni DOM virtuel.
HTML + cache
Le HTML sûr et validé est transmis au pipeline ISR et HTTP ; les îlots interactifs optionnels s’hydratent séparément dans le navigateur.
TSX natif, îlots optionnels
Le rendu serveur n’utilise pas React. Un îlot client peut toutefois choisir React, Preact, Solid ou les signaux PRISM.
'use server'; // async server component export default async function Page() { const posts = await db.posts.all(); return ( <Suspense fallback={<Spinner />}> <Feed posts={posts} /> </Suspense> ); }
'use client'; import { useState } from 'react'; // auto-detected island export function Counter() { const [n, setN] = useState(0); return ( <button onClick={() => setN(n + 1)}> count: {n} </button> ); }
export async function GET(req) { const data = await load(); return Response.json(data, { headers: { 'cache-control': 's-maxage=60', }, }); }
Un framework complet, intégré
SSR streamé
Les composants async, les générateurs et le Suspense PRISM produisent des fragments HTML au fil de leur disponibilité.
Îlots, n'importe quel runtime
Les îlots React « use client » sont détectés automatiquement ; l’API d’îlots permet aussi Preact, Solid ou les signaux natifs de PRISM.
Signaux fins
Un runtime réactif intégré — signal / computed / effect avec <List>, <Show> et <Switch> à clé. Réactivité Solid-style, rendue côté serveur et hydratée.
Bext Query
Une couche de données façon TanStack Query, construite sur les signaux — createQuery / createMutation avec cache, état et revalidation en arrière-plan.
Formulaires server action
<Form> poste vers une action « use server » et fonctionne sans JavaScript — amélioration progressive, UI optimiste et validation intégrées.
Compile pass
Les sous-arbres TSX statiques, les attributs sûrs et les listes reconnues deviennent des concaténations et boucles directes avant l'exécution V8.
ISR + cache fragment
ISR au niveau page avec stale-while-revalidate et protection anti-stampede, plus un composant <ISR> pour mettre en cache des fragments avec leur propre TTL.
Tailwind natif
Les classes utilitaires sont extraites du HTML rendu et inlinées en feuille de style par route — sans PostCSS, sans build step, zéro CPU quand inutilisé.
Object storage
Uploads et downloads S3 / R2 / MinIO présignés depuis un seul import — presignPut, presignGet, uploadDirect — configurés dans bext.config.toml.
Génération d'images OG
Images Open Graph dynamiques rendues côté serveur avec un moteur CSS Taffy et rastérisation de texte. Aucun service externe.
Cold starts par snapshot
Des isolats préchauffés par heap-snapshot rendent un nouveau worker immédiatement prêt — pas de warm-up JIT, pas de pénalité de cold start.
Dans le binaire
Pas de Node.js, pas de service SSR séparé, pas de sidecar. PRISM s'exécute dans le même processus bext qui termine TLS, route, met en cache et protège.
Les conventions que vous connaissez déjà
PRISM reprend les conventions de fichiers et de routage familières d’App Router, tout en utilisant son propre renderer TSX.
exemples exécutables, en direct
Chaque primitive de cette page est câblée et tourne sur demo.bext.dev — signaux, server actions, streaming, cache, auth, storage et plus. Lisez le code source, observez le résultat.
Explorer les démos