Quilt: Workspace layouts for three.js tools

Quilt is an open source library for split panes, tabs, and popout windows, built for applications that combine 3D viewports, canvases, charts, settings, and other visualization tools.

Over the last five years of building three.js tools, I kept running into the same problem: my projects would become more complex and eventually outgrow their UI. I’d keep stretching libraries like dat.GUI, lil-gui, or Tweakpane until I had dozens of collapsed folders and was spending more time figuring out where controls should go.

I wanted a flexible way to organize the application around those controls, with room for multiple viewports and different workflows. I figured I couldn’t be the only person running into this problem, so I built Quilt and wanted to share it with others facing the same challenge.

Much of its layout behavior is inspired by Blender, which I’ve always enjoyed for how easily its workspace adapts to different tasks. In Quilt, layouts can be exported and loaded as JSON, so you can save and share different workspace arrangements. Quilt supports vanilla JavaScript/TypeScript, React, and Electron, and your existing controls can live inside its panes.

I’ve benefited a lot from the three.js community over the years, and I hope this is useful to others building increasingly complicated tools.

I’d love to hear from others who have run into similar challenges as their projects have grown. How have you organized more complex interfaces, and what would you need from a library like Quilt to make it useful in your own projects?

If you try it out, I’d appreciate any feedback on the layout behavior, ease of setup, or anything that feels missing or awkward to use. Suggestions for features and examples you’d like to see are welcome too.

Live Demo

Many thanks for taking a look!

5 Likes

This is just great. I have been struggling with this for years. GoldenLayout is a good one, but has limitations. I will be testing your project out, the fact that it’s targeted towards threejs applications is pure gold.

Keep up the good work!

1 Like

The online version works smooth and responsive.

I wonder how it will be if the canvas shows a heavy 3D scene – will it affect the resizing of panes?

Would it be useful to automatically merge empty panes (see first snapshot)? Somehow I ended up with empty area - not a single pane (see second snapshot). How to add a new pane in this case? And one last question: could a pane be a drag-and-drop target?

Thank you, Antonio. Let me know if you have any feedback! And good to know about GoldenLayout. I’ll check it out.

Awesome that you got to try it out.

Resizing scenes based on event listeners is typically like re-rendering the last frame. the consumer library can decide if they want to do it in real time as they resize the panes (mouse down), or only once the resize has been applied (mouse up). I know many desktop applications decide to do the latter for performance reasons.

The API has the option to auto collapse panes if there are no tabs, or leave them open. I can add that to the demo for people to play around with. I left it on by default because you can also pop out any tab into a separate window and put it on a second monitor, for instance, see the image below.

Here’s an example of creating new panes, and dragging and dropping tabs into various areas.

CleanShot 2026-09-29 at 10.45.07 AM

2 Likes