NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #198 most downloaded on Packagist
CSV data manipulation made easy in PHP
Last release 9 months ago
27 Dec 2025
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
83 releases · first in 2013
Writer::setNewline , Writer::getNewline to control the newline sequence character added at the end of each CSV row.
Writer::setNewline , Writer::getNewline to control the newline sequence character added at the end of each CSV row.Reader::fetchAssoc now also accepts an integer as first argument representing a row index.
Reader::fetchAssoc now also accepts an integer as first argument representing a row index.One column per quarter.
### Added - Nothing ### Deprecated - Nothing ### Fixed - Bug Fixed detectDelimiterList ### Removed - Nothing
detectDelimiterListStream Filter API in League\Csv\AbstractCsv
League\Csv\AbstractCsvcreateFromPath and createFromFileObject in League\Csv\AbstractCsv to ease CSV object instantiationdetectDelimiterList in League\Csv\AbstractCsv to replace and remove the use of RuntimeException in detectDelimitersetEncodingFrom and setDecodingFrom in League\Csv\AbstractCsv to replace setEncoding and getEncoding for naming consistencynewWriter and newReader methods in League\Csv\AbstractCsv to replace Writer::getReader and Reader::getWriterLeague\Csv\Reader::each more strict $callable MUST returns trueLeague\Csv\AbstractCsv::detectDelimiterLeague\Csv\AbstractCsv::setEncoding and League\Csv\AbstractCsv::getEncodingLeague\Csv\Reader::setSortByLeague\Csv\Reader::setFilterLeague\Csv\Reader::getWriterLeague\Csv\Writer::getReaderLeague\Csv\Reader::fetchColLeague\Csv\Writer::setColumnsCount, League\Csv\Writer::getColumnsCount, League\Csv\Writer::autodetectColumnsCount to enable column consistency in writ
League\Csv\Writer::setColumnsCount, League\Csv\Writer::getColumnsCount, League\Csv\Writer::autodetectColumnsCount to enable column consistency in writer modeLeague\Csv\Reader::fetchColumn replaces League\Csv\Reader::fetchCol for naming consistencyLeague\Csv\Reader::fetchCol$open_mode defaults to r+ in League\Csv\AbstractCsv constructors
$open_mode defaults to r+ in League\Csv\AbstractCsv constructorsLeague\Csv\Writer::setNullHandlingMode and League\Csv\Writer::getNullHandlingMode to handle null value
League\Csv\Writer::setNullHandlingMode and League\Csv\Writer::getNullHandlingMode to handle null valuesetting ini_set("auto_detect_line_endings", true); no longer needed for Mac OSLeague\Csv\Reader::addSortBy, League\Csv\Reader::removeSortBy, League\Csv\Reader::hasSortBy, League\Csv\Reader::clearSortBy to improve sorting
League\Csv\Reader::addSortBy, League\Csv\Reader::removeSortBy, League\Csv\Reader::hasSortBy, League\Csv\Reader::clearSortBy to improve sortingLeague\Csv\Reader::clearFilter to align extract filter capabilities to sorting capabilitiesLeague\Csv\Reader::setSortBy replaced by a better implementationLeague\Csv\Reader::setOffset now defaults to 0;League\Csv\Reader::setLimit now defaults to -1;detectDelimiter bug fixesLeague\Csv\Reader::each to ease CSV import data
League\Csv\Reader::each to ease CSV import dataLeague\Csv\Reader::addFilter, League\Csv\Reader::removeFilter, League\Csv\Reader::hasFilter to improve extract filter capabilitiesdetectDelimiter method to League\Csv\AbstractCsv to sniff CSV delimiter character.League\Csv\Reader::setFilter replaced by a better implementationChange namespace from Bakame\Csv to League\Csv
Bakame\Csv to League\Csv$open_mode validation is done by PHP internals directly
$open_mode validation is done by PHP internals directlytoXML method to transcode the CSV into a XML in Bakame\Csv\AbstractCsv
toXML method to transcode the CSV into a XML in Bakame\Csv\AbstractCsvtoHTML method bug in Bakame\Csv\AbstractCsvoutput method accepts an optional $filename argumentBakame\Csv\Reader::fetchCol defaults to $columnIndex = 0Bakame\Csv\Reader::fetchOne defaults to $offset = 0Move from PSR-0 to PSR-4 to autoload the library
PSR-0 to PSR-4 to autoload the libraryBakame\Csv\Reader methods fixed
Bakame\Csv\Reader methods fixedjsonSerialize bug fixedgetEncoding and setEncoding methods to Bakame\Csv\AbstractCsv
getEncoding and setEncoding methods to Bakame\Csv\AbstractCsvBakame\Csv\Writer::insertOne takes into account CSV controlstoHTML method takes into account encodingBakame\Csv\Reader::fetchOne is no longer deprecated
Bakame\Csv\WriterBakame\Csv\Writer and Bakame\Csv\Reader extend Bakame\Csv\AbstractCsvBakame\Csv\Reader::fetchOne is no longer deprecatedBakame\Csv\Reader::fetchCol no longer accepts a third parameter $strictBakame\Csv\Codec now the library is composer of 2 main classesBakame\Csv\Reader::getFileBakame\Csv\Reader::fetchValueBakame\Csv\Reader no longer implements the ArrayAccess interfaceBakame\Csv\Reader implements IteratorAggregate Interface
Bakame\Csv\Reader implements IteratorAggregate InterfaceBakame\Csv\Reader::createFromString to create a CSV object from a raw stringBakame\Csv\Reader::query accept an optional $callable parameterBakame\Csv\Reader::getFile in favor of Bakame\Csv\Reader::getIteratorBakame\Csv\ReaderInterface useless interfaceBakame\Csv\Reader::fetch* $callable parameter is normalized to accept an arrayBakame\Csv\Reader::fetchCol accepts a third parameter $strictBakame\Csv\Reader implements the following interfaces JsonSerializable and ArrayAccess
Bakame\Csv\Reader implements the following interfaces JsonSerializable and ArrayAccessBakame\Csv\Reader::toHTML to output the CSV as a HTML tableBakame\Csv\Reader::setFilter, Bakame\Csv\Reader::setSortBy, Bakame\Csv\Reader::setOffset, Bakame\Csv\Reader::setLimit, Bakame\Csv\Reader::query to perform SQL like queries on the CSV content.Bakame\Csv\Codec::setFlags, Bakame\Csv\Codec::getFlags, Bakame\Csv\Codec::__construct : add an optional $flags parameter to enable the use of SplFileObject constants flagsBakame\Csv\Reader::fetchOne replaced by Bakame\Csv\Reader::offsetGetBakame\Csv\Reader::fetchValue useless methodBakame\Csv\Reader::output output the CSV data directly in the output buffer
Bakame\Csv\Reader::output output the CSV data directly in the output bufferBakame\Csv\Reader::__toString can be use to echo the raw CSVBakame\Csv\Reader::fetchAssoc when users keys and CSV row data don't have the same length
Bakame\Csv\Reader::fetchAssoc when users keys and CSV row data don't have the same lengthBakame\Csv\Codec::loadStringreturns a Bakame\Csv\Reader object
Bakame\Csv\ReaderInterfaceBakame\Csv\Reader classBakame\Csv\Codec::loadStringreturns a Bakame\Csv\Reader objectBakame\Csv\Codec::loadFile returns a Bakame\Csv\Reader objectBakame\Csv\Codec::save returns a Bakame\Csv\Reader objectBakame\Csv\CsvCodec class renamed Bakame\Csv\Codec
Bakame\Csv\CsvCodec class renamed Bakame\Csv\CodecBakame\Csv\Codec::create from public API[Next]: https://github.com/thephpleague/csv/compare/9.12.0...master [9.10.0]: https://github.com/thephpleague/csv/compare/9.9.0...9.10.0 [9.9.0]: http
Initial Release of Bakame\Csv
Your coding agent can read these notes before it upgrades. Set up the MCP server →