{"id":16497654,"url":"https://github.com/ustymukhman/threejs-boilerplate","last_synced_at":"2025-03-21T08:30:47.268Z","repository":{"id":37557552,"uuid":"94442401","full_name":"UstymUkhman/threejs-boilerplate","owner":"UstymUkhman","description":":fire: Three.js + TypeScript + SolidJS + Vite + Vitest :rocket:","archived":false,"fork":false,"pushed_at":"2023-05-25T14:28:30.000Z","size":7366,"stargazers_count":55,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-01T04:15:51.309Z","etag":null,"topics":["boilerplate","pnpm","solidjs","template","threejs","typescript","vite","vitest","webgl","webgl2"],"latest_commit_sha":null,"homepage":"https://ustymukhman.github.io/threejs-boilerplate/dist/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UstymUkhman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-15T13:31:39.000Z","updated_at":"2024-12-20T07:59:18.000Z","dependencies_parsed_at":"2022-08-02T15:30:56.987Z","dependency_job_id":null,"html_url":"https://github.com/UstymUkhman/threejs-boilerplate","commit_stats":null,"previous_names":[],"tags_count":4,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UstymUkhman%2Fthreejs-boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UstymUkhman%2Fthreejs-boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UstymUkhman%2Fthreejs-boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UstymUkhman%2Fthreejs-boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UstymUkhman","download_url":"https://codeload.github.com/UstymUkhman/threejs-boilerplate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244121388,"owners_count":20401261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate","pnpm","solidjs","template","threejs","typescript","vite","vitest","webgl","webgl2"],"created_at":"2024-10-11T14:45:09.520Z","updated_at":"2025-03-21T08:30:44.950Z","avatar_url":"https://github.com/UstymUkhman.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Three.js Boilerplate #\n\n🔥 [Three.js](https://threejs.org/) + [TypeScript](https://www.typescriptlang.org/) + [SolidJS](https://www.solidjs.com/) + [Vite](https://vitejs.dev/) + [Vitest](https://vitest.dev/) 🚀\n\n\u003e Minimal, yet complete template for developing three.js projects.\n\n![](https://img.shields.io/github/package-json/dependency-version/UstymUkhman/threejs-boilerplate/three?style=flat-square)\n![](https://img.shields.io/github/package-json/dependency-version/UstymUkhman/threejs-boilerplate/dev/typescript?style=flat-square)\n![](https://img.shields.io/github/package-json/dependency-version/UstymUkhman/threejs-boilerplate/solid-js?style=flat-square)\n![](https://img.shields.io/github/package-json/dependency-version/UstymUkhman/threejs-boilerplate/dev/vite?style=flat-square)\n![](https://img.shields.io/github/package-json/dependency-version/UstymUkhman/threejs-boilerplate/dev/vitest?style=flat-square)\n\n![](https://img.shields.io/github/deployments/UstymUkhman/threejs-boilerplate/github-pages?style=flat-square)\n![](https://img.shields.io/badge/coverage-100%25-brightgreen?style=flat-square)\n![](https://img.shields.io/github/repo-size/UstymUkhman/threejs-boilerplate?color=yellowgreen\u0026style=flat-square)\n![](https://img.shields.io/github/package-json/v/UstymUkhman/threejs-boilerplate?color=orange\u0026style=flat-square)\n![](https://img.shields.io/github/license/UstymUkhman/threejs-boilerplate?color=lightgrey\u0026style=flat-square)\n\n[![](./public/assets/images/preview.jpg)](https://ustymukhman.github.io/threejs-boilerplate/dist)\n\n## 📂 Structure ##\n\n```\nThree.js Boilerplate\n├── __mocks__/\n├── coverage/\n├── dist/\n├── node_modules/\n├── public/\n│   ├── assets/\n│   ├── favicons/\n│   ├── scripts/\n│   ├── styles/\n│   ├── browserconfig.xml\n│   ├── manifest.json\n│   ├── robots.txt\n│   └── sitemap.xml\n├── src/\n│   ├── app/\n│   ├── assets/\n│   ├── components/\n│   ├── sandbox/\n│   ├── scss/\n│   ├── shaders/\n│   ├── utils/\n│   ├── global.d.ts\n│   └── main.tsx\n├── tests/\n│   ├── app/\n│   ├── components/\n│   ├── sandbox/\n│   ├── shaders/\n│   ├── utils/\n│   ├── canvas.mock.d.ts\n│   ├── canvas.mock.ts\n│   └── global.spec.ts\n├── index.html\n├── package.json\n├── tsconfig.json\n├── vite.config.ts\n└── vitest.config.ts\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e🔌 Usage\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u0026emsp;\u0026ensp;Simply click \u003cb\u003eUse this template\u003c/b\u003e and \u003cb\u003eCreate a new repository\u003c/b\u003e.\n  \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;This will initialize your own repository from this boilerplate.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e✨ Features\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;⚙️ Basic\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Cross-platform \u003ca href=\"./public/favicons\" target=\"_blank\"\u003eFavicons\u003c/a\u003e\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Meta tags for sharing on \u003ca href=\"./index.html#L29-L34\" target=\"_blank\"\u003eFacebook\u003c/a\u003e and \u003ca href=\"./index.html#L36-L40\" target=\"_blank\"\u003eTwitter\u003c/a\u003e\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./index.html#L78-L84\" target=\"_blank\"\u003eUnsupported browser\u003c/a\u003e and \u003ca href=\"./index.html#L86-L94\" target=\"_blank\"\u003edisabled JavaScript\u003c/a\u003e screens\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;🧩 Components\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./src/app/index.tsx\" target=\"_blank\"\u003eApplication\u003c/a\u003e entry point\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./src/components/Logo/index.tsx\" target=\"_blank\"\u003eLogo\u003c/a\u003e label component\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Current \u003ca href=\"./src/components/Version/index.tsx\" target=\"_blank\"\u003eversion\u003c/a\u003e tag\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;🏝️ Sandbox\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Simple three.js \u003ca href=\"./src/sandbox/index.ts\" target=\"_blank\"\u003escene\u003c/a\u003e with:\n\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Linear Fog\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Ground Plane\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Orbit Controls\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Stats Monitoring\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Perspective Camera\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Default WebGL2 Renderer\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Ambient \u0026 Directional Lighting\n\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Scene \u003ca href=\"./src/sandbox/Config.ts\" target=\"_blank\"\u003econfiguration\u003c/a\u003e file with initial parameter values.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Custom checkerboard-like ground plane \u003ca href=\"./src/sandbox/GroundMaterial.ts\" target=\"_blank\"\u003ematerial\u003c/a\u003e.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; GUI \u003ca href=\"./src/sandbox/GUIControls.ts\" target=\"_blank\"\u003econtrols\u003c/a\u003e built on top of \u003ccode\u003elil-gui\u003c/code\u003e.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; **Uncharted 2** \u003ca href=\"./src/sandbox/CustomToneMapping.ts\" target=\"_blank\"\u003etone mapping\u003c/a\u003e shader.\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;🎨 Shaders\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Custom shader support through \u003ca href=\"https://github.com/UstymUkhman/vite-plugin-glsl\" target=\"_blank\"\u003evite-plugin-glsl\u003c/a\u003e.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Three.js shaders for \u003ca href=\"./src/shaders/ground\" target=\"_blank\"\u003eground\u003c/a\u003e plane material.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Three.js shaders for custom \u003ca href=\"./src/shaders/mapping\" target=\"_blank\"\u003etone mapping\u003c/a\u003e.\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;🛠️ Utilities\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./src/utils/Assets.ts\" target=\"_blank\"\u003eAssets\u003c/a\u003e loading manager:\n\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Promise based APIs\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Loading errors logging\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Start, Progress \u0026 Complete loading events\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; \u003ccode\u003eusePublicFolder\u003c/code\u003e option for setting assets path\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026#9702; Audio, GLTF/GLB, CubeTexture \u0026 Texture loaders\n\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./src/utils/Array.ts\" target=\"_blank\"\u003eArray\u003c/a\u003e, \u003ca href=\"./src/utils/Color.ts\" target=\"_blank\"\u003eColor\u003c/a\u003e, \u003ca href=\"./src/utils/Number.ts\" target=\"_blank\"\u003eNumber\u003c/a\u003e, \u003ca href=\"./src/utils/String.ts\" target=\"_blank\"\u003eString\u003c/a\u003e \u0026 \u003ccode\u003e\u003ca href=\"./src/utils/deepFreeze.ts\" target=\"_blank\"\u003edeepFreeze\u003c/a\u003e\u003c/code\u003e methods.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./src/utils/Elastic.ts\" target=\"_blank\"\u003eElastic\u003c/a\u003e Number, Vector3 and Vector3 classes.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Custom \u003ca href=\"./src/utils/Events.ts\" target=\"_blank\"\u003eEvents\u003c/a\u003e and EventEmitter manager.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Mouse \u003ca href=\"./src/utils/Wheel.ts\" target=\"_blank\"\u003eWheel\u003c/a\u003e normalization function.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ccode\u003edebounce\u003c/code\u003e and \u003ccode\u003ethrottle\u003c/code\u003e \u003ca href=\"./src/utils/Function.ts\" target=\"_blank\"\u003efunction\u003c/a\u003es.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ccode\u003e\u003ca href=\"./src/utils/RAF.ts\" target=\"_blank\"\u003erequestAnimationFrame\u003c/a\u003e\u003c/code\u003e manager.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Custom Web \u003ca href=\"./src/utils/worker\" target=\"_blank\"\u003eWorker\u003c/a\u003e manager.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"https://unity.com/\" target=\"_blank\"\u003eUnity\u003c/a\u003e-like \u003ccode\u003eVector3\u003c/code\u003e \u003ca href=\"./src/utils/Direction.ts\" target=\"_blank\"\u003edirection\u003c/a\u003es.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./src/utils/Spline.ts\" target=\"_blank\"\u003eSpline\u003c/a\u003e interpolation manager.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Screen \u003ca href=\"./src/utils/Viewport.ts\" target=\"_blank\"\u003eViewport\u003c/a\u003e manager.\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;🧰 Miscellaneous\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Scoped \u003ca href=\"https://sass-lang.com/\" target=\"_blank\"\u003eSCSS\u003c/a\u003e and common \u003ca href=\"./src/scss/easings.scss\" target=\"_blank\"\u003eeasing\u003c/a\u003e functions.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Support for common 3D \u003ca href=\"./vite.config.ts#L9\" target=\"_blank\"\u003eformats\u003c/a\u003e.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; Common \u003ca href=\"./src/assets\" target=\"_blank\"\u003eassets\u003c/a\u003e folders.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"https://web.dev/progressive-web-apps/\" target=\"_blank\"\u003ePWA\u003c/a\u003e-ready \u003ca href=\"./public/manifest.json\" target=\"_blank\"\u003emanifest\u003c/a\u003e.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u0026bull; \u003ca href=\"./LICENSE\" target=\"_blank\"\u003eMIT\u003c/a\u003e license.\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;📦 Package Manager\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;This project was build with \u003ccode\u003e\u003ca href=\"https://pnpm.io/\" target=\"_blank\"\u003epnpm\u003c/a\u003e\u003c/code\u003e, but \u003ccode\u003e\u003ca href=\"https://yarnpkg.com/\" target=\"_blank\"\u003eyarn\u003c/a\u003e\u003c/code\u003e and \u003ccode\u003e\u003ca href=\"https://www.npmjs.com/\" target=\"_blank\"\u003enpm\u003c/a\u003e\u003c/code\u003e are also supported.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;Just replace \u003ccode\u003epnpm\u003c/code\u003e in all commands below with \u003ccode\u003eyarn\u003c/code\u003e or \u003ccode\u003enpm run\u003c/code\u003e.\u003cbr /\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;For \u003ccode\u003enpm\u003c/code\u003e users, one exception is the installation, where it's \u003ccode\u003enpm i\u003c/code\u003e.\n\n  \u003ch3\u003e\u0026emsp;\u0026emsp;\u0026ensp;📈 Tests Coverage\u003c/h3\u003e\n  \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;All the code in the \u003ccode\u003esrc/\u003c/code\u003e directory has been fully tested and has a \u003cb\u003e100%\u003c/b\u003e code coverage.\u003cbr /\u003e\n  \u003cdetails\u003e\n    \u003csummary\u003e\n      \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u003cb\u003eShow me some numbers!\u003c/b\u003e\u003cbr /\u003e\u003cbr /\u003e\n    \u003c/summary\u003e\n    \u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026emsp;\u0026nbsp;\u003cimg alt=\"Tests Coverage\" src=\"./public/assets/images/tests.jpg\" /\u003e\n  \u003c/details\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e💾 Download\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003egit clone https://github.com/UstymUkhman/threejs-boilerplate.git\u003c/code\u003e\n  \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003ecd threejs-boilerplate\u003c/code\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e⌨️ Develop\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm i\u003c/code\u003e\n  \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm start\u003c/code\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e✔️ Lint\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm lint:js\u003c/code\u003e\n  \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm lint:css\u003c/code\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e🧪 Test\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm test\u003c/code\u003e\n    \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm test:watch\u003c/code\u003e\n    \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm test:cover\u003c/code\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    \u003ch2 style=\"display: inline-block;\"\u003e🧱 Build\u003c/h2\u003e\n  \u003c/summary\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm build\u003c/code\u003e\n  \u003cbr /\u003e\n  \u0026emsp;\u0026ensp;\u003ccode\u003epnpm serve\u003c/code\u003e\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fustymukhman%2Fthreejs-boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fustymukhman%2Fthreejs-boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fustymukhman%2Fthreejs-boilerplate/lists"}