# Introduction
::: code-group
```bash [npm]
npm install three @tresjs/core -D
```
```bash [yarn]
yarn add three @tresjs/core -D
```
```bash [pnpm]
pnpm add three @tresjs/core -D
```
:::
## Try it online
You can fork this template example on [StackBlitz](https://stackblitz.com/edit/tresjs-basic?file=src/App.vue) and play with it 😋 without installing anything locally.
## Motivation
[ThreeJS](https://threejs.org/) is a wonderful library to create awesome **WebGL** 3D websites. It is also a constantly updated library that makes it hard for wrapper-based libraries like [TroisJS](https://troisjs.github.io/) to keep up with all the enhancements.
The React ecosystem has an impressive **custom renderer**-based solution called [React-three-fiber](https://docs.pmnd.rs/react-three-fiber) that allows you to 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 an amazing library called [Lunchbox](https://github.com/breakfast-studio/lunchboxjs) which, like R3F for React, 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 problem is, mixing different 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.
Until there is a solution similar to [React Reconciliation](https://reactjs.org/docs/reconciliation.html), you will need to create 2 separate `Apps` which might be not ideal.
```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 something that wouldn't require creating a **custom renderer** and is intelligent enough to generate Vue components based on the `three:latest` constructors with 0-to-no maintenance required. That's **TresjS**.