# Text3D
[TextGeometry](https://threejs.org/docs/index.html?q=text#examples/en/geometries/TextGeometry) is one of the ways we can add 3D text in our scene.
However, it is not part of the core of ThreeJS. So to use it you would need to import it from the `three/examples/jsm/controls/TextGeometry` module.
This creates a problem because **TresJS** automatically creates a catalog of the core of Three so you can use them as components.
Fortunately, **TresJS** provides a way to extend the catalog of components. You can do it by using the `extend` method using the [useCatalogue](/api/composables#usecatalog) composable.
For more information about extending your TresJS catalog, refer to the [extending](/advanced/extending.md) section.
## Using TextGeometry
To use `TextGeometry` you need to import it from the `three/examples/jsm/geometries/TextGeometry` module.
```js
import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry'
```
Then you need to extend the catalogue of components using the `extend` method of the [useCatalogue](/api/composables#usecatalog) composable.
```js
import { useCatalogue } from '@tresjs/core'
import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry'
const { extend } = useCatalogue()
extend({ TextGeometry: TextGeometry })
```
[TextGeometry](https://threejs.org/docs/index.html?q=text#examples/en/geometries/TextGeometry) needs a only one required argument the font, you can see an example below.
```js
const fontPath = 'https://raw.githubusercontent.com/Tresjs/assets/main/fonts/FiraCodeRegular.json'
const loader = new FontLoader()
const font = await new Promise((resolve, reject) => {
try {
loader.load(fontPath, font => {
resolve(font)
})
} catch (error) {
reject(console.error('cientos', error))
}
})
```
Now you can use the `TresTextGeometry` component inside a TresMesh in your scene
```vue
```
then as in the example you can pass an object with the desired configurations.
```ts
const fontOptions = {
size: 0.5,
height: 0.2,
curveSegments: 5,
bevelEnabled: true,
bevelThickness: 0.05,
bevelSize: 0.02,
bevelOffset: 0,
bevelSegments: 4,
}
```
We can also pass a matcapTexture to add final details, using the TresMeshNormalMaterial inside the TresMesh
```ts
const matcapTexture = await useTexture(['https://raw.githubusercontent.com/Tresjs/assets/main/textures/matcaps/7.png'])
```
So the final code would be something like this:
```vue
```
I know seems like a lot of work, but good news there is a much more simple way
## TextGeometry from `cientos`
The `cientos` package provides a component called `` that is a wrapper of the `TextGeometry` from the [`three-stdlib`](https://github.com/pmndrs/three-stdlib) module.
The nicest part? You don't need to extend the catalog and just pass the font argument.
It just works. 💯 (if not text is provided, the text will be TresJS)
```vue
```
We can pass the options as props
```html
```
in case the options are not provided the default values are:
```js
size: 0.5,
height: 0.2,
curveSegments: 5,
bevelEnabled: true,
bevelThickness: 0.05,
bevelSize: 0.02,
bevelOffset: 0,
bevelSegments: 4,
```
By default text in ThreeJS starts at the mesh initial position, so it's [0,0,0] the text will start there but we can center it by just passing the flag "center"
```vue
```