- ViraStack Start
v2.0.0Major
New start page, modules you can add and remove, and current tooling
New projects come with a short start page, and ready modules go in and out with one command; the API layer and tool versions were refreshed, four package managers are supported, and the Node range went up.
What changed
- Start page: The landing page is gone. A short page now shows the next steps and your stack with its versions. The brand logo is an inline SVG, so no font is downloaded.
virastack add <module>: Installsusers,checkout-addressandcheckout-cardfrom thevirastack.com/rregistry in all four templates. It installs only the feature and creates no page: the CLI prints the import line, and the module's page gives a prompt and manual steps for your framework and page path.initinstalls no module; the start page points to the ready modules. With i18n, translations are merged intosrc/messages; if anything conflicts, no file changes.checkout-address: Choose shipping and billing addresses, and add or edit them in a popup. The form uses@virastack/addressand@virastack/mask.checkout-card: Choose a saved card or add a new one. The card number and CVV stay off the network; the POST carries only a dummy token, the brand, the last four digits, the expiry and the name.virastack remove <module>: Deletes the module's files, the folders they leave empty and its translations, and keeps the packages. It asks first if you changed any of those files.- API layer: In
api.ts,api.get(path, { schema })validates the response and infers its type.ApiError.kindseparateshttp,network,timeoutandparseerrors. WithcreateApi({ baseUrl, getHeaders }), auth headers go only to your own API. The default timeout is 10 seconds. - React Compiler: On in both the Next.js and TanStack Start templates. On Next.js it is no longer production only.
- Tools: ESLint 10, MSW 3, Vitest 5 and pnpm 12.
tscruns on TypeScript 7, whiletypescript-eslintandnext buildrun on TypeScript 6. - Prettier: The defaults are
semi: falseandtrailingComma: "none". All four templates share the same.prettierrc. - SEO: The start page has a canonical, a missing
APP_URLwarns in production, and the fixed rootog:urlis gone. Next.js no longer sendsX-Powered-By. - Package managers: npm, Yarn, bun and pnpm are supported.
initwritesci.ymland the husky hooks for the one you chose and adds the config file it needs. - i18n: The default language lives at
/and the other at/tr. Only the URL decides the language, with no automatic redirect, andhreflangtags are included. - shadcn: All four templates now have
components.json, soshadcn addworks in a new project right away. - Layout shift: TanStack Start templates use a metric-matched fallback and a preload for Inter.
Why
- Landing: It was a marketing page you had to delete first, and it did not show the next step.
- Modules in the registry: The template stays small, and a module goes in and out when you want. A new module needs no CLI release.
- No page from
add: You decide which page a module goes on, two modules do not collide on a page, and you compose a page like/checkoutyourself. - API: The same Zod pattern kept repeating, auth lived only in a comment, and retries in both
api.tsand TanStack Query multiplied the calls. - Tools: ESLint 9 is no longer supported. The 1.2.0 templates printed
ERR_PNPM_IGNORED_BUILDSduring install on pnpm 11 and 12. TypeScript 7.0 has no API, so both versions run side by side through the alias Microsoft recommends; in our measurementtscwent from 2.6 s to 0.51 s on Next.js and from 2.3 s to 0.37 s on TanStack Start. - Node: Node 20 support has ended. Dependencies such as
jsdomalso need a higher version, which is why installs failed on Yarn 1. - Package managers: A CI file that only knew pnpm failed on the others. shadcn/ui saw
pnpm-workspace.yamland ran pnpm in npm projects, and Plug'n'Play broke build and lint on Yarn 4. - One structure: The ViraStack AI rules describe a structure with no barrels and one alias, and the template must not contradict them. One-way imports keep shared code working when a feature is deleted.
- SEO: A page's
openGraphreplaces the root setting entirely, so a per-pageurlis your decision. The template'sllms.txtdescribed ViraStack on your own site. - i18n: Google advises against redirecting by language automatically.
- Layout shift: Inter caused CLS 0.207 in the TanStack Start template; it measured 0.000 in all three runs.
- Limits: Windows was not tried. The generated
ci.ymlwas not run on GitHub Actions.api.tswas not tried against a real production API or real auth. Modules run only on a dummy API and dummy data; connecting your real API is your work.
Sources
- Announcing TypeScript 7.0
- Version Support (ESLint)
- pnpm 11
- pnpm 12
- 2.x → 3.x (Mock Service Worker)
- Project Structure (Bulletproof React)
- Problem Details for HTTP APIs (RFC 9457)
- Query Retries (TanStack Query)
- Installation (React Compiler)
- reactCompiler (Next.js)
- generateMetadata (Next.js)
- Managing Multi-Regional and Multilingual Sites (Google)
- Getting Started (shadcn/ui registry)
- Test Cards (iyzico)
Migration
This release does not change existing projects. The items below apply to new projects created with 2.0.0; to move a 1.x project, apply them by hand. virastack add users was tried on 2.0.0 projects, not on older ones.
Breaking changes:
- Node: The templates require
^22.22.2 || ^24.15.0 || >=26.0.0. The previous floor was>=20.9.0. - Alias: Only
@/*remains.@/ui,@/layout,@/hooks,@/schemasand#/*are gone. - Barrels:
index.tsbarrels are gone from application code, and imports point at the defining file. - One-way imports: ESLint fails when shared folders import features or routes, or when features import routes.
- Messages: i18n messages moved from
messages/tosrc/messages/. Paraglide settings usebaseLocale,localesand{locale}. api.ts: Theretryoption is gone, and retries live inmakeQueryClient. Without a schema the result isunknown. When no response arrives,statusisnull; usekindto tell errors apart.- Packages: The
cnpackage replacesclsxandtailwind-merge.motionis gone. TanStack Start templates usevalidateSearchinstead of nuqs. - MSW 3:
onUnhandledFramereplacesonUnhandledRequest, and imports go throughmsw/http. - pnpm: The
pnpmfield inpackage.jsonis gone; settings live inpnpm-workspace.yamlwithallowBuilds. - Removed files:
public/llms.txt,.changesetand, in the non-i18n Next.js template,proxy.ts.