0.16.1: 21 Jun 2026

* updated to pd vanilla 0.56-5

0.16.0: 30 May 2026

* updated to pd vanilla 0.56-3

* added support for Emscripten (Claude Heiland-Allen)

* Emscripten: added emscripten sample projects (Claude Heiland-Allen)

* C#: removed libpd_get_instance() stub declaration
      (reported by Charles K. Neimog, fixed by Thomas Mayer)

0.15.0: 21 Oct 2025

* updated to pd vanilla 0.55-2

* C: renamed ringbuffer to z_ringbuffer to match integration in upstream
     pure-data repo, this may require updating existing projects
* C: added Emscripten support (via updates to pure-data)
* C: define _DARWIN_UNLIMITED_SELECT to increased max number of file
     descriptors on macOS to > 1024
* C: portaudio sample now prints audio device info

* ObjC: modernized xcode projects, min deployment target now iOS 12
* ObjC: fixed Swift UI PdAudioUnit crash due to input buffer being used when
        input is disabled (anvlkv)
* ObjC: fixed buffer issue due to legacy rounding for io buffer duration, seems
        to be no longer needed on modern ios (reported by Oliver Greschke)
* ObjC: fixed warning by explictly synthesizing PdAudioController audioUnit
        property
* ObjC: added PdAudioController overrideMutedMicrophoneInterruption option
        (robertesler)

* C++: added PdBase setVerbose() and isVerbose()
* C++: fixed print errors when misusing receiveMessages/receiveMidi, updated
       stale comments referring to message queue behavior (Evgeny Kochetkov)

* Java: updated opensl_stream to fix compilation on Android (Antoine Rousseau)
* Java: fixed regeneration of jni/z_jni.h, javah is deprecated (Antoine Rousseau)
* Java: added versionString() (Antoine Rousseau)
* Java: added PdBase setVerbose() function (anvlkv)
* Java: refreshed jni/z_jni.h (Antoine Rousseau)

* added Github CI workflow (Jean-Michaël Celerier)
* various CMake fixes (Jean-Michaël Celerier)

0.14.1: 2023 Dec 24

* Makefile: fixed HAVE_ALLOCA_H and HAVE_ENDIAN_H being defined for Windows
            (reported by Davide Gagliardi)
* Makefile: fixed libdl being linked on Windows, link winsock (Christof Ressi)
* Makefile: do not define HAVE_ALLOCA_H or link libdl on BSD (Luc Hondareyte)

* Python: updated setup.py to handle HAVE_ALLOCA_H, HAVE_ENDIAN_H, and libs
          conditionally based on platform in order to match Makefile behavior

0.14.0: 2023 Nov 10

* updated to pd vanilla 0.54-1

* C: define _DARWIN_C_SOURCE with HAVE_MACHINE_ENDIAN_H to fix endianness
     warning on macOS, for now (hopefully not needed in future pd versions)
* C: added pdtest_portaudio example
* C: added missing pdtest example gitignore

* ObjC: modernized xcode projects, updated min deployment target to iOS 11 &
        macOS 10.13
* ObjC: enabled mac catalyst support (Seth Sandler)
* ObjC: added auto io handling to iOS example

* C++: fixed unused param, signed comparison, and ret type warnings (Mike Will)

* C#: NuGet packaging updates (Thomas Mayer)
* C#: MuliInstance -> MultiInstance example naming fix (Thomas Mayer)

* Python: various updates and fixes to the pygame examples (Mike Will)

* Java: updates for native arm64 support on macOS (funkyfourier)

* Makefile: use JAVA_HOME on macOS instead of /System/... path,
            link JavaNativeFoundation framework instead of JavaVM (funkyfourier)
* Makefile: now install m_imp.h and g_canvas.h for externals (Tiago Rezende)

* added a Rust section to the main README.md (Ali Somay)

0.13.2: 2022 Dec 16

* updated to pd vanilla 0.53-1

0.13.1: 2022 Nov 13

* whoops forgot to update ObjC layer and Xcode project

0.13.0: 2022 Nov 05

* updated to pd vanilla 0.53-0

* fixed bad readme link to wiki
* removed defunct libpd.cc link for now

* C: print and midi hooks finally per-instance (!)
* C: added double precision support: libpd_read_array_double(),
     libpd_write_array_double(), libpd_double(), libpd_add_double(),
     libpd_set_double(), t_libpd_doublehook, libpd_set_doublehook(),
     libpd_get_double() (IOhannes Zmoelnig)
* C: added libpd_set_instancedata() & libpd_get_instancedata() for optional
     per-instance user data storage
* C: added t_libpd_freehook type
* C: fixed libpdinstance_new() memory issue
* C: fixed ringbuffer mem barrier on Windows (Ali Somay)
* C: call socket_init() during libpd_init() for Windows (reported by Ali Somay)

* C++: added pd::PdBase per-instance support
       note: when compiled with PDINSTANCE defined, PdBase calls
             libpd_set_instance() internally so existing projects which use the
             libpd_*_instance() functions manually may need to be updated
* C++: fixed pd::List.toString() trailing whitespace

* C#: added per-instance support (Thomas Mayer)

* Cocoapods: fixed clone unauthenticated git protocol error by moving to https
             submodule urls (reported by Ricardo de Amorim), run the following
             after updating a repo:
             git submodule sync --recursive && git submodule update --init
* Cocoapods: updated podspec to exclude libpd files included with puredata
             source itself for now (Ricardo de Amorim)

* Java: fixed build by filename typo fix and adding $(JAVA_HOME)/include to
        Linux search paths (funkyfourier)

* Python: Makefile now builds with python3 (Shakeed Alireza)

* CMake: fixed libm variable name (Jean-Michaël Celerier)
* CMake: removed unnecessary BSymbolic flag on Windows (Jean-Michaël Celerier)

* various readme updates and clarifications
* added pdtest_double and pdtest_queued c samples
* added pdtest_multi cpp sample

0.12.3: 2021 Jun 12

* libpd.xcodeproj macOS targets no longer install static lib or copy public
  headers to avoid creating generic archives instead of app archives

* ObjC: added basic audio session mode handling to PdAudioController
* ObjC: added note about setting videoRecording mode when using
        allowBluetoothA2DP option (suggested by lwinged)

0.12.2: 2021 May 31

* fixed pd~ core external sources not included in libpd.xcodeproj
  (reported by d01101010m)

* CMake updates (Max Neupert, Clemens Wegener):
  - update CMakeLists.txt with vars for pthread paths
  - min version now 2.8.12
  - fixed math library not found 

0.12.1: 2021 Jan 08

* added pd~ core external to build

* Cocoapods: fixed build error due pd~/binarymsg.c (reported by David Plans)
* Cocoapods: added basic macOS platform support

* ObjC: fixed conversion, unused variable, and format string warnings

* C++: added resizeArray(), processRawShort(), & processRawDouble() wrappers
* C++: general header formatting refresh

0.12.0: 2020 Dec 30

* updated to pd vanilla 0.51-4
* switched pure-data submodule to github

* Makefile: added FAT_LIB option to build universal "fat" libs on macOS
* Makefile: added STATIC option to build a static libpd.a (clwe),
            note: still requires updates to the pd core to work on all platforms
* Makefile: fixed install when LIBPD_IMPLIB or LIBPD_DEF are empty (Sou Bunnbu)
* Makefile: build libpd sources before pure-data (IOhannes Zmoelnig)
* Makefile: use POSIX-compliant shell-syntax (IOhannes Zmoelnig)

* CMake: fixed libm not found (André Schlinke)
* CMake: write output into build directory instead of source tree (John Keeping)

* Cocoapods: updated to requires_arc = true (amethystdeceiver)

* C: fleshed out headers with full documentation comments
* C: added libpd_resize_array()
* C: added libpd_process_raw_short() & libpd_process_raw_double() (Thomas Mayer)
* C: added pd core version post to libpd_init()
* C: libpd_get_symbol() now returns a const char*
* C: libpd_queued_init()/libpd_queued_free() are now safe to call multiple times
* C: libpd_queued_init() now returns -2 on a ring buffer allocation error
* C: added ring buffer write_value and clear functions

* Java: fixed zip path traversal vulnerability which was causing a Google Play
        security alert (Ragu Pattabi)

* ObjC overhaul:
  - updated min deployment target to iOS 9
  - fixed sample rate handling on newer devices, now independent of hardware
  - added IO buffering when audio unit sample rate conversion is being performed
  - added new PdAudioController configure methods to specify separate number of
    input and output channels
  - added easy to use PdAudioController audio session category options
    properties, ie. Bluetooth, AirPlay, etc
  - added PdAudioController convenience support for configuring Record and
    MultiRoute categories
  - PdAudioUnit uses the basic AudioUnit v2 to v3 bridge (single instance only)
  - PdBase message queuing can now be overridden by new
    initializeWithQueue: class method
  - formatting improvements and documentation porting from z_libpd.h
* ObjC: fix string corruption by using UTF8 instead of ASCII string encoding
* ObjC: added virtual destructors to silence warning in Xcode (Jim Azur)

* C#: added instance based API (Thomas Mayer)
* C#: fixed conflicting .NET dll in NuGet package (Thomas Mayer)

* Python: basic syntax updates for Python 3
* Python: added PYTHON makefile option to set python command
* Python: pylibpd version now 0.12, should have tracked versions before...

* pdtest C sample: now returns -1 if open file fails
* pdtest_gui C sample: now uses libpd_*_instance functions
* pdtest_gui C sample: Windows build fixed (reported by Diego Barrios Romero)
* pdtest_rtaudio C++ sample: fixed build error & updated to rtaudio 5.1.0
* pdtest iOS ObjC sample now displays an AVRoutePicker button on iOS 11+

* various readme updates and clarifications

0.11.0: 2018 Sep 13

* updated to pd vanilla 0.48-2
* the libpd C core is now thread safe
* support for multiple libpd instances is more or less working, see new
  libpd_*_instance() api and pdtest_multi/pdtest_thread C samples,
  note: language wrappers are not yet updated with the new APIs
* libpd can now open a patch in the Pd vanilla GUI directly, see the new
  libpd_startgui()/libpd_stopgui() functions and the pdtest_gui C sample
* enable/query verbose printing with new libpd_set_verbose()/libpd_get_verbose()
  functions (Pierre Guillot)
* no longer build s_file.c as desktop settings have no real meaning for libpd,
  this also fixes iOS build error due to system calls being removed in Xcode 9
* libpd binaries built with MinGW now work in Visual Studio (see readme)
* updated ringbuffer atomics macros to use C11 stdatomics.h if available,
  this fixes deprecation warning on macOS 10.12
* fixed possible crash due to stale printhook pointer (reported by Niall Moody)
* fixed bug in libpd_sysex which masked 8 bit bytes, the MIDI spec allows 8 bit
  bytes except for realtime messages
* fixed [declare -stdpath] crash (reported by Pierre Guillot)

* Makefile: UTIL=true, EXTRA=true, LOCALE=false are now defaults
* Makefile: added MULTI option to build libpd with multiple instance support
* Makefile: installs libpd .def and .lib files on Windows
* Makefile: builds working pd.dll needed by externals on Windows (Spacechild1)
* Makefile: C++ headers are now conditionally installed if built with UTIL=true
* Makefile: use default optimzations from pd: fast math, loop unrolling, etc 
* Makefile: DEBUG option now sets "-O0 -g" instead of "-Wall"
* Makefile: "make install" now uses install command and sets permissions
* Makefile: fixed install bug when libdir doesn't exist (Wim Muskee)
* Makefile: added BSD build support (Luc Hondareyte)
* Makefile: added ADDITIONAL_LDFLAGS (Pierre Guillot)
* Makefile: added javadoc & javasrc targets (suggested by Pooya Moradi)

* CMake: added CMakeLists.txt for cmake support (Diego Barrios Romero)

* C: const int tick argument in libpd_process functions (Pierre Guillot)
* C: const float src argument in libpd_write_array (Pierre Guillot)

* C++: transitioned to all-header library and removed "cpplib" make target,
       you may need to add `libpd_wrapper/util` to you include paths, this also
       makes it possible to use libpd compiled by MinGW & C++ with Visual Studio

* Java: added PortAudio support, build using PORTAUDIO=true makefile option
* Java: allow custom natives loading by implementing PdBaseLoader class (MGSX)
* Java: fixed Windows pthread naming in PdBaseLoader (reported by Pooya Moradi)
* Java: moved javatest to samples/java
* Java: removed out of date dist/libpd.jar

* ObjC: iOS 8 is now the min-deployment target, now using ARC, modernized syntax
* ObjC: macOS Xcode project universal build by default
* ObjC: added PdAudioController default category option methods for subclassing
* ObjC: PdAudioController should always restart on audio interruption
* ObjC: PdFile now checks for file existence before opening
* ObjC: fixed cocoapods swift build by only exposing obj folder (Cerupcat)
* ObjC: fixed PdAudioController playback stopping when another app starts
        playing by setting MixWithOthers option for Playback category
        (Alexander Randon)
* ObjC: general source commenting & formatting improvements

* added pdtest_freeverb C sample (a project with a working external!)
* added pdtest_thread C sample (Pierre Guillot)
* updated Xcode projects for Xcode 9
* added Travis-CI support for C (Pierre Guillot)

0.10.0: 2016 Sep 24

* updated to pd vanilla 0.47-1
* fixed divide by 0 when opening a patch by calling sys_startgui() in
  libpd_init() (provided by Pierre Guillot)
* added LIBPD_SETLOCALE define & makefile SETLOCALE option to explicitly set
  "C" numeric locale in libpd_init() (Thomas Mayer)
* C#: major updates to build system to support 64bit (thanks to Thomas Mayer!)
  * mingw_build.bat -> mingw32_build_csharp.bat
  * mingw_build64.bat -> mingw64_build_csharp.bat
* C#: added NuGet packages for .NET and Mono (Thomas Mayer)
* C#: added NAudio example (Thomas Mayer)
* C++: removed C++11 version check for mutex, better to simply honor use of the
       LIBPD_USE_STD_MUTEX define (Benjamin Porter)
* Python: fixed duplicate symbol error by setting -fcommon
          when building (reported by David Glivar)

0.9.2: 2016 Aug 04

* ObjC: fixed bug where audio was not being routed to speaker when initing
        AVAudioSession, also fixes possible session setup fail where the
        PdAudioUnit will not run

0.9.1: 2016 Jun 06

* ObjC: fixed wrong selectors in PdMidiListener
* ObjC: fixed AudioSessionSetProperty deprecations in PdAudioController
* C++: simplified PdBase locking with _GUARD() macro
* C++: added mutex lock()/unlock() functions, PdContext now protected,
       mutex now private
* Podspec: fixed duplicate symbol link error by adding -fcommon
* Podspec: C++ layer no longer added by default
* added mingw_build64 batch script

0.9.0: 2016 May 31

* updated to pd vanilla 0.47-0
  * new clone object
  * expr is now BSD licensed
  * HAVE_ALLOCA_H no longer required
* ringbuffer now uses OS-specific atomics
* build cpplib with UTIL files since it always uses the ringbuffer
* ObjC: added access to PdFile t_pd pointer, deprecation warning fixes
* ObjC: fixed AVAudioSession method call on iOS 5 and below (diglesia)
* C++: allow re-init without clearing current subscribers
* Android: print concatenation layer added to jni (tkirshboim)
* added audio api libs to pdtest_rtaudio

0.8.3: 2015 Sep 29

* CocoaPods podspec now actually works (thanks Yair Szarf!)

0.8.2: 2015 Jul 23

* added CocoaPods podspec file 
* updated pure-data upstream branch which removes debug print
* changed pure-data git submodule back to Pure Data sourceforge link

0.8.1: 2015 Jun 16

* ringbuffer bugfix to ensure compound messages do not cause a race condition
* moved java tests back to root dir to match Java/Eclipse standard
* updated Java tests

0.8.0: 2015 Apr 27

* tracking vanilla 0.46-6 (in 0.46 branch + multi instance bugfix)
* pure-data source folder is now a submodule from the pd Sourceforge git
* added LIBPD_EXTRA define to call pure-data/extra extern setup functions
  in libpd_init()
* added UTIL and EXTRA Makefile vars to for conditional compilation of
  libpd_wrapper/utils and pure-data/extra extern sources into libpd
* added DEBUG Makefile var to control build optimizations
* added rudimentary install & uninstall makefile targets
* added -DHAVE_ALLOCA_H, _DHAVE_LIBDL, and -ldl on OSX in libpd.xcodeproj
* [netsend] & [netreceive] now working in libpd (thanks Chris!)
* Android: fixed makefile for 0.45-4+ source changes
* C++: added optional ringbuffer usage to init(), removed messaging queue
* C++: added C++11 std::mutex locking, compile with LIBPD_USE_STD_MUTEX
* C++: added "cpplib" Makefile target to build libpd + C++ wrapper
* ObjC: PdAudioUnit can now be subclassed
* ObjC: deprecation fix, use AVAudioSession IOBufferDuration if available
* reorganized all samples & tests by language
* updated C & C++ sample Makefiles so samples build and run on OSXi
* added multi instance example 

0.7.0: 2014 May 01

* merged with vanilla 0.45-4
* added upstream fix for iOS 64-bit function pointer crash
* replaced exposed hook function pointers with setter functions
* fixed iOS 6 deprecated AVAudioSession warnings
* expr~ licensing now definitively LGPL
* now using OpenSL for audio on Android
* added isValid method to ObjC PdFile

0.6.0: 2013 Mar 13

* ObjC API refactoring: added midi message passing & manual polling
* added z_queued ringbuffer message layer
* added z_util concatenated print message layer
* ring buffer now uses gcc atomics

0.5.0: 2013 Jan 08

* added C# wrapper & minigw build support
* added support for including native libraries in libpd.jar
* cross platform compilation improved
* fixed backward compatibility with Android 1.5
* Processing support has moved to a separate repository
* fixed midi port numbering inconsistency

0.4.0: 2012 Mar 22

* added C++ wrapper
* refactored JavaSound sample for easier reuse
* merge with vanilla 0.43-1
* revised Java PdListener

0.3.0: 2012 Jan 08

* major updates to the ObjC wrapper
* ignoring SIGFPE to fix crash on Android 4 (ICS)
* make sure the default audio routing is the speaker in iOS
* 64 bit fix, added support for arbitrary length lists
* removed mem allocation in ObjC audio thread
* message buffer size now settable
* added AudioUnit to ObjC wrapper

0.2.0: 2011 Apr 25

* added C++ compiler support
* merge with vanilla 0.43
* added array access functions
* added Python wrapper
* added midi functions
* iOS examples have moved to a separate repository

0.1.0: 2010 Nov 21

* initial libpd
