SuperCollider GUIDES

News in 3.5

A summary of news in SC 3.5

Language-side news


A new cross-platform GUI kit intended to replace Cocoa and an alternative to SwingOSC. See What's new in Qt GUI for more.


A new help-system provides consistent documentation with good introspection and easy searching and browsing.

The help-files are written in a markup language which is then parsed and used to generate HTML files, which are displayed with the new WebView widget inside the HelpBrowser.

See SCDoc, SCDoc Syntax, Writing Help.

Also a new method Help: *methodArgs returns a human-readable string of arguments and default values for a method. Example: Help.methodArgs("")

In SuperCollider version 3.5.2, SCDoc has been rewritten and the parser is now implemented in C++ for speed and stability. The syntax has gotten stricter, and it will throw errors or warnings if there are faults in the documentation. See Writing Help: News in SC 3.5.2 for some important changes to keep in mind.

OSC and MIDI responders

The new OSCFunc and MIDIFunc provides better alternatives to the old OSCresponderNode and NoteOnResponder, etc.

OSCFunc can receive on any port, not only the main NetAddr.langPort.

New Location of Startup file

The sclang startup file has moved to Platform.userConfigDir +/+ "startup.scd". Old platform-specific startup file locations have been deprecated. The new startup file is plain-text, rtf is not supported.

Language configuration files

The linux-only library configuration file has been deprecated. It is replaced by a cross-platform language configuration file, which is located at Platform.userConfigDir +/+ "sclang_conf.yaml" . It can be configured via the LanguageConfig class.


The GEdit plugin sced has been updated to support GEdit version 3.

WiiMote now returns the device object, or nil if it failed.

Bus-asMap in patterns

Bus-asMap symbols are now allowed in \freq and friends in patterns.

Warn on classlib overwrites

Warnings are posted when extensions overwrites methods in main class lib, unless the extensions are put in a subfolder named "SystemOverwrites".

Filesystem utils

New cross-platform filesystem utilities: File: *copy, File: *mtime, File: *mkdir, File: *realpath, File: *type, File: *fileSize


String: -openTextFile now works also on frontends without Document support. It falls back to String: -openOS to open the file with the default application for that file type.

Optional trailing comma

It was already allowed to have a trailing comma in arrays: [1,2,3,], but now it's also allowed in Event construction and message arguments:

(a:1, b:2, c:3,);

    \foo, 1,
    \bar, 2,

myFunc.value(1, 2, 3,);

Various bugfixes

A lot of bugs has been fixed, for example: String regexp primitives, multichannel wrappers of SequenceableCollection,, T2K, WiiMote, SynthDesc.

Interpreter Performance Improvements

The sclang now uses token threading1 instead of one huge switch statement for bytecode dispatching.

PriorityQueue stable order

The PriorityQueue now provides a stable heap order: items of the same time value will have a FIFO order.

plot improvements

plot has been changed to use the Plotter class, which was formerly used by the plot2 methods. plot2 has been deprecated, the old behavior is still available via the plotOld methods, which have also been deprecated.

UI deprecated

The UI class has been deprecated. Its functionality is now provided by the ShutDown and OnError classes.

Panner and XFade classes deprecated

The Panner and XFade classes that been used internally are now deprecated. UGens are better off, implementing the checkInputs explicitly.

Quark files outside DIRECTORY

*.quark files are now allowed to be within the quark itself rather than in the DIRECTORY. This allows manually installed quarks to be easily managed by Quarks: *gui

New error marker

Instead of the non-cross-platform bullet-character (•), the error token in error messages are now underlined with ^^^ characters instead.

For example, the code [a, %%&&**, b] results in:

  line 1 char 10:

  [a, %%&&**, b]

Server-side news

Bitwise ops

The bitwise operators & (and), | (or), xor: (xor), << (left shift) and >> (right shift) are now supported server-side on audio and control signals. Example:

// 8-bit magic
play {
    var t =;
            ((t * 15) & (t >> 5)) |
            ((t * 5)  & (t >> [3, 4])) |
            ((t * 2)  & (t >> 9)) |
            ((t * 8)  & (t >> 11))
            - 3 % 256
        ) / 127-1 * 3
        , 20

VarLag UGen

The new VarLag UGen provides the same functionality as Lag but with linear and other curves.

DelTapWr/DelTapRd UGens

The new DelTapRd and DelTapWr UGen can be used to easily implement multitap delays.


A new method Node: -onFree runs a function when node finished playing.

LocalIn initial value

LocalIn now has an input for initial value.

Close buffers on free

/b_free also free's soundfile if open (like /b_close)

More done flags

Demand, VDiskIn and DiskIn now sets done flag (to be used by Done or FreeSelfWhenDone)

Shared Memory Server Interface

A shared-memory interface to the server has been introduced. This allows scoping and synchronous control bus access for local clients.

HPF/RHPF internal precision

The recursive filter loop for HPF and RHPF has been changed to double-precision in order to avoid quantization noise. Pieces that depend on the quantization noise can make use of the GlitchUGens provided in sc3-plugins, which implement the old behavior.

Plugin entry point

Plugins should use the PluginLoad macro as entry point instead of implementing a load funcion. This allows ABI version checks and ensures that the entry point function is correctly exported from the shared library. See Writing Unit Generators for details.

New FFT Plugin API

A new FFT API for server plugins has been introduced: this simplifies writing FFT ugens in a cross-platform manner, since no external FFT libraries are required.


A new multi-processor implementation of scsynth. Parallelism of the synthesis graph is exposed to the user via the ParGroup class. Supernova is currently linux-only. It is not provided in the OSX/Windows binaries. In order to play patterns inside a ParGroup, the PparGroup can be used. Scsynth emulates parallel groups with groups.

Plugins have to be adapted by acquiring spinlocks when accessing busses or buffers. See Writing Unit Generators for details.