-
-
Notifications
You must be signed in to change notification settings - Fork 16
Why q5?
This wiki page contains a overview of why q5 was developed and chronicles the project's history.
This section was written by @LingDong-
After having used many graphics libraries across many different languages, I have found that the Processing system has one huge advantage over others:
It gets stuff drawn onto the screen quick and easy!
This might sound silly, but it actually means a lot for people concerned with creative expression. The easier it is to try things out, before one's time and patience is up, the greater chance that you'll get something nice in the end. Therefore, although you can theoretically achieve the exact same result in any decent graphics system, the tool does matter in practice. Artists want more time to spend actually working on how their piece looks, instead of wondering why the computer doesn't work as intended.
At Carnegie Mellon University, where I studied computational art, p5.js is taught as the framework for the web, and its been a great introduction. However, due to some of the ways in which p5.js is implemented, I found myself using it less and less as I made more and more projects. Lately, I've found that I'll reach directly for the standard JavaScript/Web APIs instead of p5.js. I sometimes think of this as shedding the training wheels on one's bicycle. But I missed the artist-centered logic of the p5 interface! I started thinking, "Is there a better way?"
Just to clarify, I think the official p5.js implementation is perfectly justified for its philosophy and suitability for its intended purpose, but my own needs are different enough that I think they justify another implementation instead of pull requests to the official one.
In fact, its not uncommon for successful software systems to have multiple implementations of the same spec (think: compilers of C, implementations of SQL, and engines of JavaScript). This allows the user to choose a backend that best suits their goals or needs. When one is using p5.js (or Processing or OpenFrameworks), what one is really using is the same set of commands, the intuitive way of describing drawings, that empowers creative expression. The actual way these commands are implemented internally is incidental; it should be possible to swap internal implementations as necessary.
This section was written by @quinton-ashley
An increase in performance of even a few frames per second can make a significant difference in the user experience of a work of interactive art or a game, especially on mobile devices.
So I thought @LingDong-'s work on q5 and the idea itself had great potential but the codebase was no longer being maintained and seemed abandoned. I fixed all the issues in q5xjs and asked to become a project maintainer but never got a response.
Thus, I decided to fork q5xjs (public domain licensed) and implement more of the p5.js API. My initial goal was just to make it work with p5play.
Thanks to @LingDong-'s design, q5 was pretty well organized, super lightweight, and utilized many modern JS features!
I released q5 v1 in February 2023 and got it working with p5.sound and p5play shortly after.
I started putting more serious work into q5 because unfortunately I had a bad experience with The Processing Foundation. Simple bug fixes I contributed to p5.js took over 5 months to be released. I thought that was unacceptable given how well funded TPF is. Ben Fry, a co-author of Processing, also left TPF in October 2023, claiming that they were wasting the $10 million they were gifted by NFT artists.
For more info, see "q5.js WebGPU: A Love Letter to Processing".
To entice people to switch from p5 to q5, for v2 I added exclusive new features like top level global mode, the q5 module system, and HDR support.
This section was written by @Tezumie
My journey into contributing to q5.js began with a deep passion for creative coding. I initially built my own library, T5.js, from scratch to learn more about the inner workings of a creative coding library. This project was driven by my desire to understand and enhance the process of creating visual art through code.
The q5.js team took notice of my work on T5.js and reached out to suggest we combine our efforts to further develop q5. We shared similar goals: minimizing the size of the library, optimizing performance, and adding much-needed functionalities that p5.js had yet to implement.
One of the aspects I love most about q5.js is its compatibility with p5.js add-ons, something my custom T5.js project lacked. Working with Quinton and the team has allowed me to get creative with new functionalities in q5 as well. We've collaborated on several features.
I genuinely love creative coding and engage with it every day, giving me a deep insight into the needs and potential improvements for a library like q5. My hope is to bring this knowledge and enthusiasm to our work on q5, continually advancing the library to better serve the creative coding community.
This section was written by @quinton-ashley
The p5js.org redesign in October 2024 left a lot of documentation pages in a broken state for months. This vindicated my intuition that p5play's dependence on p5 was a liability. I figured that I wouldn't be able to market p5play to a larger audience without having q5 form a more solid foundation.
Tezumie's Simple Docs framework inspired the UI of q5's Learn pages. I modified it to have a unique q5 branded aesthetic and to accept typescript declaration files. The docs are generated on the fly from q5.d.ts.
By December 2024 I'd written a good portion of the documentation and announced that q5 was ready for public use.
For more info, see "The p5.js Reference Pages are Bad".
Tezumie also helped with the q5-record module.
My most intensive work on q5 occurred during the beta phase of v3's development.
After p5 v2 was released in April 2025, nearly all its non-WebGL related new features were added to q5.
Two years prior in Chrome 113, a new HTML5 canvas backend, WebGPU, was released. This presented me with an exciting opportunity to create an entirely new renderer that could set q5 apart in a more significant way.
My work on q5 WebGPU began in May 2024. I knew nothing about low-level graphics programming when I started, so my initial goal for it to be a "summer project" was a bit overly optimistic! It ended up taking a whole year full of experimentation and refactors in pursuit of highly optimized performance.
q5 v3 is the fastest graphics library for creative coding on the web.
We need your support! Donate via Patreon or GitHub Sponsors.