Håkan Edling edited this page Feb 3, 2017 · 13 revisions


Released: 3/2/2017

Minor service release for Piranha.Core. The new database-fields for custom image cropping added in 2.2.7 were missing in Create.sql causing inconsistency when making a fresh installation of Piranha CMS.


Released: 1/2/2017

Minor service release which amends the problem of missing default values for cropping alignment in already existing media entries after updating to version 2.2.7

Version 2.2.7

Released: 1/2/2017

This release only affects the Piranha.Core NuGet packages as the other packages are the same as the previous release.

Property naming conventions

When adding a property to Page types or Post types the entered names are validated, trimmed & possible spaces are replaced with underscore. This is to make sure that they can be accessed properly through the model ExpandoObject.

Default manager post sorting

The default sorting for posts have been updated to use the field Created instead of the title that was used previously.

Configurable manager url

The url prefix for the manager interface /manager is now configurable by setting the following config setting.

    <managerUrl value="admin" />

Contributed by @alexjamesbrown.

Italian manager translation

The manager interface is now available in Italian. Contributed by @devikprod.

Image cropping functions

It is now possible to configure the most important section of an image in regards to both horizontal and vertical position. This is used when cropping images for thumbnails but can of course also be used for fronted css-positioning. Contributed by @filipjansson.


Released: 22/1/2017

Service release as a column was missing from the initial create script in version 2.2.6 causing new installations to fail after database creation.

Version 2.2.6

Released: 17/1/2017

Support for blocks

In many modern websites Single Page Applications or Composite Pages are common. To better support this a new feature called Page blocks will be introduced.

When creating a Page Type you will get an option to set it as a block. This will give the following behaviour.

  • These pages are displayed differently in the sitemap
  • Navigation Title is removed from Page Edit
  • Preview is removed from Page Edit
  • Settings is removed
  • These pages are always set to hidden (not to show in menus)
  • These pages are not included in the SEO warnings for the site
  • On a Page Type you can specify if subpages are allowed.
  • On a Block Type you can specify under which page types it can be placed.
  • The popup for adding new page now filters types according to the above two settings.
  • Copied pages that are not detached include the blocks from the original page.
  • The generated SiteMap should exlude all blocks.

Also a new collection Blocks is added to the PageModel. When loading a page model this collections is automatically populated by child pages that are created from a page type that is a block. Feature has been improved with the following functionality

Full TinyMCE

The complete TinyMCE package has been included in the library.

Post Excerpt length

Has been increased from 256 to 512 characters.

Show navigation title when moving a page

If navigation title is set, this was shown in all places except in the fields for moving a page.

Make the "sticky" toolbar of Tiny MCE optional

The toolbar of the Tiny MCE editor is sticky which is good for long editors, for example content handled in the HtmlEditor. However, when inluding an HTML-editor in a complex extension this behaviour is not always wanted.

Remove MySql support

This is not considered a core feature and has been removed.

Include "Include in RSS" when building post types from code

A property for this has been added to PostTemplate.cs.

Removed dotLess compiler

Update the project to use WebEssentials less-compiler instead.


Issue #475 - Mixed Mode Routing not working

Error when previewing items in mixed mode.

Issue #417 - Error after clean install

After installing the database and logging into the manager you get an exception.

Issue #461 - Error when getting media draft using permalink

When previewing a page referencing media using the media permalink the server returns a 404.

Issue #453 - Bug in WebPages routing when UrlData matches a permalink

Bug in SinglePage.cs causing the routing to fail when the supplied UrlData matches the permalink of an existing post.

Issue #418 - Fix for custom ICacheProviders

Contributed by @mike-jewell


Released: 21/09/2016

This is a patch release for Piranha.WebPages which fixes caching issues performed by using the ModelProperty Attribute. stored in a fashion where ot

Version 2.2.5

Released: 05/07/2015

As of this version we have started moving legacy features out of the core packages. In this version the REST services have been moved into the package Piranha.Legacy.Services

Dependecy updates

All NuGet-packages have been updated to the latest version.

Allow setting redirect on imported Page types

When importing page types through the Extension manager the properties for Redirect and ShowRedirect where missing.

Support for Attribute Routing

The default controllers for MVC (SinglePageController and SinglePostController) now supports Attribute Routing. Contributed by @bapti.

Show DB errors

New config setting for disabling the default redirect to the install screen when something's not up to date in the database. This can be useful for production sites when you might want to handle errors differently.

    <showDBErrors value="true" />

The default setting is false. Contributed by @davidpodhola.

InternalBody for Region is now public

The JSON serialized data property has been changed to public in order to perform SQL queries on the data through the Entity Framework mapping.

Manager translations included in NuGet

The manager translations were missing from the binary NuGet-distributions. These have now been added to the core package.

ParentId in PageModel is now public

The property for accessing a page's ParentId through the IPage interface is now available.

Exact permalink matching

In some cases you only want to match the exact permalink and not all segments in the URL.

    <exactPermalinkMatching value="true" />

The default setting is false. Contributed by @TimoWillemsen.

Hostnames with subfolders

Add support for configuring site trees to have hostnames with subfolders.

Manual composition

The main Application object as well as the ExtensionManager uses MEF for composing extensions and other parts. Some third part components don't work with this, also startup performance of the application is slower and uses a lot of memory when relying on MEF.


Issue #388 - Page title not rendered in MVC template

The layout page uses @Page.Title instead of @ViewBag.Title. This is a bug as the MVC template has been converted from the WebPages template.

Issue #371 - NullPointerException on Non-Default site

When accessing a non-default site with a permalink that isn't found the default site is scanned as fallback causing the routing to kick in even when it shouldn't.

Issue #363 - Category.GetByPermalink SQL error

Calling Category.GetByPermalink causes a SQL error due to a badly formatted query.

Issue #353 - Attachments for copied pages

When displaying page copies that are not detached attachments are missing.


Released: 12/10/2014

The package reference for AutoMapper was missing from the package PiranhaCMS.Core in 2.2.4. This has been fixed in this service release.

Version 2.2.4

Released: 12/09/2014

Transliteration for Russian permalink

The permalink generation now supports russian characters in the title. Contributed by @a-sergeichik.

Include parent in partial UI.Menu

When fetching a partial sitetree there is now a parameter for including the root node in the structure.

Config for X-UA-Compatible headers

New config-parameter added for controlling if the meta headers for X-UA-Compatible rendered by @UI.Head. Contributed by @davidpodhola.

Config for disabling MEF assembly scan

Some external libraries doesn't work together with the MEF imports. In this case you can disable the MEF imports by the ExtensionManager so that only the extensions available in the core libraries are imported. Contributed by @davidpodhola.

Farsi (fa-IR) manager translation

The manager interface is now available in Farsi, contributed by @OmidID. The translation is accessible by using the globalizaion culture fa-IR.


Issue #352 - Media Dialog caching issues in IE

The manager dialog is cached by the Tiny MCE editor in IE causing the dialog to not display newly added media-files.

Issue #349 - Radiobuttons & Select lists not displayed in Chrome

A bug with webkit-appearance in the manager styles causes radiobuttons & select lists not to be displayed correctly.

Issue #318 - Double decoding Url parameters

Error when URL parameters is passed on to the controller when the request is rewritten.

Issue #270 - Thumbnail handler not working

The thumbnail handler (@UI.Thumb) is not working properly when the size parameter is omitted.

Issue #235 - Manager toolbar loses focus on capitalized URL's

The state management in the manager toolbars & menus are case sensitive.

Version 2.2.3

Released: 09/02/2014

Dependency updates

The core framework has now been updated to ASP.NET MVC 5.2.2 and Entity Framework 6.1.1

Disable page & post type builder

The page & post type builder that is a part of the Extension Manager can now be disabled by configuration. This can for example be useful when running in a clustered production environment or when wanting to optimize application startup. This is configured in your web.config.

        <disableTypeBuilder value="true" />

Version 2.2.2

Released: 06/17/2014

Dependency updates

The core framework has now been updated to ASP.NET MVC 5.1.2 and Entity Framework 6.1.0

Hooks for Categories

Hooks have been added for categories to fully support writing localization for this entity.

Updated hooks for Pages, Posts & Media

These hooks have been updated to signal if the entity saved is being published or not.

German manager translation

The manager interface is now available in German, contributed by @SpitzBubeDe. The translation is accessible by using the globalizaion culture de-DE.

Portuguese (Brazil) manager translation

The manager interface is now available in Portuguese, contributed by @Mucaccino. The translation is accessible by using the globalizaion culture pt-BR.

French manager translation

The manager interface is now available in French, contributed by @cosaques. The translation is accessible by using the globalizaion culture fr-FR.

Version 2.2.1

Released: 05/11/2014


Issue #278 - Keywords & Description missing from Post entity

The meta keywords and description is missing from the Post entity in the DbContext

Issue #267 & 261 - Thread issue on application startup

When the application starts issues can occur when building the field list inside the ActiveRecord data mapper. This is due to it's non thread-safe implementation.

Version 2.2.0

Released: 02/23/2014

As this version contains a major framework update, to ASP.NET MVC5 and Entity Framework 6 you may run into issues when updating your current solution. If you run into any issues, create a new fresh install of Piranha CMS and compare the generated web.config files to your updated ones to make sure all versions and runtime bindings have been updated correctly.

Dependency updates

The core framework has now been updated to ASP.NET MVC 5.1.1 and Entity Framework 6.0.2

Visual Studio 2013

The template package for MVC is now compatible with the new Web application template in Visual Studio 2013.

Manually override current page & current post.

When running in passive mode current page & current post is never set as the routing is bypassed. This makes some of the methods in the UI-helper not function properly, like rendering meta tags and menus. To set this current page manually you can now include the following line at the top of your view.


Support for auto culture

When the culture in the globalization section of the web.config starts with auto: the HttpModule ignores to set the culture of the current request.

Custom authentication

The LocalUserProvider now checks if the authenticated users id is Guid-based before trying to perform actions on it. If the id is not a Guid of a Piranha CMS user the authenticated user is consider unauthenticated by Piranha CMS. This enables having different authentication mechanisms in the front application than in the manager interface.

WebCacheProvider update

The WebCacheProvider has been updated to store its data in HttpRuntime.Cache instead of HttpContext.Current.Cache. This enables background-threads and other web-workers to access the cache as well.

Support for subclassing local media providers

The constructors of the local media providers have now been parameterized to enable subclassing them to store the physical files in other folders than the default.


Issue #238 - Bug in preview for Posts in Mvc Applications

There is a bug that makes the preview mode for posts not function properly for MVC applications.

Issue #240 - Log provider not returned correctly on first call

The log provider is not returned on first access making the first log call to fail.

Version 2.1.6

Released: 12/25/2013


Issue #223 - Swedish error messages

The error messages for the installation as well as user password creation is not localized and only available in Swedish.

Issue #224 - Error when installing new database

In some cases the installation throws a foreign key constraint exception when creating the database as a result of entries in the log table being written without a user account present.

Issue #227 - Thumbnails for non images not working

When the media provider and media cache provider was introduced the thumbnails for non images stopped working in the manager interface. This means folders and thumbnails for documents and videos are missing making it hard to navigate the manager interface.

Issue #228 - Page copy dialog not working for large amount of pages

When the site tree contains a large amount of pages the page copy dialog does not work due to the default max row limit in list.js

Version 2.1.5

Released: 11/11/2013

Add custom CSS to manager interface

If you have the need to add custom styles to the manager interface you can now add the file style.css into the application folder ~/Areas/Manager/Content/Css/. If the file is present this will be loaded after all standard styles in the manager.

Before & after save hooks for manager models

Hooks before and after the manager models are being saved have been added. These hooks can be used to manipulate the data before it goes into the database of to take actions after it has been updated.


Issue #197 - Setting empty UI Culture

If the globalization section was present in the web.config both Culture & UI Culture was set regardless if any of these parameters were empty. This caused the framework to accidently change the default culture.

General updates

Added confirm dialog when deleting a page from its edit view.

Version 2.1.4

Released: 10/21/2013

Flush pages & posts from cache when type is updated

When page and post types are updated in the manager interface all pages/posts of the updated type are flushed from the server side cache. This makes sure that all region, property, controller and view settings are updated and used properly and that no old settings are persisted.

Added IMediaCacheProvider

To complete the abstraction of how physical files are stored by the framework to enable media providers for Azure or database a provider for the media cache has been implemented. This provider is for example used when images are scaled and/or cropped by requests.


Issue #176 - Removing and adding items in the Media region

When adding items in the media region the internal count is incremented, however when items are removed the count is not decreased. This causes items added directly after an item has been removed getting bad indexes.

Issue #181 - Culture prefixes doesn't work with prefixless permalinks

When using prefixless permalinks the registered culture prefixes are not handled correctly.

Issue #182 - Duplicate permalinks in different namespaces not handled correctly

When the same permalink exists in different namespaces (sites) the permalinks are not handled correctly when loading a page.

Issue #186 - Manager post view is not sorted correctly

The manager view for posts looks like it's sorted on title when you enter it but is in fact sorted on Updated date.

Issue #187 - Page & post types do not look clickable

When choosing add Page or Post in the manager interface types with large locked regions do not appear clickable since the inherit their styling from the edit view.

Issue #190 - Submitting install form with enter triggers the wrong button

When installing a new database hitting enter triggers the wrong button causing the database to be created but without any default data. The "Schema only" option will be removed from the install screen.

General updates

  • Fixed so timestamp in changeservice is always formatted the same
  • Added media folders to the Rest API
  • Included media categories in the Rest API
  • Fixed so that the manager interface starts on the first menu item the user has access to.
  • Css-fix so that category assignment works properly for media

Version 2.1.3

Released: 09/10/2013

Added new PostModels region

The Posts region just loads the basic information for the posts when filling the page models. In some cases you want to load the enitire Post model for the matching posts. Because of this a new PostModels region has been added which works like the standard Posts region but loads the entire PostModel for the posts.

Added configuration for prefixless permalinks

The configuration for prefixless permalinks have now been added into the Web.config. The setting can still be set using code to support the old configuration syntax.

        <prefixlessPermalinks value="false" />

The application setting for prefixless permalinks have been moved from Piranha.WebPages.WebPiranha to Piranha.Config and the following syntax should be used. The old obsolete property will still be supported until the next major release.

Piranha.Config.PrefixlessPermalinks = true;


Issue #161 - Possible to create groups without a parent group

It is possible to create groups without a parent groups which makes them uneditable by the system. All groups (exept the default System Administrator) group must have a parent group.

Issue #162 - Possible to create users without a group

It is possible to create a user without assigning him/her to a group. This is incorrect behaviour and the manager interface doesn't manage to load these users into UI making them impossible to edit/remove.

Issue #165 - MySql Schema is wrong for GUID columns

The latest version of the MySql provider for .NET is not as forgiving as the previous one causing all records to fail due to that the CHAR columns used for Guid values have the incorrect length.

Issue #167 - Invisible buttons in media popup for Webkit browsers

Due to inconsistency between browsers the width of the media popup is not set correctly in some cases causing the buttons to disappear from the media popup in the manager interface.

Issue #169 - RSS feed doesn't export time

The current RSS feed only exports the date the posts was created and not the time.

Issue #170 - Include in RSS is not handled for posts

When creating a new post the setting "Include in RSS" is not checked even though it is checked for the post type.

Issue #172 - Fix naming issues for SimpleText region

In the manager UI the main text field is named "Text" but the property of the model is named "Body" which is somewhat confusing. Rename the fields in the manager UI.

Issue #174 - Post type view is not propgated to the Post model

The value entered in the view field for the post type is not propagated to the postmodel making model.GetView() to return null even if the view is set on the Post type.

General updates

  • Added Page.NavigationTitle to the ReST service API.
  • Moved Piranha.WebPages.RequestHandlers to Piranha.Web.Handlers

Version 2.1.2

Released: 07/18/2013

Configuration for passive mode

To more easily set up Piranha CMS for handling the content for an already existing application a new configuration setting has been added for passive mode.

        <passiveMode value="true" />

Enabling this setting will disable all permalink routing and let the application Piranha CMS is included in handle navigation and structure.

Sort users by group

Tabs have been added to the user list in the manager interface to filter the users according to their group, just like posts are sorted into tabs by their post type.


Issue #151 - Regions are re-created on app start for Code-first page types

Regions are deleted and created on each application start for code-first page types. This results in that all of the region data is deleted.

Version 2.1.1

Released: 07/14/2013

After updating Piranha CMS to version 2.1.1, make sure that ASP.NET MVC and all dependent packages have been updated to the latest version, otherwise you can get a LoaderTypeException application startup.

Support for running Piranha CMS without manager interface

In some cases, when deploying an application across multiple tiers it's useful to deploy the web client without the manager interface. To support this a new configuration parameter has been added for disabling the manager interface. You can turn off the manager interface by setting the following parameter to true in your Web.config

        <disableManager value="true" />

Dependency updates

All NuGet-packages have been updated to the latest version. This includes the following packages:

  • ASP.NET WebPages
  • ASP.NET Razor
  • RazorGenerator.Mvc


Issue #146 - Bug in Preview for MVC applications

Bug that causes the SinglePageController and SinglePostController to get the published version when previewing. This causes the latest published version to be shown and the application to crash when previewing an unpublished page or post.

Version 2.1.0

Released: 07/02/2013

In this version configuration in Web.config has been updated to minimize risk of interferance with application settings. After upgrading to version 2.1.0, make sure you update your configuration file.

Exception and error logging

Exceptions and general errors that occur during execution are now captured and logged. The default log location is App_Data/Logs/Log.txt but the logging is provider based and can be replaced by any custom log provider.

Add permalinks to media objects

In order to create clean SEO-friendly URL:s for media content uploaded to the manager interface permalinks have been introduced for media objects. Old media objects without permalinks will be referenced in the old way until they have been saved in the manager interface and permalinks have been created for them.

The following url's are produced for media requests without a permalink:


The following url's are produced for media requests with a permalink:


Add permalinks to post types

To help writing archive functionality for post types permalinks have been added to post types. The current version doesn't contain any built in support for generating archive pages.

Update configuration structure

The configuration structure have been updated so that all Web.config settings that was previously located under the appSettings section have been moved to a custom configuration section. This is the minimize the risk to interfere with settings of the application.

Add OnSave & OnDelete events to extensions

The events OnSave and OnDelete have been added to the IExtension interface and the Extension base-class. These events can for example be used if you want to store extension data in a custom table to more easily to indexed sql queries on them.

Support for creating page & post types from code

To simplify deploying installations from development and test to production support has been added to define page and post types from code. When the class defining a page or post type is updated the database type is automatically updated on the next application initialization.

UI for managing user API-keys

UI for API-Keys has now been added to the edit view for users. You can retrieve the API-key or regenerate it for all users.

Region for markdown content

A new region has been added for markdown content. This gives the content manager the possibility to write content in markdown instead of HTML. The region is converted to HTML in the GetContent event which means that templates can treat the region as a html region.


Issue #126 - Prefixless permalinks blocks non CMS content

When running the permalink handler without prefix requests to non cms pages are blocket since the PermalinkHandler returns a 404. This also causes requests for static resources to throw a 404 if PrefixlessPermalinks is activated in combination with runAllManagedModulesForAllRequests.

Issue #127 - Media regions shows all media as draft

When looking at the currently selected media in the media-region in the page edit view the interface shows them as being in draft even though they are in published state.

Issue #137 - Error when retrieving application uploads

The base class for media object always tries to retrieve uploaded content from the container for media controlled by the manager interface. This results in applications uploads not being found.

Issue #140 - RSS handler does not handle prefixless permalinks

Permalinks generated by the RSSHandler does not take into account the parameter PrefixlessPermalinks. This results in that the generated links are incorrect.

Version 2.0.3

Released: 06/05/2013


Issue #121 - SEO-list for pages crashes

There's a bug in the SEO-list for pages that causes it to crash when trying to calculate the default position for new inserted pages.

Issue #120 - Script error in the manager interface

Some manager view reference the built in handler r.ashx instead of res.ashx which causes some script resource to not load on some installations. Furthermore the standard resource handler doesn't support browser cache which lowers the performance of the manager interface.

General updates

  • The Changes-API now exports the entire sitemap if pages has been deleted since the last export.

Version 2.0.2 & Version 2.0.1

Released: 06/03/2013

These versions only contains minor fixes to the NuGet-packages and doesn't contain any code modifications.

Version 2.0.0

Released: 06/02/2013

This version contains some breaking changes from 1.2.1 as a result of the major refactoring done when moving from MVC 3 to MVC 4. If you're upgrading an existing application you will need to handle the following changes.


The calls to WebPiranha.Init() and WebPiranha.InitServices() are obsolete as the application is now self-registering. If you haven't added any custom hooks or other code into this file it can be deleted completely.


This file is not needed any more as the manager is now self registering. If the file is not removed by upgrading the NuGet-package, delete it manually.


The call to Piranha.WebPages.WebPiranha.BeginRequest is not needed as the application is now self-registering. If this file is not removed by upgrading the NuGet-package and you don't have any custom code in it, delete it manually.


Assembly-versions for Web pages & MVC should be upgraded to the correct versions. Make sure this is handled when upgrading the NuGet-package. The custom handlers under System.webServer should be removed. If you are unsure of how the configuration should look, create a new ASP.NET Web site and install the NuGet-package.


Extensions and regions are now handled with Microsoft MEF. To read about how to upgrade your extensions please refer to the section about Extensions in the documentation.

Upgrade to ASP.NET MVC 4 & Web Pages 2.0

The enitire framework is now updated to ASP.NET 4.5, MVC 4 and Web Pages 2.0 to make sure that all of the latest features and optimizations are available.

Support for MVC client applications

It is now possible to include Piranha CMS in a MVC application, in previous versions only ASP.NET Web Sites was supported. Note that there are different NuGet-packages depending on if you're starting a new Web Site or MVC application.

Better separation of code-base

To enable both Web sites and MVC applications the main Piranha CMS library has been separated into three libraries, Piranha, Piranha.WebPages and Piranha.Mvc.

Extension-management refactored with MEF

The extension manager has been rewritten to utilize the functionality available in Microsoft MEF instead of using custom attributes and reflection. This means that old extensions and regions have to be rewritten in order to work in the new version.

Added media-region for attaching media to a page

A new region for attaching media to a page has been created. This region can be useful if you for example want the content manager to be able to attach media for a slider and still use the attachments for other media related to the page.

Manager interface embedded with compiled razor views

As a result of upgrading the manager to MVC 4 the resource provider that handled the embedded views has been replaced with compiled razor view.

Filter tabs for each post type in the post list

When working with multiple post types the post list now has tabs for each of the different types that automatically filter the posts available in the list to that post type. This makes it easier for content managers to find the posts they are searching for and simplifies management.

Added support for overriding template for individual posts

Individual posts can now override the rendering view template (or controller/action in mvc applications) if this is set to be allowed in the post type.

Upgrade TinyMCE editor to version 4.0

The HTML-editor has been updated to the latest version of TinyMCE. The new editor is faster, more intuituve and easier to extend for developers that want to write their own editor plugins. As the editor is still in beta and service releases of Piranha CMS will be released as new versions of the editor is released.

Updated manager interface

Some minor visual updates to the manager interface as well as some functional changes as sticky toolbars for edit views.

Media-library integration for TinyMCE

Added integrated media dialog into the HTML-editor making it easy to choose from, or upload new media directly from the HTML-editor.

Upload new functionality from the media dialog

Functionality for uploading new media has been added to the media dialog. This dialog is used from the HTML-editor, the image region and when choosing attachments for pages and posts.

Deleting a media entity redirects to the current folder

When deleting a media entity from its detail view the manager now redirects to the index view with the folder expanded that the deleted entity was located in. This makes it easier when managing large media-libraries.

Added delete notifications to all list-views

Added notifications when delting entities in all list views to ensure that content managers don't delete anything by mistake.

Fixed default focus for all edit-views

All edit views in the manager interface now sets focus to the first textbox in the form.

Default html-previews when creating page- and posttypes

When creating page- and post types a default html-snippet for the preview is now created so that you don't have to enter the table-data each time.

Fetch all matching posts for post regions

You can now fetch all matching posts in post region by setting number of posts to 0.

Both Culture & UICulture should be set when adding a culture url-prefix

The functionality for multiple cultures has been updated so that both Culture and UICulture is set according to the CultureInfo specified in the url-prefix. Previously only the UI-culture was set.


Issue #105 - Publishing new page with a post region

Publishing a new page with a post region crashes the manager. This was caused because the post region was not correctly initialized after post.

Issue #111 - Changing permalink causes error

Manually changed permalinks are not processed before saving. This can cause errors when accessing the permalink as they can be saved with whitespaces or with casing.

Issue #104 - Close button in post type dialog does not work

Close-button in the dialog for choosing post types does not work. The issue has been resolved.

Version 1.2.1

Released: 03/26/2013


Issue #96 - Action methods don't trigger

The new action method binding did not work for templates inherited from SinglePage or SinglePost due to the fact that the permalink was passed on as the first parameter in UrlData. This has now been resolved and the permalink is passed on as a request parameter instead. If you have old applications that manually perform action binding and rely on the old behaviour you can disable this feature by adding the following app setting:

<add key="disable_method_binding" value="1" />
Issue #95 - Incorrect links for media in preview

When viewing a page or post in preview mode the call to UI.Content tried to resolve the RequestHandler for content drafts. This handler was however missing resulting in the generation of bad url's. The handler has now been added to the default handlers that are registered on application start.

Version 1.2.0

Released: 03/24/2013

This version contains some breaking changes from 1.1.4 that you need to consider before updating. The following areas are affected:

The REST-services Changes & Sitemap

These services now takes InternalId for the desired site tree as a first parameter. This is due to the new support for multiple sites.


The static methods Login, LoginSys & Logout have been changed to instance methods. This is to support multiple threads using these methods.


The virtual methods OnLoad, OnSave & OnDelete now takes the current DataContext as a parameter. This is a result of the change in the datacontext for Login, LoginSys & Logout.

Cache management

The server-side cache-management has been re-implemented. This will cause the application to crash after the update has been performed as the old cache is incompatible with the new. To resolve this issue, restart the application by saving the web.config to clear out the old cache.

Support for mutiple sites

The manager interface now supports creating an unlimited amount of site trees. These sites can be used for creating context menus or building completely separate websites sharing the same content.

Create copies of page

When creating a new page you can now choose an existing page to make a copy of instead of creating a new page from a template. The copy can be placed in the same, or another site tree so you can easily create subsites for campains containing material from the main site. The copies don't have any content of their own and shares content with the original page.

Detach copied page

You can detach a copied page from it's original. This means all of the content from the original page is copied and the detached page is treated as an original page. After publishing the detached page there is now way of reversing back to the previous state.

Site-global regions

The new site object supports the same region functionality as the page templates. This means that you can now add global regions to your site like header and footer information. These regions are available for the layout page which now has a Model. You can also attach images & documents and add extensions to the site as you can with any normal page.

SEO-notifications for site

The page list view now shows how many pages are missing fields data for search engine optimization and open graph sharing. By clicking the SEO-icon in the toolbar you get a filtered view only showing the pages that you need to attend to.

Draft management for images & documents

Just like pages and posts, images & documents can now have working copies and be in draft state. This means you can upload media to your site and attach it to all pages or posts that should present it without publishing the media. When the media entity is published it will be shown on all pages & posts that has a reference to it. This means you can also update an existing image or document by uploading a new file but choose when the new version should be published.

Form helper

A new helper has been added to the ContentPage class to more easily create forms. The form helper supports most of the ElementFor methods available in the MVC HtmlHelper such as TextBoxFor, DropdownListFor and so on.

Automatic model validation

When a post is sent to a page using the UI.FormAction method the model binder now checks if the model has implemented the method Validate. If this method is present it will be executed before the form action method is executed on the model. This feature can be disabled in the web.config by adding the following app setting:

<add key="disable_modelstate_binding" value="1" />

This can be useful if you have code that is dependent on manual model validation.

Action method binding

You can now add action methods to you page that will be automatically executed when the request is examined. For example if you have a page that have the url http://<yoursite>/home/ product and you want an action for showing detailed data you could add the method:

public void Details(Guid id, int someparameter = 0) {
    // Do something

This method would be automatically executed by calling the url http://<yoursite>/home/product/details/<id>. As you can see optional parameters are supported in the methods and all native types that can be created by using the standard method Convert.ChangeType(value, type) is supported. If your site depends on manual method binding your can disable this feature by adding the app setting:

<add key="disable_method_binding" value="1" />

Updated server-side cache

The server-side cache has been updated so that the entities can be fully used without an HttpContext. If the HttpContext isn't present in-memory cache is used instead. This is useful when creating import/export applications or other applications that need full access to the entities without running in a HttpContext.

General updates

  • The menu items has the class has-child if it contains subitems.
  • The authentication controller now has built in support for generating passwords.
  • New hook for sending password mails to users. This hook needs to be implemented for the above feature to work.
  • Optimized thumbnail generation for non-image media. All non-image media now points to the same thumbnail url reducing the number of http request that's needed.
  • Possibility to save all resized images as JPEG to reduce file size. Set the parameter COMPRESS_IMAGES to 1 to make sure all thumbnails and resized images are saved as JPEG regardless of their original format.
  • New manager hooks for toolbar generation. This allows you to add custom actions to all toolbars in the manager interface.
  • Added server-side caching for posts.
  • Added linking to the media-file from the attachments view for pages & posts.
  • Fixed bug causing missing regions to not be initialized.
  • Fixed bug causing the image region to stop work when API-key authorization is used.
  • Added rest services for page & post templates.
  • When navigating from a page & post attachment to an image or document the back button takes you back to the attachments.
  • Fixed bug that caused the hooks PageEditModelLoaded & PostEditModelLoaded to not be called after the page or post had been saved.
  • Support for extensions that inherit System.Web.HtmlString.
  • Fixed bug that didn't allow Regions to also be Extensions. This means you can now create an extensions which can be used as both a page region but also as an Extension.

Version 1.1.4

Released: 01/21/2013

Support for locking users

The manager interface now supports locking users for a period of time. This features applies to all system users and therefor both client and manager users can be locked out from the system.


When adding media-files from an URL instead from the local filesystem the url the file was fetched from is now stored in the database. This allows the media-file to be synced against it's original URL which updates the file with the new version from the server. Together with a scheduled service this can be used to auto-update content against and internal document system.

API-Keys for ReST-API:s

The framework now provides API-key validation for the ReST-API:s to control which users get to access them. Each user can be assigned an unique API-key which is then ecrypted together with a private key unique for each site installation. The authorization is configured through the Web.config and can be disabled if the ReST-API:s should be public.


Issue #87 - Bug in page edit

When the ModelState is not valid Init() is not called for regions before reloading the edit view. This causes pages with the PostRegion to crash when the page is not valid.

General updates

  • Added UI-helper for generating absolute URL:s
  • Added UI-helper for generating encrypted API-keys

Version 1.1.3

Released: 01/09/2013

This version contains updates in the NuGet-packages referenced. Entity Framework has been updated to 5.0.0 and YUI compressor has been updated to If you're only updating the Piranha-binaries in your existing project, make sure you manually update these packages for you web site.

New post container region

You can now add the Posts region to your pages which automatically loads a set of posts to be used in your templates. The post region allows you to specify how many posts should be loaded, from which post type, how they should be ordered and how long they should be chached in memory server-side.

Thumbnail generation for pages & posts

The helper method and Request handler for thumbnails can now render thumbnails for pages & posts. This is done by generating a thumbnail for the first media file attached to the page or post. Use the following statement to get a thumbnail for the current page.

@UI.Thumbnail(Model.Page.Id, 60)

Updated NuGet packages

Entity framework and the YUI compressor has now been updated to the latest versions (EF 5.0 & YUI compressor 2.2).

Support for building modules

Core support for buildning redistributable modules that can contain extensions, regions, controllers and manager views. These modules can be distributed as dll-files and will be scanned for embedded views when rendering the manager interface. The project Piranha.Extensions has also been added to the main repository to provide an example of how to build a module.

Native comments

The core framework now supports native comments if you want to handle comments internal and not use an external provider such as Disqus. Comments can be attached to pages, posts, media & uploads.

Support for model caching

The attribute ModelProperty can now be attached to properties in the model for automatic caching and triggering of load methods.

Responsive manager interface

The manager interface now adapts itself for display in portrait view on iPads, ie it handles screen resolutions of both 1024 px width and 768 px width.


Issue #70 - Preview in manager don't take port number into account

The toolbar option for previewing pages & posts now takes port number into account.

Issue #61 - Init() is not called for Regions in the manager interface

The Init() method will now be called for regions when loaded in the manager interface. This enables regions to load meta-data or initialize themselves according to the current model they're attached to.

General updates

  • Added support for localizing extensions names with the ExtensionAttribute.
  • Fixed bug that caused media files to be locked after resize.
  • Fixed bug that caused the original uploaded image to be stored instead of the version resized to IMAGE_MAX_WIDTH.
  • Changed the VirtualPathProvider to only handle files under ~/areas/manager.
  • Fixed bug in the manager menu when several items point to the same controller.
  • Fixed so that image resize only downsizes the images.
  • Fixed bug with cached media files.
  • Updated the model binder to handle more types.

Version 1.1.2

Released: 10/30/2012

Support for running Piranha on MySql

To accomodate deployment environments that doesn't have access to SQLServer the framework has been updated to be able to run in MySql.

Show navigation title in the manager page view

To better correspond to the menu structure rendered by the client application the manager interface now also shows the navigation title in the page view.

Prefixless permalinks

To enable even shorter url structures permalinks can now be handled without using the prefix of the request handler. This feature is not enabled by default and is activated by adding the following line in the AppInitialize() method.

WebPiranha.PrefixlessPermalinks = true;

By enabling this feature permalinks are handled last which also mean that if there exist a request handler with the same name as the permalink the request handler will always have higher precedence than the permalink.

Hierarchical permalinks

For large sites it is prefered to generate hierarchical permalinks due to the possibility of redundance in names. This feature can be enabled by setting the system parameter HIERARCHICAL_PERMALINKS to 1. Note that changing this parameter will have no impact on already generated permalinks, it only alters the default behaviour when new permalinks are generated for pages.

Support for multilingual applications

Core functionality have been added for handling url prefixes for multiple cultures with permalink handling & caching with separate entity tags. No built in translation views for the manager interface are included, this will be released at a later stage. You can register different language prefix using the following line in the AppInitialize() method.

WebPiranha.RegisterCulture("sv", new CultureInfo("sv-SE"));

This would for example register the Swedish cultureinfo to the url prefix sv resulting in that the ui culture would be set to sv-SE for all urls pointing to:


Sitemap.xml generation

The core framework now generates a sitemap from all published pages & posts on the url:



Issue #56 - Extensions missing for media, categories & users

Even though extensions have been successfully added to the above entities they are not displayed in the manager interface and can therefor not be edited.

Issue #53 - Logout does not clear session

The request handlers capture the request before the session has been loaded and could therefor not clear it. Since the account handler does not need to perform any data related mapping before performing it's actions it has been re-implemented as a standard MVC controller.

Issue #51 - Extensions are missing in the ReST API

The REST API's now export the extensions attached to the entities.

Issue #50 - Subclassed manager controller POST to original

When subclassing a manager controller, post are still routed to the base controller instead of the controller who rendered the view.

Issue #49 - Pages with subpages can be deleted from edit view

Even though it's not possible to delete pages that has subpages from the page list view it was still possible from the edit view leaving subpages orphaned and missing in the manager interface.

Version 1.1.1

Released: 09/29/2012


Issue #47

Unable to create media objects or folders without a parent folder in the manager interface. Old media objects created created in the root are still functional.

Issue #48

When clicking "Remove current image" on an image region it looks like the images is removed. However, when saving the page the image region does not get updated in the database.

Issue #49

The media dialog for the image region does not close when clicking the close button in its toolbar. Clicking anywhere outside of the dialog still closes it.

Version 1.1.0

Released: 09/27/2012

Organize media into folders

Images & documents can now be sorted into recursive folder structures in the manager interface. This is to help keep large amount of files structured and easy to access. The API for accessing media objects has not been changed and is fully backwards compatible.

Add media from URL

Images & documents can now also be uploaded by providing an URL to the file. The file will be retrieved from the provided URL and stored locally by the system.

RSS feeds for posts

The site can now export posts as an rss feed through a new RequestHandler. Each post type can be enabled individually to be included in the feed as well as certain posts can be explicitly excluded from the feed. Configuration parameters for setting the maximum number of posts in a feed and weather to use the abstract or the full content have been added.

Complex regions

You can now create regions of other types than just html/string values. It is also possible to extend the core by providing your own region types that will be selectable and editable in the manager area. The data for the regions are serialized as JSON in the database enabling all types of complex objects to be used.

Complex extensions

You can create custom extensions that you can attach to the entities post, page, category, media, user and group. These extensions will be inserted into the manager interface and it's data will be serialized as JSON in the database.

System logging

The system now logs when entities are changed. The actions logged are INSERT, UPDATE, PUBLISH, DEPUBLISH and DELETE. Changes to the following entities are being logged:

Category, Group, Media, Page, PageTemplate, Param, Permission, Post, PostTemplate and User

Hooks for customizing the core

Added hooks to customize the default behaviour of the core framework. This is for example very useful for the methods in UI helper if the rendered html needs to be customized in the current application without changing or duplicate any logic provided by the framework. You can read more about this in the docs.

Fully customizable manager menus

It's now possible to restructure, add and remove items in the manager interface without having to override .cshtml files in the application. Note that this change is not backwards compatible and applications will have implement their menus with the new API.

Updated manager views for pages & posts

The edit view for pages & posts have been updated to better support extensions. The editor now also uses the autoresize plugin by default and a sticky TinyMCE toolbar to allow long pages. To fully use the new features make sure you update your local TinyMCE definition if you have overridden the default editor in your applications.

General updates

  • Current system version is now shown at the manager login view.
  • Updated layout for the message boxes in the manager view.
  • Cached images are deleted when the file is updated.
  • Added permission rules to all controller actions in the manager area.
  • Added name as a field to images & documents.
  • Fixed bug in /rest/changes so page drafts are not included.
  • Added deleted objects to /rest/changes.
  • Page rest api now returns weather attachments are images or not.
  • Fix in PageModel so that deleted attachments are not included.
  • The manager menu now takes into account the users permissions.
  • Added error handling when creating a duplicate permalink.
  • Site tree is now expanded to show the previous page when moving back from edit.
  • Media tree is now expanded to show the previous entity when moving back from edit.
  • The attachment dialog now shows maximum three rows and is scrollable.
  • When adding multiple attachments, the dialog opens the last used folder.

Version 1.0.1

Released: 07/19/2012

Update in cache management

When a page is published, unpublished or deleted the global modification date for the site is updated. This is will be earliest date returned as last modified for all pages. This is to make sure clients don't cache old version of pages with incorrect menu structures.

The caching has also been updated to check the last modification date of the current template being used to render the page. This ensures that clients don't have old versions of the page cached locally.

Fixed serialization for sysobjects

All system entities have been updated with the serialization attribute. This is to enable the sessions to be stored in SQL Server or a State Service in a clustered environment.

Uninstalled applications redirect to install

Calls to an unistalled web site will now redirect to the install view for the manager area. Calls to an installed, but out-of-date installation will however not redirect to the update view.

Condensed views for templates & attachments

When the number of templates & media objects exceed a certain amount the pop over views for choosing templates or images & documents are condensed to enable showing more elements.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.