@mawtex mawtex released this Jun 29, 2018

Assets 4

C1 CMS 6.5 (6.5.6754.25114)


Download C1 CMS 6.5

What’s new in C1 CMS 6.5?

This is a minor release, that mostly provide bug fixes.

WampSharp library have been updated to a release version.

Browsing files on the System and Layout perspective now a preview in the browser for most text file types. DLLs has detailed version information displayed.

Bug fixes

Some major fixes in this release include ...

  • C1 Console user workloads no longer serialized, leading to faster response times when working in the C1 Console in multi-user setups.
  • URL generation from data no longer used the pipecharacter | (%7c) for encoding. Hypens / dashes (-) no longer replaced with %7c2D
  • Re-installing packages with dynamic types while on SQL Server works as expected.
  • A great number of fixes for Edge
  • Page preview works

For a list of all issues fixed in this release, see issues closed in C1 CMS 6.5

6 5

Jun 28, 2018
Merge pull request #599 from Orckestra/fix-Edge42
Fix blocking issues in edge 42.

@napernik napernik released this Mar 7, 2018 · 55 commits to master since this release

Assets 4

C1 CMS 6.4 (6.4.6639.31891)


Download C1 CMS 6.4

What’s new in C1 CMS 6.4?

This is a minor release, that provides some bug fixes.
.NET Framework version 4.7.1 is now required.
Composite.dll meta data now includes hash/branch information for easier support.

Bug fixes

#547 Empty placeholder content is shown after for a newly added page version
#539 An exception when adding pages when HttpContext is not available
#543 Scheduled [un]publishing doesn't work with debug builds of Composite.dll
#544 Published C1 pages with unpublished ancestor pages should not show up in search results
Fixing package installer failing to locale zip entries in sub folders in some of the packages
CAPTCHA code no longer uses Environment.ManchineName as a part of the encryption key, as that prevents it from being used in load balancing scenarios.


@napernik napernik released this Jan 29, 2018 · 86 commits to master since this release

Assets 4

C1 CMS 6.3 (6.3.6599.29375)

This release contains bug fixes and performance improvements as well as introduces a few extension points such as IPageContentFilter that enables developers to implement post processing for C1 pages.

With this new version it is also possible to use the new premium package - Orckestra.Media.CdnPublisher that enables configuring a C1 CMS website to serve static and media files via a reverse proxy cache service, like Azure CDN.


Download C1 CMS 6.3

What’s new in C1 CMS 6.3?

Dev Features

IPageContentFilter is an interface that allows post processing of C1 pages - modifying the HTML of the final page. It can be used, for example, to replace or augment certain URLs, replace img tags with the new HTML 5 picture tags, update certain words in the content etc.

Documentation link pending

Orckestra.Media.CdnPublisher package

The Orckestra.Media.CdnPublisher add-on allows integration with Azure CDN, or any other reverse proxy caching server. Using a CDN both allows the deployments to handle a much higher load, reduce hosting costs and possibly improve performance.


The DLL version information is now visible in the C1 Console when browsing files in the System perspective.

Bug fixes

#504 [Chrome] Input fields loosing focus if login/password information is preserved in browser
#506 [Chrome] Function call editor - text is not visible in the second column input fields.
#490 Transparency artifacts in Chrome
#535 Custom 404 page resolution does not take language specified in URL into account
#507 Console doesn't work if ~/bin/Composite.Generated.dll is missing
Inline search in dropdown selectors is not enabled for Edge and is aligned properly.
Compatibility fixes related to EntityToken deserialization.
Fixing user permissions upgrade failing when there are permissions connected to no longer existing users/user groups.
Fixing an exception in PageObjectCacheFunction that was preventing caching an XML fragment
Fixing exceptions in the code handling the externally added workflows
Fixing "Undo Changes" action not working for page folder data types

Performance fixes/improvements:

XmlDataProvider - removing excessive locking that was limiting website performance.
PageObjectCache - blocking execution only when the same element to be cached is rendered.
Increasing the default max size for the "Page placeholders" cache.
Media handler - fixed performance issues that were occurring under heavy load.


@mawtex mawtex released this Aug 16, 2017 · 151 commits to master since this release

Assets 4

C1 CMS 6.2 (6.2.6436.18972)

This release brings about new features in the CMS Console and Content Search areas and overall performance and memory optimizations, giving an all around speed improvement and critical performance improvements for sites with a vey large amount of pages.

Also, a previously commercial feature - the ability to manage multiple sub-sites with unique host names - is now part of the open source project.


Download C1 CMS 6.2

What’s new in C1 CMS 6.2?

Host name management / multi-site support

The previously commercial feature that allowed admins to manage multiple host names / sub-sites is now part of the open source project. This allow you to associate host names with specific localized sub sites, manage 404 pages per host name and more.

Also - not previously available - “Always use HTTPS” support added for host name settings, enabling you to auto redirect all http requests to https.

See https://docs.c1.orckestra.com/Configuration/UrlConfiguration for more.



The CMS Console browser show PDF, HTML and text file previews when browsing the Media perspective. Code files (.config, .css, .cshtml, .aspx etc.) are shown in the browser as well, when browsing website file structures (Layout and System perspectives).

pdf previewing

Resource File (.resx) editor added to the CMS Console, enabling editing and translating .resx files.
The perspective buttons (left side, Content, Media etc.) now offer a context menu on right click, allowing you to set permissions for the perspective. Other commands attached do perspective elements will also show up. Also, clicking the icon for an already active perspective, will focus the perspective’s main browser.


Dev features

The build in page performance profiler improved - performance trace show a more detailed breakdown and allow you to order by memory usage.

New CMS Console widget available, Hierarchical Tree Selector, allowing users to select X items from a tree structure.

Tree Definition files now support formatting dates, ints and decimals in labels.

Content Search

Search now support facetted search on reference fields on data types. Improved quality of keyword highlighting for text excerpts in search results.

website search function settings

Performance optimizations and fixes

Performance optimization for XML based sites – DateTime, Guid, bool and decimal values were always parsed from underlying string value, now the parsed value is cached.

Performance optimizations across the board for Console security resolving. For sites with larger more complex content trees, this can yield a visible performance improvement.

Memory handling fixes, removing unneeded object finalizers and ensuring IDisposable are disposed of in an orderly fashion. Memory optimizations.

Fixes around our use of the Roslyn Compiler – fixing issues where App_Resources were not compiled for non-default language, some Web Form code on websites would not compile and XSLT inline C# compilation failed.

Critical fix: Chrome v60 update broke setup wizard, preventing CMS install using this browser.

Several other UI improvements, optimizations and bug fixes.

The method for serializing “entity token” and “data source id” changes from escaped string custom format to JSON. This make reading such tokens a lot easier.


@mawtex mawtex released this May 1, 2017 · 306 commits to master since this release

Assets 4

C1 CMS 6.1 (6.1.6325.31805)

This is a minor release, primarily stabilizing the 6.0 release and bringing the Search features introduced as beta in 6.0 to release level in terms of stability, performance and features.


Download C1 CMS 6.1

What’s new in C1 CMS 6.1?

This release allows developers to use C# 7.0 features, the build-in content search has been expanded to the point, where front-end facing search can be serviced and customized to meet a wide range of needs. The release also contains several fixes and performance improvements.

Latest Roslyn compiler in use

Developers can now use C# 7.0 features in Razor Functions, MVC view code files, WebForm files etc.

Search improvements

Stemming, search results highlighting, indexing output of the cms functions.
Support for indexing content of media files (e.g. PDF and DOCX) with the Orcksetra.Search.MediaContentIndexing package.
API support for filtering search results to specific websites/media folders.
API support for implementing and filtering by custom fields (e.g. by extranet permissions).
Localizable user friendly names for MIME types when searching for media in the console.
Greatly reduced index building time.


Media files now have a Tags field enabling users to add tags (keywords) to media files.
New service IMailer for sending mails (enable replacing the default mailer SmtpClient with other implementation).

Performance fixes

  • deleting multiple CMS Pages at the same time
  • using the Orckestra.VersioningVersionPublication package
  • improved caching of data from SqlDataProvider

Breaking changes:

Security change – the “visible perspectives” settings for users/groups are now included in the calculation of inherited access. Previously having access to a perspective did not influence the inheritance of rights, meaning that any global access would flow down to all perspectives and elements, unless explicitly removed at a lower level. Now access will not be inherited onto perspectives the users cannot access.

A typical scenario where this become visible will be non-admin users unable to insert CMS Functions *getting an empty tree to choose from( – this can be solved by setting explicit read permissions on the “All Functions” element or by allowing read permissions to be inherited past hidden perspectives, see below.

You can control this behavior using the attribute inheritGlobalReadPermissionOnHiddenPerspectives in ~/App_Data/Composite/Composite.config. Setting this attribute to true will allow users with global read access to read structures like the CMS Functions tree, even though they have now been granted access to the Function perspective.

Notable bug fixes:

#435 Latest Firefox and Chrome will break the Function Call editor in the Visual Editor
#403 MVC links are not resolved correctly
#404 Page type restrictions are not resolved properly
#422 Checkbox will reset to initial state when other form widgets on same form does postback
#426 Components window is empty when site is running in subfolder
#417 [FireFox][Search,Components] WebSocket connection is not reopened automatically if website restarts
Fixes in relation to SQL support of Orckestra.Versioning.VersionPublication


@mawtex mawtex released this Feb 9, 2017 · 469 commits to master since this release

Assets 4

C1 CMS 6.0 (6.0.6248.33161)

We are super excited to announce this release – delivering major improvements for end-users, website builders and developers - built in search, a new visual components feature, more ways to customize the console and valuable tooling like WAMP, React/Redux and built in DI support.

Also, we are getting back to our open source roots, putting C1 back into the project name. We here at Orckestra are still driving the development and provide services, premium features and commerce integration on top.


Download C1 CMS 6.0

What’s new in C1 CMS 6.0?

With this release end-users can search for content and media files from within the console and there is now a much better experience when inserting functions, thanks to a new feature we call Components.

Website builders can add sophisticated search features to websites, manage canvas styling for WYSIWYG editors depending on what section a user edits and control where Components can be inserted.

Developers can hook in to our Dependency Injection framework, build search providers and leverage the new WebSocket based WAMP router and new client-side framework for building custom UI, based on ReactJS, Redux and Wampy.

There is also support for creating completely custom perspectives, deep linking to items in the console trees and more.

All the featured that have been driving this release has been released as open source, some via packages in our https://github.com/Orckestra/CMS-Packages repo.

IIS8+ / WebSockets required for full console feature support

The system requirements have changed for this release. You now need IIS8 or later and WebSockets must be enabled on your IIS server.


You can now find pages, data and media files in the console by searching. The feature is installable as a package (available in preview) and currently we have an Lucene.NET based search provider ready and available as open source (see https://github.com/Orckestra/CMS-Packages/tree/search/Orckestra.Search.LuceneNET)

To get search on this release, install the package Orckestra.Search.LuceneNET.

Under the hood are new APIs that enable you to execute searches against content and create your own search provider, should you need it.

The search is integrated with the data type system in C1, meaning that the search will include core and custom C1 data, provided you declare you want this, either through UI or code.

For UI based data types, you will find new options when you edit your data type, enabling you to have a data type made searchable and giving you control over how fields can be searched.

copenhagen search in console

For code based data types, you can attach the attributes [SearchableTypeAttribute()] to types and [SearchableFieldAttribute()] to fields.

You can read more about search and extensibility in this preview documentation.


Components are a new way to insert functions – it is a lot more intuitive to use and it can do a lot more tricks, like insert HTML blocks and generate markup at insert time.

components dialog

To create a component, simply add a xml file to ~/App_Data/Components with the desired markup. You can augment the file with attributes and customize title, group, images and more.

<html pal:title="YouTube Video"
        pal:description="Insert responsive YouTube video."
        <f:function name="Composite.Media.YouTube" xmlns:f="http://www.composite.net/ns/function/1.0">

The above component will be presented to the user using the values specified with the pal:* attributes. The content of the body is what will be inserted. In the above case this will simply add the function Composite.Media.YouTube like you can do via the existing "Insert Function" feature, but with components the user experience is a lot more easy and intuitive and you can mix in static html and more than one function in the inside the body and this use this feature to do a lot more.

Beside from html documents – which will be copy to content as is - you can make function documents, which will prompt the user to fill in function parameters, and then insert the result of the function execution.

<f:function name="Orckestra.Web.Html.Grid.Columns" 
        pal:title="Social columns..."
        pal:description="Create a set of columns, teasing your social networks"
        xmlns:f="http://www.composite.net/ns/function/1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:pal="http://www.composite.net/ns/components/1.0">
    <f:param name="Column1">        
                <f:function name="Orckestra.Web.Html.TeaserCards.IconTeaser">
                    <f:param name="Icon" value="facebook-square" />
                    <f:param name="IconColor" value="primary" />
                    <f:param name="Title" value="Facebook" />
                    <f:param name="Description" value="Find us on Facebook - contact us or like our page to keep up to date with news." />
                    <f:param name="ReadMoreUrl" value="http://www.facebook.com/OrckestraCMS" />
    <f:param name="Column2">
                <f:function name="Orckestra.Web.Html.TeaserCards.IconTeaser">
                    <f:param name="Icon" value="twitter-square" />
                    <f:param name="IconColor" value="primary" />
                    <f:param name="Title" value="Twitter" />
                    <f:param name="Description" value="Find us on Twitter - engage with us or follow us to get our short news tweets." />
                    <f:param name="ReadMoreUrl" value="http://www.twitter.com/OrckestraCMS" />

You can augment components with container class names (see below) and there by limit where a component can be inserted. For instance, you can limit a component to only be available in the WYSIWYG editor when users are editing a specific placeholder or the content for a given page type.

Container classes

You can attach class names to placeholders in the CMS, both at template level and per page type.
Doing so will have two effects: the class names will be attached to the body of the WYSIWYG editor’s canvas, enabling you to have custom styling for individual placeholders. Also, the components that are available for user selection will be filtered according to the active container classes and filter rules defined on the component (if any).

    [Placeholder(Id = "content", ContainerClasses="primary,wide", Title = "Content", IsDefault = true)]
    public XhtmlDocument Content { get; set; }

For page types, if you add a Placeholder Content element to it, you will find a new field “Container classes” on the Settings tab, where you can add one or more container classes.

page type container classes

If classes are specified at both template and page type level, the combination of both sets is used. If you want one class to rule out another (for instance, ensure "wide" and "narrow" cannot coexist) you can define this in ~/App_Data/Composite/Configuration/AntonymClassDefinitions.xml

If you are using the Visual Editor on for function parameters or data fields, you can configure what container classes are sent to the editor via a new parameter ContainerClasses on the Composite.Widgets.XhtmlDocument.VisualXhtmlEditor widget.

Dependency Injection

We have used the DI framework from ASP.NET Core – described in depth here https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection

Getting a service

To request a service, use Composite.Core.ServiceLocator – for services registered with the locator, you add the required services to your class constructor, as described in the ASP.NET Core documentation.

var indexUpdater = ServiceLocator.GetService<ISearchIndexUpdater>(); 

Registering a Service

You can register services during the startup of C1 CMS – to do so, create a class marked with the ApplicationStartup attribute and implement the ConfigureServices method as shown below.

The IServiceCollection that is passed to you, let you resister your service as singleton, transient or scoped (shared per request).

internal class WampRouterResolverRegistry
    public void ConfigureServices(IServiceCollection serviceCollection)
        serviceCollection.Add(ServiceDescriptor.Singleton(new WampRouter()));

Function Parameter construction via Dependency Injection

When editing/executing Functions (Razor Functions, MVC Functions, C# Functions etc.) that have one or more parameters of a type that the DI Service Locator can provide, we will hide those parameters from the user UI and dynamically populate the parameter by getting instances from ServiceLocator.

This enable you to extend DI use to Functions in C1.

NuGet Feed

We have a new NuGet feed for our core assemblies and dependencies - this package ensure that your references to C1 CMS assemblies are marked as "do not copy local".

See https://www.nuget.org/packages/C1CMS.Assemblies/


While looking around for a more up-to-date technology for client/server communication we came across WAMP - Web Application Messaging Protocol – and we are quite happy to have this included in C1.

WAMP provides Unified Application Routing in an open WebSocket protocol. Routing of both events (for PubSub) and routing of calls (for RPC) between applications components in one protocol. By using WAMP we can build distributed systems out of application components which are loosely coupled and communicate in (soft) real-time.

Our implementation of Wamp make use of WampSharp open source project to build a singular router which would accept different roles to be registered and routed.


  • Realm: A Realm is a routing namespace and an administrative domain for WAMP. For example, a single WAMP router can manage multiple Realms, and those realms are completely separate. We have used a single default realm for core operations however our interfaces exposed realms if you need to separate your namespace.
  • Caller: A Caller issues calls to remote procedures by providing the procedure URI and any arguments for the call.
  • Callee: The Callee executes the procedure using the supplied arguments to the call and return the result of the call to the Caller.
  • Publisher: A Publishers publishes events to topics by providing the topic URI and any payload for the event.
  • Subscriber: Subscribers of the topic will receive the event together with the event payload.

C1 now supports and exposes interfaces to easily register Callees and Publishers in backend.

How to:

For a Callee you should first define it like this:

public class ASampleRpcService : IRpcService
    public IEnumerable<IPage> GetComponents(string title = null)
        return DataFacade.GetData<IPage>().Where(f => f.Title == title);

Then you should utilize WampRouterFacade to register it in the router:

WampRouterFacade.RegisterCallee(new ASampleRpcService());


WampRouterFacade.RegisterCallee("myRealm",new ASampleRpcService());

For a publisher definition is like this:

public class ASamplePublisher : IWampEventHandler<long, int>
    public IObservable<long> Event => Observable.Timer(TimeSpan.FromMilliseconds(0),

    public string Topic => "topic.chosen.your";

    private int counter = 0;

    public int GetNewData()
        return counter++;

And just like callee you should utilize WampRouterFacade to register it in the router:

WampRouterFacade.RegisterPublisher(new ASamplePublisher());


WampRouterFacade.RegisterPublisher("myRealm", new ASamplePublisher());

A new way of building a console

The C1 console has started seeing the first elements of our upcoming UI overhaul. To most users, this will be invisible, but for developers, the underlying mechanisms step into the modern world of JavaScript-based front end systems.

The UI for the Components and Search features are based on this new technologies.

Server access with RPCs and PubSub

Web application UIs usually access the server in one of two ways: Listening for messages, and fetching or putting data. The former is useful when you need to know when to update the view, and the latter is good for pushing changes to the server or fetching information from it. To that end, we have picked WAMP - Web Application Messaging Protocol - which provides both these functions. We use a lightweight implementation called Wampy on the client side, which means we have easy access to fluid updates and quick server calls.

A pony trick you can try out is to make updates to one of the component files in ~/App_Data/Components and see changes update instantly in the client Component view when you save your file. This is an example of our use of PubSub.

Client state and a single source of truth

Keeping a client state under control is often difficult, so we chose Redux to help us do it. This Facebook-sponsored library is becoming an industry standard with its sharply delineated update steps and clear activity tracking, as well as its high level of developer support and tooling. Redux works by dispatching actions to perform state updates. Whenever some aspect of the application changes, Redux has an action for that, and the effects can be tracked through it. This allows us to even ‘time travel’ by stepping back through the actions that were dispatched, showing us the state as it was before.

Markup, style and rendering

React, another industry-standard library, was our choice for rendering content. React provides the ability to build your user interface from components, each containing the code and markup they need to show a part of the UI. Styled-components adds to this the ability to enclose style information organically with these components, meaning whenever we render a component in a new place, it comes complete with all its needed pieces, improving reusability. React also interfaces well with Redux, mentioned above, making for clear, fast and easy state handling, re-rendering and updates of the browser view.

Modules and the management thereof

In development, we have taken up using the ECMAScript 2015 standard, allowing the use of promises, template strings, and above all modules. To this end, we’re employing JSPM, System.JS and Babel. System.JS is a module loader system based on the WHATWG System standard, and JSPM serves as a package manager - in the vein of npm or bower - that integrates with it. System.JS also provides our production build system, providing a single, lean bundle that loads quickly. We use Babel to transpile the codebase into something runnable by older browsers, which allows us to remain compatible with IE10 and 11.

Where we’re going

The first few pieces of the new console UI are meant to battle test our concepts, to see what might need adjustment and what works well. New UIs added to the console will be based on our tools and experiences from this, and meanwhile we will be working to build a full version of the new UI to replace the old one.

Placeholder Perspectives

Perspectives – like Content, Media, Data – have been opened up, so developers can now own the entire canvas, breaking out of the tree/command buttons/browser view. We’ve used this to provide a custom search perspective.

To create a new perspective with a custom path to manage the entire canvas, insert the following in ~/App_Data/Composite/Composite.config inside the element:

 <add name="SearchPerspective" tag="Search" label="Search" closeFolderIconName="Composite.Icons.generic-search" type="Composite.Plugins.Elements.ElementProviders.VirtualElementProvider.PlaceholderVirtualElement, Composite" path="${root}/console/index.html?pageId=search" IsTool="true">
  <Elements />

The search feature is using this feature to create a custom canvas for search.

Focusing tree elements in the console

The console will locate, select and focus tree elements for URL anchors formatted like this:

~/Composte/top.aspx#FocusElement;{Serialized Entity Token for Element}

Here is a C# example on how to construct such a URL for a data element:

IData data = (the data you with to focus on);
var entityToken = data.GetDataEntityToken();
var serializedEntityToken = EntityTokenSerializer.Serialize(entityToken, true);
return UrlUtils.AdminRootPath + "/top.aspx#FocusElement;" + serializedEntityToken;

On the client such a link should be exposed like

Breaking changes

IApplicationStartupHandler interface changed in v6 – see 8bdd981#diff-6dcc0e5ce729322577094e941a56e44b for change. If you have implemented this interface, add an empty method ConfigureServices(IServiceCollection serviceCollection) to your implementation.


Issues fixed since last release

The following issues that were reported on previous releases has been fixed in 6.0:

  • #294: Not possible to install data for a static data type data with DataPackageFragmentInstaller if static data type is installed as well
  • #295: "Open Cph Master Pages" shows a compilation error on the home page – not the core I guess
  • #301: Can't overwrite some entities via package installer
  • #341: UrlActionToken is not handling when the provided url already has a querystring
  • #385: SEO Assistant: "In URL" check does not examine whole URL

@mawtex mawtex released this Dec 12, 2016 · 1049 commits to master since this release

Assets 4

This is a service release with minor improvements:

  • CMS Function previews in the Visual Editor are more stable.
  • Setting up the CMS for the first time is a lot faster (typically 1 minute removed from setup time)
  • You can now install packages that include data update (#297). Package Creator now also support exporting such packages.


@mawtex mawtex released this Nov 3, 2016 · 1057 commits to master since this release

Assets 4

Orckestra CMS 5.4 (5.4.6150.25005)

This is a minor release, following up on the 5.3 released 14 days ago. In this version we introduce support for bulk uploading files to the website file system. On the stability side there are a few fixes.


Download Orckestra CMS 5.4

"Upload and Extract Zip" command for bulk upload

Developers and web masters that need to upload a larger number of files and folders to the website, can now do so through the CMS Console. Trees exposing the file structure (the "/" folder on the System perspective and the "/Frontend" folder on the Layout perspective) now have a "Upload and Extract ZIP" command on folders. This allow you to upload a ZIP and have it extracted to the given folder.


Minor Changes

Hierarchical Tree Selector widget now display number of selections made.
Adding "setFileFieldValue" command to nightwatch api (easy test of file uploads)

Bug fixes

"Add data" broken for Page Datafolders with publication flow active #276
Certain packages containing dynamic data types may hang during install #282
Function links in the C1 Page Speed view not working #270
A validation message on a required XHTML editor field (tab) shows up beyond the Console area #266

yes we code 5 4

@kasravi kasravi released this Oct 27, 2016 · 1093 commits to master since this release

Assets 4

Orckestra CMS 5.3 (5.3.6135.33075)

This release is our first as Orckestra CMS, after changing name from Composite C1. We've added the ability to duplicate pages and data, bumped up the .NET version requirement, added automated end-to-end testing and been fixing reported issues.


Download Orckestra CMS 5.3

Product name update

As advertised last month, we are renaming the product to Orckestra CMS - the open source project is named Orckestra CMS Foundation.


Duplicate Pages and Data

You can now create copies of pages and other content items via the new Duplicate action.


For tree structures created you have created with the Tree Definition XML format, you can selectively include the command on items using the element <DuplicateDataAction />

Upgrading .NET Framework to 4.6.1

To keep up with the improvements of .NET Framework we have upgraded to 4.6.1.

For customers using our Azure Cloud Services (WebRole), be aware you should obtain an updated package from us, which ensure .NET 4.6.1 is available on the machine.

Automated end-to-end testing with Nightwatch.js

We have added "Nightwatch.js, Node.js powered End-to-End testing framework" and extended it with an API tailored for writing tests for the CMS Console, giving you commands like browser.selectPerspective("Content").openTreeNode("Venus Starter Site").selectTreeNodeAction("Getting Started", "Duplicate Page")

Our build environment is executing these tests automatically after each build. This should ensure even more stable releases and automatic quality control on nightly builds.

To create a new test, add a .js file below ~/Website/test/e2e/suite - a sample test is shown below.

module.exports = {
    '@tags': ['Duplicate'],
    beforeEach: function (browser) {
        browser.url(browser.launchUrl + '/Composite/top.aspx');
        var content = browser.page.content();
    'can duplicate simple page': function (browser) {

        .openTreeNode("Venus Starter Site")
        .selectTreeNodeAction("Getting Started", "Duplicate Page")
        .assertTreeNodeHasChild('Websites', 'Venus Starter Site')
        .assertTreeNodeHasChild('Venus Starter Site', 'Copy of Getting Started');

        .selectTreeNodeAction("Copy of Getting Started","Delete")
        .assertTreeNodeHasNoChild("Copy of Getting Started")
    afterEach: function (browser, done) {

Support for Version Publication (commercial add-on)

With this release customers that are using the Business and Premium editions can install the Version Publication add-on and create multiple versions of a page publish according to a schedule.

For details, see https://cms.orckestra.com/Add-ons/All/Orckestra.Versioning.VersionPublication

Minor Changes

Bug fixes

cat 5 3