Rivet 3.0: Release Notes


Rivet 3.0 is available for download from ASF mirror sites. Check the download page for information about downloading the source code. If you plan to run Rivet on Linux or Free-BSD and you don't want to get bothered building the module yourself then usually, after a few weeks from release, packages for the most popular Linux distributions become available

Code integrity for this release can be checked using the public keys in the KEYS file.

Release Notes


Rivet 3.0 is tested and works with the Apache Webserver version 2.4 (running any MPM) and requires Tcl >= 8.6.1. Rivet 3.0 now supports also the Apache Webserver when running on the MS-Windows family of operative systems. The module has been built on MS-Windows through the CMake build system using the Visual Studio Community 2017 compiler.

Apache MPM and Rivet Bridge Modules

Rivet 3.0 is a major rewriting of mod_rivet, the Apache HTTP Websever module at the core of Rivet. Unlike in previous versions of mod_rivet which only supported the prefork MPM (Multiprocessing Module ), starting with 3.0 we attained full support of different MPM for the Apache framework. Threaded MPM integration was achieved by making mod_rivet multithreaded and modular itself, introducing the mod_rivet/MPM bridge concept. We developed a set of loadable modules which are supposed not only to overcome the issues related to threading but also to offer the best possible MPM mod_rivet integration. As a side effect of this modular design, mod_rivet is not only able to integrate with its environment, but also to work as a framework for writing more MPM bridges designed along different multi-threading schemes and workload management models. See the internals section of the rivet manual for further reading. MPM bridges are loaded accordingly to a heuristics of rules based on the Apache introspection calls, but they can be determined in the configuration. Only a bridge can be loaded at a time.

Version 3.0 is a drop-in replacement of any earlier version of Rivet but there are new features that can deeply change the way you have so far developed your Rivet based applications

New Request Processing Scheme

In Rivet 2.x request processing was performed by chaining together 3 scripts

  • BeforeScript , if defined in the configuration
  • The Tcl script or rvt template referenced by the URL and determined with respect to the DocumentRoot and following other resource determination methods, such as the ones offered by mod_alias and mod_rewrite.
  • AfterScript if defined in the configuration
Errors and exceptions (raised by the ::rivet::abort_page command) are handled by the ErrorScript and AbortScript (ErrorScript has a default implementation if left undefined)

Rivet 3.0 implements a new request processing scheme entirely based on Tcl. By default rivet 3.0 provides compatibility with the version 2.x scheme but this can be entirely overridden by the developer replacing the central request handling procedure.


Rivet comes with the usual collection of packages. Some of the available packages are

  • Asciiglyphs : a ASCII-art character printer. Character typefaces were shamelessly taken from the code of the Fossil DVCS under permission of Richard Hipp, Fossil's mastermind
  • Calendar : a class to print text, HTML and XML based calendar tables like the ones printed by the Unix 'cal ' command
  • DIO : a generic, object-oriented interface to SQL databases. Its main goal is to be as generic as possible
  • Entities : The RivetEntities package was kindly provided by Harald Oehlmann and is largely taken from a simple yet clever encoder/decoder of HTML entities starting from a utf-8 character string. The original code writted by Andy Goth is at http://wiki.tcl.tk/26403. Package entities extends the functionality in the original code combining it with Tcl's 'encoding' command to encode/decode from any supported encoding
  • Form : The form package is a utility for generating html forms. A form object command saves the programmer from typing the cumbersome html code of input elements, working out a solution for better standardization and readability of the code
  • Formbroker : The FormBroker package creates instances of objects representing a form data description. These objects offer a simple interface of methods meant to validate and control data as typically posted through an HTML form
  • session : This is session management code. It provides an interface to allow you to generate and track a browser's visit as a "session", giving you a unique session ID and an interface for storing and retrieving data for that session on the server.

Rivet 3.0.3 Release Notes

Rivet 3.0.3 is a bug fix release of rivet 3.0. This release includes

  • Packages in DIO are not assuming anymore the rivet command set had been imported into the global namespace
  • A minor change to ::rivet::xml provides a new form to generate self closing elements

Rivet 3.0.2 Release Notes

Rivet 3.0.2 is a bug fix release of rivet 3.0. This release includes

  • Fixed a bug in the default error handler
  • Other minor changes are relevant to the code and have no interest at the application level

Rivet 3.0.1 Release Notes

Rivet 3.0.1 is a bug fix release of rivet 3.0. This release includes

  • rivet Namespace determination in librivet has been revised to avoid to check for the module globals and therefore avoiding the inclusion of mod_rivet.h
  • A few details in the worker bridge have been fixed, including a thread root interpreter initialization
  • the lazy bridge has been extensively commented
  • documentation has been expanded and corrected in various sections

Design downloaded from free website templates.