# Introduction
::: code-group ```bash [npm] npm install @tresjs/core three ``` ```bash [yarn] yarn add @tresjs/core three ``` ```bash [pnpm] pnpm add @tresjs/core three ``` ::: ## Typescript TresJS is written in Typescript and it's fully typed. If you are using Typescript, you will get the full benefit of the typings. Just make sure you install the types for three. ::: code-group ```bash [npm] npm install @types/three -D ``` ```bash [yarn] yarn add @types/three -D ``` ```bash [pnpm] pnpm add @types/three -D ``` ::: ## Vite If you are using Vite, you just need to import and add the `templateCompilerOptions` from TresJS to your `vite.config.ts` inside of the vue plugin: ```ts import { templateCompilerOptions } from '@tresjs/core' export default defineConfig({ plugins: [ vue({ // Other config ...templateCompilerOptions }), ], }) ``` This is required to make the template compiler work with the custom renderer so it does not throw warnings on the console. For more info check [here](/guide/troubleshooting.html). ## Try it online ### Playground You can try TresJS online using the official [playground](https://play.tresjs.org/). Check it out: ### StackBlitz We have a brand new [StackBlitz](https://stackblitz.com/) starter to try TresJS online. Check it out: ![](/stackblitz-starter.png) ## Labs We also have a showcase lab of examples made with TresJS. Check it out [here](https://playground.tresjs.org/). ![](/tresjs-lab.png) ## Motivation [ThreeJS](https://threejs.org/) is a wonderful library to create awesome **WebGL** 3D websites. It's also a library, which is constantly updated, which makes it hard for wrapper maintainers like [TroisJS](https://troisjs.github.io/) to keep up with all the enhancements. The React ecosystem has an impressive **custom render** solution called [React-three-fiber](https://docs.pmnd.rs/react-three-fiber) that allows you build your scenes declaratively with re-usable, self-contained components that react to state. In my search for something similar in the VueJS ecosystem, I found this amazing library called [Lunchbox](https://github.com/breakfast-studio/lunchboxjs), which works with the same concept as R3F, it provides a [custom Vue3 Renderer](https://vuejs.org/api/custom-renderer.html). I'm also contributing to improve this library so it gets as mature and feature-rich as R3F. The only issue with this is, mixing compilers renderers in Vue 3 is something the Vue community is still working on - see [here](https://github.com/vuejs/vue-loader/pull/1645) for more information. ```ts // Example Vite setup import { createApp } from 'vue' import { createApp as createLunchboxApp } from 'lunchboxjs' import App from './App.vue' import LunchboxApp from './LunchboxApp.vue' // html app const app = createApp(App) app.mount('#app') // lunchbox app const lunchboxApp = createLunchboxApp(LunchboxApp) // assuming there's an element with ID `lunchbox` in your HTML app lunchboxApp.mount('#lunchbox') ``` So I was inspired by both libraries to create a Vue custom renderer for ThreeJS. That's **TresJS v2**.