From 08b2ec4d5ff0952d98ad3c073c197ccb7a170cc3 Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Wed, 10 Jun 2026 14:34:52 +0200 Subject: [PATCH 1/5] nextjs template --- .../templates/template-nextjs-bare/AGENTS.md | 5 + .../templates/template-nextjs-bare/CLAUDE.md | 1 + .../templates/template-nextjs-bare/_gitignore | 42 ++++++ .../templates/template-nextjs-bare/_nvmrc | 1 + .../template-nextjs-bare/_oxfmtrc.json | 4 + .../template-nextjs-bare/_package.json | 41 ++++++ .../_vscode/settings.json | 5 + .../template-nextjs-bare/_zed/settings.json | 15 ++ .../template-nextjs-bare/app/Canvas.tsx | 10 ++ .../template-nextjs-bare/app/CanvasInner.tsx | 29 ++++ .../template-nextjs-bare/app/favicon.ico | Bin 0 -> 12007 bytes .../template-nextjs-bare/app/globals.css | 64 +++++++++ .../template-nextjs-bare/app/layout.tsx | 22 +++ .../template-nextjs-bare/app/page.tsx | 133 ++++++++++++++++++ .../template-nextjs-bare/babel.config.js | 7 + .../template-nextjs-bare/next.config.ts | 8 ++ .../template-nextjs-bare/oxlint.config.ts | 21 +++ .../template-nextjs-bare/pnpm-workspace.yaml | 3 + .../template-nextjs-bare/postcss.config.mjs | 7 + .../template-nextjs-bare/public/icons.svg | 19 +++ .../template-nextjs-bare/public/next.svg | 1 + .../public/typegpu-logo-dark.svg | 59 ++++++++ .../public/typegpu-logo-light.svg | 58 ++++++++ .../template-nextjs-bare/tsconfig.json | 38 +++++ 24 files changed, 593 insertions(+) create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/AGENTS.md create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/CLAUDE.md create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/_gitignore create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/_nvmrc create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/_oxfmtrc.json create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/_package.json create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/_vscode/settings.json create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/_zed/settings.json create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/app/favicon.ico create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/app/globals.css create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/babel.config.js create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/next.config.ts create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/oxlint.config.ts create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/pnpm-workspace.yaml create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/postcss.config.mjs create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/public/icons.svg create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/public/next.svg create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-dark.svg create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-light.svg create mode 100644 packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/AGENTS.md b/packages/typegpu-cli/templates/template-nextjs-bare/AGENTS.md new file mode 100644 index 0000000000..8bd0e39085 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/AGENTS.md @@ -0,0 +1,5 @@ + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. + diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/CLAUDE.md b/packages/typegpu-cli/templates/template-nextjs-bare/CLAUDE.md new file mode 100644 index 0000000000..43c994c2d3 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore b/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore new file mode 100644 index 0000000000..c5e8b4ffbb --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore @@ -0,0 +1,42 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build +/dist + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_nvmrc b/packages/typegpu-cli/templates/template-nextjs-bare/_nvmrc new file mode 100644 index 0000000000..a45fd52cc5 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_nvmrc @@ -0,0 +1 @@ +24 diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_oxfmtrc.json b/packages/typegpu-cli/templates/template-nextjs-bare/_oxfmtrc.json new file mode 100644 index 0000000000..acf53a0834 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "ignorePatterns": [".agents/**", "AGENTS.md", "CLAUDE.md"] +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_package.json b/packages/typegpu-cli/templates/template-nextjs-bare/_package.json new file mode 100644 index 0000000000..1e5fb0e451 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_package.json @@ -0,0 +1,41 @@ +{ + "name": "typegpu-nextjs-simple-project", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "check": "oxlint && oxfmt --check", + "fix": "oxlint --fix && oxfmt", + "types": "tsc --p ./tsconfig.json --noEmit" + }, + "dependencies": { + "@typegpu/react": "^0.11.1", + "next": "16.2.7", + "react": "19.2.4", + "react-dom": "19.2.4", + "typegpu": "^0.11.8" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "@webgpu/types": "^0.1.70", + "eslint-plugin-typegpu": "^0.11.1", + "oxfmt": "^0.49.0", + "oxlint": "^1.64.0", + "tailwindcss": "^4", + "typescript": "npm:tsover@6.0.1", + "unplugin-typegpu": "^0.11.4" + }, + "overrides": { + "typescript": "npm:tsover@6.0.1" + }, + "pnpm": { + "overrides": { + "typescript": "npm:tsover@6.0.1" + } + } +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_vscode/settings.json b/packages/typegpu-cli/templates/template-nextjs-bare/_vscode/settings.json new file mode 100644 index 0000000000..0dfacd95d2 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_vscode/settings.json @@ -0,0 +1,5 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.enablePromptUseWorkspaceTsdk": true +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_zed/settings.json b/packages/typegpu-cli/templates/template-nextjs-bare/_zed/settings.json new file mode 100644 index 0000000000..9d7badfbd2 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_zed/settings.json @@ -0,0 +1,15 @@ +// Folder-specific settings +// +// For a full list of overridable settings, and general information on folder-specific settings, +// see the documentation: https://zed.dev/docs/configuring-zed#settings-files +{ + "lsp": { + "vtsls": { + "settings": { + "typescript": { + "tsdk": "node_modules/typescript/lib" + } + } + } + } +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx new file mode 100644 index 0000000000..b1ff0fac19 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx @@ -0,0 +1,10 @@ +'use client'; + +import React from 'react'; +import dynamic from 'next/dynamic'; + +const CanvasInner = dynamic(() => import('./CanvasInner'), { ssr: false }); + +export default function Canvas({ className }: { className?: string }) { + return ; +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx new file mode 100644 index 0000000000..80483dbc04 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx @@ -0,0 +1,29 @@ +'use client'; + +import React, { useMemo } from 'react'; +import { useConfigureContext, useFrame, useRoot } from '@typegpu/react'; +import { common, d } from 'typegpu'; + +export default function CanvasInner({ className }: { className?: string }) { + const { ref, ctxRef } = useConfigureContext({ autoResize: true, alphaMode: 'premultiplied' }); + + const root = useRoot(); + const renderPipeline = useMemo( + () => + root.createRenderPipeline({ + vertex: common.fullScreenTriangle, + fragment: ({ uv }) => { + 'use gpu'; + return d.vec4f(0.55, uv, 1); + }, + }), + [root], + ); + + useFrame(() => { + if (!ctxRef.current) return; + renderPipeline.withColorAttachment({ view: ctxRef.current }).draw(3); + }); + + return ; +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/favicon.ico b/packages/typegpu-cli/templates/template-nextjs-bare/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2901de79c80cfa3680096859b29ddc4a4cfbd68d GIT binary patch literal 12007 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 M37}Xe{~_rA0Anx%tN;K2 literal 0 HcmV?d00001 diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/globals.css b/packages/typegpu-cli/templates/template-nextjs-bare/app/globals.css new file mode 100644 index 0000000000..f232fefb0e --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/globals.css @@ -0,0 +1,64 @@ +@import 'tailwindcss'; + +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; +} + +@theme inline { + --color-bg: var(--bg); + --color-text: var(--text); + --color-text-h: var(--text-h); + --color-border: var(--border); + --color-social: var(--social-bg); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + .button-icon { + filter: invert(1) brightness(2); + } +} + +body { + margin: 0; + background: var(--bg); + color: var(--text); +} + +.ticks { + position: relative; + width: 100%; +} + +.ticks::before, +.ticks::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; +} + +.ticks::before { + left: 0; + border-left-color: var(--border); +} + +.ticks::after { + right: 0; + border-right-color: var(--border); +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx new file mode 100644 index 0000000000..51983e0490 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import type { Metadata } from 'next'; + +// oxlint-disable-next-line import/no-unassigned-import +import './globals.css'; + +export const metadata: Metadata = { + title: 'typegpu-nextjs-simple-project', + description: 'TypeGPU + Next.js', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + {children} + + ); +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx new file mode 100644 index 0000000000..8630eced1b --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx @@ -0,0 +1,133 @@ +import React from 'react'; + +import Canvas from './Canvas.tsx'; +import typegpuLogoDark from '../public/typegpu-logo-dark.svg'; +import typegpuLogoLight from '../public/typegpu-logo-light.svg'; +import nextLogo from '../public/next.svg'; + +export function generateStaticParams() { + return [{ slug: [''] }]; +} + +export default function Page() { + return ( +
+
+ +
+ +
+ +
+ {/* TypeGPU */} +
+ + + TypeGPU + + +

Type-safe WebGPU

+ + +
+ + {/* Next.js */} +
+

+ + + +

+ +

The React framework

+ + +
+
+ +
+ +
+
+ ); +} diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/babel.config.js b/packages/typegpu-cli/templates/template-nextjs-bare/babel.config.js new file mode 100644 index 0000000000..ef07c2dc32 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/babel.config.js @@ -0,0 +1,7 @@ +module.exports = (api) => { + api.cache(true); + return { + presets: ['next/babel'], + plugins: ['unplugin-typegpu/babel'], + }; +}; diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/next.config.ts b/packages/typegpu-cli/templates/template-nextjs-bare/next.config.ts new file mode 100644 index 0000000000..9c1882429e --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/next.config.ts @@ -0,0 +1,8 @@ +import type { NextConfig } from 'next'; + +const nextConfig: NextConfig = { + output: 'export', + distDir: './dist', +}; + +export default nextConfig; diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/oxlint.config.ts b/packages/typegpu-cli/templates/template-nextjs-bare/oxlint.config.ts new file mode 100644 index 0000000000..b18160f3d2 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/oxlint.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from 'oxlint'; +import typegpu from 'eslint-plugin-typegpu'; + +export default defineConfig({ + plugins: ['typescript', 'import', 'unicorn', 'oxc', 'react', 'nextjs'], + jsPlugins: ['eslint-plugin-typegpu'], + categories: { + correctness: 'warn', + suspicious: 'warn', + }, + rules: { + ...typegpu.configs.recommended.rules, + 'typescript/no-non-null-assertion': 'error', + 'typescript/no-explicit-any': 'error', + 'typescript/no-unsafe-type-assertion': 'off', + 'import/no-named-as-default': 'off', + }, + env: { + builtin: true, + }, +}); diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/pnpm-workspace.yaml b/packages/typegpu-cli/templates/template-nextjs-bare/pnpm-workspace.yaml new file mode 100644 index 0000000000..581a9d5b59 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +ignoredBuiltDependencies: + - sharp + - unrs-resolver diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/postcss.config.mjs b/packages/typegpu-cli/templates/template-nextjs-bare/postcss.config.mjs new file mode 100644 index 0000000000..297374d80b --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; + +export default config; diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/public/icons.svg b/packages/typegpu-cli/templates/template-nextjs-bare/public/icons.svg new file mode 100644 index 0000000000..36acdb9f18 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/public/icons.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/public/next.svg b/packages/typegpu-cli/templates/template-nextjs-bare/public/next.svg new file mode 100644 index 0000000000..5174b28c56 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-dark.svg b/packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-dark.svg new file mode 100644 index 0000000000..65c9a02c31 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-dark.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-light.svg b/packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-light.svg new file mode 100644 index 0000000000..a1b63335fc --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/public/typegpu-logo-light.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json b/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json new file mode 100644 index 0000000000..aec10d7402 --- /dev/null +++ b/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json @@ -0,0 +1,38 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ES2020"], + "module": "ESNext", + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noFallthroughCasesInSwitch": true, + "allowJs": true, + "forceConsistentCasingInFileNames": true, + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "types": ["@webgpu/types"] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts", + "dist/types/**/*.ts", + "dist/dev/types/**/*.ts" + ], + "exclude": ["node_modules"] +} From f9fc36e96eacc3907e53f8a88723f4b08d198710 Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Thu, 11 Jun 2026 16:33:00 +0200 Subject: [PATCH 2/5] canvas -> shader rename --- .../template-nextjs-bare/app/{Canvas.tsx => Shader.tsx} | 4 ++-- .../app/{CanvasInner.tsx => ShaderInner.tsx} | 2 +- .../typegpu-cli/templates/template-nextjs-bare/app/page.tsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename packages/typegpu-cli/templates/template-nextjs-bare/app/{Canvas.tsx => Shader.tsx} (54%) rename packages/typegpu-cli/templates/template-nextjs-bare/app/{CanvasInner.tsx => ShaderInner.tsx} (92%) diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/Shader.tsx similarity index 54% rename from packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx rename to packages/typegpu-cli/templates/template-nextjs-bare/app/Shader.tsx index b1ff0fac19..b030fc93df 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/app/Canvas.tsx +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/Shader.tsx @@ -3,8 +3,8 @@ import React from 'react'; import dynamic from 'next/dynamic'; -const CanvasInner = dynamic(() => import('./CanvasInner'), { ssr: false }); +const ShaderInner = dynamic(() => import('./ShaderInner.tsx'), { ssr: false }); export default function Canvas({ className }: { className?: string }) { - return ; + return ; } diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/ShaderInner.tsx similarity index 92% rename from packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx rename to packages/typegpu-cli/templates/template-nextjs-bare/app/ShaderInner.tsx index 80483dbc04..8b64066c2c 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/app/CanvasInner.tsx +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/ShaderInner.tsx @@ -4,7 +4,7 @@ import React, { useMemo } from 'react'; import { useConfigureContext, useFrame, useRoot } from '@typegpu/react'; import { common, d } from 'typegpu'; -export default function CanvasInner({ className }: { className?: string }) { +export default function ShaderInner({ className }: { className?: string }) { const { ref, ctxRef } = useConfigureContext({ autoResize: true, alphaMode: 'premultiplied' }); const root = useRoot(); diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx index 8630eced1b..8a3c537619 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/page.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import Canvas from './Canvas.tsx'; +import Shader from './Shader.tsx'; import typegpuLogoDark from '../public/typegpu-logo-dark.svg'; import typegpuLogoLight from '../public/typegpu-logo-light.svg'; import nextLogo from '../public/next.svg'; @@ -13,7 +13,7 @@ export default function Page() { return (
- +
From aec089f364ea362278c24b957f973928bd95458c Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Thu, 11 Jun 2026 16:40:27 +0200 Subject: [PATCH 3/5] simple -> bare --- .../typegpu-cli/templates/template-nextjs-bare/_package.json | 2 +- .../typegpu-cli/templates/template-nextjs-bare/app/layout.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_package.json b/packages/typegpu-cli/templates/template-nextjs-bare/_package.json index 1e5fb0e451..41348b8cb6 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/_package.json +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_package.json @@ -1,5 +1,5 @@ { - "name": "typegpu-nextjs-simple-project", + "name": "typegpu-nextjs-bare-project", "version": "0.0.0", "private": true, "scripts": { diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx b/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx index 51983e0490..ad42aadbce 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx +++ b/packages/typegpu-cli/templates/template-nextjs-bare/app/layout.tsx @@ -5,7 +5,7 @@ import type { Metadata } from 'next'; import './globals.css'; export const metadata: Metadata = { - title: 'typegpu-nextjs-simple-project', + title: 'typegpu-nextjs-bare-project', description: 'TypeGPU + Next.js', }; From 5610bc0a2343063f6027b3de7b23473e90dc6b44 Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Thu, 11 Jun 2026 18:21:11 +0200 Subject: [PATCH 4/5] agents gitignore --- packages/typegpu-cli/templates/template-nextjs-bare/_gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore b/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore index c5e8b4ffbb..166e81b14a 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore +++ b/packages/typegpu-cli/templates/template-nextjs-bare/_gitignore @@ -24,6 +24,7 @@ # misc .DS_Store *.pem +.agents # debug npm-debug.log* From e10804553fb92385095d6f0bdc8c1a7b6425f2a8 Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Fri, 12 Jun 2026 16:22:25 +0200 Subject: [PATCH 5/5] bump es version so extarnals dont fail --- .../typegpu-cli/templates/template-nextjs-bare/tsconfig.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json b/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json index aec10d7402..698cbb13de 100644 --- a/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json +++ b/packages/typegpu-cli/templates/template-nextjs-bare/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { - "target": "ES2020", + "target": "ESNext", "useDefineForClassFields": true, - "lib": ["DOM", "DOM.Iterable", "ES2020"], + "lib": ["DOM", "DOM.Iterable", "ESNext"], "module": "ESNext", "esModuleInterop": true, "skipLibCheck": true,