Skip to content

Releases: taglib/taglib

TagLib 2.3

11 May 08:17
v2.3

Choose a tag to compare

TagLib 2.3 Release - May 10, 2026

  • MP4: Support for chapters (Nero and QuickTime).
  • WAV: Support for BEXT and iXML chunks.
  • FLAC: Support for BEXT and iXML application blocks.
  • Opus: New audio property outputGain().
  • Speed up Matroska reading by using seek head for element lookup.
  • Speed up Matroska writing by offering multiple write style modes.
  • More tolerant handling of files with oversized RIFF chunks, zero size ID3v2
    frames and Matroska chapters without edition.
  • Avoid wrong content-based detection as MPEG files.
  • Fix bitrate calculations for MPEG ADTS and MP4 ESDS.
  • Fix data race with multi-threaded use of MP4::ItemFactory.
  • Fix unbounded recursion in EBML/Matroska MasterElement and MP4 atoms.
  • Limit number of MP4 atoms at top level.
  • Fix writing too many offsets when updating MP4 stco/co64 atoms.
  • Fix k bounds in Shorten Rice-Golomb coding.

TagLib 2.2.1

07 Mar 06:05
v2.2.1

Choose a tag to compare

TagLib 2.2.1 Release - Mar 7, 2026

  • Support edition, chapter and attachment UIDs in Matroska simple tags.
  • Avoid duplicates in Matroska complex property keys.

TagLib 2.2

18 Feb 05:06
v2.2

Choose a tag to compare

TagLib 2.2 Release - Feb 18, 2026

  • Support for Matroska (MKA, MKV) and WebM files.
  • Support for NI STEM in MP4 files.
  • New method isDsd() in WavPack properties.
  • Stricter verification of ID3v2 frames.
  • Fix setting the last header flag in Ogg FLAC files.
  • Fix reading of the last page in Ogg streams.
  • Avoid corrupting invalid Ogg FLAC files without Vorbis comment.
  • Windows: Support MP4 files with 64-bit atoms.
  • Fix use of property keys with non-ASCII characters in C bindings.
  • Fix building with Android NDK 29.

TagLib 2.1.1

30 Jun 04:53
v2.1.1

Choose a tag to compare

TagLib 2.1.1 Release - June 30, 2025

  • Map ID3v2.3 IPLS frames to both ID3v2.4 TIPL and TMCL to have a consistent
    behavior when using MusicBrainz tags with the property map interface.
  • Fix missing include for wchar_t when using C bindings with MinGW.

TagLib 2.1

31 May 03:19
v2.1

Choose a tag to compare

TagLib 2.1 Release - May 31, 2025

  • Support for Shorten (SHN) files.
  • Compile time configuration of supported formats: WITH_APE, WITH_ASF, ...
  • Compile time configuration of data and temporary directories for unit tests:
    TESTS_DIR and TESTS_TMPDIR.
  • C bindings: Added taglib_file_new_wchar() and taglib_file_new_type_wchar().
  • Preserve unicode encoding when downgrading to ID3v2.3.
  • Do not store FLAC metadata blocks which are too large.
  • Fix segfaults with String and ByteVector nullptr arguments.

TagLib 2.0.2

24 Aug 05:22
v2.0.2

Choose a tag to compare

TagLib 2.0.2 Release - Aug 24, 2024

  • Fix parsing of ID3v2.2 frames.
  • Tolerate MP4 files with unknown atom types as generated by Android tools.
  • Support setting properties with arbitrary names in MP4 tags.
  • Windows: Fix "-p" option in tagwriter example.
  • Support building with older utfcpp versions.

TagLib 2.0.1

09 Apr 18:13
v2.0.1

Choose a tag to compare

TagLib 2.0.1 (Apr 9, 2024)

  • Fix aborting when _GLIBCXX_ASSERTIONS are enabled.
  • Fall back to utf8cpp header detection in the case that its CMake
    configuration is removed.
  • Improve compatibility with the SWIG interface compiler.
  • Build system fixes for testing without bindings, Emscripten and Illumos.
  • C bindings: Fix setting UTF-8 encoded property values.
  • Windows: Fix opening long paths.

TagLib 2.0

24 Jan 04:35
v2.0

Choose a tag to compare

TagLib 2.0 Release - Jan 24, 2024

  • New major version, binary incompatible, but mostly source-compatible
    with the latest 1.x release if no deprecated features are used.
    Simple applications should build without changes, more complex
    applications (e.g. extending classes of TagLib) will have to be adapted.
  • Requires a C++17 compiler and uses features of C++17.
  • Major code cleanup, fixed warnings issued by compilers and static analyzers.
  • Made methods virtual which should have been virtual but could not be
    changed to keep binary compatibility, remove related workarounds.
  • Removed deprecated functions:
    • APE::Item::Item(const String &, const String &)
    • APE::Item::toStringList(): Use values()
    • APE::Item::value(): Use binaryData()
    • ASF::Properties::setLength()
    • ByteVector::checksum()
    • ByteVector::isNull(): Use isEmpty()
    • ByteVector::null
    • FLAC::File::setID3v2FrameFactory()
    • FLAC::File::streamInfoData()
    • FLAC::File::streamLength()
    • FLAC::Properties::Properties(File *, ReadStyle)
    • FLAC::Properties::sampleWidth(): Use bitsPerSample()
    • File::isReadable(): Use system functions
    • File::isWritable(): Use system functions
    • FileName::str()
    • FileRef::create(): Use constructor
    • MP4::Tag::itemListMap(): Use itemMap()
    • MPC::File::remove(): Use strip()
    • MPC::Properties::Properties(const ByteVector &, long, ReadStyle)
    • MPEG::File::save(int, ...): Use overload
    • MPEG::File::setID3v2FrameFactory(): Use constructor
    • MPEG::ID3v2::Frame::Header::Header(const ByteVector &, bool)
    • MPEG::ID3v2::Frame::Header::frameAlterPreservation(): Use
      fileAlterPreservation()
    • MPEG::ID3v2::Frame::Header::setData(const ByteVector &, bool)
    • MPEG::ID3v2::Frame::Header::size(unsigned int): Use size()
    • MPEG::ID3v2::Frame::Header::unsycronisation(): use unsynchronisation()
    • MPEG::ID3v2::Frame::checkEncoding(const StringList &, String::Type): Use
      checkTextEncoding(const StringList &, String::Type)
    • MPEG::ID3v2::Frame::headerSize(): Use Header::size()
    • MPEG::ID3v2::Frame::headerSize(unsigned int): Use
      Header::size(unsigned int)
    • MPEG::ID3v2::FrameFactory::createFrame(const ByteVector &, bool)
    • MPEG::ID3v2::FrameFactory::createFrame(const ByteVector &, unsigned int):
      Use createFrame(const ByteVector &, const Header *)
    • MPEG::ID3v2::RelativeVolumeFrame::channelType()
    • MPEG::ID3v2::RelativeVolumeFrame::peakVolume(): Use peakVolume(ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::setChannelType()
    • MPEG::ID3v2::RelativeVolumeFrame::setPeakVolume(const PeakVolume &): Use
      setPeakVolume(const PeakVolume &, ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::setVolumeAdjustment(float): Use
      setVolumeAdjustment(float, ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::setVolumeAdjustmentIndex(short): Use
      setVolumeAdjustmentIndex(short, ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::volumeAdjustment(): Use
      volumeAdjustment(ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::volumeAdjustmentIndex(): Use
      volumeAdjustmentIndex(ChannelType)
    • MPEG::ID3v2::Tag::footer()
    • MPEG::ID3v2::Tag::render(int): Use render(Version)
    • MPEG::XingHeader::xingHeaderOffset()
    • Ogg::Page::getCopyWithNewPageSequenceNumber()
    • Ogg::XiphComment::removeField(): Use removeFields()
    • PropertyMap::unsupportedData(): Returns now const reference, use
      addUnsupportedData() to add keys
    • RIFF::AIFF::Properties::Properties(const ByteVector &, ReadStyle)
    • RIFF::AIFF::Properties::Properties(const ByteVector &, int, ReadStyle)
    • RIFF::AIFF::Properties::sampleWidth(): Use bitsPerSample()
    • RIFF::WAV::File::save(TagTypes, bool, int): Use
      save(TagTypes, StripTags, Version)
    • RIFF::WAV::File::tag(): Returns now a TagUnion, use ID3v2Tag() to get an
      ID3v2::Tag
    • String::isNull(): Use isEmpty()
    • String::null
    • TrueAudio::File::setID3v2FrameFactory(): Use constructor
    • WavPack::Properties::Properties(const ByteVector &, long, ReadStyle)
  • Made methods const: Frame::Header::size(), Frame::headerSize(),
    MP4::Atom::findall(), MP4::Atoms::find(), MP4::Atoms::path().
  • Made classes non-virtual: APE::Footer, APE::Item, ASF::Attribute,
    ASF::Picture, MP4::CoverArt, MP4::Item, ID3v2::ExtendedHeader, ID3v2::Footer,
    ID3v2::Header, MPEG::Header, MPEG::XingHeader, Ogg::Page, Ogg::PageHeader.
  • Removed type definitions in TagLib namespace: wchar, uchar, ushort, uint,
    ulong, ulonglong, wstring: Use the standard types.
  • Removed include file taglib_config.h and its defines TAGLIB_WITH_ASF,
    TAGLIB_WITH_MP4: They were always 1 since version 1.8.
  • Behavioral changes:
    • The basic tag methods (e.g. genre()) separate multiple values with " / "
      instead of " ".
    • The stream operator for String uses UTF-8 instead of ISO-8859-1 encoding.
    • MP4 property ORIGINALDATE is mapped to "----:com.apple.iTunes:ORIGINALDATE"
      instead of "----:com.apple.iTunes:originaldate".
    • MP4 property ENCODEDBY is mapped to "©enc" instead of "©too", which is now
      mapped to ENCODING.
  • Unified interface for complex properties like pictures.
  • Simplified the unified properties interface by providing its methods on
    FileRef.
  • C bindings: Support for properties (taglib_property_...) and complex
    properties like cover art (taglib_complex_property_...), memory I/O streams.
  • Support for Direct Stream Digital (DSD) stream files (DSF) and interchange
    file format (DSDIFF, DFF), ADTS (AAC) files.
  • The runtime version can be queried.
  • Additional utility functions ByteVector::fromUShort(),
    ByteVector::fromULongLong(), ByteVector::toULongLong(),
    ByteVector::toULongLong(), List::sort().
  • Fixed List::setAutoDelete() affecting implicitly shared copies.
  • Build system: Direct support for CMake, find_package(TagLib) exports target
    TagLib::tag.
  • Build system: Fixed PackageConfig to support both relative and absolute paths.
  • Build system: utf8cpp is no longer included, it can be provided via a system
    package or a Git submodule.
  • ASF: Support additional properties ARTISTWEBPAGE, ENCODING, ENCODINGTIME,
    FILEWEBPAGE, INITIALKEY, ORIGINALALBUM, ORIGINALARTIST, ORIGINALFILENAME,
    ORIGINALLYRICIST.
  • ID3v2: Fixed extensibility of FrameFactory, use it also for WAV and AIFF
    files.
  • MP4: Support additional properties OWNER, RELEASEDATE.
  • MP4: Introduced ItemFactory allowing clients to support new atom types.
  • MP4: Detect duration from mvhd atom if not present in mdhd atom.
  • MP4: Fixed type of hdvd atom to be integer instead of boolean.
  • MP4: Tolerate trailing garbage in M4A files.
  • MPC: Fixed content check in presence of an ID3v2 tag.
  • MPEG: Do not scan full file for ID3v2 tag when ReadStyle Fast is used.
  • RIFF: Support properties ALBUM, ARRANGER, ARTIST, ARTISTWEBPAGE, BPM,
    COMMENT, COMPOSER, COPYRIGHT, DATE, DISCSUBTITLE, ENCODEDBY, ENCODING,
    ENCODINGTIME, GENRE, ISRC, LABEL, LANGUAGE, LYRICIST, MEDIA, PERFORMER,
    RELEASECOUNTRY, REMIXER, TITLE, TRACKNUMBER.
  • WAV: Fixed crash with files having the "id3 " chunk as the only valid chunk.
  • Windows: Fixed support for files larger than 2GB.

TagLib 1.13.1

01 Jul 05:56
v1.13.1

Choose a tag to compare

TagLib 1.13.1 Release - Jul 1, 2023

  • Fixed parsing of TXXX frames without description.
  • Detect MP4 atoms with invalid length or type.
  • Do not miss ID3v2 frames when an extended header is present.
  • Use property "DISCSUBTITLE" for ID3v2 "TSST" frame.
  • Build system improvements: Use absolute path for macOS dylib install name,
    support --define-prefix when using pkg-config, fixed minimum required
    CppUnit version.
  • Code clean up using clang-tidy.

TagLib 1.13

27 Oct 02:50
v1.13

Choose a tag to compare

  • Added interface StreamTypeResolver to support streams which cannot be
    fopen()'ed, e.g. network files.
  • Added MP4::File::strip() to remove meta atom from MP4 file.
  • Added Map::value() to look up without creating entry.
  • Use property "WORK" instead of "CONTENTGROUP" for ID3v2 "TIT1" frame,
    use property "WORK" for ASF "WM/ContentGroupDescription",
    use property "COMPILATION" for ID3v2 "TCMP" frame.
  • Build system improvements: option WITH_ZLIB, BUILD_TESTING instead of
    BUILD_TESTS, GNUInstallDirs, FeatureSummary, tests with BUILD_SHARED_LIBS,
    cross compilation with Buildroot, systems without HAVE_GCC_ATOMIC, Clang.
  • Fixed heap-buffer-overflows when handling ASF, APE, FLAC, ID3v2, MP4, MPC
    tags.
  • Fixed detection of invalid file by extension when correct type can be
    detected by contents.
  • Fixed unnecessary creation of map entries in APE and FLAC tags if looked up
    tag does not exist.
  • Fixed parsing of MP4 non-full meta atoms.
  • Fixed potential ID3v1 false positive in the presence of an APE tag.
  • Fixed ID3v2 version handling for frames embedded in CHAP or CTOC frames.
  • Fixed parsing of multiple strings with a single BOM in ID3v2.4.0.
  • Fixed several smaller issues reported by clang-tidy.