Fost 5 release now out

Created 21st December, 2016 04:09 (UTC), last edited 28th March, 2017 03:04 (UTC)

The tags were pushed a few days ago now.

There is one potentially breaking change in the updates to the nullable type. Now that std::optional is in C++17 it seems sensible to move towards that. The new nullable implementation is a wrapper around std::experimental::optional, but retains the old nullable methods as well, but marks them as deprecated. It also adds a couple of methods that are in the upcoming std::optional but aren't in std::experimental::optional.

As part of the nullable changes we also stopped bringing in the std::rel_ops namespace. This could be a breaking change where you've been inadvertently relying on it for implementations of things like operator !=.

We've also improved the error handling in the fostlib::utf::save_file such that it should now throw if there is a problem saving the file. There's also a new file based log sink called panoptes which features built-in file rotation.

We didn't do the changes to the fost-orm library this time around, but expect them for the next release.

Building on Linux

git clone --branch= --recursive
cd fost-hello
Boost/build 62 0
Boost/install 62 0

Download locations


  • beanbag — Stand alone transactional JSON database server —
  • beanbag-seed — Seed project for giving you a starting point to develop web applications using Beanbag —
  • fost-hello — Sample seed project —
  • mengmon — Stand alone web server —


  • f5-cord — First version of a new string library —
  • f5-threading — Preview of the first Fost 5 library which includes help for threading.
  • fost-aws — Amazon AWS and OpenStack —
  • fost-android — Eclipse project for Android that allows Fost 4 and Beanbags to be used on mobile devices —
  • fost-android-ndk — The native code for Android. Includes required parts of Boost configured to use the standard Android build system.
  • fost-beanbag — Transactional JSON database —
  • fost-base — Build system and core libraries —
  • fost-internet — Internet protocols, servers & clients —
  • fost-meta — All libraries in one wrapper —
  • fost-orm — Object/Relational mapping —
  • fost-postgres — PostgreSQL —
  • fost-py — Python (2.x) bindings —
  • fost-web — Web server libraries —

Detailed change log


  • Extend exceptions::file_error to also take a boost::system::error_code.
  • Add error detection into save_file.
  • Refactor nullable to look much more like the upcoming std::optional.
  • Remove using namespace std::rel_ops.
  • Change the fostlib::nullable class to be implemented on top of std::experimental::optional.
  • Exceptions caught in FSL_MAIN are now printed to stderr rather than stdout.
  • Fix a problem for Boost 1.62.0
  • Add the Panoptes file logger as the first of a set of optional loggers.
  • Start to make use of the Unicode support in f5-cord.
  • Make hashing digester and hmac digester movable.
  • Add a set member to the jcursor that overwrites old values in JSON structures.
  • Add logging messages about why a JWT gets rejected.
  • We need to have < defined on JSON so do that instead of std::less.
  • Added std::less overload for JSON with new fost/json header.


  • Add a cookie header parser.
  • Replace older Boost code with std::function and lambdas.


  • Record jsondb saves and handle rename errors better.
  • Add a missing lock when adding database post-commit hooks.
  • Refactor the jsondb save process to make it more clear what the actual process is.


  • Add support for passing a password for the PG DSN.


  • Load shared objects before setting up the logger so that optional loggers can be loaded.
  • Add a generic 200 response.
  • Web view execution now gives a stack trace when an exception is thrown.
  • Improved error output where a view name is mis-configured.
  • Removed the old router function as it's been replaced by view::execute.
  • Add a middleware that logs the HTTP request details and some response details.


  • Add default lookups for the Postgres connection string parameters.


  • Start to add support for Unicode with UTF-8 decoding.


  • Allow for fetching of the Boost.ASIO work pool thread count.
  • lower_bound on tsmap takes the key value by reference not by copy.
  • Added a missing header.
  • Removed a dependancy on algorithms header.