From c86505dfdc37b05eb2c591991211dd0da3aaae39 Mon Sep 17 00:00:00 2001 From: Alexander Karan Date: Thu, 5 Feb 2026 21:42:27 +0800 Subject: [PATCH 1/2] First pass at compare table --- .../docs/src/components/DependencyStats.astro | 40 +++++++++++++++++++ packages/docs/src/content/config.ts | 15 +++++++ .../docs/src/content/frameworks/astro.json | 9 +++++ .../docs/src/content/frameworks/next-js.json | 10 +++++ .../docs/src/content/frameworks/nuxt.json | 10 +++++ .../src/content/frameworks/react-router.json | 10 +++++ .../src/content/frameworks/solid-start.json | 9 +++++ .../src/content/frameworks/sveltekit.json | 10 +++++ .../content/frameworks/tanstack-start.json | 8 ++++ 9 files changed, 121 insertions(+) create mode 100644 packages/docs/src/content/frameworks/astro.json create mode 100644 packages/docs/src/content/frameworks/next-js.json create mode 100644 packages/docs/src/content/frameworks/nuxt.json create mode 100644 packages/docs/src/content/frameworks/react-router.json create mode 100644 packages/docs/src/content/frameworks/solid-start.json create mode 100644 packages/docs/src/content/frameworks/sveltekit.json create mode 100644 packages/docs/src/content/frameworks/tanstack-start.json diff --git a/packages/docs/src/components/DependencyStats.astro b/packages/docs/src/components/DependencyStats.astro index 5d389be..06a5776 100644 --- a/packages/docs/src/components/DependencyStats.astro +++ b/packages/docs/src/components/DependencyStats.astro @@ -1,9 +1,11 @@ --- import { getCollection } from 'astro:content' +const frameworkEntries = await getCollection('frameworks') const devtimeEntries = await getCollection('devtime') const runtimeEntries = await getCollection('runtime') +const frameworkMeta = frameworkEntries.map((entry) => entry.data) const starterStats = devtimeEntries.map((entry) => entry.data) const ssrStats = runtimeEntries.map((entry) => entry.data) @@ -37,6 +39,44 @@ function formatBytesToMB(bytes: number): string { our methodology and testing process.

+

Framework Overview

+ +

+ Rendering capabilities supported by each framework, their recommended + default approach, and bundler. +

+ +
+ + + + + + + + + + + + + + { + frameworkMeta.map((framework) => ( + + + + + + + + + + )) + } + +
FrameworkSPAMPASSGRecommendedDefault BundlerOther Bundlers
{framework.name}{framework.supportsSPA ? 'Y' : 'N'}{framework.supportsMPA ? 'Y' : 'N'}{framework.supportsSSG === undefined ? '?' : framework.supportsSSG ? 'Y' : 'N'}{framework.recommended}{framework.bundler}{framework.otherBundlers?.join(', ') || '-'}
+
+

Dev Time Performance

diff --git a/packages/docs/src/content/config.ts b/packages/docs/src/content/config.ts index a1febe3..b00548f 100644 --- a/packages/docs/src/content/config.ts +++ b/packages/docs/src/content/config.ts @@ -1,5 +1,19 @@ import { defineCollection, z } from 'astro:content' +const frameworksCollection = defineCollection({ + type: 'data', + schema: z.object({ + name: z.string(), + package: z.string(), + supportsSPA: z.boolean(), + supportsMPA: z.boolean(), + supportsSSG: z.boolean().optional(), + recommended: z.string(), + bundler: z.string(), + otherBundlers: z.array(z.string()).optional(), + }), +}) + const devtimeCollection = defineCollection({ type: 'data', schema: z.object({ @@ -37,6 +51,7 @@ const runtimeCollection = defineCollection({ }) export const collections = { + frameworks: frameworksCollection, devtime: devtimeCollection, runtime: runtimeCollection, } diff --git a/packages/docs/src/content/frameworks/astro.json b/packages/docs/src/content/frameworks/astro.json new file mode 100644 index 0000000..2434d47 --- /dev/null +++ b/packages/docs/src/content/frameworks/astro.json @@ -0,0 +1,9 @@ +{ + "name": "Astro", + "package": "starter-astro", + "supportsSPA": true, + "supportsMPA": true, + "supportsSSG": true, + "recommended": "MPA/SSG - static HTML by default, zero JS", + "bundler": "Vite" +} diff --git a/packages/docs/src/content/frameworks/next-js.json b/packages/docs/src/content/frameworks/next-js.json new file mode 100644 index 0000000..59478ea --- /dev/null +++ b/packages/docs/src/content/frameworks/next-js.json @@ -0,0 +1,10 @@ +{ + "name": "Next.js", + "package": "starter-next-js", + "supportsSPA": true, + "supportsMPA": true, + "supportsSSG": true, + "recommended": "MPA", + "bundler": "Turbopack", + "otherBundlers": ["Webpack"] +} diff --git a/packages/docs/src/content/frameworks/nuxt.json b/packages/docs/src/content/frameworks/nuxt.json new file mode 100644 index 0000000..69a1dd8 --- /dev/null +++ b/packages/docs/src/content/frameworks/nuxt.json @@ -0,0 +1,10 @@ +{ + "name": "Nuxt", + "package": "starter-nuxt", + "supportsSPA": true, + "supportsMPA": true, + "supportsSSG": true, + "recommended": "MPA", + "bundler": "Vite", + "otherBundlers": ["Webpack", "Rspack"] +} diff --git a/packages/docs/src/content/frameworks/react-router.json b/packages/docs/src/content/frameworks/react-router.json new file mode 100644 index 0000000..91931e8 --- /dev/null +++ b/packages/docs/src/content/frameworks/react-router.json @@ -0,0 +1,10 @@ +{ + "name": "React Router", + "package": "starter-react-router", + "supportsSPA": true, + "supportsMPA": true, + "supportsSSG": true, + "recommended": "MPA", + "bundler": "Vite", + "otherBundlers": ["Parcel"] +} diff --git a/packages/docs/src/content/frameworks/solid-start.json b/packages/docs/src/content/frameworks/solid-start.json new file mode 100644 index 0000000..636fe72 --- /dev/null +++ b/packages/docs/src/content/frameworks/solid-start.json @@ -0,0 +1,9 @@ +{ + "name": "SolidStart", + "package": "starter-solid-start", + "supportsSPA": true, + "supportsMPA": true, + "supportsSSG": true, + "recommended": "MPA", + "bundler": "Vinxi (Vite)" +} diff --git a/packages/docs/src/content/frameworks/sveltekit.json b/packages/docs/src/content/frameworks/sveltekit.json new file mode 100644 index 0000000..43ae6d7 --- /dev/null +++ b/packages/docs/src/content/frameworks/sveltekit.json @@ -0,0 +1,10 @@ +{ + "name": "SvelteKit", + "package": "starter-sveltekit", + "supportsSPA": true, + "supportsMPA": true, + "supportsSSG": true, + "recommended": "MPA", + "bundler": "Vite", + "otherBundlers": ["Rolldown"] +} diff --git a/packages/docs/src/content/frameworks/tanstack-start.json b/packages/docs/src/content/frameworks/tanstack-start.json new file mode 100644 index 0000000..ef4908c --- /dev/null +++ b/packages/docs/src/content/frameworks/tanstack-start.json @@ -0,0 +1,8 @@ +{ + "name": "TanStack Start", + "package": "starter-tanstack-start-react", + "supportsSPA": true, + "supportsMPA": true, + "recommended": "MPA", + "bundler": "Vite" +} From 27dfbbee1f37cc07500c6f4487e1ae977254c82b Mon Sep 17 00:00:00 2001 From: Alexander Karan Date: Fri, 6 Feb 2026 06:11:45 +0800 Subject: [PATCH 2/2] Format --- packages/docs/src/components/DependencyStats.astro | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/docs/src/components/DependencyStats.astro b/packages/docs/src/components/DependencyStats.astro index 06a5776..2f1a2ed 100644 --- a/packages/docs/src/components/DependencyStats.astro +++ b/packages/docs/src/components/DependencyStats.astro @@ -66,7 +66,13 @@ function formatBytesToMB(bytes: number): string { {framework.name} {framework.supportsSPA ? 'Y' : 'N'} {framework.supportsMPA ? 'Y' : 'N'} - {framework.supportsSSG === undefined ? '?' : framework.supportsSSG ? 'Y' : 'N'} + + {framework.supportsSSG === undefined + ? '?' + : framework.supportsSSG + ? 'Y' + : 'N'} + {framework.recommended} {framework.bundler} {framework.otherBundlers?.join(', ') || '-'}