A Guided Tour of the SC Source


Hey All,

I’ve wanted to contribute to SC for a while now and, every now and again, I try to get a grip on how SC is put together by roaming around the SC source on Github. It’s a much bigger project than anything I’ve ever worked on myself and obviously many decades of work have gone into it, so there’s a lot of content.

To get more people who are kind of intermediate programmers but would like to contribute, even in smaller ways, to the main SC project outside of Pseudo Ugens, a general overview of the various parts of the source and how they fit together would be very helpful.

I understand that this may be quite a lot of work but I thought I’d mention it as something that might help more people be able to contribute in the long term.



There is a good chapter on the server in the SuperCollider book which is very helpful. I think it’s online somewhere. Also Brian Heim has also been working on better documenting the source.

A really good project might be to do it yourself. By documenting the code you’ll find you’ll develop a better understanding, and it will give you a good excuse to ask questions of the developers.


the Project structure section of DEVELOPING.md is good.

here are the directories i tend to visit the most:

  • server/scsynth/ - source code for scsynth
  • server/supernova/ - source code for supernova
  • server/plugins/ - source code for all ugens
  • HelpSource/ - help files
  • SCClassLibrary/ - class library
  • lang/LangSource - core sclang source
  • lang/LangPrimSource - most primitives
  • QtCollider/ - sclang Qt GUI primitives
  • editors/sc-ide/ - the IDE

there are some things i actually don’t like about this structure, like the qt gui primitives hanging out at the top level and the inconsistent capitalization of directories. in general there are too many top-level directories. i think we shoud reorg it at some point.

for new contributors i highly recommend looking at our “good first issues” tag. if you see one that seems within reach, many contributors including me would be happy to help you through the process.


This is also covered in Developing.md in the main repo.


I’ll do some “good first issues” and try to document what makes sense. Thanks guys.