The POCO C++ Libraries project was started by Günter Obiltschnig (@obiltschnig) in 2004. Back then C++ was rapidly reaching its absolute low point in popularity, as almost everyone was following the trend to managed and virtual-machine based programming languages. Nevertheless, Günter believed in C++. He wanted to create a comprehensive set of libraries that cover all modern-day programming needs. For himself, but also for other C++ programmers struggling to find high-quality and easy-to-use C++ libraries for network programming, XML (and later JSON) processing, database access, and all the other features virtually every modern application needs.
The first release of the C++ POrtable COmponents (as it was called back then, and from where the name POCO came from) was in February 2005. Shortly after the first release, Günter was joined by Aleksandar Fabijanic, who has been a contributor and co-project lead ever since.
More than 180 developers have contributed code to the POCO C++ Libraries since the beginning.
POCO has been used in hundreds, if not thousands, of projects worldwide. Whether building automation systems, industrial automation, IoT platforms, air traffic management systems, enterprise IT application and infrastructure management, security and network analytics, automotive infotainment and telematics, financial or healthcare, C++ developers have been using the POCO C++ Libraries in challenging and mission-critical applications.
The POCO C++ Libraries are licensed under the Boost Software License. A very liberal license that encourages both commercial and non-commercial use.
The Boost Software License 1.0
Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:
The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Professional, paid support is available from Applied Informatics.
Blog & Twitter
POCO-related questions on Stack Overflow are tagged poco-libraries.
Collaborators use the pocoproject Slack.
The POCO C++ Libraries project is jointly governed by a Technical Steering Committee (TSC) which currently consists of:
- Günter Obiltschnig
- Aleksandar Fabijanic
The TSC has final authority over this project including:
- Technical direction
- Project governance and process (including this policy)
- Contribution policy
- GitHub repository hosting
- Conduct guidelines
- Maintaining the list of additional Collaborators
The TSC can be contacted at email@example.com.
The POCO C++ Libraries GitHub repository is maintained by the TSC and additional Collaborators who are added by the TSC on an ongoing basis. Individuals making significant and valuable contributions are made Collaborators and given commit-access to the project. These individuals are identified by the TSC and their addition as Collaborators is discussed during TSC meetings.
Modifications of the contents of the GitHub repository are made on a collaborative basis. Anybody with a GitHub account may propose a modification via pull request and it will be considered by the project Collaborators or TSC. All pull requests must be reviewed and accepted by a Collaborator with sufficient expertise who is able to take full responsibility for the change.
Security issues or vulnerabilities can be reported via email directly to the core team at firstname.lastname@example.org. The core team will respond to security issues within 24 hours. If you need to send sensitive information, get in touch first.
Code of Conduct
The POCO C++ Libraries project and its community adhere to the Contributor Covenant Code of Conduct.
The POCO C++ Libraries are used by thousands of projects worldwide, from small open source projects to large commercial projects. Below are some users. Want to be on that list? Let us know.
- ClickHouse is an open source column-oriented database management system capable of real time generation of analytical data reports using SQL queries.
- The macchina.io IoT application development platform is built on top of POCO.
- The Mantid project provides a framework that supports high-performance computing and visualisation of materials science data.
- MQWeb is a web-based administration tool for Websphere MQ by POCO contributor Franky Braem.
- openFrameworks is an open source C++ toolkit for creative coding.
- ROS (the Robot Operating System) is a flexible framework for writing robot software.
- CodeLathe is using POCO in FileCloud and Tonido.
- DMG MORI
- F5 Networks
- Kapsch TrafficCom
- The MathWorks
- Micro Focus
- Palo Alto Networks
- Perforce (Helix ALM)
- Plesk is using POCO in its hosting automation system.
- Riverbed is using POCO in its SteelCentral NetShark product.
- Rohde & Schwarz
- Salesforce (SalesforceIQ)
- Schneider Electric is using POCO in building automation systems and has been a sponsor of the project.
- Siemens is using POCO in building automation, smart metering, and other products. They have also sponsored the development of various features.
- Simba Technologies
Note: most of the above list is based on Google searches for open source license acknowledgements mentioning the POCO C++ Libraries, some on direct knowledge.
Design & Implementation
Written in modern, standard ANSI C++, using the C++ Standard Library. Modular design, very few external dependencies, builds out-of-the-box. Good mix of "classic" object-oriented design with modern C++. Clean, easy-to-understand code (we frequently get compliments on that), consistent coding style, comprehensive test suite.
Desktop/Server: Windows, Linux, macOS, Solaris, HP-UX, AIX
Embedded/Mobile: Windows Embedded CE, Embedded Linux (uClibc or glibc), iOS, Android, QNX, VxWorks
Minimum system requirements: 75 MHz ARM9, 8 MB RAM (Embedded Linux).
Any and DynamicAny classes for dynamic typing
date and time
events (signal/slot mechanism) and notifications framework
regular expressions (based on PCRE)
shared libraries and class loading
smart pointers and memory management (buffer, pool)
string formatting and string utilities
stream classes for zlib-based compression/decompression
ZIP file creation and extraction
X509 certificate handling
symmetric and RSA ciphers
streams for encryption and decryption
based on OpenSSL
unified access to different SQL databases (SQLite, MySQL, ODBC, PostgreSQL)
automatic data type mappings
collections support (std::vector, std::set, std::map, etc.)
record sets and tuples
MongoDB and Redis clients
platform-independent path construction and manipulation
directory change notifications
extensible logging framework with pluggable log channels and
console logging, log files, syslog, remote syslog, Windows event log service
thread and thread synchronization classes
active objects and activities
stream, datagram, multicast, server, Unix domain and raw sockets
TCP Server framework (multithreaded)
reactor server framework
HTTP(S) client and server framework
HTTP Basic and Digest authentication
JWT (JSON Web Token) support
C++ server page compiler for embedding C++ code into HTML pages
SMTP and POP3 client for sending and receiving email
URI and UUID handling
HTML forms processing
HTML template compiler
MIME multipart messages
SSL/TLS support based on OpenSSL
WebSocket (RFC 6455) client and server
Processes and IPC
launching and stopping processes
Base64 and HexBinary encoding/decoding
line ending conversion
text encoding conversions
URI stream opener
UTF-8 and Unicode handling
text encodings and conversions
frameworks for command-line and server applications
command-line options handling
configuration file parsing
unix daemons and windows services
XML and JSON
fast XML parsing based on Expat
SAX2 (Simple API for XML, version 2) parser
DOM (Document Object Model, Level 1-3) parser
JSON parser and writer