Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
**/.astro
**/.nuxt
**/.svelte-kit
**/.cloudflare
**/.void
**/.void-wrangler.jsonc
**/build
**/coverage
**/dist
Expand Down
31 changes: 29 additions & 2 deletions packages/docs/src/content/docs/methodology.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ runtime configuration details are described in Framework Specific Notes.
| SolidStart | Solid | Vite | Nitro |
| SvelteKit | Svelte | Vite | Node adapter |
| TanStack Start | React | Vite | Nitro |
| Void | React | Vite | No runtime app |
| Baseline HTML | None | No build step | Node.js |

Baseline HTML is a runtime-only comparison. Each project's `package.json`
Expand All @@ -91,6 +92,7 @@ Current pinned dependencies are listed in each project's `package.json`:
- [SolidStart](https://github.com/e18e/framework-performance/blob/main/packages/starter-solid-start/package.json)
- [SvelteKit](https://github.com/e18e/framework-performance/blob/main/packages/starter-sveltekit/package.json)
- [TanStack Start (React)](https://github.com/e18e/framework-performance/blob/main/packages/starter-tanstack-start-react/package.json)
- [Void](https://github.com/e18e/framework-performance/blob/main/packages/starter-void/package.json)

### Project Setups

Expand Down Expand Up @@ -203,6 +205,31 @@ Installed using the CLI with the following setup:

The TanStack Start starter uses `nitro()` without an explicit preset.

#### Void

Generated from the published CLI with the following selections:

```sh
pnpm dlx create-void@1.8.0 starter-void --toolchain vite --framework react --starter static --deploy none
```

- Build tool: `Vite`
- UI framework: `React`, with the generated React Compiler setting enabled
- Starter: `Static Pages`, without a database or server routes
- Deployment: `None`

The starter retains the generated welcome page, styles, assets, typed routes,
and default Cloudflare build target. `void` and `@void/react` are pinned to the
same exact published version. After generation, the standalone pnpm workspace
is explicitly limited to this package, a `type-check` script is added, and
benchmark output files are ignored. Void currently has a Dev Time starter only;
there is no Run Time app.

Build timing and the core-js scan include both the Worker and client builds.
Browser baseline scans use
`.cloudflare/output/v0/workers/default/assets`, which contains only the client
output.

### Dependency Counts

- **Core package:** Measures the direct production and development dependencies
Expand Down Expand Up @@ -294,9 +321,9 @@ The TanStack Start starter uses `nitro()` without an explicit preset.
on, or blank if any detected feature is not yet Baseline.
- Features is the number of unique web platform feature IDs detected in the
browser-facing build output.
- For Nuxt, SvelteKit, and TanStack Start, the `temporal` feature is temporarily
- For Nuxt, SvelteKit, TanStack Start, and Void, the `temporal` feature is temporarily
excluded. These starters bundle optional Temporal serialization support
(devalue in Nuxt and SvelteKit, seroval in TanStack Start), but their
(devalue in Nuxt, SvelteKit, and Void, seroval in TanStack Start), but their
application code does not serialize Temporal values.

### Minimum Node Version
Expand Down
20 changes: 20 additions & 0 deletions packages/results/src/frameworks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export interface TestConfig {
package: string
buildScript: string
buildOutputDir: string
browserBuildOutputDir?: string
devServerPort?: number
measurements: MeasurementName[]
}
Expand Down Expand Up @@ -303,4 +304,23 @@ export const frameworks = [
],
},
},
{
name: 'void',
displayName: 'Void',
frameworkPackage: 'void',
starter: {
package: 'starter-void',
buildScript: 'build',
buildOutputDir: '.cloudflare/output/v0',
browserBuildOutputDir: '.cloudflare/output/v0/workers/default/assets',
devServerPort: 5173,
measurements: [
'install',
'build',
'devServer',
'dependencies',
'browserBaseline',
],
},
},
] satisfies FrameworkConfig[]
2 changes: 2 additions & 0 deletions packages/results/src/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export const FrameworkSchema = z.enum([
'solid',
'sveltekit',
'tanstack',
'void',
])

export const PackagePathSchema = z.enum([
Expand All @@ -87,6 +88,7 @@ export const PackagePathSchema = z.enum([
'packages/app-sveltekit',
'packages/starter-tanstack-start-react',
'packages/app-tanstack-start-react',
'packages/starter-void',
])

export const BaseResultSchema = z.object({
Expand Down
11 changes: 11 additions & 0 deletions packages/starter-void/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules
dist
.void
.wrangler
.cloudflare
.void-wrangler.jsonc
.env
.env.*
*.tsbuildinfo
.DS_Store
*-stats.json
8 changes: 8 additions & 0 deletions packages/starter-void/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!--injected-by-void-v1.8.0-->

## Void

- This project uses [Void](https://void.cloud), a full-stack Vite framework for Cloudflare Workers with file-based API routing, server-rendered pages, and typed backend services.
- Use Void's CLI and typed APIs. Before working with Void, read the relevant Markdown docs in `node_modules/void/docs/`; start with `guide/quickstart.md` for setup and `reference/cli.md` for commands.

<!--/injected-by-void-->
7 changes: 7 additions & 0 deletions packages/starter-void/first-party-dependencies.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"dependencies": {},
"devDependencies": {
"void": "1.8.0",
"@void/react": "1.8.0"
}
}
26 changes: 26 additions & 0 deletions packages/starter-void/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"name": "starter-void",
"private": true,
"type": "module",
"devDependencies": {
"void": "1.8.0",
"vite": "^8.0.10",
"typescript": "^7.0.2",
"@void/react": "1.8.0",
"oxc-transform-react": ">=0.152.0 <0.157.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3"
},
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"type-check": "tsc --noEmit",
"postinstall": "void prepare"
},
"dependencies": {
"hono": "^4.11.9",
"react": "^19.2.4",
"react-dom": "^19.2.4"
}
}
137 changes: 137 additions & 0 deletions packages/starter-void/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
import './style.css'

export default function HomePage() {
return (
<main className="starter">
<section id="center" aria-labelledby="welcome-title">
<div className="hero">
<img
className="base"
src="/stack.svg"
width="170"
height="179"
alt=""
/>
<img className="framework" src="/react.svg" alt="React logo" />
<img className="void" src="/void.svg" alt="Void logo" />
</div>
<div className="starter-intro">
<h1 id="welcome-title">Welcome to Void</h1>
<div className="starter-description">
<p>
This starter is running in Pages mode with no database or server
code yet.
</p>
<p>
Add <code>pages/*.server.ts</code>, <code>routes/</code>, or{' '}
<code>void/db</code> when you want to grow into full-stack
features.
</p>
</div>
</div>
</section>
<div className="ticks" aria-hidden="true"></div>
<section id="next-steps" aria-label="Resources">
<div id="docs">
<svg className="icon" role="presentation" aria-hidden="true">
<use href="/icons.svg#documentation-icon"></use>
</svg>
<h2>Documentation</h2>
<p>Your questions, answered</p>
<ul>
<li>
<a
href="https://void.cloud/guide/quickstart"
target="_blank"
rel="noreferrer"
>
Quickstart
</a>
</li>
<li>
<a href="https://react.dev/" target="_blank" rel="noreferrer">
<img className="button-icon" src="/react.svg" alt="" />
Learn more
</a>
</li>
</ul>
</div>
<div id="social">
<svg className="icon" role="presentation" aria-hidden="true">
<use href="/icons.svg#social-icon"></use>
</svg>
<h2>Connect with us</h2>
<p>Join the Void community</p>
<ul>
<li>
<a
href="https://github.com/voidzero-dev/void"
target="_blank"
rel="noreferrer"
>
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#github-icon"></use>
</svg>
GitHub
</a>
</li>
<li>
<a
href="https://discord.gg/cC6TEVFKSx"
target="_blank"
rel="noreferrer"
>
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#discord-icon"></use>
</svg>
Discord
</a>
</li>
<li>
<a
href="https://x.com/deploytovoid"
target="_blank"
rel="noreferrer"
>
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#x-icon"></use>
</svg>
X.com
</a>
</li>
<li>
<a
href="https://bsky.app/profile/voidzero.dev"
target="_blank"
rel="noreferrer"
>
<svg
className="button-icon"
role="presentation"
aria-hidden="true"
>
<use href="/icons.svg#bluesky-icon"></use>
</svg>
Bluesky
</a>
</li>
</ul>
</div>
</section>
<div className="ticks" aria-hidden="true"></div>
<div id="spacer" aria-hidden="true"></div>
</main>
)
}
Loading
Loading