Skip to content

Add Pracht - #439

Open
JoviDeCroock wants to merge 1 commit into
e18e:mainfrom
JoviDeCroock:add-pracht
Open

Add Pracht#439
JoviDeCroock wants to merge 1 commit into
e18e:mainfrom
JoviDeCroock:add-pracht

Conversation

@JoviDeCroock

@JoviDeCroock JoviDeCroock commented Sep 2, 2026

Copy link
Copy Markdown

Adds Pracht, a Preact meta-framework built on Vite, as a tracked framework.

Happy to close this if it isn't wanted — CONTRIBUTING asks for an issue first and I skipped straight to code so there'd be something concrete to look at. I'm the author of Pracht, so treat the choices below as "here's what the CLI does", not advocacy.

Note

This PR was co-authored by an agent and reviewed by myself

What's here

  • packages/starter-pracht/pnpm create pracht@latest with the recommended defaults
  • packages/app-pracht/ — the six benchmark routes, mirroring the other app-* packages
  • packages/stats-generator/src/serve/pracht.ts — production serve script
  • packages/stats-generator/src/ssrRequestThroughput/handlers/pracht.ts — in-process request handler
  • Registry entries for ssrRequestThroughput, ssrLoad, clientSideRendered, serverSideRendered
  • .github/frameworks.json entry with focusedFramework: false
  • Docs wiring: logo, chart logo maps, collections.ts package mapping, methodology setup steps, framework page, README data links

No ci-stats.json — CI generates those on the Depot runners.

Benchmark app decisions

  • SSR routes use loaders over the shared packages/testdata.
  • /client-side-rendered uses render: "spa" and generates its 1000 rows in the browser with no server round-trip, matching how the Astro and SvelteKit apps do it.
  • Every route keeps the default hydration: "full", and links use <Link> (Pracht's client-router component). Pracht can opt individual routes out of hydration entirely, which would roughly halve the /ssr-throughput document and materially change its numbers — I deliberately did not do that, so it's compared like the other hydrating frameworks rather than like Astro.
  • fullDocumentNavigation: false in the CWV registries, since Pracht does client-side navigation.
  • Default link prefetching (intent, on hover/focus) is left on, matching SvelteKit's starter keeping data-sveltekit-preload-data="hover".

Checklist

  • If updating UI/UX components ensure you have added screenshots or a gif or video of the changes to the PR description

    N/A — the only docs-site changes are a logo file, two logo-map entries, a package-name mapping, and Markdown content.

  • If this is a dependabot PR that bumps a metaframework version, ensure that all package versions in the package match the versions installed by the metaframework version being bumped

    N/A — not a dependabot PR.

  • If this is a dependabot PR that bumps a metaframework version in a starter-* package, ensure that the deps, and file content matches the output of the metaframeworks recommended starter/default project

    N/A — not a dependabot PR. Starter contents are the CLI defaults with the three deviations listed above.

@JoviDeCroock
JoviDeCroock marked this pull request as draft September 2, 2026 16:31
Adds `starter-pracht` and `app-pracht`, plus the stats-generator wiring
(production serve script, in-process SSR request handler, and entries in the
ssrRequestThroughput / ssrLoad / clientSideRendered / serverSideRendered
registries), a `.github/frameworks.json` entry, and docs-site wiring.

Pracht is a Preact meta-framework on Vite (https://github.com/JoviDeCroock/pracht).

`starter-pracht` is the output of `pnpm create pracht@latest --no-agent-tools`
with the remaining recommended defaults (Node adapter, manifest router, no
Tailwind). The generated `Dockerfile` and `.dockerignore` are dropped since no
measurement uses them, dependency versions are pinned exact, and the files are
formatted with the repository's Prettier config.

`app-pracht` mirrors the other `app-*` packages: SSR routes load from
`packages/testdata`, the client-side-rendered route uses `render: "spa"` and
generates its rows in the browser, and every route keeps the default
`hydration: "full"` so it is measured like the other hydrating frameworks.
@JoviDeCroock
JoviDeCroock marked this pull request as ready for review September 2, 2026 17:46
@43081j

43081j commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

haven't read through yet but seems like a good addition to have!

very interested to see how it compares to the others

@AlexanderKaran

Copy link
Copy Markdown
Collaborator

Hi @JoviDeCroock

Thank you for the PR. I will need some time to review this in detail.

I will review each test setup and may have follow-up questions about framework-specific points that need to be added to the methodology.

@43081j Do we include this in Focused Frameworks or all. I lean towards all based on popularity?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants