Orbeon Forms 4 release notes

Contents

  1. 1 About Orbeon Forms 4
  2. 2 Downloading Orbeon Forms 4
  3. 3 New features in this version since Orbeon Forms 3.9/3.9.1
    1. 3.1 Major features
    2. 3.2 Other new Form Builder features
    3. 3.3 Other new Form Runner features
    4. 3.4 Other new XForms features
    5. 3.5 Other new features
  4. 4 Compatibility notes
    1. 4.1 Browser support
    2. 4.2 Platform
      1. 4.2.1 HTML pages now use the HTML 5 doctype by default
    3. 4.3 Page Flow Controller
      1. 4.3.1 Authorization of pages and services
      2. 4.3.2 Regular expressions
      3. 4.3.3 New element and attribute names
      4. 4.3.4 Behavior of not-found-handler
    4. 4.4 Form Builder and Form Runner
      1. 4.4.1 Form Runner persistence layer configuration
      2. 4.4.2 Security of the built-in eXist database
      3. 4.4.3 Submitting initial data to Form Runner
      4. 4.4.4 Form Runner references to attachments
      5. 4.4.5 Form Builder components configuration
      6. 4.4.6 Form Builder publishing of attachments
      7. 4.4.7 Look and feel of Form Runner buttons
      8. 4.4.8 XPath type annotations enabled by default on new forms
      9. 4.4.9 Twitter Bootstrap CSS
      10. 4.4.10 Strength of CSS rules
      11. 4.4.11 Adding your own CSS
    5. 4.5 XForms engine
      1. 4.5.1 Encryption password
      2. 4.5.2 Encryption of item values of the client
      3. 4.5.3 Error handling during XForms processing
      4. 4.5.4 Flow of XForms events along XBL scopes and event retargeting
      5. 4.5.5 Behavior of extension xxforms-valid and xxforms-invalid events
      6. 4.5.6 HTML layout switched to "span" mode
      7. 4.5.7 Deprecation of YUI RTE and use of tinyMCE
      8. 4.5.8 Model variable scoping
      9. 4.5.9 xforms:group and xforms:switch no longer dispatch xforms-value-changed
      10. 4.5.10 Focus handling
      11. 4.5.11 DOMActivate on <xforms:output>
      12. 4.5.12 Blanking of calculated and initial values upon error
      13. 4.5.13 Behavior of XPath annotations
      14. 4.5.14 Removal of xforms-widgets.xsl
      15. 4.5.15 Removal of widget:xforms-instance-inspector
      16. 4.5.16 Use of xhtml:class on controls
    6. 4.6 XBL Components
      1. 4.6.1 fr:tabview
    7. 4.7 Other
      1. 4.7.1 Pipeline Engine attributes
      2. 4.7.2 Renaming of oxf:xhtml-rewrite and oxf:html-rewrite inputs and outputs
      3. 4.7.3 Removal of deprecated custom-processors.xml file
      4. 4.7.4 Deprecation of oxf.prologue property
  5. 5 Historical release information
    1. 5.1 4.0 Release Candidates
    2. 5.2 4.0 Betas
    3. 5.3 4.0 Milestones

About Orbeon Forms 4

Orbeon Forms 4 is a major Orbeon Forms release which features many improvements since Orbeon Forms 3.9 and Orbeon Forms 3.9.1 PE.

See Orbeon Forms release history for the list of all releases in the 4.x series and all release notes.

Downloading Orbeon Forms 4

Orbeon Forms 4 is available in two separate editions. You can download the build using from the downloads page.

New features in this version since Orbeon Forms 3.9/3.9.1

Major features

The major new features are described in this blog post. Don't miss it, that's where the exciting stuff is! But in summary, Orbeon Forms 4.0 gets:
  • A brand new look
  • Improved security and access control
  • Repeats in Form Builder
  • Nested sections and live controls in Form Builder
  • Multi-page "wizard" view
  • Improved portal support

Other new Form Builder features

Other new Form Runner features

  • New home page which shows all deployed forms (documentationblog post)
  • Bulk-import data from an Excel spreadsheet (documentationblog post)
  • An XML Schema generator service to generate a schema for a given form definition (documentation)
  • Required fields are styled with a star (blog post)
  • More flexible persistence layer configuration (documentation)
  • Button to save without validating (documentation)
  • New property for supplemental CSS (documentation)
  • Grid and section components are now implemented with XBL as fr:grid/fr:section
  • workflow-send sends the app/form name and document id as URL parameters (documentation)
  • PDF
  • New W-9 demo form (blog post)
  • Summary of new configuration properties (documentation)
    • oxf.fr.available-languages
    • oxf.fr.pdf.font.path
    • oxf.fr.pdf.font.family
    • oxf.fr.pdf.template.font.paths
    • oxf.fr.detail.captcha
    • oxf.fr.detail.save.validate
    • oxf.fr.css.custom.uri
    • oxf.fr.email.smtp.port
    • oxf.fr.email.smtp.encryption

Other new XForms features

  • Browser support
    • IE 9/10 support
    • Native iPhone/iPad date and time widgets (blog post)
  • Type annotations (documentationblog post)
  • XForms 2.0 features
    • iterate attribute
    • xforms:var (blog post)
    • xforms:property
    • Standard XForms functions are also in the XForms namespace
    • xf:element() and xf:attribute()
    • Deprecate nodeset attribute and favor ref (blog post)
  • New extension XPath functions (documentation)
    • xxf:custom-mip()
    • xxf:binding-context()
    • xxf:visited()
    • xxf:cases()
    • xxf:has-class()
    • xxf:classes()
    • xxf:value()
    • xxf:list-variables()
    • xxf:get-variable()
    • xxf:control-element()
    • xxf:repeat-position()
    • xxf:rewrite-resource-uri()
  • xxf:get-request-parameter()  and xxf:get-request-header() work after XForms initialization
  • Files stored by <xforms:upload> contain metadata
  • XBL (custom components) support (documentation)
    • strong encapsulation, including for events
    • binding, lhha, value and focus modes
    • Implement support for CSS :root and *:root
    • new xxf:mirror attribute
  • Controls
  • Events and actions
    • Event context information for xxforms-value-changed (documentation)
    • xxf:setvisited action (documentation)
    • xxforms-visited/xxforms-unvisited
    • deferred flag to xf:recalculate action, xf:rebuild, xf:revalidate
    • event('xxforms:observerid') and event('xxforms:effective-observerid')
    • Support naked XML Events attributes (not prefixed by ev:)
  • XForms itemset values are no longer encrypted but simply numbered
  • More resilient error handling (documentationblog post)
  • Improved keyboard focus support (blog post)
  • xxf:dynamic (not documented yet)
  • Summary of new configuration properties (documentation)
    • oxf.xforms.format.output
    • oxf.xforms.show-recoverable-errors
    • oxf.xforms.use-aria

Other new features

  • New landing page for Orbeon Forms demos
  • Run modes (documentationblog post)
  • Page Flow Controller improvements (documentationblog post)
    • New <service> element to expose services 
    • Configurable authorization of pages and services 
    • Improved <not-found-handler> 
    • New <error-handler> and <unauthorized-handler> elements 
    • Default value for matcher attribute on the <controller> element 
    • Updated elements and attribute names (see compatibility notes)
  • HTML support
    • Use HTML 5 doctype
    • Convert incorrect CP1252 characters by default (blog post)
  • HTTP support
    • Versioned resources serve all resources with aggressive caching 
    • Orbeon-Username/Orbeon-Roles headers (documentation)
    • HTTPS: support for proxy connections
    • HTTPS: property to disable hostname verification
    • Custom key store support for SSL connections
    • Property to configure which session cookies are forwarded
    • HTTP response cache control headers are configurable
    • oxf:url-generator: conditional GET support (documentation)
    • oxf:url-generator: new authentication element (documentation)
  • JBoss 7 support
  • XML pipelines (XPL)
  • Use LESS to produce CSS files
  • Improved server-side exception logging (blog post)
  • Summary of new configuration properties (documentation)
    • oxf.crypto.password
    • oxf.crypto.key-length
    • oxf.crypto.hash-algorithm
    • oxf.http.exceptions
    • oxf.http.ssl.hostname-verifier
    • oxf.http.ssl.keystore.uri
    • oxf.http.ssl.keystore.password
    • oxf.http.forward-cookies
    • oxf.http.page.cache-headers
    • oxf.http.resource.cache-headers
    • oxf.url-rewriting.wsrp.encode-resources
    • oxf.pipeline.processors

Compatibility notes

Browser support

Form created with Orbeon Forms can be accessed by a wide range of browsers. However, Orbeon Forms web based tool to create form, Form Builder, is more sophisticated than most forms, and is used by a smaller number of people, i.e. those within your organisation who will be creating forms. Hence Orbeon Forms supports a different set of browsers depending on whether you are accessing forms or creating forms with Form Builder:
  • Accessing forms

    • Desktop
      • Recommended browsers
        • Google Chrome (latest versions, both in the stable and dev channels)
        • Safari 6
        • Firefox (latest released version, and current Firefox ESR)
        • Internet Explorer 9 and 10
      • Other supported browsers
        • Opera 12
        • Internet Explorer 7 (not recommended) and 8
      • Not supported
        • Internet Explorer 6 and earlier
    • Mobile
      • Safari Mobile on iOS 6
      • Chrome for Mobile on Android 4.1

  • Creating forms with Form Builder

    • Recommended browsers
      • Google Chrome (latest versions, both in the stable and dev channels)
      • Safari  6
      • Firefox (latest released version)
    • Other supported browsers
      • Opera 12
      • Internet Explorer 9 and 10
    • Not supported
      • Internet Explorer 8 and earlier

Platform

HTML pages now use the HTML 5 doctype by default

The doctype is the declaration at the top of HTML pages. HTML 5 requires the following:
<!DOCTYPE html>
In the past we used one of the HTML 4 doctypes:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
You shouldn't need to switch the doctype, as it has been considered the best option for old and new browsers:
"all current browsers (IE, FF, Opera, Safari) will look at it and switch the content into standards mode – even though they don’t implement HTML5"
But if you absolutely need to revert to an older doctype, you will have to make changes to the following files:
  • config/epilogue-servlet.xpl
  • config/error.xpl
  • ops/xforms/xforms-server.xpl
See the commit for reference.

Page Flow Controller

Authorization of pages and services

With previous versions of Orbeon Forms, requests to pages and services were unrestricted. With this version:
  • Internal requests, from an Orbeon Forms application, to pages and services remain unrestricted.
  • Pages: only GET and HEAD external requests are authorized by default.
  • Services: no external requests are authorized by default.
This behavior makes pages and services more secure out of the box. This can be configured easily, see Authorization of pages and services.

Although we don't recommend it, if you want to, you can enable the old behavior with the following properties:

<property
  as="xs:string"
  processor-name="oxf:page-flow"
  name="page-public-methods"
  value="GET HEAD POST PUT DELETE"/>

<property
  as="xs:string"
  processor-name="oxf:page-flow"
  name="service-public-methods"
  value="GET HEAD POST PUT DELETE"/>

We also recommend that if you have services, they be configured with the new <service> element rather than the <page> element, as this affects out of the box authorization (as described above) as well as the behavior of error and unauthorized pages.

Regular expressions

The Page Flow Controller used to support configurable matchers via the matcher attribute. There are now only two choices:
  • "regexp": Java regular expressions
  • "glob" expressions
The following syntax is deprecated:

<page matcher="oxf:perl5-matcher" ...>
<page matcher="oxf:glob-matcher" ...>
The new syntax is simply:

<page matcher="regexp" ...>
<page matcher="glob" ...>
The default remains glob expressions.

There can be minor differences between Java regular expression and the regular expression engine (Apache Jakarta ORO) used in previous versions of Orbeon Forms. Mostly, the expressions remain compatible.

New element and attribute names

The Page Flow Controller introduces new element and attribute names:
  • controller element: replaces the config element
  • path attribute: replaces the path-info attribute
  • mediatype attribute: replaces the mime-type attribute
The old names remain for backward compatibility but are deprecated.

The params element under page, deprecated for a long time, has been removed. The setvalue element must be used instead.

Behavior of not-found-handler

The of not-found-handler, used to specify a "not found" page, now also runs when a page throws an exception denoting that a resource has not been found.

Form Builder and Form Runner

Form Runner persistence layer configuration

In 3.9, you had a direct mapping from app, form, form type to the URI implementing the REST persistence API. For instance, to map "everything" to the Oracle persistence layer, in 3.9 you would write:

<property as="xs:anyURI" name="oxf.fr.persistence.app.uri.*.*.*" value="/fr/service/oracle"/>

Orbeon Forms 4.0 introduces a level of indirection: you map app, form, form type to a provider, and then map that provider to its REST persistence API. Since a provider named oracle is pre-defined, the configuration equivalent to the above 3.9 property is:

<property as="xs:string" name="oxf.fr.persistence.provider.*.*.*" value="oracle"/>

Amongst other things, this allows you to setup Orbeon Forms to use different schemas for different app, form, and form type combination. For instance you could store everything related to an hr app in once schema and everything related to another finance app in another schema. For more on this, see how to setup the persistence layer for multiple schemas.

Similarly, for eXist:
<property as="xs:string" name="oxf.fr.persistence.provider.*.*.*" value="exist"/>
Here is the 3.8/3.9 way of configuring the URI to point to the eXist location:
<property as="xs:anyURI"  name="oxf.fr.persistence.service.exist.uri"
              value="http://localhost:8080/orbeon/exist/rest/db/orbeon/fr/>
And here is the 4.0 property:
<property as="xs:anyURI"  name="oxf.fr.persistence.exist.exist-uri"
              value="http://localhost:8080/orbeon/exist/rest/db/orbeon/fr"/>

Security of the built-in eXist database

By default, the built-in eXist database used by Form Runner is now protected. This means the following:
  • eXist only accepts REST requests internal to Orbeon Forms, based on a secret token
  • All other eXist servlets are disabled.
In particular, this means that you can't access eXist's REST API from outside Orbeon Forms. If you need such access, we recommend that you setup a properly secured Form Runner eXist database.  In general, we recommend using an external database for production anyway.

If you need, for development purposes, to disable this security check,  you can comment out the filter mapping for orbeon-exist-filter in web.xml. You can also setup an eXist username/password and configure Form Runner with that username password.

Submitting initial data to Form Runner

Form Runner 3.9 has two properties which enable POSTing data to a form's new or edit pages from an external application:
  • oxf.fr.detail.new.accept-post
  • oxf.fr.detail.edit.accept-post
Form Runner 4.0 has a new and improved authorization mechanism for services (see Authorization of pages and services), and these properties no longer have any effect.

In order to implement the same behavior with 4.0, you use the new authorization mechanism:
  • Your external application must provide credentials (e.g. BASIC authorization, a secret token, etc.) when POSTing to Form Runner.
  • Your authorizer service must validate those credentials.

Form Runner references to attachments

Up to Orbeon Forms 3.9, form definitions and form data referenced attachments including the persistence implementation provider. For example, the path to an attached image would look like:
/fr/service/exist/crud/orbeon/bookshelf/data/16ab59/26abcf.jpg
This caused issues if you need to change persistence providers but want to keep the same data.

Post-3.9, the specific persistence implementation name is replaced by a generic and local persistence path:
/fr/service/persistence/crud/orbeon/bookshelf/data/16ab59/26abcf.jpg
URLs to a specific provider still exist, but they now require specific configuration headers and typically will no longer work correctly to load attachments. This means that you may need to convert paths in your existing data to adapt to the new scheme.

Form Builder components configuration

The following property was deprecated and has been removed:
oxf.fb.components.uri
Instead, use oxf.fb.toolbox.group. See also Configuration Properties - Form Builder.

Form Builder publishing of attachments

In previous versions, form definition attachments were not published alongside the form definition. In this version, they are, and if you wrote your own persistence layer you might need to make changes to support PUT of attachments alongside the form definition.

Look and feel of Form Runner buttons

The fr:button component provides nice-looking cross-browser buttons by using the underlying YUI button widget. However with older browsers, the JavaScript involved can make page loading slower than desirable when a large DOM and/or large number of butons are present.

In this version of Orbeon Forms, we have made the default button produced by xf:trigger look nice out of the box, and without JavaScript. This means that you usually won't need fr:button at all.

Form Funner and Form Builder have been updated to use xf:trigger instead of fr:button.

The CSS for the new buttons is available in xforms.css.

XPath type annotations enabled by default on new forms

XPath expressions defined in Form Builder to specify validation constraints, visibility, read-only, and calculated values, now make use of  type annotations by default on new forms. Existing forms are not affected.

For more information on XPath type annotations, see XForms - XPath 2.0 Support.

Twitter Bootstrap CSS

Form Runner now uses Twitter BootstrapIf you have custom CSS which works with Orbeon Forms 3.9, it is likely that you will have to update it to work with Orbeon Forms 4.0.

Strength of CSS rules

Bootstrap, XForms engine, Form Runner and Form Builder rules are now contained within an enclosing .orbeon CSS class. This ensures that the Orbeon CSS rules only apply within an element with that class. It also makes Orbeon CSS rules a bit stronger than before. You might have to update your custom CSS to take this into account.

Adding your own CSS

Orbeon Forms 4.0 has a new property to define your own CSS: oxf.fr.css.custom.uri.*.*. For example:
<property
  as="xs:string"
  name="oxf.fr.css.custom.uri.*.*"                                         
  value="/config/acme.css"/>
With 3.9, you had to make sure you were first copying the exact value of the oxf.fr.css.uri.*.* property, which was fragile and inconvenient. We recommend using the new property.

XForms engine

Encryption password

With Orbeon Forms 4.0, the oxf.xforms.password property has been renamed oxf.crypto.password. For more information, see Configuration Properties - Base.

oxf.xforms.password is still supported for backward compatibility.

Encryption of item values of the client

In previous versions, by default, item values sent to the client were encrypted. In this version, instead, item values received a simple number. This should not cause any particular compatibility problem.

Error handling during XForms processing

Error handing is more permissive, to allow users to recover from a crash in more cases. See XForms - XPath and Actions Error Handling for more information about the new behavior.

Flow of XForms events along XBL scopes and event retargeting

With 3.9, XForms events within XBL components had incorrect behavior with regard to crossing XBL boundaries, in particular:
  • An event targeted to the inner scope could be caught by an event handler in the outer scope.
  • An event targeted to the outer scope would not flow over the XBL boundary so would not be caught by a handler outside the XBL component (see #284: xforms-invalid doesn't escape the XBL control).
  • UI events (DOMActivate, xforms-value-changed, etc.) could be retargeted, that is upon the event reaching an XBL component boundary, a new event would be created, targeted at the bound node.
This release fixes these issues and events now flow alongside XBL boundaries and are not incorrectly retargeted. XBL component which depended on this behavior might require changes.

Behavior of extension xxforms-valid and xxforms-invalid events

With Orbeon Forms 3.9, these two events were dispatched after every validation, and each instance would receive one of  the two events. With Orbeon Forms 4.0, these events indicate a change in the validation state. So only the instances changing state (from valid to invalid or from invalid to valid) receive an event.

For more information, see XForms - Validation.

HTML layout switched to "span" mode

The default HTML Layout of XForms Controls is now the "span" mode for all XForms pages including Form Builder and Form Runner, and the "nospan" mode is removed (it was already considered legacy in 2009!).

In order to switch to the "span" mode, you might need:
  • adjusting some of your CSS
  • adjusting some of your JavaScript, if it depends on the "span" mode layout

Deprecation of YUI RTE and use of tinyMCE

In previous releases, we recommended using YUI RTE as the rich text editor component, enabled via <xforms:textarea mediatype="text/html">. In this release, the recommended rich text editor component is tinyMCE, available via the XBL component fr:tinymce.

Model variable scoping

Shadowing of model variables in the view has been fixed.

With previous versions, other model variables could incorrectly be seen in transparence. Say you had switched between model1 and model2, in the view you would see the following variables:
  • view variables up to switch to model2
  • model2 variables (incorrect)
  • view variables up to the top
  • model1 variables (incorrect)
Now, you see:
  • view variables up to the top
  • model2 variables
This fix could impact forms that incorrectly relied on the previously incorrect behavior.

xforms:group and xforms:switch no longer dispatch xforms-value-changed

These two controls are not meant to hold values. In version 3.9, however, they did hold a value to help with the implementation of XBL components. Other mechanisms are now available, including using xforms-value-changed on variables, so this feature has been removed.

If you implement XBL components or plain XForms code depending on this, you can easily update it. For example replace:
<xforms:group ref="$binding">  
    <xforms:setvalue ev:event="xforms-enabled xforms-value-changed" .../
</xforms:group>
with:
<xforms:var name="value" value="$binding/string()">
    <xforms:setvalue ev:event="xforms-enabled xforms-value-changed" .../
</xforms:var>

Focus handling

Focus handling has been overhauled. See XForms - Focus for details about the new behavior.

Specifically, the following has changed:
  • grouping controls can receive DOMFocusIn and DOMFocusOut
  • in addition to setfocus, focus can change when setindexxxforms:togglexxforms:hidexxforms:showxforms:insert, and xxforms:delete are executed
  • focus can change during refresh
These changes impact:
  • when DOMFocusIn and DOMFocusOut are dispatched, and which controls are targeted by these events
  • how the focus changes in the user interface
If you never rely on DOMFocusIn and DOMFocusOut, this change probably doesn't impact existing code, although from the user perspective focus might still change in a different way.

If you do rely on DOMFocusIn and DOMFocusOut, it is advised to review listeners for these events.

DOMActivate on <xforms:output>

When a user clicked on an <xforms:output> control, the XForms engine used to dispach a DOMActivate event to that control. This is no longer the case and no event is dispatched by default.

You can enable that behavior by adding the xforms-activable class:

<xforms:output value="name" class="xforms-activable"/>

Blanking of calculated and initial values upon error

With Orbeon Forms 3.9, if a runtime exception occurred when  evaluating a calculate or xxforms:default expression on xforms:bind,  the behavior was a if the evaluation did not take place at all.

With Orbeon Forms 4.0, if such an error occurs, the calculation sets a blank  result value instead. This avoids stale calculated values, which can be confusing.

Behavior of XPath annotations

With 3.9, when using xxforms:expose-xpath-types="true", if an XPath expression was accessing a typed value with a value which didn't match the annotated type, an untyped atomic value was returned. With 4.0, the expression instead fails.

NOTE: In Orbeon Forms 3.9, this feature was rarely used and not activated by default, so this change should have little practical impact.

Removal of xforms-widgets.xsl

The xforms-widgets.xsl transform was deprecated in Orbeon Forms 3.8 and has been removed.

Follow the 3.8 release notes linked above for how to transition to using <fr:tabview> instead.

The preferred version of implementing new components is by using XBL.

Removal of widget:xforms-instance-inspector

The component <widget:xforms-instance-inspector> was deprecated in Orbeon Forms 3.8 and has been removed. Instead, use:

<fr:xforms-inspector xmlns:fr="http://orbeon.org/oxf/xml/form-runner"/>

NOTE: You don't need the namespace mapping if you already have it in scope.

Use of xhtml:class on controls

The attribute xhtml:class on controls was undocumented and has been removed. Use plain class instead.

XBL Components

fr:tabview

The tab-changes-context property has been removed. fr:tab behave like xforms:group: if the element has a ref or bind, it binds to a node, otherwise it doesn't. This was the default behavior with the tab-changes-context property. Removing the property just no longer makes it possible to disable this behavior.

Other

Pipeline Engine attributes

The following two deprecated attributes on processors are removed:
  • uri: (use name instead)
  • encapsulation

Renaming of oxf:xhtml-rewrite and oxf:html-rewrite inputs and outputs

These processors' inputs and outputs are renamed as follows:
  • rewrite-in → data
  • rewrite-out → data
This is consistent with most processors.

NOTE: These processors are unlikely to be used outside of Orbeon Forms internals.

Removal of deprecated custom-processors.xml file

Orbeon Forms 3.9 deprecated the custom-processors.xml file. This version removes support for this file entirely. Instead, use processors-local.xml under the config directory.

Deprecation of oxf.prologue property

Use instead oxf.pipeline.processors. Note that this property is rarely used.

Historical release information

    4.0 Release Candidates

    • Orbeon Forms 4.0 RC 1 was released on February 11, 2013. See the blog post.

    4.0 Betas

    • Orbeon Forms 4.0 Beta 3 was released on January 29, 2013. See the blog post.
    • Orbeon Forms 4.0 Beta 2 was released on January 15, 2013. See the blog post.
    • Orbeon Forms 4.0 Beta was released on January 10, 2013. See the blog post.

    4.0 Milestones

    • Orbeon Forms 4.0 M19 was released on December 12, 2012. See the blog post.
    • Orbeon Forms 4.0 M18 was released on December 4, 2012. See the blog post.
    • Orbeon Forms 4.0 M17 was released on November 28, 2012. See the blog post.
    • Orbeon Forms 4.0 M16 was released on November 19, 2012. See the blog post.
    • Orbeon Forms 4.0 M15 was released on November 13, 2012. See the blog post.
    • Orbeon Forms 4.0 M14 was released on November 6, 2012. See the blog post.
    • Orbeon Forms 4.0 M13 was released on October 30, 2012. See the blog post.
    • Orbeon Forms 4.0 M12 was released on October 23, 2012. See the blog post.
    • Orbeon Forms 4.0 M11 was released on October 3, 2012. See the blog post.
    • Orbeon Forms 4.0 M10 was released on August 21, 2012. See the blog post.
    • Orbeon Forms 4.0 M9 was released on August 7, 2012. See the blog post.
    • Orbeon Forms 4.0 M8 was released on July 23, 2012. See the blog post.
    • Orbeon Forms 4.0 M7 was released on July 16, 2012. See also the blog post.
    • Orbeon Forms 4.0 M6 was released on July 9, 2012. See also the blog post.
    • Orbeon Forms 4.0 M5 was released on July 2, 2012. See also the blog post.
    • Orbeon Forms 4.0 M4 was released on June 18, 2012. See also the blog post.
    • Orbeon Forms 4.0 M3 was released on June 11, 2012. See also the blog post.
    • Orbeon Forms 4.0 M2 was released on June 4, 2012. See also the blog post.
    • Orbeon Forms 4.0 M1 was released on May 23, 2012. See the blog post.