# What (exactly) is three.js for?

**URL:** <https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588>\
**Category:** Discussion\
**Created:** [March 31, 2022, 5:21pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588 "2022-03-31T17:21:03Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![MixTeR](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mixter/32/26747_2.png) [@MixTeR](https://discourse.threejs.org/u/MixTeR)\
**Post date:** [April 2, 2022, 1:57am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/21 "2022-04-02T01:57:34Z")

</div>

Wow. So many long comments. I didn’t know that was a deep question 🙃

Honestly I’m not going to read all the previous comments. I’m just going to answer the title question; I´m not an expert on the subject.

_For me threejs is a library that facilitates the use of WebGL. That’s all :3_

bye. My mission is now complete 😼

---

<div class="post-metadata">

**Author:** ![looeee](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/looeee/32/59_2.png) [@looeee](https://discourse.threejs.org/u/looeee)\
**Post date:** [April 2, 2022, 2:39am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/22 "2022-04-02T02:39:23Z")

</div>

This is a question that gets asked quite a bit. I wonder if it would be a good idea to add a _What is three.js?_ page to the docs?

The _Getting Started_ page is great but it kind of jumps straight in and assumes you already know what you want to use three.js for.

 ![getting started](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/4/a/4a2dbcd1af2b682053f6b51a9bb134d16a025034.png)

We could add a simple intro page called _What is three.js?_ before _Getting Started_ that described some things like:

What three.js _is_ (a rendering framework for the web, mostly focused on WebGL but can be used with other graphics APIs too)  
What can you use three.js for? (some nice examples of things that have been built with three.js, or even just a link to the main [threejs.org](http://threejs.org) page)  
What three.js _is not_ (explain that three.js is not a full fledged game engine, has never tried to be, and if you jump in expecting one you’re gonna have a bad time. Then maybe link to some game engines built on top of threejs)  
Using three.js with React/Vue/Angular/Svelte (point people in the direction of R3F and similar tools for other frameworks)  
Where can I learn more? Link to various places to learn about three.js, as well as the forum, discord, reddit etc.

@mrdoob is that something you would be interested in adding?

There is already the [fundamentals](https://threejs.org/manual/#en/fundamentals) page in the manual but I was thinking of something much simpler that avoids any technical details.

---

<div class="post-metadata">

**Author:** ![viridia](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/viridia/32/15352_2.png) [@viridia](https://discourse.threejs.org/u/viridia)\
**Post date:** [April 2, 2022, 4:07am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/23 "2022-04-02T04:07:32Z")

</div>

I like your suggestion, it would address a lot of my concerns.

---

<div class="post-metadata">

**Author:** ![viridia](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/viridia/32/15352_2.png) [@viridia](https://discourse.threejs.org/u/viridia)\
**Post date:** [April 2, 2022, 4:20am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/24 "2022-04-02T04:20:16Z")

</div>

> [@MixTeR](#):
>
> For me threejs is a library that facilitates the use of WebGL. That’s all :3

From what I understand, this is not correct - you can use three.js for things other than WebGL.

In fact, now that I think about it, I have even written code that uses the three.js library that does no rendering at all - for example, my build pipeline includes a navigation mesh generator that uses Vector3, Plane3, Matrix4 and other geometry classes to do the calculations, but it outputs JSON / Msgpack assets, not pixels.

By the same token, saying that it’s a framework for doing 3D is too broad - there are other kinds of 3D such as 3D printing, or cinematic quality rendering (think Pixar), that fall outside of the expected use cases.

---

<div class="post-metadata">

**Author:** ![MixTeR](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mixter/32/26747_2.png) [@MixTeR](https://discourse.threejs.org/u/MixTeR)\
**Post date:** [April 2, 2022, 4:45am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/25 "2022-04-02T04:45:58Z")

</div>

I stand by what I said. And the reason for this is that so far 99.9% of the stuff I’ve seen has to do with rendering, canvas etc… So, if this is the case then I can assume that this is the main purpose of Threejs.

_For me threejs is a library that facilitates the use of WebGL. That’s all :3_

---

<div class="post-metadata">

**Author:** ![looeee](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/looeee/32/59_2.png) [@looeee](https://discourse.threejs.org/u/looeee)\
**Post date:** [April 2, 2022, 4:57am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/26 "2022-04-02T04:57:22Z")

</div>

> [@viridia](#):
>
> there are other kinds of 3D such as 3D printing, or cinematic quality rendering (think Pixar)

Both of these are valid uses of three.js I think. Here’s [a GPU path tracer](https://gkjohnson.github.io/three-gpu-pathtracer/example/bundle/materialBall.html) being written using three.js and there are other around if you search.

For 3D printing you can [view](https://threejs.org/examples/?q=stl#webgl_loader_stl) and [export STL](https://threejs.org/examples/#misc_exporter_stl) files with three.js.

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [April 2, 2022, 8:25am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/27 "2022-04-02T08:25:39Z")

</div>

> [@viridia](#):
>
> now that I think about it, I have even written code that uses the three.js library that does no rendering at all

I have used a scissors to make holes in plastic, a screwdriver to hit some nails (with its back side), a cup to catch mosquitos, you name it - whereas the stated purpose of these tools is different.

---

<div class="post-metadata">

**Author:** ![dubois](https://avatars.discourse-cdn.com/v4/letter/d/e9c0ed/32.png) [@dubois](https://discourse.threejs.org/u/dubois)\
**Post date:** [April 2, 2022, 10:50am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/28 "2022-04-02T10:50:57Z")

</div>

This article seems to mention most stuff from this thread:

> **[What is three.js?](https://medium.com/@pailhead011/what-is-three-js-7a03d84d9489)**
>
> I’d like to share some thoughts on how three.js, as a framework, fits the “big picture”. Three.js does a lot of things and it can be…

I also believe that threejs is mostly used for webgl.

---

<div class="post-metadata">

**Author:** ![stopyransky](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/stopyransky/32/3526_2.png) [@stopyransky](https://discourse.threejs.org/u/stopyransky)\
**Post date:** [April 4, 2022, 6:13pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/29 "2022-04-04T18:13:49Z")

</div>

After reading the thread it seems that generic nature of Three.js is here ‘an issue’ - in a way that it is a multipurpose ‘tool’ or ‘a layer’ above the WebGL (not only WebGL though). Not targeted to any particular use (like 2d game or web demo etc).

For me three.js works simply to limit the amount of code needed to do something in the browser using WebGL and direct a developer in a certain way of thinking about building up the project.  
The codebase though is full of other (useful and clever) stuff that is away from its core purpose.

So perhaps it would be beneficiary for the project, and healthy for the codebase, to split it into some ‘core’ package (the Renderer its core dependencies) - that is sturdy and stable. And the ‘extras’ packages (most of which is currently in examples), like ‘lights’, ‘materials’ or ‘shaders’ other stuff that can be extracted as standalone packages and will be easier extendable and open for growth.

```javascript
@three/core
@three/materials
@three/objects
@three/shaders 
@three/controls
@three/cameras
...

```

just some ideas.

---

<div class="post-metadata">

**Author:** ![alexpineda](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/alexpineda/32/14082_2.png) [@alexpineda](https://discourse.threejs.org/u/alexpineda)\
**Post date:** [April 6, 2022, 5:23pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/30 "2022-04-06T17:23:53Z")

</div>

It’s primarily a scene graph abstraction, with utilities for rendering the scene graph using browser graphics APIs, as well as math, and file format utilities. Branching out a bit further, it’s an ecosystem of developers and artists utilizing, improving and assisting others with three. That’s how I see three 🙂

---

<div class="post-metadata">

**Author:** ![mrdoob](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mrdoob/32/22417_2.png) [@mrdoob](https://discourse.threejs.org/u/mrdoob)\
**Post date:** [April 11, 2022, 2:16pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/31 "2022-04-11T14:16:04Z")

</div>

> [@looeee](#):
>
> @mrdoob is that something you would be interested in adding?

That sounds good to me yeah 👍

---

<div class="post-metadata">

**Author:** ![rockclimber](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/rockclimber/32/1043_2.png) [@rockclimber](https://discourse.threejs.org/u/rockclimber)\
**Post date:** [June 12, 2022, 1:18pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/32 "2022-06-12T13:18:08Z")

</div>

This whole thread is basically caused by “examples” folder that should be called/split as “plugins” and that’s all 🤣

---

<div class="post-metadata">

**Author:** ![Umbawa\_Sarosong](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/umbawa_sarosong/32/30107_2.png) [@Umbawa\_Sarosong](https://discourse.threejs.org/u/Umbawa_Sarosong)\
**Post date:** [June 12, 2022, 1:27pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/33 "2022-06-12T13:27:40Z")

</div>

threejs gives new meaning to programming, the bridge between text and image to the [world](https://theneoverse.web.app/#serini&&serini) of unlimitted possibilities.

---

<div class="post-metadata">

**Author:** ![JxstWieslaw](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/jxstwieslaw/32/25418_2.png) [@JxstWieslaw](https://discourse.threejs.org/u/JxstWieslaw)\
**Post date:** [June 29, 2022, 11:55am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/42 "2022-06-29T11:55:12Z")

</div>

We are still talking about this😂. It’s just a 3D Renderer my “coder Bros”!!

---

<div class="post-metadata">

**Author:** ![marquizzo](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/marquizzo/32/25192_2.png) [@marquizzo](https://discourse.threejs.org/u/marquizzo)\
**Post date:** [June 29, 2022, 5:24pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/44 "2022-06-29T17:24:31Z")

</div>

@makc3d @Umbawa_Sarosong @rockclimber Could you guys start a new thread for the off-topic helicopter physics conversation? Each new post sends notifications to dozens of people who have engaged with the original discussion.

---

<div class="post-metadata">

**Author:** ![titansoftime](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/titansoftime/32/1044_2.png) [@titansoftime](https://discourse.threejs.org/u/titansoftime)\
**Post date:** [June 29, 2022, 6:10pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/45 "2022-06-29T18:10:44Z")

</div>

As someone who has been building a game with three.js for a long long time, I 100% empathize with your thinking. It was actually kind of cathartic to read.

I’m always worried if some critical feature I use to make my game engine is going to be ignored, regressed in some way or cut in favor of a design choice that prioritizes true-to-life staircase rendering for example. That or some code import method is going to be introduced that completely upends my pipeline.

Regardless of those concerns, I am still here since r49 and with the latest version. Performance and quality are good and I have learned **a lot** over the years due to three.js’s lack of… specificity and having to take matters into my own hands. No major regrets so far other than a few breaking changes that made me want to cry, but I got through it.

---

<div class="post-metadata">

**Author:** ![Lawrence3DPK](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/lawrence3dpk/32/29184_2.png) [@Lawrence3DPK](https://discourse.threejs.org/u/Lawrence3DPK)\
**Post date:** [June 29, 2022, 6:44pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/46 "2022-06-29T18:44:37Z")

</div>

> [@titansoftime](#):
>
> a few breaking changes that made me want to cry

R125 buffer geometry by chance?

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [June 29, 2022, 7:00pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/47 "2022-06-29T19:00:08Z")

</div>

Idk, man, I did “engage” with the thread just like any of the rest of you, and all I get is the blue circle when ever I visit the site. If you enabled website push notifications, it is kind of like your problem

---

<div class="post-metadata">

**Author:** ![mrdoob](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mrdoob/32/22417_2.png) [@mrdoob](https://discourse.threejs.org/u/mrdoob)\
**Post date:** [August 2, 2022, 9:51am UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/48 "2022-08-02T09:51:55Z")

</div>

Three.js just tries to make hardware accelerated graphics programing more attractive.

We may remove niche features from time to time but the reasoning is always to reduce file size or improve maintenance.

The goal is to improve the quality of 3d graphics on the web.

---

<div class="post-metadata">

**Author:** ![Peter\_Devine](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/peter_devine/32/11301_2.png) [@Peter\_Devine](https://discourse.threejs.org/u/Peter_Devine)\
**Post date:** [August 2, 2022, 3:23pm UTC](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588/49 "2022-08-02T15:23:34Z")

</div>

42 == \* == whatever you want it to be.

Obviously not suitable for massive games simply because the web browser isn’t suitable for massive games.

Coming from Unity, (and before that Flash) I was glad the authors hadn’t pre-guessed what we’d use it for.

Whenever things have “broken” (changed) between versions, I’ve always found the warning messages very helpful and we’ll thought out and invariably been able to migrate easily, and usually to make use of some awesome new features.

So props to Mr. Doob and team. Whatever the intention, the result has been a platform where I feel I can build anything, within the bounds of what’s sensible in a browser. And I know it will run on mobile.

[Previous page](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588.md?page=1)

[Next page](https://discourse.threejs.org/t/what-exactly-is-three-js-for/36588.md?page=3)
