The Portable Components (POCO) C++ Libraries are computer software, a set of class libraries for developing computer network-centric, portable applications in the programming language C++, and can supplement the C++ Standard Library. The libraries cover functions such as threads, thread synchronizing, file system access, streams, shared libraries and class loading, Internet sockets, and network communications protocols (HTTP, FTP, SMTP, etc.), and include an HTTP server, and an XML parser with SAX2 and DOM interfaces and SQL database access. The modular and efficient design and implementation makes the libraries well suited for embedded system development.

The libraries are free and open-source software distributed under the Boost Software License 1.0.

Overview POCO is a set of C++ libraries providing users with library support similar to that found in other development environments, like the Java Class Library, .NET Framework, or Apple's Cocoa. POCO is centered on network-centric application domains and developed with modern ANSI/ISO Standard C++ and C++ Standard Library facilities and techniques with emphasis on powerful functionality, ease of use, and consistency. Governed primarily by code quality, consistent style and unit testing, POCO is highly portable, and already ported to a variety of different platforms.

It describes itself as not a replacement to Boost, but rather can be used complementarily with Boost and the C++ standard library, stating "In regards to Boost, in spite of some functional overlapping, POCO is best thought of as a Boost complement (rather than replacement). Side-by-side use of Boost and POCO is a very common occurrence."

Library One design goal of many targeted decisions are based around POCO C++ providing an easy-to-use component library that works out of the box. , the libraries are available in two package formats: the basic and the complete editions. The complete edition covers NetSSL, Crypto, Zip, and Data abilities, among others. The basic edition does not, and thus eliminates dependence on external facilities such as OpenSSL, ODBC, and MySQL dependencies. Its namespace and module are both named Poco.

Being open source enables and encourages development of further library functions. Design and development of existing and upcoming library support is driven by the pragmatic needs of the user base. Library additions occur in a sandbox development environment and are reviewed and integrated into the main library releases as approved by the core development team with input from contributors.

POCO also provides a proprietary "POCOPRO C++ Frameworks" library offering web services frameworks, open service platform with web application servers, authentication with OAuth and one-time passwords, and Internet-of-Things edge computing with datapoint APIs and JavaScript engines, and remote access (HTTP, Secure Shell (SSH), Secure Copy Protocol (SCP), SSH File Transfer Protocol (SFTP)) and remote desktop through macchina.io. It is available for free usage, but requires a licence file () placed in the home directory, which can be obtained from the POCO Project website (once a source code licence is purchased, the licence file is no longer necessary).

Library hierarchy , POCO C++ Libraries are split into five core libraries with optional add-on libraries available with each release. It is designed to resemble the Java standard library or .NET standard library. Its design and hierarchy has received praise from some, who consider it well-designed.

The component libraries cover the following areas that can be found in the complete edition:

Foundation () Platform abstraction – Eases porting issues of fundamental types, etc. Memory management – Resource Acquisition Is Initialization (RAII), smart pointers, reference counting garbage collection, etc. String utilities Error handling – Extended exception classes Streams – Encoding and decoding and filtering support Threads – Concurrent processing support Date and time – Date and time support including formatting and high precision timers File system – Abstracted file system support Logging – Application and system logging, filtering and logging strategies Processes – Interprocess communication and memory sharing Shared libraries – Dynamic library support Notifications – Abstracted notification support Events – Abstracted event support and strategies Text – Unicode encoding support Regular expressions – Based on Perl compatible regular expression URI – Universal Resource Identifier support UUID – Universally Unique Identifiers support and generators Cache support – Abstracted strategy support

Active Record () Classes and framework for implementing the active record pattern

C++ Parser () Utilities for parsing the C++ language

Cryptography () Cryptography – Random number generation, Digests and encoding/decoding engines Ciphers Elliptic curve cryptography support RSA cryptosystem support X.509 public key certificate support OpenSSL APIs

DNS Service Discovery () DNS Service Discovery support Avahi and Bonjour support

Data () APIs for interacting with SQL (generally similar to the Java Database Connectivity (JDBC) API) Classes for SQL statements, connections, columns, etc. MySQL support Open Database Connectivity (ODBC) support PostgreSQL support SQLite support

JSON () APIs for reading and writing JSON (JavaScript Object Notation) data format

JWT () APIs for reading and writing JSON Web Tokens (JWT)

MongoDB () APIs for interacting with MongoDB

Networking () Sockets – Abstracted low level network support Reactor pattern – Popular network abstraction pattern support MIME messages – Encoding support HTTP – High level HTTP support for client and servers FTP – High level FTP support Mail – POP3, SMTP stream based support HTML – Form support Secure Sockets Layer (SSL) support, OpenSSL and Windows SSL

PDF () APIs for parsing and manipulating the PDF (Portable Document Format) file format

Prometheus () APIs for interacting with the Prometheus event monitoring software Counters, gauges, histograms

Redis () APIs for interacting with the Redis (Remote Dictionary Server) software

7-Zip () APIs for interacting with and manipulating the 7-Zip file archive software

Utility () Configuration file manipulation Command-line argument parsing Tools and server application framework APIs for interacting with the Windows Registry (WinRegistryKey) and the Windows Service Control Manager (WinService)

XML () SAX2 Document Object Model (DOM) XML writer and parser

Zip () ZIP archive file format APIs, including compression and decompression

Unit testing ()

Integrated unit testing framework

Release history POCO has undergone a long update history since its inception in 2004 and release in 2005. 2004 – Günter Obiltschnig began POCO by developing the class libraries because of being dissatisfied by what was available in C++ class libraries for network centric programming. February 21, 2005 – The first public release on SourceForge, under the Sleepycat License, contained the Foundation and XML support libraries. May 2005 – Aleksandar Fabijanic made the first contribution. January 19, 2006 – POCO 1.0 was released, including the Net library. July 2006 – POCO was relicensed under the Boost license. August 2006 – POCO 1.2 was released, splitting the library namespaces. May 2007 – POCO 1.3 was released, including the Data library, HashMap and HashSet support, December 2010 – POCO 1.4 was released, including many improvements. October 2012 – POCO 1.5 was released, adding a JSON library and CMake support. December 2014 – POCO 1.6 was released, including the JSON and MongoDB libraries and many other improvements. March 2016 – POCO 1.7 was released, including many improvements. November 2017 – POCO 1.8 was released, introducing Unix domain sockets and XML stream parsers, and Zip64 support. The Redis library was added. March 2018 – POCO 1.9 was released, including support for internationalized Domain Names and additions to supported text encodings. January 2020 – POCO 1.10 was released, moving the minimum version to C++14, adding a JSON Web Token library and migrating from raw pointers to smart pointers. June 2021 – POCO 1.11 was released, introducing the active record pattern framework. July 2022 – POCO 1.12 was released, introducing the Prometheus library. December 2023 – POCO 1.13 was released, moving the minimum version to C++17 and introducing support for a SQL parser. December 2024 – POCO 1.14 was released, deprecating several old features and including Version 6 and 7 UUID support. February 2026 – POCO 1.15 was released, reactor-based HTTP servers, MongoDB replica set support, C++ modules, ULID (universally unique lexicographically sortable identifier) support, and moving the minimum version to C++20.

Users Users include: Adobe Inc. Ansys Appcelerator Titanium Autodesk Ben-Gurion University of the Negev CS Department Cisco Honeywell Husky Energy Gen Digital (Symantec) Gladinet Malwarebytes MathWorks OpenFrameworks OpenText Oracle Corporation Panasonic Schneider Electric Buildings (formerly TAC) Siemens Sony Thales Group US Army Communications Realism Appliance (CRA) VMware

See also C++ Standard Library Adaptive Communication Environment (ACE) Boost (C++ libraries), a large set of C++ libraries Loki (C++) List of C++ template libraries List of C++ multi-threading libraries Jakarta EE (formerly Java Platform, Enterprise Edition)

References

External links

POCO Changelog covering time lines