From 97750f344692b3473bea4b6fe8c24df0141136bb Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Thu, 11 Jun 2026 18:18:59 +0200 Subject: [PATCH 1/3] waku bare template --- .../templates/template-waku-bare/_gitignore | 7 + .../templates/template-waku-bare/_nvmrc | 1 + .../template-waku-bare/_oxfmtrc.json | 4 + .../template-waku-bare/_package.json | 45 ++++++ .../template-waku-bare/_vscode/settings.json | 5 + .../template-waku-bare/_zed/settings.json | 15 ++ .../template-waku-bare/oxlint.config.ts | 21 +++ .../public/images/favicon.ico | Bin 0 -> 12007 bytes .../public/images/icons.svg | 19 +++ .../public/images/typegpu-logo-dark.svg | 59 ++++++++ .../public/images/typegpu-logo-light.svg | 58 ++++++++ .../template-waku-bare/public/images/waku.png | Bin 0 -> 5713 bytes .../src/components/NoSSR.tsx | 9 ++ .../src/components/Shader.tsx | 35 +++++ .../template-waku-bare/src/global.d.ts | 1 + .../template-waku-bare/src/pages.gen.ts | 21 +++ .../template-waku-bare/src/pages/_layout.tsx | 23 +++ .../template-waku-bare/src/pages/index.tsx | 131 ++++++++++++++++++ .../template-waku-bare/src/styles.css | 64 +++++++++ .../template-waku-bare/tsconfig.json | 23 +++ .../template-waku-bare/waku.config.ts | 10 ++ 21 files changed, 551 insertions(+) create mode 100644 packages/typegpu-cli/templates/template-waku-bare/_gitignore create mode 100644 packages/typegpu-cli/templates/template-waku-bare/_nvmrc create mode 100644 packages/typegpu-cli/templates/template-waku-bare/_oxfmtrc.json create mode 100644 packages/typegpu-cli/templates/template-waku-bare/_package.json create mode 100644 packages/typegpu-cli/templates/template-waku-bare/_vscode/settings.json create mode 100644 packages/typegpu-cli/templates/template-waku-bare/_zed/settings.json create mode 100644 packages/typegpu-cli/templates/template-waku-bare/oxlint.config.ts create mode 100644 packages/typegpu-cli/templates/template-waku-bare/public/images/favicon.ico create mode 100644 packages/typegpu-cli/templates/template-waku-bare/public/images/icons.svg create mode 100644 packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-dark.svg create mode 100644 packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-light.svg create mode 100644 packages/typegpu-cli/templates/template-waku-bare/public/images/waku.png create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/components/NoSSR.tsx create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/components/Shader.tsx create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/global.d.ts create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/pages/_layout.tsx create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/pages/index.tsx create mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/styles.css create mode 100644 packages/typegpu-cli/templates/template-waku-bare/tsconfig.json create mode 100644 packages/typegpu-cli/templates/template-waku-bare/waku.config.ts diff --git a/packages/typegpu-cli/templates/template-waku-bare/_gitignore b/packages/typegpu-cli/templates/template-waku-bare/_gitignore new file mode 100644 index 0000000000..ad583432dd --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/_gitignore @@ -0,0 +1,7 @@ +node_modules +dist +.env* +*.tsbuildinfo +.cache +.DS_Store +*.pem diff --git a/packages/typegpu-cli/templates/template-waku-bare/_nvmrc b/packages/typegpu-cli/templates/template-waku-bare/_nvmrc new file mode 100644 index 0000000000..a45fd52cc5 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/_nvmrc @@ -0,0 +1 @@ +24 diff --git a/packages/typegpu-cli/templates/template-waku-bare/_oxfmtrc.json b/packages/typegpu-cli/templates/template-waku-bare/_oxfmtrc.json new file mode 100644 index 0000000000..3dbb588cb1 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/_oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "ignorePatterns": [".agents/**"] +} diff --git a/packages/typegpu-cli/templates/template-waku-bare/_package.json b/packages/typegpu-cli/templates/template-waku-bare/_package.json new file mode 100644 index 0000000000..eb5789aa85 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/_package.json @@ -0,0 +1,45 @@ +{ + "name": "typegpu-waku-bare-project", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "waku dev", + "build": "waku build", + "start": "waku start", + "typegen": "waku router typegen", + "check": "oxlint && oxfmt --check", + "fix": "oxlint --fix && oxfmt", + "types": "tsc --p ./tsconfig.json --noEmit" + }, + "dependencies": { + "@typegpu/react": "^0.11.1", + "hono": "^4.12.14", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-server-dom-webpack": "^19.2.6", + "typegpu": "^0.11.8", + "waku": "^1.0.0-beta.2" + }, + "devDependencies": { + "@tailwindcss/vite": "4.3.0", + "@types/react": "^19.2.15", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "@webgpu/types": "^0.1.70", + "eslint-plugin-typegpu": "^0.11.1", + "oxfmt": "^0.49.0", + "oxlint": "^1.64.0", + "tailwindcss": "^4.3.0", + "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-waku-bare/_vscode/settings.json b/packages/typegpu-cli/templates/template-waku-bare/_vscode/settings.json new file mode 100644 index 0000000000..0dfacd95d2 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-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-waku-bare/_zed/settings.json b/packages/typegpu-cli/templates/template-waku-bare/_zed/settings.json new file mode 100644 index 0000000000..9d7badfbd2 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-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-waku-bare/oxlint.config.ts b/packages/typegpu-cli/templates/template-waku-bare/oxlint.config.ts new file mode 100644 index 0000000000..b46806bcd5 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-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'], + 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-waku-bare/public/images/favicon.ico b/packages/typegpu-cli/templates/template-waku-bare/public/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2901de79c80cfa3680096859b29ddc4a4cfbd68d GIT binary patch literal 12007 zcmY+qXIN8R&^D?fBA}pDkuFU@Kt#Iq-V#azNQ*R)-g^iN(t7|w3B5-;(wjgC1R)^3 zNH3w+(A&rJzUO@BIzM)~_FikvS~F|kbIl#%+)-1M1Nq$DN)IgYwDlYxhY^=r($VKBsw#2(&5NPnh>TPg7qtj_N~!r8 z9!{)0geQM)`^Pyn!<~e$N0x5mjwR7l_9MdNU!VTQin;BMJmu!-&&v|DQ`8$qUdmaP zvh_&~Y~Y$QT8?4Z2HfmP%Snq2w!xijz`OhiI&L&@xMfq`f|bVo^R72<8h0WRaUt@G zX!t^FUB_N+YOz!GfzA5^FXiDM?+Yt7Z}++)_vtUC8hrw7<2EyT4t`FO74)BOTWnHP z3&DpR4FtFS+V}+o2h5qleD0|;)4n^Xqa@?x)bT@#Ev(%PnFH7YJ?#@n(}e4Tv6U51 z{6IO(p_h!dGK4JY%QnsJDXL4q`3iasd~cu}2RbQPFcp8h@|i3 zltQy;=i2e+^tnE3o4HoTi8WO7`L~?b-C=r~jVn6>5W? z8CM?X6&8IX=sgfU&WpjiiQK-}IqoS2hT{6{FTG$J+Y`s1Z~HpVjm(@o2NH=02}Uta z(3#yTM95((G}OV$LVEXT<~zl(kL287z%1Wpl4M0f1RZX0@;lu91YtYASW_9XPMVf! z8#b^99{#>MNocx8=HOtlvHfowk7>9-u8SO6D|Cp82-e69T(moRZ7lzjva#E&Wui|{ zotmj;$L)ygN!HCwoT5gKGepF_A@sK6we-dbsZ)!?oP`!%6SIuBb{U~jaif_|guU>= z{%c9ktXH6S{)a@3IH3zYIdF7sxRGa)4k$82eR!#cW_k?#Fz!mW&W7uM2d`$@>scv3jy*6R|d>j;c*rSJIcyjzVropCSl`XpI-6jAIb!!PdbjGIc|M%AclI$ljJ z-wLz0uca906s);OK%Aq>0C9R(7kKH9TxBpKtgvADwMX9~NGub^r9-&bDu zMq!gCRNt_(Oyw?I$lKa~xkgLVG|0z(SEiCzyzRj3#Pnzc>mXg`X<>IUy$q6}#PiCm zUZ@ZKo{|1*pb-T1sy}C}KaMEoi(NK3)6NTI&SQW4ui~mK47qU!Zb1A>@!suz58g_A zzqIReExDI>JJsopuotePA+1guPl@}8ij&69TD@y;CT6-qAimzN3mV=R*8*+EFE85g zC$!apC)miqs7ujZsKtwa9<%Aej+~0%PO?6J+`pc8#dCLf0AS&S7CFo`kV6EYt$A5%L}`EMq16qDKi&b zoB`TaOG#~P+#j0_e5re*KW}9~Tu+^JkM&iMkg;N$`Z_TMRoZuGSbcc8$x$^i#YB=- zCVx?1z3NVyBxdX4#^YS;=Iv<%^LfF|tJ9I`j0xK7zov7k#F?`C@1z@&4<|h`xvVWV zauA&2n3f_qEB6?jO@}|8G+9`9q>bw((=bKBN{MMTBE24Ol8uQ)(c+OMbQ-FH!@&vSB zWal#bThl}qcAu}OUUqF%bg5e~yi?}9=Q%|DjKtjX5$5SB9s%W<4;4h8(U|!l_SS)| z`}c(wFYb+jjQB!fcGJE6K*E0Z$Ad|dOslk?}~Ye z5_{?N$NiWAe_n67YS|o-?6e6#RLe|V*8Fv<4RUDBdQqbtR3z|T=clf;09xo{Wvg33 ziL{36eU+6>>zKo|?#hfK*B=^1mOZ#ND7&}J+(O6kl49L*g+|}1ypEJjS5t$^k)XRM z8}0#jOHMV9aVGyI=x?YP8qk&#Nm~)l2z^T{_ja+#+87l@slW6n@N=Aya>9K$wPo}< z_CB-E%#x5vZO%4@`^p=so1>YniX`86ZLWe~x?BqCy1|BC)`p??`Bu!I=d>UHUE%G? zsERe^O+US}q+S42U0k7WT-^*<7L}DYw|wVuMp9Kc@@yk`{le_zR3B@aEy8OKDuZxAFhJy;P*?s`IqLrm2l@Ur+3-JkdvLfNM1RlDt@qs|Mdh*J}p>c zJ<{?K=n^d!v$@yB%S9J|^V`+(LE#3o47nKRBfEtNTKgZ63K z^;@{TYxcI1^Ga!e&MH#=y>E_1f?Un>m}G8f&jU5N| zK$+F8rMG1+PzKA7(aUcC@baQt3=igdQK0e=bT0a2Q409BKa4wmeRO7=(k^g z9XBZsbDIMa?+p7@_6;_C*mAAB$~E zTCxK^tB^HPdpO+gJE@IB(0qiD4` zSDv--a8hE3{!&o&kJPouL(Z~r0*=K!Qbx>YLeth@hsD;N8KPiUQdKbqa zF63JHoSWZEW@=s2aK(2P#_Tq< zLjo$O#?K35fzceqZ;+{m9K{hoGScg$-k>FS#8~KXjdCQ3A#W`)`pn{nUx`ZGW>xWf zGMoSrlUNjWPe&@p(%SHkvs8kPPNMW9DwTU($8`=l4CLb+q^h$@5n8O>qk+ zVL;_U^2h{tzD+);>l>5EDqY@cw!oZjADORHTfA07znrLqAaf5+5!}A2*wAW8P9Kte zoNvH~j0QypV`6R3vq?)3ftxCAo@mbud&dxB4g!Wx>{hg*I)WT8;_sW2PQGujML^LL zZWajPLq=LI=FDa%f}g8s&Vts&Wpu_`2P@m(Zyplug(FIEe(pSe?(m<9`J{cC+ns9hmEag-m@Gxl$m`)LUCT z0Q-&|ek2M~5iXGsr6uJVe-g$>pOVVHqB!uiGqgJUmya<;O1M_n6J1)?Bjr$MXAP;#{e|AGM1)WuZuYti zUVZunNimS2pNVT$r=b7?DZY|#7FV5r#mXBjjii(+A`*H|!(x-#JTP}hZG2mMR}A4{ zW}M}|N8_R!l;>y;PGTW&flDcS^u0UQoOBh*w4>UOx;m|x7adkcF9_2l$gg+XZdWzu ze!}Q)qyggQkmq&~k+Lh6uK39uPv|NF`WsTn|9<;DBbaqEC0qlL41j{H099yaW-dsK zAd34z5c+xebOo+2Mop80Bg6q|LOhtT>_;cswoWaft_~tK-lcCG9iI=53DQ-=Bj2jH zUZPS!s%DPvGmMQGBYULhK}^(pA4{w>B3Uq#f3SJ-!g| z!M#lp7Lk{-stDU9XvzL)`4pn=Fh;fS;)u(>xs;4PWRX}z*Uy2ok-zL*{^ydJD4kNR z;`z(g(c#%1;!*dT7MzLH&1_u2bhIz|fw%wos%Yf4-oxmCU-3u_uRaZt_|^jw)5yP#&!XPsus2{s)#R z-4KuPpwb-r%TZt&yOZZ^?xB`h4J-Jtm+}zSiXT&62gGURQos9}^&{5#fnOw)K)t8S`SEuf3pJ+1IlcyC>){So^n|OK0T#YXM z-3Q>2{_48VFR_7T=%JMN!BIj#CRtU}<|(0AlwE?!mn5@%rK7|h6cu1F4)uP^wEZ$oV zedIS4wA(N;%*h>29>Hwj?01p|g>3lFm&%mkw7BGE7SG}%^z(W0#5CDo!^(iWs^LW* zrLREpN9~oaD00_R+pUG~->#pH4+P)vn)x0v2bHl49+|69N2I+i6ZNHjL-u}>J%nX5 zor%Zfl&zsX*vQ-PxpAwQ62lv#fzplAI1lvq=8Jxq6Q-f!{HJzw|8hv8i}oO6JgP-vvtMe_oxMz$N8~{O77|>jcIBtJ=`u)P!7qfhqc_|f^QK>wFLanj!f8{fq zx2PfXvy(xssLp(jf@|MkfI*s&DwUCgk17CKp`a?zqR4O*oCM5@**+TjQ&CthCU=!I zMCtN0>?_he=aD7;oq=1VpYit0$&9$=Cn28mq+7 zZ>2{Zc@FZgRmis|N~L{jE7t@$(Md%$=D9u5exn|U=BpUkbmkZ>Y1*c;cFz6Ol8O(d z3e8qgy`Blti=<()D7tm4+!(M08Mc!2!1HuUx%9a7WZQqoKwtP)UdzPDWSFAElK{-b zmKpE@Zk4&r#lMpE=fMc%R>Atr(CG=~@ppWNW-aqC6-uU;!<>c0chC0HiTVf-`!jab zC2x@I%C1N+xQ7Ze%?oKB-q0k!x^#H^QFqo=~C$7(ozct~_(0{h3mI2QkQGsA~7f0au*{Z-HO-V>!;MLlJyT2S5e zANo3_Rl3<|Yt4V+V;fOSx$*)%_G;ZD2#7h$<-d@7Bwc5b5_qoW%xV^(#_EZosUlv~ zRR^+%y#iq;>7k*11zzRIkLyK0KI+`1)7F&@5rPj86{{P(260dS6$5Kcf*Ip-3|+R| zR7JesA0PJu&CUha`qDc@2}1OrHv@G-r^_Gm4qvjb3k_L7QumbYeS*(pBRU`_Yy zEI$~=DxNp+S_Bpx8}MoGmSRU!rZlprVx4gI?2tavU^po>Xh)U7Sl)cU?@Rw!$9w4M z{PO4QSX+QZndoSRpC+6@(|r}sT#)a+5ZrfdT7D=5PPt(6k)R$X2d#s+ z4Rlhq2cqHUkvgN=jh7EFL0v!3lYK&8A&4Tv`2jCaRV9M&=Rm~B&%mHe`4W~g#5!W4 zK&bAIW?!&*GKgutj6gNQjw+O7Y4jpH##@}BOD-v-ytKK3h>duvQX$NKJG<@{wGI_c zHrb@E{G5FFn-m0Km&f%d%BDQS?dgl)TvESY5+82ef|>L?pLRyKj#z z3Gxq)Uc*yvZqWjl&#`*alDotu7FFl&*evqC@Kr$k%fBfj-|{rmTW{CT&c*#9w=0B1 zGCjVEc%v{WVJcD(R z7y%qB&P;x$65;_>UC=2Ma3WrrsB~~`U=HHv6KwdXO!z~i_VZ6up1~}Gk7wcOFLcG% zKP^8{sg9STRs2cx1?bje{GF@&(RWK#ind0wzY(x4jH%7#YsHMdbmDkdGj(N~y^i06 zN}|8mdA250tM|(LkYI;D3o{-+jp7ch>X3#K=gS-dP0dK(;)qFu{)yicKF2St9Yg}u z99w_Pun7RW;0m%2Nr=9P&j^ef-d>)Gy?W6j#Vjuj7;P3MJ+S4fW7NJb_N6Pgsl^ z_~rce-{U~b;=Y;+e$=a7(Y;lA0XE#G!bh_3rQvUVGo-3E)x$(n;t!i<2bB5_!7{b_ z5LclX$FmLtyYoUST3Cw|o~8c*vqPo+{u%{wL+IA)kxzQy-Vs#@d4$E#`Sc9ZH}ROb*d{t`c{EH< zN+-3G`7^A5v%B#&0uC|Ik4!5P-D%^;(j7X3mt=e|Li4l zl-RA5TympB{h!X95o=s}ZUDb^32ocf&lET!B_nliAdH0v2$jeAq4U-07<(TbYZIwC z@3jM1zhq~-n>a1Xo)$Vt&FAoPE84vKWl4ViiK#}UcH9#1PM#CzRZxe=I%2i8qTbq{ zgJT-xlQ|W`l9nHo+PO1qKb|ZaHH(v)@%R;lZL)Q4&~{yqD6U=z8mN}np|hj5BrrnKNkhXM)ngx0iEyMSE2h9{Ou|A~XH1Rj|i~dEasYK|Wmg)ZzUX!S0y;_lV%zq46 zRodDO9^}KW^y$1&FHrr&7sL(NvrNk$~HA{YxAjo5&e`b!bgGkPDT;AxIy|>`c zuyD_(<%hrd zwI&{;MW$&y+>Zwa9(*T?Hg4+@8xz+TG#sUT5TuyM4~TDlR4Ly%lz*g{=U;Acw{!X| zuyqjWYaMasCw)J;q{ z#eL;tw3ZwrNBX>875U#3Dmd^vB9BEnAOH1#i4jJP($Qzc;TE z(Fm;>JI#V#wDEAGKoJP((hd3WDJI>_QHoZ2O@U!-a6wyZ>Au4mwRFy2l;EIVPVD20 zLAe1jHC8w!(Yndfy1m&2ikrV=fSB;7ApjkOhXsl$2Q9Ke~1N zyVhk!*j=BM2#hz>ou8^rV1$w%QGPDJ!76U!`tu>ZpzA_Hl}5@tnrLCv(?q{h%ix@x zk)!)W3DUR3ECW_QX7~`SdWGdvb>2sDw-${}`+`I>*n~rcyxx&k6%DQ%w7#w@2lez~ z%8TTAlvy|%hBo>A%cCfb0Ddd)R?UC%mzermw0^I1$HwAb#@d1C!ThH4a*;s%@tQih z^*bN8o?E_KAgCp<61zcB??Er?fz!(i4|@(BAW?d!V@xglA6$k) zS_SAglCqtO`5L=SFe~@dA1Rw1na{F@g2~R2b3b73JGsqpjHGQ@oyzPVLH)5pR8Ka4 zh}Pax%Ud+hrckO)8X`EL98u$LQHh>8%s#nf@k?8Mh<{-EQtq(k30JrVcT4v&xXw_R z`FzA3?M=N3YEEz|y3(2AK^pvl+r->_O5t2i6)t!K9Zt>Zauh?pzI>OP9M2S} z;Y%TqHcy&awQOt$b@t7&1M3*J9lqn{_QC(`4<0u%8OUcj)1iSPQil{8iD+FB8b_sG zt0Jsoyobg{dyZm`nil*LQHdO)8|y`Hh-oaqg@5d}0^vTJ&#SbS?_ z62Ibsyecr9vMN&-5r36LdWhkL9G>z8$lK6eF>(KhNLw9|yKDYsR>V)85@|kS*Tytn zJzBtajK#%C<5g@nOxZ;^1?SLVEP%Ag->o@f;Ury?xoESnWtQnXlU-^gYYBIH_SVH4 zJs(m1=$d%Bz}A2TLUZcuw>ngjJa^Y+N8_BI6&;(k|E@~(!N;7wLqDf(?5 zO$m;w98*Wza3ZrZ@8}Pr?9-(|J%VKi0h!e<7W{17lXlaos1XZIaAMVGD}VDmww}ka z0hC-tX%tcc-;fZ??)=*2|J=vKhLM77C{tB=4kxn9&p7RLtIqF_@Z~afo%XFo@$SA@ zk3oS?r7Q_!2c9v$nzTUcc#E;+@72WVaFp{?%Gew|?gO8&=}T z5qkI~!nGd?JIKM#HM&NK4~J!8$v}*J5Ksk3&#$w_Z;FUpMpl|ISvP&K^0B*GH;Xhs zi61+Cm77V98Eso{O~7Qxw_E?HYU=j&HthK^C$Ud?-kBMJ)6}n=dP`#Ru#~CASuWvI z0Ih2hMkrC~H}`bAwSk6Kvui}Lk|$}JyQQAih8MM$dcb|}*9_|T1lI%(!k{klYnKfo zD@s590CvK)RN!cN2#;4+ zVN(CQhRwkYLYcJbz6jqg|FzgQ*+*Bsq7s&$7`QlP+fXN&A~w_fEsjY~XPlUMa{1M$>!?kH-ZyUt_ts@Ez$#RG zLJ}9lR1$p_5_WUCHKAluv7kiKWWwVeB0+1Xk{Cu7gY&fqCjesh>8XI*@=veo*^h%>U5^ur5rQ9*Bymhd58e8hGl)dK*1+6RHIx@XXcvdl6m3xQa5XMrq%r@ug~;L@DiA7vJN0l zl2d_}e1~L^4yJ)b2lXk^%@V(bRiix`nCGZ2S4(9?ahJ~WDqQ1pbSpaxZSGHnHJ72> z#sa3V32>G6alHa{bHJOI1@nCI2M zSR)j4e*rfT>j&Yl{u@zz({|qx^qC;0DScT!+Ypp~l|ygL04E5^ni{k<=e-Yl23Byf z>Jp^3uNbf2nBMr~`g}Ntq)0`E8*Wnw;Ov+PDRsd%(6CJAxc!0UwrJC? zGe!ibmZ$H*F)@HX?|m;U3>B7D^w}dvr&3;oh$E{J`Kh%0v`F(=J{O93637kEmidn& zv0iX@Q9FIvDx?xH)s3H(M+~|Rbx})Rw^5>K@NIW6)2R(X!zQ*>q`bcxmQD^~hr6$YcfBoj^IU9lV1chA8&gZ1r>d?4;AlBDw>8*Vu-^Y(de+KIe6!w-<( z0`d~>0+!2v;H4|HC|oKjI)T68laFi1y{7o{%z&fu@z#9WYJ#&@2K^=q=0GU%IY77Q zdP1Wn&XQ_6DGx;A;L$a5FV}7(g~jtT{HZxIvREbg*FJ|C;y2+hi;vlQA3H*Sp5OI2 z`#L*8+E}r{+!`s~&LllysREHHu67E)#V(c-!Hs&ZnPJ9pkoj640&eUOM<5! zA@R(gx&0@$O?E+l6Gy9xyrcF&&HVk?f=4^}E{{WT5E#3_Q;uYhhSo5y@XVc;9!AV{ zz6Wh`wXDRUg$MG`@8qL(#toPLECXB4?NyMgx#R(&nSI63h25<#9V#gmi*oQm(M<6K zlb7V_5bk<8n(tp~Ep-IuMK^@GNMcF~oS2U!E=Gaf3N%fx{>LQ7WuwLy{imK@UFAz% z#8q{wx7w&J)D&-Fi`jj?c_>QUVu$Adk3!e31+ddT7LYOjVj6Fz6MBZ?>Q&$Bv7Zqx zz*}OzHRiE6Em$9Lje+_p1|mYF_GQh>jP9=gd4Qrum)|BRD$NeNE;Wb*o;hDqmUUYH zsC^-5ses411k^-J6Ty>3c}Z2B1@+UGwo8HNNXii)w-hU&2iEI}aKLDgEEk{UPT0!OaAgh zTl^Tt8mmEr@Ti!lSQe1^a~-XqdCK!(?l0_Lb(V27_4R0>Ds8CGX}(iO zf*MLOdVe;pX=5^gq?35GxyMn_u?6X9^D;5ojuDxS?M!eSl zf2vMk=WSa`E-M-9KQ(^#kUvdYt(!g54X~g=Y;=!nkA~{elef0_>>Sev0$1hGR5?{hCS*V%FnKh&wgB|4gQ@sw&5&=!#)^9OMKpgkX6H#~)9=WIWeM+(h$;2(Y zf25^JDZ&PjrfOL@;MoHzQlHvfk_}~+SlGlET3|XZO<;^>AAQKZq)z*`_H&uI!MJF& zO)VmIpVrU`8Oj#^5wT_8f2$6db?#h8X`rL2#jO8;9(klE2(a`f_9Y@d>&Kuxf`$M8 z!J~24Dh>heaC=t3lavE?QxUn=AUw_DeOGu_BO7y&*wLqhVo8b_F%bWV*t_GXz>hS& zq0F`Xf}1e@)%U*agy0aG#joEIGj4;xvYfqFhDEVVPYkxL=evlLy?r1Dj=pEai(f}L zRFcAh7yW0c&IcFMb?&orpvTmk0m&tP*^wmDy}YO6u}6OC*Y(K}zRci6b=j4Yqq_k` z86i?nZUdx0rNdps2af;EPuDNXvsoz`#AZ6h0l_+2fwCCiT*>gZe_vR1 z)HIAAw9(|7)+n^yX4k3nh{98(pwtRCV*aNeQUX!O*OUL_rJOzv>`vv{mr6|ShUu*a&zpw@+6Qnxw;Rm6Pc0?FK&F8UmjbmaT`UOC^|&gHLO`$ z8RIYS0iKNiXEf`d0;eQ$Pq^|1a+nR;yosL4Y=yW#Srd?*c&1RB^9&Dbw%sAJ^~tlN zv0w}Ytj$+KpbM`8>Xe)UEbMXvSG#vp8^nq2-1&7u@kvN|Lgj#U`0d{1;|gFLKd2)8 z4>3?7c|VXH#hDK?LR8x7q9{8IOq}C3G$10`HG$o{o6`+PxWfI1dbB$Jq#1nc4yH{s z5yhrA%PrmvmrMS;saJ{qyYp|RGMWZ7g340{xtXL{kWazZ%X|)ekfYu>7!$Z*Tcf;n z>2%SkhdsufB~TQh09J z#gU>~Y5QfTjx`ENKA`9SFQ%0FR=1db8-*il51irZiZT%^t{hGq^Gycz-x$D+mN^$R zm|?5!mS1f8m@f8iM?YV%!M0u|>`q*qF#CSw(yl)~U4;(#Dzey~h9K|A=(?V{FeXU^Xhq9+YnX`+JH-wkt zL>W>S8w3MW7tZAGeqQW;M%Jt3FS)j_&Wf**H4~J4S$WHY-{a8lke5>V#@cIN8XmcW5u~%jAFU*;m#)*g; zTX#3V91**dEl^YvRh4?V$~Y&lOFP?f)3F5yuFDrpbF79qY)%qg^%G^f4_Y1vGC{Fh zH?T`_|F*~1bKN(xC#T&vA8bT>XYYw6>%6WeK(4lr??R`RWuUO>M0oZ3G{4|Q%mmH; z4KsA7J$p}RAe}L&i|cwYBXF_7zwOF>uB$uSQ9LTG+&v{#bS^i&n|kXvzhL=?VQ;-z z=xxci@1fL`uSq-E7R4cnNPy@{zxRj#ub~pxDm7xrsdux2pb6DXX0ZP}qw}`&f>H}v z;V+H8O&99&1@YUS&&@_QUDW??lik}Y^_!bV>?-xQHxK@cM+xpElqG)h4Jh@xeR4-l M37}Xe{~_rA0Anx%tN;K2 literal 0 HcmV?d00001 diff --git a/packages/typegpu-cli/templates/template-waku-bare/public/images/icons.svg b/packages/typegpu-cli/templates/template-waku-bare/public/images/icons.svg new file mode 100644 index 0000000000..36acdb9f18 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/public/images/icons.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-dark.svg b/packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-dark.svg new file mode 100644 index 0000000000..65c9a02c31 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-dark.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-light.svg b/packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-light.svg new file mode 100644 index 0000000000..a1b63335fc --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/public/images/typegpu-logo-light.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/typegpu-cli/templates/template-waku-bare/public/images/waku.png b/packages/typegpu-cli/templates/template-waku-bare/public/images/waku.png new file mode 100644 index 0000000000000000000000000000000000000000..cd90d79081c0c40519bb3c583f5b43357b3fcd3b GIT binary patch literal 5713 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 DW2Q3= literal 0 HcmV?d00001 diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/components/NoSSR.tsx b/packages/typegpu-cli/templates/template-waku-bare/src/components/NoSSR.tsx new file mode 100644 index 0000000000..b24c9b3216 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/components/NoSSR.tsx @@ -0,0 +1,9 @@ +'use client'; + +import { type ReactNode, useEffect, useState } from 'react'; + +export function NoSSR({ children }: { children: ReactNode }) { + const [mounted, setMounted] = useState(false); + useEffect(() => setMounted(true), []); + return mounted ? children : null; +} diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/components/Shader.tsx b/packages/typegpu-cli/templates/template-waku-bare/src/components/Shader.tsx new file mode 100644 index 0000000000..73a0d93273 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/components/Shader.tsx @@ -0,0 +1,35 @@ +'use client'; + +import React, { useMemo } from 'react'; +import { useConfigureContext, useFrame, useRoot } from '@typegpu/react'; +import { common, d } from 'typegpu'; + +export function Shader({ 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 ; +} + +export const getConfig = async () => { + return { + render: 'dynamic', + } as const; +}; diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/global.d.ts b/packages/typegpu-cli/templates/template-waku-bare/src/global.d.ts new file mode 100644 index 0000000000..35306c6fc9 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/global.d.ts @@ -0,0 +1 @@ +declare module '*.css'; diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts b/packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts new file mode 100644 index 0000000000..712015d7e7 --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts @@ -0,0 +1,21 @@ +// deno-fmt-ignore-file +// biome-ignore format: generated types do not need formatting +// prettier-ignore +import type { PathsForPages, GetConfigResponse } from 'waku/router'; + +// prettier-ignore +import type { getConfig as File_Index_getConfig } from './pages/index'; + +// prettier-ignore +type Page = +| ({ path: '/' } & GetConfigResponse); + +// prettier-ignore +declare module 'waku/router' { + interface RouteConfig { + paths: PathsForPages; + } + interface CreatePagesConfig { + pages: Page; + } +} diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/pages/_layout.tsx b/packages/typegpu-cli/templates/template-waku-bare/src/pages/_layout.tsx new file mode 100644 index 0000000000..a4af24de3e --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/pages/_layout.tsx @@ -0,0 +1,23 @@ +// oxlint-disable-next-line no-unassigned-import +import '../styles.css'; + +import React, { type ReactNode } from 'react'; + +type RootLayoutProps = { children: ReactNode }; + +export default function RootLayout({ children }: RootLayoutProps) { + return ( +
+ typegpu-waku-bare-project + + +
{children}
+
+ ); +} + +export const getConfig = async () => { + return { + render: 'static', + } as const; +}; diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/pages/index.tsx b/packages/typegpu-cli/templates/template-waku-bare/src/pages/index.tsx new file mode 100644 index 0000000000..efabc39dbb --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/pages/index.tsx @@ -0,0 +1,131 @@ +import React from 'react'; + +import { NoSSR } from '../components/NoSSR.tsx'; +import { Shader } from '../components/Shader.tsx'; + +export default function HomePage() { + return ( +
+
+ + + +
+ +
+ +
+ {/* TypeGPU */} +
+ + + TypeGPU + + +

Type-safe WebGPU

+ + +
+ + {/* Waku */} +
+

+ + + + Waku +

+ +

The minimal React framework

+ + +
+
+ +
+ +
+
+ ); +} + +export const getConfig = async () => { + return { + render: 'static', + } as const; +}; diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/styles.css b/packages/typegpu-cli/templates/template-waku-bare/src/styles.css new file mode 100644 index 0000000000..f232fefb0e --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/src/styles.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-waku-bare/tsconfig.json b/packages/typegpu-cli/templates/template-waku-bare/tsconfig.json new file mode 100644 index 0000000000..2d5c9bcf7f --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "types": ["@webgpu/types"], + "module": "ESNext", + "esModuleInterop": true, + "skipLibCheck": true, + "jsx": "react-jsx", + + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + "strict": true, + "noImplicitReturns": true, + "exactOptionalPropertyTypes": true, + "erasableSyntaxOnly": true + }, + "include": ["src"] +} diff --git a/packages/typegpu-cli/templates/template-waku-bare/waku.config.ts b/packages/typegpu-cli/templates/template-waku-bare/waku.config.ts new file mode 100644 index 0000000000..f1e04a922a --- /dev/null +++ b/packages/typegpu-cli/templates/template-waku-bare/waku.config.ts @@ -0,0 +1,10 @@ +import tailwindcss from '@tailwindcss/vite'; +import typegpu from 'unplugin-typegpu/vite'; +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'waku/config'; + +export default defineConfig({ + vite: { + plugins: [tailwindcss(), react(), typegpu()], + }, +}); From 62329f9dd8883616502dd9568ea4a56881d81250 Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Thu, 11 Jun 2026 18:20:35 +0200 Subject: [PATCH 2/3] agents gitignore --- packages/typegpu-cli/templates/template-waku-bare/_gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/typegpu-cli/templates/template-waku-bare/_gitignore b/packages/typegpu-cli/templates/template-waku-bare/_gitignore index ad583432dd..b78e62105a 100644 --- a/packages/typegpu-cli/templates/template-waku-bare/_gitignore +++ b/packages/typegpu-cli/templates/template-waku-bare/_gitignore @@ -5,3 +5,4 @@ dist .cache .DS_Store *.pem +.agents From 0828b25416138e521a5e32585dce84ed808f0f6b Mon Sep 17 00:00:00 2001 From: Szymon Szulc Date: Fri, 12 Jun 2026 13:31:02 +0200 Subject: [PATCH 3/3] delete autogenerated file --- .../template-waku-bare/src/pages.gen.ts | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts diff --git a/packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts b/packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts deleted file mode 100644 index 712015d7e7..0000000000 --- a/packages/typegpu-cli/templates/template-waku-bare/src/pages.gen.ts +++ /dev/null @@ -1,21 +0,0 @@ -// deno-fmt-ignore-file -// biome-ignore format: generated types do not need formatting -// prettier-ignore -import type { PathsForPages, GetConfigResponse } from 'waku/router'; - -// prettier-ignore -import type { getConfig as File_Index_getConfig } from './pages/index'; - -// prettier-ignore -type Page = -| ({ path: '/' } & GetConfigResponse); - -// prettier-ignore -declare module 'waku/router' { - interface RouteConfig { - paths: PathsForPages; - } - interface CreatePagesConfig { - pages: Page; - } -}