Release cxxtools, tntnet and tntdb - and tntpub

Here is the release of cxxtools, tntnet, tntdb and the new tntpub.

There are no real release notes. Look to the git log if you really want to know, what is new. It is just a big step compared to the previous stable release.

Tntpub is a message bus system, which is based on the serialization framework of cxxtools.


Update cxxtools, tntnet and tntdb

It is quite some time since last update. Many smaller and larger improvements and fixes were available in git and now as a dist package.


Release candidates for cxxtools and tntnet

Here is another small update for cxxtools and tntnet. I have made some improvements in cxxtools. Tntnet got just a small fix.


Release candidates for cxxtools, tntnet and tntdb

Way too long since release. The git versions are much more stable and sophisticated than the versions currently declared as stable. So you should really use this new release candidates.

You can find links at the download page


Release candidates for cxxtools, tntnet and tntdb

Many many smaller and larger changes has be done in all 3 projects. It is time to prepare for new releases.

You can find release candidates at the download page.


New bugfix releases cxxtools-2.2.1 and tntnet-2.2.1

Today we publish bugfix releases. No new features were added.

You can find details about the fixes in the release notes of cxxtools 2.2.1 and tntnet 2.2.1. The packages can be found on the download page


Article about tntnet in german Linux Magazin

The german Linux Magazin published an article about tntnet in his 1/14 issue. The article was written by Olaf Radicke and Tommi Mäkitalo. You can find the article at


Speech about tntnet on Youtube

On September 20th 2013 Tommi held a speech about tntnet at the Kieler Open Source und Linux Tage in german. The speech can be found on youtube


new homepage

We have a new homepage. Thank you for those who helped creating this.

The homepage not only runs with tntnet but also uses tntnet technology. This makes it much easier to maintain the content.

We had the doxygen generated API documentation and some howtos. Now we have also the man pages online. The man pages have been the actual reference for tntnet for quite some time but they were difficult to find. Now I hope, that people will get informations about tntnet easier and faster.


releases for cxxtools, tntnet and tntdb

Today releases for cxxtools 2.2, tntnet 2.2 and tntdb 1.3 are available for download. See the release notes in the packages for details about the changes.

The release notes are also available for download at:


New release candidates are available for download on the download page. Please test.

The plan is to make a final release within one week.


Tntnet homepage runs now tntnet

As a kind of christmas present I got a second IP address for the server. This makes it possible to run the tntnet homepage with tntnet.


bugfix release 2.1.1 of cxxtools released

This release fixes some bugs occured after the last 2.1 release. No features are added here and it is binary compatible to version 2.1.


stable versions cxxtools 2.1, tntnet 2.1 and tntdb 1.2 released

Its update time. These releases are the result of 2 years of development whith many improvements.

This release adds json and jsonrpc to cxxtools as well as a fast binary rpc server and client. Both are based on the improved serialization framework of cxxtools.

The json and binary format can be used as a storage format. Also serialization and deserialization of csv is possible.

The unicode string as a specialization of std::basic_string got a major rewrite with short string optimization.

Tntnet has mainly many small improvements, better standard compliance and a slightly higher performance.

Tntdb got a replication driver, which is able to replicate the data between databases without database support. The decimal class was rewritten and got unittests. The new RowReader-class makes code more readable, when many columns are read from a result row. A new class BlobStream implements a std::istream interface to blobs.


Wiki available

We started a wiki about tntnet, tntdb and cxxtools. Articles, howtos and other information will be collected there.

You can find the wiki at at sourceforge.


stable versions cxxtools 2.0, tntnet 2.0 and tntdb 1.1 released

After more than 2 years new without stable releases it is time for updates. Cxxtools has hot huge improvements and feature enhancements like xmlrpc, a signal slot framework, anynchronous I/O and others.

This implied some API changes. Still most of the existing code should run. Tntnet and tntdb needed some changes for this, so that the new tntnet and tntdb releases need cxxtools 2.0.

Tntnet has got many small feature and performance enhancements. Luckily there was no much need for API changes. Almost applications should run out of the box by recompiling.

Tntdb got some feature enhancements. Most important are maybe the support for auto incremented values using the method tntdb::Connection::lastInsertId(std::string) and support for user defined types by overloading 2 operators.


new article about using xmlrpc in cxxtools (> 1.99)

A new Howto document about using xmlrpc with cxxtools is available here


development versions cxxtools 1.99.5 and tntnet 1.6.991

These versions have some improvements in compatibility, performance and usability.


development versions cxxtools 1.99.4, tntnet 1.6.99 and tntdb 1.0.99

Cxxtools has make a quantum leap forward to a general purpose C++ library. This version adds a fast template based signal slot framework, a serialization system, asyncronous I/O with iostreams, a http server and a improved http client, XML reader and writer, and a great XMLRCP client and server.

Tntnet and Tntdb has got some minor bug fixes and are adjusted to the API changes in cxxtools (which are quite small).


stable versions cxxtools 1.4.8, tntnet 1.6.3 and tntdb 1.0.1

These versions mainly fix some bugs found in the last weeks.

The regex-wrapper classes from tntnet are now copied to cxxtools and are fully functional now. Cxxtools also got a set of conversion functions as easy to use wrappers around std::stringstream. The so-number is increased to indicate binary incompatiblity to older versions (at least <= 1.4.6)

Clearing cookies was broken since about a year. This is fixed now. Quotes and double quotes in c++ comments in ecpp files was not handled correctly. Initialization of scoped variables may expand to multiple lines now (this was actually intended behaviour before, but incorrectly implemented). Here also the so-number was increased.

The sqlite-driver of tntdb had 2 small bugs. Setting strings in statements did not lead to equality when compared to columns. Using multiple cursors for one statement crashed tntdb when the cursors were released in reverse order.


stable version tntnet 1.6.2

A shutdown bug is fixed. And all the small fixes from the development branch is released here in the stable version. The major ones are the fixes of GnuTLS and http-auth.


development version tntnet

This version brings some bugfixes. GnuTLS-support is much more robust and also faster now. OpenSsl supports certificate chains. Http-Auth does not cache usernames and passwords in keep-alive requests any more.


stable version tntdb 1.0.0

Tntdb has reached version 1.0.0. That means, that tntdb does not have any known bugs and the API as well as the ABI will be kept as stable as possible.


new stable versions, cxxtools 1.4.6, tntnet 1.6.1, tntdb 0.9.5

The features released in the development releases are considered stable now.

Cxxtools have got some feature enhancements like support for signal-slot and wrappers for atomic functions. Locking in logger-classes is reduced, so that threads do not need to wait for other threads when logging. Logging may be passed to a subprocess, which can run under a different user, when the main process starts as root.

Tntdb has support for blobs. And this time the archive is complete. The 0.9.4 release lacked some important files, so if you had problems with that it was purely my fault ;-).

The main enhancement in tntnet was the move of most of the tntnet-code into the library, so it is easy to use tntnet in applications. Also a wrapper for fork was added, since it is somewhat dangerous to start subprocesses without that, since subprocesses will block restarts, since they inherit listener ports. To fork subprocesses in tntnet-applications use this:

  if (request.getApplication().forkProcess())
    // here we are in child process
    exit(0);  // this or exec... is mandatory!!!


new development version of tntnet

After some small fixes tntnet compiles with the Sun Studio compiler. A chapter about stand alone webapplications with tntnet was added into the documentation. After changing fonts in the documents, filesizes got much smaller.


new development versions of cxxtools

This adds functions for handling endianess and wrappers for fast atomic operations for various processors.


new development versions of cxxtools and tntnet

Cxxtools gets a fast template based signal-slot implementation from Marc. Libltdl is replaced by a simple dlopen-wrapper. The smart pointer gets an additional destroy policy.

Most of the code of tntnet is moved to libtntnet to make it possible to embed tntnet in applications.


tntdb updated to 0.6.4

Tntdb has got a driver for oracle. Now it supports sqlite, mysql, postgresql and oracle. The driver is not compiled by default, but must be activated by passing --with-oracle to the configure-script.

Another fine update is support for decimals (thank you Mark Write).

And for those of you, who misses tntdb 0.6.3: I once packed a 0.6.3, but I discovered some bugs before announcement, so I decided just to skip it.


new develpment version of tntnet

This version adds a parameter-scope to components, which receives named parameters of any type when called. Also the generated class gets a prefix, so that reserved words like "template" are now allowed for component names.


new develpment version of tntnet

In this version the locale can be set in components with SETLANG (e.g. SET_LANG("deDE") ). Http-classes are restructured. HttpReply::notAuthorized and HttpReply::redirect throw exceptions to make it easy to call them in subcomponents.


new version 1.4.5 of cxxtools

A policy-based smart-pointer-class is included here. I have used this implementation in tntdb for some time and copied it to many projects since then. Therefore I decided to finally include it into my toolbox. The default policy is intrusive reference counted, which is the safest model. The objects held need to have methods "addRef" and "release". This is easily done by using cxxtools::RefCounted as a (additional?) base-class.

I have rewritten the parser for ini-files. The new parser is much cleaner. The parser is separated from the data-structure, which makes it possible to use the parser separately. The interface to the class has changed heavily, so you need to port your application to the new class, if you have used this part of cxxtools.

I also wrote a parser for property-files, which are quite popular in the java-world. They have the advantage to support hieracial structures, while beeing still easily readable and writable.


development version tntnet

This version adds support for HTTP basic authetication. A new tag <%doc> for block-comments in templates is added. Tntnet uses now standard locale instead of failing to run, if locale passed in LANG is invalid. Sessions are now valid in all urls instead of being url-specific. This was actually a bug, because it was intended initially the way, it is now.


stable version 1.6.0 of Tntnet, version 1.4.4 of cxxtools

Here is the most stable version of Tntnet. Since Tntnet has matured since 1.5.3 more than ever before, I decided to take a jump in the version-number. Thank you for the users, which greatly has helped me finding bugs and giving feedback for improvements.


development version tntnet

I decided to take another round before stable version. Tntnet has got some bugfixes in mime-type-detection. Also a minor protocol-bug when sending static pages is fixed.


cooperation with FreeWRT

We have started a cooperation with FreeWRT to port Tntnet to this nice embedded platform. This will show, how embedded systems with less powerful CPUs will profit from the low cpu-usage of Tntnet. We will be at Linuxtag in Berlin from May 30th to June 2nd 2007 to show some results of our efforts. A presentation on June 2nd is also planned.


development versions cxxtools and tntnet

Some serious bugs were fixed, wich resulted in a crash or hang in tntnet under high load. Some code-adjustements has been made to compile both with for Sun Studio under Solaris.


development version of tntnet

License is changed from GPL to LGPL, which allows creation of closed source webapplications. Poll is replaced with epoll on platforms where available, which improves performance significantly on boxes with high load. Urls are now decoded. Listener-threads are removed, which removes a context-switch when new connections arrive. A racing-condition is fixed, which caused tntnet to segfault on MP-boxes under high load.


development version of cxxtools

Improve Pool-class: replace semaphore with condition and make maximum size settable.


development version of cxxtools

fix bug in cxxtools::net::Stream: partial write from os was reported as eof instead of polling socket.


development version of tntnet

A redesign of the main-application-class is the major part of this release. Process-handling is now in a separate class and uses the new fork(2)- and pipe(2)-wrappers of cxxtools


development version of cxxtools

I was active this time. New small bugfixes and new features were added. These are:

  • new wrappers for fork(2) and pipe(2)
  • cxxtools::Pipestream: a std::iostream using pipe(2) (look at demo/pipestream.cpp for useage for these 3 features
  • support for udp-broadcast
  • offset is settable in cxxtools::Hdostream
  • cxxtools::Condition::timedwait


development version of tntnet

I've done some tweaks and enhancements in Tntnet, which improoves usability as well as performance. The most major improvements are:

  • VMapUrl for virtual host specific url-mapping
  • use epoll instead of poll when available, which improves scalability
  • option "-I dir" to specify include-directory for ecppc
  • building of sdk and demos can be supressed, when building tntnet
  • remove global factory-symbol, which removes naming-conflicts in different shared libraries


development version of cxxtools

This releases some minor fixes, I have fixed last months.


Release version 1.5.3 of tntnet

Major bug-fix to 1.5.2: POST-requests did not work at all in the default configuration.


Release version 0.9.0 of tntdb

The jump in the version number indicates, that tntdb has proven to be stable. License changed to LGPL, so that it is usable in close-source applications. Compared to the previous version only some minor bugfixes has happened.


Release version 1.5.2 of tntnet

It is just time to declare tntnet 1.5.2 stable. The most notable change is a complete set of man-pages.


Development version 1.5.2pre4 of Tntnet

Tntnet has man-pages now.


New version 0.6.3 of Tntdb

The main reason for this is a license-change. Postgresql is linked against OpenSSL and the license of tntdb is extended to allow this. The Sqlite3-driver got some minor fixes.


Development version 1.5.2pre3 of Tntnet

Tntnet has now thread-scoped variables as a addition to applicatin- session- and request-scope. Just declare a section <%thread> and put your variables there. This is useful, e.g. for databaseconnections. Escpecially for sqlite3, where connections can't be used in other threads, than the one, who issued sqlite3_open.

Tntnet handles http-headers and cookies case-insensitive know. It was a bug, not to do it.

Components aren't deleted any more before the thread ends. Until know Tntnet had a special cleaner thread, which deleted components, which aren't used any more. This was not that useful, because components don't eat much memory and it is really a waste of time to do asyncronous cleanup without gaining much.

Tntnet has new demos: calcajax and chat shows, how to use ajax with Tntnet; alldemos shows a (configurable) page with links to all other demos.


Release version 1.4.2 of cxxtools

Cxxtools is now updated to 1.4.2. Not too much changes here, but a big step: cxxtools is LGPL now! You can link it with your closed source or differently licensed software.


development version 1.5.2pre2 of Tntnet

Since Tntnet is GPL and OpenSSL is not, I decided to port Tntnet to gnutls, which is LGPL. This version let you choose at configure-time, which ssl-library to use if any.


development version 1.5.2pre1 of Tntnet, version 1.4.2pre1 of cxxtools

These are bugfix-releases. Applications based on cxxtools (like Tntnet) failed to start on systems without IPv6. Some warnings are removed. Tntnet compiles now with OpenSSL on OpenBSD.


stable version 1.5.1 of Tntnet, version 1.4.1 of cxxtools

The latest development-versions 1.5.1pre4 of Tntnet and 1.4.1pre2 of cxxtools are released (almost) unchanged.


development version 1.5.1pre4 of Tntnet, version 1.4.1pre2 of cxxtools

This releases adds support for IPv6. You can just pass IPv6-addresses to socket-classes. License-statements were added in files to make Cxxtools and Tntnet ready for debian


development version 1.5.1pre3 of Tntnet, version 1.4.1pre1 of cxxtools and

version 0.6.2 of Tntdb

Logging with Cxxtools is optimized. This results in a 30% speed-up. A new std::ostream-derived class cxxtools::Streamcounter is included, which just counts the characters, which are printed. The rolling-file-appender uses it to monitor filesize, which make flushdelay to work with it.

In Tntdb 0.6.2 the mysql-driver got some bugfixes. Fetching some datatypes (e.g. timestamp) resulted in a crash, because the Mysql-API returns too small lengths (or I misunderstand the API;-) ).

Tntnet extends the license to allow linking with openssl. Some ANSI-C++-violations are fixed. A new demo newsdb is added, which demonstrates, how to access a database with Tntdb from a web application. The documentation was reformatted to use only standard fonts, which reduces the size of the tarball.


development version 1.5.1pre2 of Tntnet and new version 0.6.1 of Tntdb

Here is another development-version of Tntnet. This version teaches the precompiler to generate #line-directives. Error-messages of the c++-compiler now point directly into to ecpp-source instead of the (intermediate) output of the precompiler.

Tntdb 0.6.1 fixes some minor bugs and makes some small improvements. The postgresql-driver allows now cursors outside transactions. Passing date-, datetime- and time-classes to statements may be null.


development version 1.5.1pre1 of Tntnet

SSL and internationalization didn't work at all in 1.5.0. This release fixes it. An updated quick-start-guide is included. Some unused code has been removed. Building of static libraries is suppressed, because it does not make sense with Tntnet.


Tntnet version 1.5.0, cxxtools 1.4.0

I finally declared Tntnet 1.5.0 and cxxtools 1.4.0 as stable, just because they are. Tntnet 1.5.0 is faster than ever and has gone through many stability- and speed-tests, which makes it rock-solid and incredibly fast.

Cxxtools got a new logging-feature, which speeds up logging quite significantly. The parameter "flushdelay" enables a background-thread, which flushes the outputfile asynchronously. The logentries don't trigger a flush, so may logentries are written with one system-call. This results in a 15% speed-up of Tntnet in simple cases. Without it dynamic pages are just as fast as static pages in apache2. With delayed flush Tntnet is well ahead of apache2.


tntdb version 0.6.0, Tntnet version 1.5.0pre7, cxxtools 1.4.0pre5

This version adds a driver for sqlite3, a connectionpool, a introductio and lots of smaller fixes and improvements.


Tntnet version 1.5.0pre6 and cxxtools 1.4.0pre4

This is a major upgrade for Tntnet. Tntnet now supports end-tags in componentcalls. With this it is easier to build components, which wrap some html-content. Tntnet now supports gzip-encoding.


tntdb version 0.5.2

Make databasedrivers optional at configure-time.


Tntnet version 1.5.0pre5 and cxxtools 1.4.0pre3

Thread-class in cxxtools is now split into DetachedThread and AttachedThread. In Tntnet the workers are derived from DetachedThread. This fixes a major bug, which could trigger a unnecesery emergency-restart.


Tntnet version 1.5.0pre4

New health-check - if a thread takes too long for processing (default: 10 minutes), the thread is considered hanging and Tntnet is restarted automatically.


tntdb version 0.5.1

This version has some minor bugfixes in the mysql-driver (handling MYSQLTYPELONGLONG is working now).


tntdb version 0.5

Tntdb is a c++-library for easy access to databases. It supports dynamic loading of drivers. Currently drivers for postgresql and mysql are available.


Tntnet version 1.5.0pre3

  • fixed bug in generation of components with compressed data.

This is hopefully the last prerelease before 1.5.0.


Tntnet version 1.5.0pre2


  • one level of indirection of factory-pointer removed (binary incompatible to 1.5.0pre1!).
  • detection of cxxtools- and zlib-headers fixed. Missing headers trigger a error at configure-time.


Tntnet version 1.5.0pre1 and cxxtools 1.4.0pre1


Namingconvention: all classnames starting uppercase, methodnames lowercase.


Tntnet version 1.4.0 and cxxtools 1.3.1


Unsafe html-characters in c++-expressions is escaped before sent to browser.


Tntnet version 1.4.0pre3


Simplified api for calling subcomponents in c++-mode. Ecpp-compiler ecppc can now automatically generate dependencies for Makefile (with -M).


Tntnet version 1.4.0pre2


Removed boost dependency. Tntnet uses now the POSIX.2-regex instead of boost-regex. This greatly simplifies installation and also reduces binary-size. Also a memory-leak in 1.4.0pre1 was fixed.

There is a users-guide (in open-office-format) and a yet unfinished configuration-guide.

I tested this release successfully with gcc-4.0.1, which greatly improves performance (about 20% faster compared to 3.3.4).


Tntnet version 1.4.0pre1


This version adds automatic session-handling through cookies and scoped variables. Statevariables can be of any (almost) any type.

And I'm finally writing documentation. I'm not good in writing and I would appreciate any help I can help. Please contact me at


Tntnet version 1.3.1


This is a bugfix-release. There was a probem with tnt::httprequest::getPeerAddr().


cxxtools version 1.3.0


The socket-classes got some improvements. It handles timeout better now.

cxxtools-config is a configuration-script, to help compile against cxxtools (escpecially cxxtools-log) easier. It also has the ability to generate a suitable configurationfile for the underlying logging-library.


log4shell 0.1 - comand-line-interface to log4cxx

log4shell is a quick hack, which enables shell-scripts to log with log4cxx.


Tntnet and cxxtools version 1.2.2


  • improved and simplified logging-library in cxxtools
  • minor protocol-fix in Tntnet


Tntnet version 1.2.1

  • use cxxtools-1.2.1-logging
  • typed arguments
  • added quick-start-guide (incomplete)


cxxtools version 1.2.1


  • removed obsolete timeclass.cpp
  • switched dl-classes to libtool for better portability
  • skip iconvstream if libiconv is not installed
  • new library: logging-wrapper for log4cplus (log4cxx-support will follow)
  • simple lightweight logging-library as a alternative for log4cplus
  • tested with FreeBSD 5.3/gcc 3.4.2


Tntnet version 1.2.0

Some feature enhancements and bugfixes. Needs cxxtools >=1.2.0.


cxxtools version 1.2.0

Code-cleanup. All classes are in namespace cxxtools now. Most classes have doxygen-style comments.


Tntnet version 1.1.2

Much improved build-system. Minor feature enhancements.


Tntnet version 1.1.1

I recreated version 1.1.1 due to build-problems in last version.


New version 1.1.1. Now autoconfigurated. Installation with the usual "configure; make; make install".