What is an example of a plugin API and SDK

Hi I am new to this and am looking for an explanation of terms I am confused about.

JUCE is an IDE, is that correct?
What then is a plugin API?
What is the SDK for a plugin?

Thanks in advance.

API and SDK is a bit redundant, in that case it is synonymous.

A plugin API is the interface which a host can use to call functionality defined in the plugins in order to extend the features of the DAW.
Those are the most notable plugin API:

  • VST3 by Steinberg
  • AU by Apple (Apple only)
  • AAX by Avid (ProTools and MediaComposer only)
  • VST (deprecated, only existing products)
  • LADSPA - a linux plugin API
  • LV2 - also a linux plugin API (not targeted by JUCE)

JUCE is NOT an IDE. The Projucer is a bit of an IDE, but that part is not developed further, so Projucer is actually used to set up projects, that you edit and compile in a “real” IDE like Visual Studio, Xcode, CLion etc.
The same taks can be done without Projucer using cmake, a cross platform project setup tool.

Hope that clears it up a bit

Thanks very much for the rapid reply. Just so I am clear, API & SDK are the same?

So the API is actually the type of plugin AAX, AU, VST3?

So JUCE is a framework?

JUCE → library
Visual Studio, Xcode → IDE
plug-in/add on software → software that is added to a host software that performs specific tasks.

A plug-in example can be a photoshop plug-in that auto-draws a grid for you. Or an audio plug-in that distorts the signal of incoming audio. Or like the RedGiant addons for After Effects.

An IDE is just a software that you build the software in, debug the software and code the software.

A library, like JUCE, works essentially the same way a real library works, rather than having category signs it has namespaces, rather than having book names it has class names, rather than having chapters in the book → it has functions and member variables. It’s like a pre-built store of code that makes it so that you don’t have to hardcode EVERYTHING

API (application programming interface) is a bit of a catch-all term. An API could refer to a single function, a class, a module, a whole framework, etc. An SDK (software development kit) usually refers to a library or framework. So JUCE could be described as an API or an SDK, but the most widely accepted term for it is a framework.

AAX, AU, and VST3 are all different formats for effectively the same thing. The companies that made these different formats also have APIs/SDKs that we can use to develop those different formats. So there’s the VST3 SDK, an AAX SDK, etc.

Good point, I was assuming audio plugins. That mechanism is used in other domains too!

1 Like

Thats great thank you.

Not sure what the technical definition of an IDE is, but I think the Projucer only very loosely fits under that definition. It has a text editor, and it has a compiler (albeit deprecated) - beyond that it’s not much more than a build generator with a GUI interface.

Confusing…So JUCE is all 4, API, SDK, Framework and library?

Indeed, four people explain it in five ways :slight_smile:

API is the interface, often declared in header files with the function names the host will call, so the plugin can provide them in a correct way.

The SDK is often more than the API, it also contains helper code that can be used to satisfy the API.

JUCE is a framework, or you can call it a library. Those terms are synonymous afaict.
But more importantly JUCE is an abstraction layer. I allows you to write plugins, that satisfy several of the mentioned audio plugin APIs. A plugin written in JUCE can be compiled to run in a VST3 host, an AU host like Logic, a LADSPA host like ardour or an AAX host like ProTools.

What features you expect from an IDE is really to your own. There are many things that help with developing that Projucer lacks, e.g. a debugger. I would not recommend trying to develop in Projucer.

An SDK → imagine windows 10. Without a windows 10 SDK you cannot build software for windows 10. Think of it as a platform base. You can’t build an android game without an Android SDK. You can’t port software to MAC or IOS without the appropriate SDK. It is a software Development Kit.

Think of a framework or a library like a software that makes your life 10x easier. It’s pre-written code that can be used to build all types of softwares.
Say for example you create a file with 2 functions; one prints to console, the other deletes all pointers.
Now rather than having to call delete 10x you just call a function “DeleteX” and that function deletes them for you.

// Without a pre-written function
delete list[0];
delete list[1];
delete list[2];

// this makes it faster and easier
void deleteAll(std::vector<int>& listToRemove){
    for(x : listToRemove){
        delete *x;

A library refers to code that provides functions that you can call from your own code to deal with common tasks.

API: Short for Application Programming Interface. This term refers to the “face” of the library, as it is accessible to the programmer. Think of it as a logical representation of what is in the library, and the relevant documentation that explains what the programmer can do with the library.

SDK: Short for Software Development Kit. This is a complete kit of software development tools for a specific platform. This “kit” can include all sorts of things such as: Libraries, APIs, IDEs, Documentation, etc.

A framework is a generic structure that provides a skeleton architecture with which specific software can be implemented. The abstraction allows for common design patterns to be easily reused while still allowing the specific details to be left to the developers.

TL;DR: Framework is the most accurate way to describe JUCE. JUCE has many APIs within it, several SDKs, and several libraries.

Worth bearing in mind that JUCE is split into several modules - each module could be considered a library in itself.

1 Like

Thanks all,
I’m getting there!

1 Like