Extensible & Easy to Customize
Fully extensible, via code and/or the Mura adminstrator
Developers have complete control over key Mura functionality within each site deployed within a Mura instance. Located in each site's includes directory you will find local instances of key classes that can be used to override default Mura behaviors. Because your code is overriding the base functionality, but not replacing the core files, you get customization without making future Mura upgrades a hassle.
In the class extension manager (part of the Mura administrator) you are able to define sub types that extend the primary content types that Mura provides. These new extended attributes can then be further refined while in the administrator and easily integrated into templates and site functionality. You can call these new attributes like this: #$.content('MyCustomVar')#, and work with them as you like.
One of the advantages of Mura is its ability to provide a solid base of functionality while at the same time getting out of your way as a developer. It was built with the sub-application in mind - it is incredibly easy to port in most front-controller applications (Mura is especially fond of FW/1). Just put your custom app into the right directory, then use the built-in Mura tag to include your sub-application. Integration complete.
Rich plugin architecture
Creating new plugins for Mura allows developers to create fully portable, self-contained applications that either extend Mura functionality or add new "greenfield" features and functionality. Plugins can range from simple, small apps to large-scale, highly complex applications.
Plugin developers can take advantage of Mura's built-in hooks and event-driven architecture, along with the new Mura ORM syntax to quickly build and easily maintain custom functionality, and even share plugins among sites.
The Mura tag is a unique and powerful feature that allows you to easily add dynamic content to a page or component within your site's WYSIWYG editor. The Mura tag takes any single expression, and allows you to freely intermingle traditional CMS content with code-driven data or functionality. You can simply call functions like this: [mura ]dateFormat(now(),'m/d/yy')[/mura ], or [mura ]createObject('component','myPath.myComponent').init()[/mura ], and you're set.
* If you use these example code snippets, be sure to remove the spaces inside the tags first.