1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8224],{7411:(e,s,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/newsletter/023",function(){return n(120)}])},120:(e,s,n)=>{"use strict";n.r(s),n.d(s,{default:()=>g,useTOC:()=>p});var r=n(5893),t=n(7812),i=n(1304),h=n(8925),l=n(8445);n(3173);var o=n(7654),a=n(6454),c=n(7024);n(835);var d=n(4156),x=n(379),j=n(3685);function p(e){return[{value:"\uD83D\uDD25 Headlines",id:"-headlines",depth:2},{value:"âï¸ Sponsor",id:"ï¸-sponsor",depth:2},{value:"\uD83C\uDFCE Engines",id:"-engines",depth:2},{value:"\uD83D\uDEE0 Tools",id:"-tools",depth:2},{value:"\uD83C\uDFAC Videos",id:"-videos",depth:2},{value:"âï¸ Articles",id:"ï¸-articles",depth:2},{value:"\uD83C\uDFAE Games",id:"-games",depth:2},{value:"⨠Demos",id:"-demos",depth:2}]}let g=(0,t.c)(function(e){let{toc:s=p(e)}=e,n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,h.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{children:"Newsletter â Issue 023"}),"\n",(0,r.jsx)(c.V,{value:"2024-09-25"}),"\n",(0,r.jsx)(a.Gw,{}),"\n",(0,r.jsx)(a.TK,{}),"\n",(0,r.jsx)(n.h2,{id:s[0].id,children:s[0].value}),"\n",(0,r.jsxs)(n.p,{children:["\uD83E\uDD8B We now have a Web Game Dev ",(0,r.jsx)(n.a,{href:"https://go.bsky.app/RXBQnMR",children:(0,r.jsx)(n.strong,{children:"Bluesky Starter Pack"})})," that you can use to easily sign up and follow 100+ folks from the JavaScript game dev and front-end ecosystems. There is also a ",(0,r.jsx)(n.a,{href:"https://bsky.app/profile/verekia.com/lists/3l4dlvh6her2w",children:(0,r.jsx)(n.strong,{children:"list"})})," that you can follow."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(o.eR,{})," Subscribe to the new ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/@webgamedev",children:(0,r.jsx)(n.strong,{children:"YouTube channel"})})," where we\npost ",(0,r.jsx)(n.a,{href:"https://bsky.app/profile/trezy.codes",children:"Trezy"}),"âs ",(0,r.jsx)(n.a,{href:"https://discord.gg/qBvAnA5aUS?event=1283872087345463296",children:(0,r.jsx)(n.strong,{children:"Games Showcase\nmeetups"})}),"!"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(o.DO,{})," WebXR is now enabled by default on Apple Vision Pro. Watch the ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=C3XDHjam-eI",children:(0,r.jsx)(n.strong,{children:"Build immersive web\nexperiences with WebXR"})})," WWDC24 presentation by ",(0,r.jsx)(n.a,{href:"https://x.com/AdaRoseCannon",children:"Ada\nRose Cannon"})," and read the ",(0,r.jsx)(n.a,{href:"https://webkit.org/blog/15865/webkit-features-in-safari-18-0/",children:(0,r.jsx)(n.strong,{children:"WebKit 18.0 release\nnotes"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(o.JB,{})," ",(0,r.jsx)(n.a,{href:"https://kaboomjs.com/",children:(0,r.jsx)(n.strong,{children:"Kaboom.js"})})," is no longer maintained, but there is now a\ncommunity fork called ",(0,r.jsx)(o.RD,{})," ",(0,r.jsx)(n.a,{href:"https://kaplayjs.com/",children:(0,r.jsx)(n.strong,{children:"Kaplay"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(o.j9,{})," ",(0,r.jsx)(n.a,{href:"https://unity.com/blog/unite-2024-keynote-wrap-up",children:(0,r.jsx)(n.strong,{children:"Unity 6 is coming"})})," with a new\nfocus on the web and WebGPU, as announced at the ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/live/MbRpch5x4dM?si=Bi8weT5RnV4giU0z&t=5170",children:(0,r.jsx)(n.strong,{children:"Unite 2024\nKeynote"})}),". They announced the\n",(0,r.jsx)(n.a,{href:"https://gamejamplus.com/crazywebgamejam2024/",children:(0,r.jsx)(n.strong,{children:"Crazy Web Game Jam 2024"})})," with\n",(0,r.jsx)(n.a,{href:"https://crazygames.com/",children:"CrazyGames"})," (Unity-only), and canceled the ",(0,r.jsx)(n.a,{href:"https://unity.com/blog/unity-is-canceling-the-runtime-fee",children:(0,r.jsx)(n.strong,{children:"Runtime\nFee"})}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["\uD83C\uDF10 The ",(0,r.jsx)(n.a,{href:"https://playonray.com/",children:(0,r.jsx)(n.strong,{children:"Ray Browser"})})," (",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=teLpRH6mYBA",children:"video"}),") is a new browser focused on gaming, with support for split-screen (with a game on one side and Discord on the other, for example). It has features for ",(0,r.jsx)(n.a,{href:"https://playonray.com/developers",children:"developers"})," such as its WebGL2 inspector."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(o.Xn,{})," The ",(0,r.jsx)(n.a,{href:"https://2023.stateofjs.com/en-US",children:(0,r.jsx)(n.strong,{children:"State of JavaScript 2023"})})," survey\nresults are out."]}),"\n",(0,r.jsx)(n.h2,{id:s[1].id,children:s[1].value}),"\n",(0,r.jsx)("div",{className:"flex flex-col gap-5 mt-5",children:(0,r.jsxs)("div",{className:"flex flex-col gap-5 lg:flex-row items-center",children:[(0,r.jsx)("div",{className:"mx-auto w-full max-w-[140px] h-full max-h-[140px] flex items-center justify-center",children:(0,r.jsx)("a",{href:"https://poki.com/?utm_source=webgamedev&utm_c
1ontent=newsletter",target:"_blank",rel:"noopener",children:(0,r.jsx)(d.wG,{className:"w-full max-w-130"})})}),(0,r.jsxs)("div",{children:[(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://poki.com/?utm_source=webgamedev&utm_content=newsletter",children:(0,r.jsx)(n.strong,{children:"Poki"})})," is on a mission to\ncreate the ultimate online playground â where players and developers come together to play and\ncreate! Together with a growing 400+ game developer community and 90 million players each\nmonth, weâre creating a new standard for web games. Interested in working together? ",(0,r.jsx)(n.a,{href:"https://developers.poki.com?utm_source=webgamedev&utm_content=newsletter",children:(0,r.jsx)(n.strong,{children:"Share\nyour game with\nus"})}),"!"]}),(0,r.jsxs)(n.p,{children:["Poki, the market leader on Web, is proud to sponsor Web Game Dev! In the coming month, we will give the community access to our new Playtesting feature - which provides unlimited and free playtesting of your game with our audience! Keep an eye out for more in the ",(0,r.jsx)(n.a,{href:"https://www.webgamedev.com/discord",children:"Web Game Dev Discord"})," at the beginning of October! ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=SQl6xDVs_Bs",children:"Learn more about Poki in this presentation"}),"."]})]})]})}),"\n",(0,r.jsx)(n.h2,{id:s[2].id,children:s[2].value}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://x.com/threejs/status/1829424284696973740",children:(0,r.jsx)(n.strong,{children:"Three.js r168"})}),"\n(",(0,r.jsx)(n.a,{href:"https://github.com/mrdoob/three.js/releases/tag/r168",children:"changelog"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/mrdoob/three.js/wiki/Migration-Guide",children:"migration\nguide"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/drei-vanilla/releases",children:(0,r.jsx)(n.strong,{children:"Drei Vanilla 1.19.0"})})," â Expose\n",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/drei-vanilla#caustics",children:"Caustics"})," materials, add\n",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/drei-vanilla#meshwobblematerial",children:"MeshWobbleMaterial"})," and\n",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/drei-vanilla#meshdistortmaterial",children:"MeshDistortMaterial"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/brunosimon/three.js-tsl-sandbox",children:(0,r.jsx)(n.strong,{children:"Three.js Shading Language\nSandbox"})})," â TSL examples by ",(0,r.jsx)(n.a,{href:"https://x.com/bruno_simon",children:"Bruno\nSimon"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/react-three-fiber/releases",children:(0,r.jsx)(n.strong,{children:"R3F v8.17.0"})})," â Adds\n",(0,r.jsx)(n.code,{children:"flushSync"}),", which forces React to flush any updates synchronously and immediately."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/drei/releases",children:(0,r.jsx)(n.strong,{children:"Drei v9.113.0"})})," â ",(0,r.jsx)(n.a,{href:"https://drei.docs.pmnd.rs/performances/instances#typed-instances",children:"InstancedAttribute and\ncreateInstances"}),", support any\ncolor representation in\n",(0,r.jsx)(n.a,{href:"https://drei.docs.pmnd.rs/abstractions/gradient-texture",children:"GradientTexture"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://pmndrs.github.io/xr/docs/getting-started/introduction",children:(0,r.jsx)(n.strong,{children:"@react-three/xr"})}),"\n(",(0,r.jsx)(n.a,{href:"https://x.com/BelaBohlender/status/1813243004695597455",children:"video"}),") went through a ",(0,r.jsx)(n.a,{href:"https://pmnd.rs/blog/reintroducing-react-three-xr",children:"major\noverhaul"}),", thanks to ",(0,r.jsx)(n.a,{href:"https://x.com/BelaBohlender",children:"Bela\nBohlender"})," (who also made ",(0,r.jsx)(n.a,{href:"https://github.com/pmndrs/uikit",children:"uikit"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.iB,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/Tresjs/tres/releases",children:(0,r.jsx)(n.strong,{children:"TresJS 4.2.0"})})," â Adds ",(0,r.jsx)(n.code,{children:"dpr"})," prop to\n",(0,r.jsx)(n.code,{children:"TresCanvas"}),", and ",(0,r.jsx)(n.code,{children:"userData"})," to inspectable devtool properties."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.iB,{})," ",(0,r.jsx)(n.a,{href:"https://tresjs.org/blog/tresjs-cientos-v4/",children:(0,r.jsx)(n.strong,{children:"Cientos v4"})})," â\n",(0,r.jsx)(n.a,{href:"https://cientos.tresjs.org/guide/abstractions/animated-sprite.html",children:"AnimatedSprite"}),", breaking\nchanges and refactors."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.lS,{})," ",(0,r.jsx)(n.a,{href:"https://blog.playcanvas.com/playcanvas-engine-hits-2-0-0/",children:(0,r.jsx)(n.strong,{children:"PlayCanvas Engine\n2.0.0"})})," â A release that drops WebGL1\nsupport among ",(0,r.jsx)(n.a,{href:"https://github.com/playcanvas/engine/releases/tag/v2.0.0",children:"other breaking changes"}),"\nand API cleanups, and adds new custom shader and hardware instancing APIs."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.rM,{})," ",(0,r.jsx)(n.a,{href:"https://phaser.io/news/2024/09/phaser-v385-is-released",children:(0,r.jsx)(n.strong,{children:"Phaser v3.85"})}),", ",(0,r.jsx)(n.a,{href:"https://phaser.io/news/2024/09/phaser-editor-v44-released",children:"Phaser\nEditor 4.4"}),", and ",(0,r.jsx)(n.a,{href:"https://phaser.io/news/2024/09/phaser-beam-technical-preview-4",children:"Phaser Beam Technical\nPreview 4"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.mY,{})," ",(0,r.jsx)(n.a,{href:"https://wonderlandengine.com/news/release-1.2.3/",children:(0,r.jsx)(n.strong,{children:"Wonderland Engine 1.2.3"})}),"\nâ Editor Scope plugins, configure shortcuts, and Streaming Fetches."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.BE,{})," ",(0,r.jsx)(n.a,{href:"https://www.construct.net/en",children:(0,r.jsx)(n.strong,{children:"Construct"})}
1),"\n",(0,r.jsx)(n.a,{href:"https://www.construct.net/en/make-games/releases/stable/r407",children:(0,r.jsx)(n.strong,{children:"r407"})})," â Instance Bar, instance\ntags & signals, flowcharts improvements"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Up,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/pixijs/pixijs/releases/tag/v8.4.0",children:(0,r.jsx)(n.strong,{children:"PixiJS 8.4.0"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Ru,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/BabylonJS/Babylon.js/releases",children:(0,r.jsx)(n.strong,{children:"Babylon.js 7.26.2"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.YX,{})," ",(0,r.jsx)(n.a,{href:"https://needle.tools/",children:(0,r.jsx)(n.strong,{children:"Needle"})}),"\n",(0,r.jsx)(n.a,{href:"https://github.com/needle-tools/needle-engine-support/releases",children:(0,r.jsx)(n.strong,{children:"3.48.0"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Li,{})," ",(0,r.jsx)(n.a,{href:"https://excaliburjs.com/",children:(0,r.jsx)(n.strong,{children:"Excalibur.js"})})," has a new\n",(0,r.jsx)(n.a,{href:"https://news.excaliburjs.com/",children:"newsletter"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.QI,{})," ",(0,r.jsx)(n.a,{href:"https://www.orillusion.com/en/",children:(0,r.jsx)(n.strong,{children:"Orillusion"})}),"\n",(0,r.jsx)(n.a,{href:"https://x.com/Orillusion_Intl/status/1815324052052959463",children:(0,r.jsx)(n.strong,{children:"v0.8"})})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.w1,{})," ",(0,r.jsx)(n.a,{href:"https://godotengine.org/article/progress-report-web-export-in-4-3/",children:(0,r.jsx)(n.strong,{children:"Web Export in Godot\n4.3"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/scottmada",children:"Adam\nScott"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://gamemaker.io/",children:(0,r.jsx)(n.strong,{children:"GameMaker"})})," (Lua) has a ",(0,r.jsx)(n.a,{href:"https://gamemaker.io/en/blog/gmrt-open-beta",children:"new engine"})," with experimental ",(0,r.jsx)(o.Mj,{})," WebGPU support."]}
1),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://flutter.dev/",children:(0,r.jsx)(n.strong,{children:"Flutter"})})," can be used to ",(0,r.jsx)(n.a,{href:"https://flutter.dev/games",children:(0,r.jsx)(n.strong,{children:"make games"})}),", now with WebAssembly support. Watch the ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=lpnKWK-KEYs",children:"Google I/O presentation"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:s[3].id,children:s[3].value}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://x.com/N8Programs/status/1832234252374523934",children:(0,r.jsx)(n.strong,{children:"N8AO 1.9"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/N8Programs",children:"N8"})," â 10-20% perf boost, more config options, quantize AO tones for\nbevel and toon effects."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/agargaro/instanced-mesh",children:(0,r.jsx)(n.strong,{children:"Three.ez InstancedMesh2"})})," â\nSimplified and enhanced ",(0,r.jsx)(n.a,{href:"https://threejs.org/docs/#api/en/objects/InstancedMesh",children:"InstancedMesh"}),"\nwith frustum culling, fast raycasting (using BVH), sorting, visibility management and more, by\n",(0,r.jsx)(n.a,{href:"https://x.com/agargaro_dev",children:"Andrea Gargaro"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://x.com/Cody_J_Bennett/status/1818025947565584873",children:(0,r.jsx)(n.strong,{children:"InstancedBatchedSkinnedMesh"})}),"\nwith GPU mixer by ",(0,r.jsx)(n.a,{href:"https://x.com/Cody_J_Bennett",children:"Cody Bennett"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://v0.dev/",children:(0,r.jsx)(n.strong,{children:"v0"})}),", Vercelâs AI code-generation tool, now ",(0,r.jsx)(n.a,{href:"https://x.com/v0/status/1829224860158992721",children:"supports React Three\nFiber"})," and its ecosystem."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/nhtoby311/WaterSurface",children:(0,r.jsx)(n.strong,{children:"Interactive Water Surface"})}),"\n(",(0,r.jsx)(n.a,{href:"https://water-surface.vercel.app/",children:"demo"}),") by ",(0,r.jsx)(n.a,{href:"https://x.com/nhtoby311",children:"Toby"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://x.com/AndrewChenE/status/1805441764930515287",children:(0,r.jsx)(n.strong,{children:"Ecctrl FixedCamera mode"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/AndrewChenE",children:"Andrew Chen"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Xn,{})," ",(0,r.jsx)(n.a,{href:"https://amagi.dev/vfx-js/",children:(0,r.jsx)(n.strong,{children:"VFX-JS"})})," and\n",(0,r.jsx)(o.VK,{})," ",(0,r.jsx)(n.a,{href:"https://amagi.dev/react-vfx/",children:(0,r.jsx)(n.strong,{children:"React-VFX"})})," â WebGL-powered visual effects by ",(0,r.jsx)(n.a,{href:"https://x.com/amagitakayosi",children:"AMAGI"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Mj,{})," ",(0,r.jsx)(n.a,{href:"https://docs.swmansion.com/TypeGPU/",children:(0,r.jsx)(n.strong,{children:"TypeGPU"})})," â A type-safe toolkit for\nWebGPU. by ",(0,r.jsx)(n.a,{href:"https://x.com/iwoplaza",children:"Iwo Plaza"})," from ",(0,r.jsx)(n.a,{href:"https://x.com/swmansion",children:"Software Mansion"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDFBE ",(0,r.jsx)(n.a,{href:"https://github.com/jrouwe/JoltPhysics/releases/tag/v5.1.0",children:(0,r.jsx)(n.strong,{children:"Jolt Physics 5.1.0"})})," â Improvements to soft bodies, characters and vehicles, by ",(0,r.jsx)(n.a,{href:"https://x.com/jrouwe",children:"Jorrit Rouwe"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDFB5 ",(0,r.jsx)(n.a,{href:"https://github.com/vuoro/pelimanni/",children:(0,r.jsx)(n.strong,{children:"Pelimanni"})})," â Web Audio classical instruments and utilities for making dynamically looping music by ",(0,r.jsx)(n.a,{href:"https://bsky.app/profile/jonikorpi.com",children:"Joni Korpi"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.II,{}
1)," ",(0,r.jsx)(n.a,{href:"https://github.com/colyseus/colyseus/releases",children:(0,r.jsx)(n.strong,{children:"Colyseus 0.16.0-preview"})})," by\n",(0,r.jsx)(n.a,{href:"https://www.linkedin.com/in/endel/",children:"Endel"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:s[4].id,children:s[4].value}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.bl,{})," ",(0,r.jsx)(o.Mj,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=Omx-alEc1yk",children:(0,r.jsx)(n.strong,{children:"Advancements in WebGL and\nWebGPU"})})," (August) at SIGGRAPH by ",(0,r.jsx)(n.a,{href:"https://www.khronos.org/",children:"Khronos\nGroup"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.bl,{})," ",(0,r.jsx)(o.Mj,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=Omx-alEc1yk",children:(0,r.jsx)(n.strong,{children:"WebGL + WebGPU Meetup - July\n2024"})})," by ",(0,r.jsx)(n.a,{href:"https://www.khronos.org/",children:"Khronos Group"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Mj,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=47bgA5TQwmc",children:(0,r.jsx)(n.strong,{children:"WebGPU Compute Shaders Crash\nCourse"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/visionary_3_d",children:"Visionary 3D\n"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.bl,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=XjUsTXurF2g",children:(0,r.jsx)(n.strong,{children:"WebGL and basic graphics\nprogramming"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/yFloppyDrive",children:"yellowFloppyDrive"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=UMqNHi1GDAE",children:(0,r.jsx)(n.strong,{children:"Learn Three.js by Building 5\nProjects"})})," by ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/@robotbobby9",children:"Robot\nBobby"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=OErgZhwSLX0",children:(0,r.jsx)(n.strong,{children:"Three.js Game Dev: Wormhole\nBlaster"})})," by ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/@robotbobby9",children:"Robot\nBobby"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=7we9mqIOKyw",children:(0,r.jsx)(n.strong,{children:"Embracing WebGPU and WebXR With\nThree.js"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/mrdoob",children:"mrdoob"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/playlist?list=PLtzt35QOXmkKkZL63E3IXDxqvP13MHyTE",children:(0,r.jsx)(n.strong,{children:"Building an RPG with Three.js\nseries"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/dangreenheck",children:"Dan\nGreenheck"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://gitnation.com/contents/from-websites-to-games-the-future-of-react-three-fiber",children:(0,r.jsx)(n.strong,{children:"The Future of React Three\nFiber"})})," by\n",(0,r.jsx)(n.a,{href:"https://github.com/krispya",children:"Kris Baumgartner"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=gIIV-FzdW00&list=PLpepLKamtPji3pqcAKh5Fr--d4oJXTNvA",children:(0,r.jsx)(n.strong,{children:"Make a 3D Avatar Builder\nseries"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/wawasensei",children:"Wawa Sensei"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=yjpGVIe_Gy8",children:(0,r.jsx)(n.strong,{children:"Third Person Controller"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/wawasensei",children:"Wawa\nSensei"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=ljL7NKCi-kg",children:(0,r.jsx)(n.strong,{children:"Wiggle Bones Threejs Library"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/wawasensei",children:"Wawa Sensei"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.zi,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=OIorPLKWCv4",children:(0,r.jsx)(n.strong,{children:"Three.js Third Person Controller with Rogue\nEngine"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/BeardScript",children:"P. Martin\nOrtiz"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.mY,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=fSe3Kv5NlWQ",children:(0,r.jsx)(n.strong,{children:"Wonderland Engine in 100\nSeconds"})})," (not actually Fireship) by ",(0,r.jsx)(n.a,{href:"https://x.com/WebXREngine",children:"Wonderland\nEngine"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.rM,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=jHTRu4iNTcA",children:(0,r.jsx)(n.strong,{children:"Phaser Game Engine 2024\nExplained"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/phaser_",children:"Phaser"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Li,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=-pvSQkigIYA",children:(0,r.jsx)(n.strong,{children:"Building Excalibur.js"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/ErikOnarheim",children:"Erik Onarheim"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.RD,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=FdEYxGoy5_c",children:(0,r.jsx)(n.strong,{children:"Kaplay Library Crash Course"})})," by\n",(0,r.jsx)(n.a,{href:"https://jslegenddev.substack.com/",children:"JS Legend"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.j9,{})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=6L3Z3JI1HvE",children:(0,r.jsx)(n.strong,{children:"I made a full game in 400 hours
1- This is\nhow!"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/Imphenzia",children:"Imphenzia"})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF93 ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=TrHHTQqmAaM",children:(0,r.jsx)(n.strong,{children:"ExileCon 2023 - Rendering Path of Exile 2"})})," by ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/@Alexander_Sannikov",children:"Alexander Sannikov"})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF93 ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=_N--2xOXEN0",children:(0,r.jsx)(n.strong,{children:"The Most Valuable File Format Youâve Never Heard Of"})})," (",(0,r.jsx)(n.a,{href:"https://openusd.org/",children:"OpenUSD"}),") by ",(0,r.jsx)(n.a,{href:"https://x.com/Acerola_t",children:"Acerola"})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF93 ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=qlfh_rv6khY",children:(0,r.jsx)(n.strong,{children:"A simple procedural animation technique"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/argonautcode",children:"argonaut"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(d.RO,{className:"size-5 inline-block"})," ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=SQl6xDVs_Bs",children:(0,r.jsx)(n.strong,{children:"Hereâs how to release a game on Poki"})}),"\nby ",(0,r.jsx)(n.a,{href:"https://x.com/Denis_Poki",children:"Denis McKeown"})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF0E ",(0,r.jsx)(n.a,{href:"https://www.youtube.com/watch?v=5GNChywzr6g",children:(0,r.jsx)(n.strong,{children:"Presentation of CrazyGames at Gamescom"})})," by Rafael from ",(0,r.jsx)(n.a,{href:"https://x.com/CrazyGamesCom",children:"CrazyGames"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:s[5].id,children:s[5].value}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Mj,{})," ",(0,r.jsx)(n.a,{href:"https://developer.chrome.com/blog/new-in-webgpu-129",children:(0,r.jsx)(n.strong,{children:"Whatâs New in WebGPU â Chrome\n129"})}),",\n",(0,r.jsx)(n.a,{href:"https://developer.chrome.com/blog/new-in-webgpu-128",children:(0,r.jsx)(n.strong,{children:"128"})}),",\n",(0,r.jsx)(n.a,{href:"https://developer.chrome.com/blog/new-in-webgpu-127",children:(0,r.jsx)(n.strong,{children:"127"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/quicksave2k",children:"Fran\xe7ois\nBeaufort"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Mj,{})," ",(0,r.jsx)(n.a,{href:"https://shi-yan.github.io/webgpuunleashed/",children:(0,r.jsx)(n.strong,{children:"WebGPU Unleashed: A Practical\nTutorial"})})," by ",(0,r.jsx)(n.a,{href:"https://github.com/shi-yan",children:"Shi Yan"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://medium.com/@christianhelgeson/three-js-webgpurenderer-part-1-fragment-vertex-shaders-1070063447f0",children:(0,r.jsx)(n.strong,{children:"Three.JS WebGPURenderer Part 1: Fragment/Vertex\nShaders"})}),"\nby Christian Helgeson"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://www.anumberfromtheghost.com/blog/dynamic-fog",children:(0,r.jsx)(n.strong,{children:"I like big fog and I cannot\nlie"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/jittercub",children:"A Number From the\nGhost"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://www.anumberfromtheghost.com/blog/tilt-shift",children:(0,r.jsx)(n.strong,{children:"Tilt Shift, Blend Modes, and the\nNecronomicon"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/jittercub",children:"A Number From the\nGhost"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://blog.maximeheckel.com/posts/the-art-of-dithering-and-retro-shading-web/",children:(0,r.jsx)(n.strong,{children:"The Art of Dithering and Retro Shading for the\nWeb"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/MaximeHeckel",children:"Maxime\nHeckel"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://tympanus.net/codrops/2024/09/03/how-to-create-a-ps1-ins
1pired-jitter-shader-with-react-three-fiber/",children:(0,r.jsx)(n.strong,{children:"PS1-Inspired Jitter\nShader"})}),"\nby ",(0,r.jsx)(n.a,{href:"https://x.com/otfnk",children:"Oguzhan Tufenk"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://aaronclaes.be/blogs/react-three-fiber/loading-assets",children:(0,r.jsx)(n.strong,{children:"Loading assets in React Three Fiber - Zero to\nHero"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/aaronclaes",children:"Aaron\nClaes"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Xn,{})," ",(0,r.jsx)(n.a,{href:"https://dgerrells.com/blog/how-fast-is-javascript-simulating-20-000-000-particles",children:(0,r.jsx)(n.strong,{children:"Simulating 20,000,000 particles in\nJavaScript"})}),"\nby ",(0,r.jsx)(n.a,{href:"https://dgerrells.com/",children:"David Gerrells"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.mA,{})," ",(0,r.jsx)(n.a,{href:"https://www.khronos.org/gltf/pbr",children:(0,r.jsx)(n.strong,{children:"Physically Based Rendering in glTF"})})," guide by\n",(0,r.jsx)(n.a,{href:"https://www.khronos.org/",children:"Khronos Group"})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCDA ",(0,r.jsx)(n.a,{href:"https://stevenyau.co.uk/game-maker-toolkit/",children:(0,r.jsx)(n.strong,{children:"Game Maker Toolkit Notebook"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/yaustar",children:"Steven Yau"})]}
1),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(j.D7,{className:"size-5 inline-flex align-middle relative -top-[2px]"})," ",(0,r.jsx)(n.a,{href:"https://playroom.substack.com/p/discord-activity-playbook",children:(0,r.jsx)(n.strong,{children:"Discord Activity\nPlaybook"})})," by the creators of ",(0,r.jsx)(n.a,{href:"https://deathbyai.gg/",children:"Death by\nAI"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.rM,{})," ",(0,r.jsx)(n.a,{href:"https://phaser.io/tutorials/bring-your-phaser-game-to-ios-and-android-with-capacitor",children:(0,r.jsx)(n.strong,{children:"Bring your Phaser game to iOS and Android with\nCapacitor"})}),"\nby ",(0,r.jsx)(n.a,{href:"https://x.com/phaser_",children:"Phaser"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Li,{})," ",(0,r.jsx)(n.a,{href:"https://excaliburjs.com/blog/Autotiling%20Technique",children:(0,r.jsx)(n.strong,{children:"Autotiling Technique"})}),"\nby ",(0,r.jsx)(n.a,{href:"https://x.com/jyoung424242",children:"Justin Young"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Li,{})," ",(0,r.jsx)(n.a,{href:"https://excaliburjs.com/blog/Cellular%20Automata",children:(0,r.jsx)(n.strong,{children:"Cellular Automata"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/jyoung424242",children:"Justin Young"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.Li,{})," ",(0,r.jsx)(n.a,{href:"https://mattjennin.gs/blog/systemless-components-with-excalibur-js",children:(0,r.jsx)(n.strong,{children:"Systemless Components with\nExcalibur.js"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/mattjennings44",children:"Matt\nJennings"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.RD,{})," ",(0,r.jsx)(n.a,{href:"https://rohankumarthakur.co.in/blog/build-a-html5-game",children:(0,r.jsx)(n.strong,{children:"Building an HTML5 game with\nKaplayJS"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/tweets_thakur",children:"Rohan\nThakur"})]}),"\n",(0,r.jsxs)(n.li,{children:["â¡ï¸ ",(0,r.jsx)(n.a,{href:"https://x.com/reduzio/status/1809541577175429447",children:(0,r.jsx)(n.strong,{children:"List of spatial indexing algorithms"})})," with pros and cons by ",(0,r.jsx)(n.a,{href:"https://x.com/reduzio",children:"Juan Linietsky"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://x.com/cokeandcode",children:"Kevin Glass"})," from the ",(0,r.jsx)(n.a,{href:"https://www.rune.ai/",children:"Rune"})," platform has been putting out a ton of great articles on ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/",children:(0,r.jsx)(n.strong,{children:"Runeâs blog"})}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCE1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/building-a-scalable-multiplayer-game-architecture",children:(0,r.jsx)(n.strong,{children:"Building a scalable multiplayer game architecture"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCE1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/making-js-deterministic-for-fun-and-glory/",children:(0,r.jsx)(n.strong,{children:"Making JS deterministic for fun and glory"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCE1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/gotchas-in-multiplayer-game-design",children:(0,r.jsx)(n.strong,{children:"Gotchas in multiplayer game design"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCE1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/webrtc-vs-websockets-for-multiplayer-games",children:(0,r.jsx)(n.strong,{children:"WebRTC vs. WebSockets for multiplayer games"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCE1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/modern-game-networking-models",children:(0,r.jsx)(n.strong,{children:"Modern game networking models"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCE1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/top-down-synchronization",children:(0,r.jsx)(n.strong,{children:"Networking a top-down RPG"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCF1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/hasnt-everyone-got-a-good-phone-nowadays/",children:(0,r.jsx)(n.strong,{children:"Hasnât everyone got a good phone nowadays?"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83D\uDCF1 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/what-to-consider-when-building-cross-platform-games",children:(0,r.jsx)(n.strong,{children:"What to consider when building cross-platform games"})})]}),"\n",(0,r.jsxs)(n.li,{children:["â¡ï¸ ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/web-game-performance-optimization/",children:(0,r.jsx)(n.strong,{children:"Web game performance optimization"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDFA8 ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/how-to-make-a-game-when-you-suck-at-art",children:(0,r.jsx)(n.strong,{children:"How to make a game when you suck at art"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF0E ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/who-plays-casual-multiplayer-web-games-anyway",children:(0,r.jsx)(n.strong,{children:"Who plays casual multiplayer games anyway?"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF0E ",(0,r.jsx)(n.a,{href:"https://developers.rune.ai/blog/why-indie-game-dev-marketing-is-hard/",children:(0,r.jsx)(n.strong,{children:"Why indie game dev marketing is hard"})})]}),"\n",(0,r.jsxs)(n.li,{children:["\uD83C\uDF0E ",(0,r.jsx)(n.a,{href:"https://updates.rune.ai/announcing-dusk-and-our-8m-raise/",children:(0,r.jsx)(n.strong,{children:"Announcing Rune and our $8M raise!"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/sanjaypojo",children:"Sanjay Guruprasad"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:s[6].id,children:s[6].value}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Blumgi Racers",url:"https://poki.com/en/g/blumgi-racers",developer:"Blumgi",developerUrl:"https://x.com/UltraBanaman",description:"Gravity-defying puzzle game.",EngineIcon:o.BE}
1),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Quivershot",url:"https://poki.com/en/g/quivershot",developer:"Dedra Games",developerUrl:"https://x.com/GamesDedra",description:"Top-down pixel roguelite.",EngineIcon:o.BE}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Blaze Drifter",url:"https://poki.com/en/g/blaze-drifter",developer:"Deer Cat Games",developerUrl:"http://www.deercatgames.com/",description:"Racing game with takedowns.",EngineIcon:o.tC}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Stunt Bike Extreme",url:"https://poki.com/en/g/stunt-bike-extreme",developer:"Hyperkani",developerUrl:"https://hyperkani.com/",description:"Motorbike balancing game with stunts and jumps.",EngineIcon:o.j9}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Ping Pong Go",url:"https://poki.com/en/g/ping-pong-go",developer:"Happylander",developerUrl:"https://www.happylander.com/",description:"Ping Pong game with increasing difficulty.",EngineIcon:o.Xn}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"SquadBlast",url:"https://webgamer.io/en/g/squadblast",developer:"UltraHorse",developerUrl:"https://ultra.horse/",description:"Multiplayer 2D hero shooter and platformer.",EngineIcon:o.j9}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Kour.io",url:"https://webgamer.io/en/g/kour-io",developer:"LEGiON Platforms",developerUrl:"https://legionplatforms.com/",description:"Multiplayer FPS with various game modes.",EngineIcon:o.j9}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Dungeons n' Ducks",url:"https://webgamer.io/en/g/dungeons-n-ducks",developer:"Long Story Short",developerUrl:"https://x.com/LongSto10058277",description:"Puzzle game with original mechanics.",EngineIcon:o.oO}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"Bulletz.io",url:"https://webgamer.io/en/g/bulletz-io",developer:"Luke Wood",developerUrl:"https://lukewood.xyz/",description:"Agar-inspired game in which you grow by consuming other players.",EngineIcon:o.k9}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(x.d,{title:"WorldGuessr",url:"https://webgamer.io/en/g/worldguessr",developer:"Gautam",developerUrl:"https://codergautam.dev/",description:"Open-source geography game inspired by GeoGuessr.",EngineIcon:o.VK}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(o.rM,{})," ",(0,r.jsx)(n.a,{href:"https://play.brawlbugs.com/",children:(0,r.jsx)(n.strong,{children:"Brawl Bugs"})})," by Jay â Multiplayer arena brawler\nwith insects."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"https://hologydev.itch.io/connection-home",children:(0,r.jsx)(n.strong,{children:"Connection Home"})})," â Platformer demo game made to showcase the ",(0,r.jsx)(n.a,{href:"https://hology.app/",children:"Hology Engine"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:s[7].id,children:s[7].value}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.bl,{})," ",(0,r.jsx)(n.a,{href:"https://github.com/cedric-h/linear-webgl",children:(0,r.jsx)(n.strong,{children:"Collection of raw WebGL demos"})})," by\n",(0,r.jsx)(n.a,{href:"https://ced.quest/",children:"Cedric Hutchings"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://ohziverse.com/",children:(0,r.jsx)(n.strong,{children:"Ohziverse"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/ohzinteractive",children:"OHZI Interactive\nStudio"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://ghost-of-tsushima-grass.vercel.app/",children:(0,r.jsx)(n.strong,{children:"Ghost of Tsushima Style Grass"})})," by\n",(0,r.jsx)(n.a,{href:"https://x.com/AadarshGupta80",children:"Aadarsh Gupta"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.k9,{})," ",(0,r.jsx)(n.a,{href:"https://ulucode.com/random/webgputests/isolines/",children:(0,r.jsx)(n.strong,{children:"Isolines"})}),"\n(",(0,r.jsx)(n.a,{href:"https://github.com/ULuIQ12/webgpu-isoline-geometry",children:"repo"}),") by ",(0,r.jsx)(n.a,{href:"https://x.com/ULuIQ12",children:"Christophe\nChoffel"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://interactive-shield.vercel.app/",children:(0,r.jsx)(n.strong,{children:"Interactive Shield"})}),"\n(",(0,r.jsx)(n.a,{href:"https://github.com/bhushan6/interactive-shield",children:"repo"}),") by ",(0,r.jsx)(n.a,{href:"https://x.com/Bhushanwtf",children:"Bhushan\nWagh"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(o.oO,{})," ",(0,r.jsx)(n.a,{href:"https://current-exhibition.com/laboratorio31/",children:(0,r.jsx)(n.strong,{children:"Figlie â Gaussian Splatting\nExhibition"})})," by ",(0,r.jsx)(n.a,{href:"https://x.com/felixkit",children:"felixkit"})]}),"\n"]}),"\n",(0,r.jsx)(l.lz,{tweetId:"1838991260004286852"})]})},"/newsletter/023",{filePath:"src/pages/newsletter/023.mdx",pageMap:i.v,frontMatter:{},title:"Newsletter â Issue 023"},"undefined"==typeof RemoteContent?p:RemoteContent.useTOC)},3685:(e,s,n)=>{"use strict";n.d(s,{$v:()=>l,D7:()=>x,RO:()=>c,_8:()=>i,k8:()=>d,r7:()=>h,sz:()=>o,yD:()=>j,yI:()=>a});var r=n(5893);let t={stroke:"currentColor",height:"1em",width:"1em","aria-hidden":"true",focusable:"false"},i=e=>(0,r.jsx)("svg",{fill:"currentColor",strokeWidth:"0",viewBox:"0 0 512 512",...t,...e,children:(0,r.jsx)("path",{d:"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"})}),h=e=>(0,r.jsx)("svg",{fill:"currentColor",strokeWidth:"0",viewBox:"0 0 576 512",...t,...e,children:(0,r.jsx)("path",{d:"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19
1-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"})}),l=e=>(0,r.jsx)("svg",{fill:"currentColor",strokeWidth:"0",viewBox:"0 0 512 512",...t,...e,children:(0,r.jsx)("path",{d:"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z"})}),o=e=>(0,r.jsx)("svg",{fill:"currentColor",viewBox:"0 0 512 512",...t,...e,children:(0,r.jsx)("path",{d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"})}),a=e=>(0,r.jsx)("svg",{fill:"currentColor",strokeWidth:"0",viewBox:"0 0 24 24",...t,...e,children:(0,r.jsx)("path",{d:"M11 11V13L5.67257 19H11V21H3V19L8.32557 13H3V11H11ZM21 3V5L15.6726 11H21V13H13V11L18.3256 5H13V3H21Z"})}),c=e=>(0,r.jsx)("svg",{fill:"currentColor",strokeWidth:"0",viewBox:"0 0 16 16",...t,...e,children:(0,r.jsx)("path",{d:"M1 11a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-3zm5-4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7zm5-5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V2z"})}),d=e=>(0,r.jsxs)("svg",{fill:"currentColor",strokeWidth:"0",viewBox:"0 0 24 24",...t,...e,children:[(0,r.jsx)("path",{fill:"none",d:"M0 0h24v24H0z"}),(0,r.jsx)("path",{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zM8.5 15H7.3l-2.55-3.5V15H3.5V9h1.25l2.5 3.5V9H8.5v6zm5-4.74H11v1.12h2.5v1.26H11v1.11h2.5V15h-4V9h4v1.26zm7 3.74c0 .55-.45 1-1 1h-4c-.55 0-1-.45-1-1V9h1.25v4.51h1.13V9.99h1.25v3.51h1.12V9h1.25v5z"})]}),x=e=>(0,r.jsx)("svg",{viewBox:"0 -28.5 256 256",...t,...e,children:(0,r.jsx)("path",{d:"M216.856339,16.5966031 C200.285002,8.84328665 182.566144,3.2084988 164.041564,0 C161.766523,4.11318106 159.108624,9.64549908 157.276099,14.0464379 C137.583995,11.0849896 118.072967,11.0849896 98.7430163,14.0464379 C96.9108417,9.64549908 94.1925838,4.11318106 91.8971895,0 C73.3526068,3.2084988 55.6133949,8.86399117 39.0420583,16.6376612 C5.61752293,67.146514 -3.4433191,116.400813 1.08711069,164.955721 C23.2560196,181.510915 44.7403634,191.567697 65.8621325,198.148576 C71.0772151,190.971126 75.7283628,183.341335 79.7352139,175.300261 C72.104019,172.400575 64.7949724,168.822202 57.8887866,164.667963 C59.7209612,163.310589 61.5131304,161.891452 63.2445898,160.431257 C105.36741,180.133187 151.134928,180.133187 192.754523,160.431257 C194.506336,161.891452 196.298154,163.310589 198.110326,164.667963 C191.183787,168.842556 183.854737,172.420929 176.223542,175.320965 C180.230393,183.341335 184.861538,190.991831 190.096624,198.16893 C211.238746,191.588051 232.743023,181.531619 254.911949,164.955721 C260.227747,108.668201 245.831087,59.8662432 216.856339,16.5966031 Z M85.4738752,135.09489 C72.8290281,135.09489 62.4592217,123.290155 62.4592217,108.914901 C62.4592217,94.5396472 72.607595,82.7145587 85.4738752,82.7145587 C98.3405064,82.7145587 108.709962,94.5189427 108.488529,108.914901 C108.508531,123.290155 98.3405064,135.09489 85.4738752,135.09489 Z M170.525237,135.09489 C157.88039,135.09489 147.510584,123.290155 147.510584,108.914901 C147.510584,94.5396472 157.658606,82.7145587 170.525237,82.7145587 C183.391518,82.7145587 193.761324,94.5189427 193.539891,108.914901 C193.539891,123.290155 183.391518,135.09489 170.525237,135.09489 Z",fill:"#5865F2",fillRule:"nonzero"})}),j=e=>(0,r.jsx)("svg",{fill:"currentColor",viewBox:"0 0 245.371 220.736",...t,...e,children:(0,r.jsx)("path",{d:"M31.99 1.365C21.287 7.72.2 31.945 0 38.298v10.516C0 62.144 12.46 73.86 23.773 73.86c13.584 0 24.902-11.258 24.903-24.62 0 13.362 10.93 24.62 24.515 24.62 13.586 0 24.165-11.258 24.165-24.62 0 13.362 11.622 24.62 25.207 24.62h.246c13.586 0 25.208-11.258 25.208-24.62 0 13.362 10.58 24.62 24.164 24.62 13.585 0 24.515-11.258 24.515-24.62 0 13.362 11.32 24.62 24.903 24.62 11.313 0 23.773-11.714 23.773
1-25.046V38.298c-.2-6.354-21.287-30.58-31.988-36.933C180.118.197 157.056-.005 122.685 0c-34.37.003-81.228.54-90.697 1.365zm65.194 66.217a28.025 28.025 0 0 1-4.78 6.155c-5.128 5.014-12.157 8.122-19.906 8.122a28.482 28.482 0 0 1-19.948-8.126c-1.858-1.82-3.27-3.766-4.563-6.032l-.006.004c-1.292 2.27-3.092 4.215-4.954 6.037a28.5 28.5 0 0 1-19.948 8.12c-.934 0-1.906-.258-2.692-.528-1.092 11.372-1.553 22.24-1.716 30.164l-.002.045c-.02 4.024-.04 7.333-.06 11.93.21 23.86-2.363 77.334 10.52 90.473 19.964 4.655 56.7 6.775 93.555 6.788h.006c36.854-.013 73.59-2.133 93.554-6.788 12.883-13.14 10.31-66.614 10.52-90.474-.022-4.596-.04-7.905-.06-11.93l-.003-.045c-.162-7.926-.623-18.793-1.715-30.165-.786.27-1.757.528-2.692.528a28.5 28.5 0 0 1-19.948-8.12c-1.862-1.822-3.662-3.766-4.955-6.037l-.006-.004c-1.294 2.266-2.705 4.213-4.563 6.032a28.48 28.48 0 0 1-19.947 8.125c-7.748 0-14.778-3.11-19.906-8.123a28.025 28.025 0 0 1-4.78-6.155 27.99 27.99 0 0 1-4.736 6.155 28.49 28.49 0 0 1-19.95 8.124c-.27 0-.54-.012-.81-.02h-.007c-.27.008-.54.02-.813.02a28.49 28.49 0 0 1-19.95-8.123 27.992 27.992 0 0 1-4.736-6.155zm-20.486 26.49l-.002.01h.015c8.113.017 15.32 0 24.25 9.746 7.028-.737 14.372-1.105 21.722-1.094h.006c7.35-.01 14.694.357 21.723 1.094 8.93-9.747 16.137-9.73 24.25-9.746h.014l-.002-.01c3.833 0 19.166 0 29.85 30.007L210 165.244c8.504 30.624-2.723 31.373-16.727 31.4-20.768-.773-32.267-15.855-32.267-30.935-11.496 1.884-24.907 2.826-38.318 2.827h-.006c-13.412 0-26.823-.943-38.318-2.827 0 15.08-11.5 30.162-32.267 30.935-14.004-.027-25.23-.775-16.726-31.4L46.85 124.08C57.534 94.073 72.867 94.073 76.7 94.073zm45.985 23.582v.006c-.02.02-21.863 20.08-25.79 27.215l14.304-.573v12.474c0 .584 5.74.346 11.486.08h.006c5.744.266 11.485.504 11.485-.08v-12.474l14.304.573c-3.928-7.135-25.79-27.215-25.79-27.215v-.006l-.003.002z"})})}},e=>{var s=s=>e(e.s=s);e.O(0,[1304,7654,8718,2888,9774,179],()=>s(7411)),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.