Processing 4.0 is released

Wednesday 16th June, 2021 - Bruce Sterling

*Processing is quite a famous open-source project in the creative-code art world.  It’s been chugging along for two solid decades.  It’s open-source and free, so it doesn’t cost anything and you’re also able to look directly at the code and see what’s going on with it.

Processing art-works are also refreshingly code-centric; they’re art which is about the visual behavior of code.



Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping.
•» Free to download and open source
•» Interactive programs with 2D, 3D, PDF, or SVG output
•» OpenGL integration for accelerated 2D and 3D
•» For GNU/Linux, Mac OS X, Windows, Android, and ARM
•» Over 100 libraries extend the core software
•» Well documented, with many books available
This should be a bit more stable than the last round. I’ve rolled back some of the more aggressive anti-AWT changes (bad for longevity, good for compatibility) so images in particular are now behaving better.
But enough of that, let’s go to the phone lines:
What bugs have been fixed; why should I care?
•Sketch window location is saved once again: re-running a sketch will open the window in the same location. This was broken for a while! #158, #5843, #5781

•When using multiple monitors, new Editor windows will open on the same display as the most recently opened Editor window. #205, formerly #1566

•A major Undo fix, this may even be the big one, but it’s not confirmed. (Please help confirm!) #175

Were you too hasty with exorcising AWT?
•cursor(PImage) broken everywhere because PImage.getNative() returns null #180

•PImage.resize() not working properly. #200

•copy() not working correctly. #169

Did you find any particularly niggling, but small issues?
•Catch NoClassDefError in Platform.deleteFile() (still unclear of its cause) on Big Sur. #159, #6185

•Fixed Exception in thread “Contribution Uninstaller” NullPointerException when removing an installed contribution. #174

•If the default display is selected in the Preferences window, store that, rather than its number. It was discovered that plugging in a second display could bump the “default” display to number 2, even while it was still selected. Yay!

•Sort out calling unregisterMethod() for dispose from dispose() makes for bad state situation. #199

How about contributions from the community?
•Don’t sort user’s charset array when calling createFont(). #197, #198
•Some exciting things are on the way for the documentation and web site. #191

•Update Batik to 1.14. #179, #192, #183

•Tweak the circle for number of updates based on Akarshit’s initial attempt. #201, #4097

•Make parseJSONObject() and parseJSONArray() return null when parsing fails. #165, #166

Is there anything new?
•Added PVector.setHeading() for parity with p5.js. #193
•The default font (what you get if textFont() isnot used) has been changed to Source Sans instead of Lucida Sans. I just couldn’t take Lucida any longer.
Were there any internal changes I probably won’t notice?
•Updated to JDK 11.0.11+9

•Update from JNA 5.2.0 to 5.7.0

•Modernize the RegisteredMethods code to use collections classes w/ concurrency. #199

•Set closed issues to automatically lock after they’ve been closed for 30 days. (This has no effect on open issues, only closed ones.) Actually this one you may have noticed if you had a lot of notifications turned on.

•Slowly transitioning some of the older code to newer syntax (lambda functions, etc). This is not a priority for anyone else: it’s being done slowly, and as a chance to do code review on some very old work.

•Fix textMode(SHAPE) is not supported by this renderer message with SVG Export. #202, #6169