Not a developer? Go to


Movable Type 4.1 Release Notes

This version of Movable Type was released January 24, 2008.


  • Due to a memory leak in Movable Type template parser, large scale web sites are advised not to use Publish Queue in daemon mode or FastCGI for the time being.
    • This memory leak has been fixed in Movable Type 4.2

The following issues are a top priority for Six Apart and the MT development team. All of these issues have been fixed in Movable Type 4.2 and users are encouraged to upgrade.

  • There is a memory leak, the result of a circular reference, in MT::Template.
  • Weekly archives are very expensive to compute causing CPU load and slow build times
  • Some template modules are expensive to compute and build
  • Counts (comment/trackback/entry counts etc) are expensive to compute and are used in a number of widgets
  • Comment stats dashboard widget pulls too much data from the DB
  • Category Archives still pull all entries in a category from the DB, even if the page is configured to show at most 10.
  • There are problems with LaunchBackgroundTasks setting resulting in pages never being published.
  • Saving the Publishing Settings settings page triggers an entire site rebuild unnecessarily.
  • Adding template maps for large sites can take forever. This may be linked to the previous issue that relates to using dynamic publishing. Something about how the FileInfo table gets rebuilt, which right now actually requires the site to be published.
  • A query on the power editing mode is taking forever. Bug 67669
  • There is a bug in the PublishQueue Schwartz worker which results in a very very long and database intensive operation to coalesce a set of jobs to work on.
  • Memcache comment count inaccuracy.

New Issues in Movable Type 4.1

Upgrade Notes

  • Users of the Custom Fields plugin for Movable Type 4.0 can upgrade their data to the version of Custom Fields that comes bundled in the Professional Pack by installing the “Custom Fields Upgrade” plugin.

  • We do not support upgrading from the Custom Fields plugin compatible with Movable Type 3.x.

  • Users wishing to upgrade from the Right Fields plugin, an alternative custom fields plugin, should consult with Chad Everett, the creator of the Right Fields to MT4.1 conversion script.

  • The upgrade process does not currently work under mod_perl of fastcgi. If you need to upgrade MT in these environments please run the upgrade script found in the tools/directory.

  • Upgrade is not completed under SQLite2 when upgrading from 3.21 - to resolve this issue users can upgrade first to MT 3.36, and then to MT 4.1.

Known Issues

  • Users are reporting issues running Movable Type with Active States’s Perl version 5.10.

  • If you set your publish archives outside of Site Root and reference a folder that does not exist, and then try to insert an asset into a post, you will get the following error: “Before you can upload a file, you need to publish your blog.”

  • TMPLVAR tags don’t seem to work in plugin settings templates (at least SCRIPTURL)

  • 891k of text in entry content and extended entry fields causes publish error under static publishing.

  • The “Entry - Display Options” under Preferences > Blog Settings screen also affects the defaults for the edit page screen.

  • Save and Cancel buttons appear twice on the screen in IE6

  • There is a limit to the amount of data that can be submitted via custom fields. Limit is around 50kb.

  • When the LaunchBackgroundTasks config directive is set to “1” or “on” it appears that on some hosts not all files get published during a publishing event. To rectify, set LaunchBackgroundTasks to “0” (zero).

  • Style Catcher’s UTS Library contains styles that only work with the Universal Template Set. They cannot be applied to the default template.

  • Style Catcher’s Default Styles library only work when using the default templates.

  • Category changes are lost after incorrect publish date entered

  • Author archives are overwritten when different users have the same display name

  • Icon for MT native commenter is not showing up on dynamically published entry archive

  • Vox’s member photo is not showing up on individual entry archive under dynamic publishing

  • A memory leak has been found in our template parser. Users running FastCGI should be mindful of how long their process life is. Reduce process time to live to mitigate risk. A fix for this has been identified and will be released to MTOS soon for testing.

  • A bug has been found in the Publish Queue in which performance is severely affected for queues in excess of 10,000 jobs - which can happen when an old site using daily archives conducts a full site rebuild. patch

  • Upgraded from 3.21 and mt-search fails - to resolve this issue users can upgrade first to MT 3.36, and then to MT 4.1.

  • “This is You” widget doesn’t specify minimum height

  • Uninitialized value in substitution warnings from SpamLookup plugin appear when using MTBooter plugin.

  • The unique flag doesn’t work on individual archive pages

  • “Reference found where even-sized list expected” warning when MT command line upgrade is run - this is innocuous, and will be fixed.

  • Cloning blogs leaves out a slash in SiteRoot field

  • Magnifier icon’s filter does not work on Edit Comment screen

  • Activity Log screen is shown when clicking ‘System Information’ at the system level

  • Author archives widget assumes author archives to be present, not author monthly

  • Close button does not work on Sign-in screen

  • Unstyled error occurs when logged in banned commenter tries to comment

  • Message “Need to republish” still appears in “everything dynamic” mode

  • IE6: Error massage isn’t decorated on Edit Entry/Page

  • An error when a blog admin searches users from the entry listing screen - “dbihsetupfbav: invalid number of fields: -1, NUMOFFIELDS attribute probably not set right at lib/MT/ line 648.”

  • Perl error results when IncludeBlogs is set to blog id that doesn’t exist

  • JavaScript error when clicking “close” icon on the rebuild popup.

  • MT does not support XML-RPC support under FastCGI and mod_perl. Fix has been committed to 3rd party SOAP::Lite library and will be incorporated into MT when the time comes.

  • Enable/Disabled plugin changes do not take effect until a web server restart

  • Style Catcher does not function properly when running under IIS. To work around the problem, a site’s site_styles.css can be pointed at the desired theme manually. Themes are located in the directory.

  • DefaultEntryPrefs config directive does not work. Patch can be found on mtos-dev mailing list.

  • Tag rank and tag count are not accurate with pages.

Issues remaining from Movable Type 4.0

  • Windows Vista and IIS Support - There is a known bug in IIS 7 that prevents all but the last cookie sent by a browser to actually be set. This affects all web applications deployed on IIS 7. This does not affect Windows Vista users using Apache, and it does not affect users using Windows Vista to access an MT blog not hosted under IIS7.

  • Some OpenID Providers Require HTTPS - some OpenId providers that users commonly like to use, e.g. AOL, use HTTPS exclusively. Therefore the Perl module Crypt::SSLeay must be installed in order to support these providers.

  • The performance of Rich Text editor may be hampered by really large bodies or extended content areas. Users editing content in excess of 700,000 bytes are advised to use an editor other then the build in Rich Text editor. Users wishing to use an alternative rich text editor can use the FCKEditor plugin for Movable Type 4.1.

  • MT4 comes equipped with a recently uploaded photos sidebar widget. Users of dynamic publishing may observe that this widget does not function properly. This is because PHP needs to be setup to support gd as well as gif and png.

  • Many plugins can be found in the extras/plugins directory in the MT4 distribution. These plugins are unsupported and may not be fully functional. Future releases will ensure that all examples are fully functional.

  • Movable Type allows users to customize the length of their basename. The length cannot be less then 15 characters even though the UI will permit you to set this preference otherwise. The permissible range is 15-250 characters.

  • When publishing category archive pages the two tags <mt:entrieswithsubcategories> and <mt:entries include_subcategories="1"> are not functionally equivalent. It is recommended that if a user wishes to display entries in the current category archive as well as all entries in the current categories children that they should use <mt:entrieswithsubcategories>.

  • “Links from Dashboard do not work under IE6” - There is a known issue in IE6 that prevents links from working on the MT4 dashboard. This is the result of a javascript error that occurs while trying to load the javascript file that renders the Flash statistics graph. This issue is resolved by setting absolute URLs in your mt-config.cgi file for the StaticWebPath and CGIPath configuration directives (e.g. “http://localhost/cgi-bin/mt”)

  • The use of the ASCII character | is not permitted in templates that are published dynamically due to a parsing error that can occur using the Smarty templating engine.

  • When inserting an asset or file into a post, the HTML that is inserted is encapsulated or contained by a <form> tag. This form tag is removed automatically during the publishing process and should not be removed by the user. Removing them will not hurt your blog’s content, but may result in Movable Type losing the association between the inserted asset and your entry.

  • Users reported this issue “PHP Fatal error: Cannot redeclare multiblog_mtblogcategorycount() (previously declared in …/plugins/MultiBlog/php/init.MultiBlog.php:53) in …/plugins/init.MultiBlog.php on line 51”. This is the result of a conflicts between plugins and functionality now found in the core. Please consult MT’s Upgrade Guide found at for more information on how to properly upgrade your MT3 installation.

  • If a user is logged into the application and then subsequently authenticates via OpenID via another service to comment on a blog in the same installation, then the MT user sessions takes precedent over the OpenID user session.

  • The MT configuration file mt.cfg which was supported in MT 3.x and before is no longer supported. Users should rename that file to mt-config.cgi and add the DBPassword configuration directive to the file.

  • Users can be granted only the permission “Publish Post” however the UI does not fully or intuitively support this instance. Users with only this permission can be limited to only changing post status, but can only do so through the batch edit mode for entries and pages.

  • Dynamic publishing does not work in SQLite 3 (only SQLite 2) on servers running PHP 4.x or PHP 5.x.

  • A customer reported that in some circumstances Cobalt, BlueQuartz, and TurboLinux Appliances could not send email using Movable Type’s default configuration. The issue was fixed adding the following in mt-config.cgi: SendMailPath /usr/lib/sendmail -t -f from-address@domain-name

  • Changing a blog’s default timezone may have a temporary affect on user’s ability to comment on that post if comment throttling is turned on. The time period for which commenting will be affected is the difference between the date the entry was original published and the adjusted time of the blog (assuming that the difference is negative) - e.g. changing the time zone from UTC to PST.

  • MT does not work under mod_perl2


The following is a list of all feature enhancements and bug fixes that have been introduced since the release of Movable Type 4.01 and released in v4.1.


  • The Commercial version of Movable Type now fully incorporates the popular Custom Fields plugin into its distribution. This feature allows users to define their own custom fields on a blog-by-blog and system-wide basis for users, entries, pages, categories and folders.
  • Template Sets - developers can register template sets through the plugin API, and users can select and apply template sets to new and/or existing blogs.
  • Database enhancements and new indexes from mediatemple
  • The compose screen for entries and pages has been slightly redesigned.
  • The backgrounds across the entire application have been touched up to make the content on the page easier to read.
  • The design and positioning of the “Display Options” flyout has been updated.
  • Assets are now editable - the edit screen has been augmented as well with a lot of meta data about the asset including the display of the posts it is included within
  • Support for Windows LiveWriter has been added - the XMLRC functions wp.newPage and wp.editPage have been added. One caveat however, MT does not yet automatically create folders for you based upon the presence of slashes in the basename.
  • Javascript and CSS files are now minimized during the build and packaging process for production builds to increase performance and download speeds of said files.
  • Template transformation callbacks are now called for templates included via the MTInclude tag.
  • Password recovery email now includes link to application to login.
  • Movable Type’s Rich Text Editor is now completely modular allowing a developer to create a plugin to swap in the rich text editor of their choice. A plugin for the FCK editor has been created by Six Apart and will be posted to the plugin directory.
  • The Publish Queue now outputs far more useful information in verbose mode to assist in debugging and log analysis.
  • Two Movable Type installations (on the same host or on different hosts) can now share the same Memcached server without clobbering each other’s data. A new config directive MemcachedNamespace was added to support this.
  • Added a new file deletion callback for the WeblogPublisher - meaning that plugins can now hook into the event when a file is physically removed from the file system by MT (
  • Movable Type template tag language has been expanded a great deal to include new control flow constructs (If, Else if, Else), looping constructs (for), arithmetic operators (plus, minus, etc) as well as new variable types (hashes, arrays, etc). See also:
  • Added support for categories element in metaWeblog newPost method - allowing an entry to be created and assigned to categories in a single request
  • Support for ‘wpslug’, ‘wppageparentid’, ‘wppageparenttitle’, and ‘wppageorder’ elements in metaWeblog API which is an alias to mtbasename in an effort to create as broad support as possible for our APIs
  • New multiblog include/exclude blog syntax supported: ranges. For example: blog_ids=”1-10,33,50-60”
  • When a quick search is executed for an object ID and object exists with that ID, then MT will take you directly to that object’s edit screen.
  • When a quick search is executed and the result set has only one item, then MT will take you directly to that item’s edit page.
  • The upload dialog has been improved to increase performance by minimizing the number of page requests made. The “Upload File” button now used javascript to show/hide a form already on the page, as opposed to kicking off another app request.
  • News from Learning Movable Type website is now syndicated to the Movable Type dashboard
  • A new list action has been added to the index templates screen - the ability to republish a list of selected index templates in a single batch operation. This renders the popular “Power Rebuild” plugin obsolete.
  • A new dashboard widget will be installed by MT automatically when you upgrade to a new version, allowing us to introduce you to the new features of the release.
  • Added a filter for pending users
  • Notification emails can now be modified via transformer callbacks
  • Notification emails can now be overridden using alternate templates
  • New callback: ‘mail_filter’ - intercept messages before they are sent, transform them, and/or modify them. If the callback returns ‘0’ the email will not be sent.
  • Users are now always informed via a system message that an upgrade has occurred - regardless of whether there was a database schema change or not. This was done to address a common problem among users: confirming that they did indeed install/upgrade the software correctly. Without this message, many were left wondering.
  • PublishQueue will now rsync files for you automatically upon rebuild. Two new config directives have been added: SyncTarget and RsyncOptions.
  • New template tag: <mt:BlogTemplateSetId> - returns the template set id (a string) of the current template set
  • Context Sensitive Template Tag Help Documentation - now whenever a template tag is used, and a help-url has been registered for it,
  • We have updated Movable Type to use version 0.9.6 of CodePress, the syntax highlighting library used by our template editor. Please consult its change log.
  • New for loop template tag:

    <mt:for var="x" from="5" to="10" glue= " | "><p>now x = <mt:var name="x"></p></mt:for>

    This template tag also automatically sets the following variable to used within the context of the loop: __index__ variable (in addition to the regular __counter__,__even__, __odd__, __first__, __last__ variables).

  • New template tag: <mt:IfAuthor> - evaluates to true when an author context exists.
  • Added support the XMLRPC function metaWWeblog.getCategories
  • New template tag: <mt:IncludeBlock> - This tag provides MT with the ability to ‘wrap’ content with an included module. This behaves much like the MTInclude tag, but it is a container tag. The contents of the tag are taken and assigned to a variable (either one explicitly named with a ‘var’ attribute, or will default to ‘contents’). i.e.:

     <MTIncludeBlock module="Some Module">
     (do something here)

    In the “Some Module” template module, you would have…

      (header stuff)
      <MTVar name="contents">
      (footer stuff)
  • New template tag: <mt:CommenterID>

  • Additional filters have been added to <mt:Authors> tag: role and need_entry. The role filter can be used to specify a boolean expression that filters the list of authors by role (e.g. “Designer OR Author”). The need_entry filter is used to produce authors that have written an entry or page in the system.
  • New filter attribute for <mt:Tags> - the top attribute will retrieve the top n tags in the system when all tags are sorted by the number of times they are used. This is a more effective way to retrieve the most popular tags in the system.
  • Email templates are now seeded with complete entry, blog and comment/ping context and variables.
  • Global Template Modules - this feature allows for blogs to share design elements across each other, and for designers to make changes in one place and have those changes reflected globally. These modules exist at the system level and can be accessed and shared by any blog in the system. When MTInclude is used to include a module, a module by the specified name is searched for within the current blog context. If a module by that name is not found, then MT will search global modules for a module by that name. If one is found, it will be used, else, an error will be thrown.
  • Design tab was added to System context to allow users to navigate to and edit Global Template Modules.
  • Global Templates nav item was added to the System Overview pull down menu that appears in any blog context.
  • Improved the <mt:Else> tag to allow for “Else If” conditions: equal to 10 equal to 20 greater than 20 not equal to 10, 20 and less than 20
  • Userpics - Movable Type now supports userpics.
  • Userpic autodiscovery is performed during OpenID authentication
  • New system level user permission: Edit Templates. This new permission allows users to edit templates at a system level.

Bug Fixes

  • prepare_cached warning in Publish Queue logs has been fixed
  • The root cause of the error found in Publish Queue logs “Odd number of elements in hash assignment at lib/MT/ line 393. Use of uninitialized value in concatenation (.) or string at lib/MT/ line 397” has been fixed.
  • The produce name as it appears in the footer has been tweaked so that regardless of what version of Movable Type a user has installed (MTOS, Personal or Commercial) there is no ambiguity.
  • Incorporate a patch to make mt.cgi compatible with Perl 5.9.5
  • Windows Server users reported a problem where they were unable to change their site root if their site root ended in forward slash because javascript was not being escaped properly on the page. This has been fixed.
  • This error was reported when trying to view the feed from the Manage Entries screen, “An error occurred while generating the activity feed: Can’t call method “is_superuser” on an undefined value at lib/MT/App/ line 386.” This has been fixed.
  • Template editor no longer adding blank lines to the end of the template each time template was saved (this bug only affected IE users).
  • Tags removed from tags field on the edit entry screen were not getting removed from the entry upon saving. This has been fixed.
  • Movable Type was not applying the designated moderation policy to comments from local users. This has been fixed. Comments made from within the app in response to other comments will still get published immediately regardless of moderation policy.
  • Mark Carey reported an issue where certain transformation callbacks were not always being fired properly because MT did not consistently strip path information from the template being transformed (e.g. dialog/foo.mtml was being transformed in some contexts but not others because sometimes the ‘dialog/’ path was ignore by MT). To fix, now all template transformation callbacks will first strip path information from the template being transformed.
  • When two template maps were applied to the same template and a user deleted the preferred one, then the remaining template map was not automatically being set to preferred. This has been fixed.
  • The “Search Users” function in Grant Permissions dialog was only returning the current user in the results. This has been fixed so the whole MT install is searched.
  • Spamlookup regex handling no longer chokes on group references e.g. “{,5}”
  • The WordPress WXR importer now handles more gracefully issues revolving around WordPress’ outputting of invalid XML in their export format. In this case MT will now attempt to correct the invalid XML before the import to allow for a clean and smooth import process.
  • MSWord Character substitution was not performing designated substitution rules. This has been fixed.
  • FlashTag.js now declares proper flash version prerequisite (version 8 as opposed to 7)
  • Usernames are no longer used in the To: header for outbound emails (display name or email address will be used)
  • The login form that lists the various login options now lets the user click on the icon for the service to select that service in addition to the name of the service
  • Itemset actions for entries appear for pages as well and vice versa.
  • mt-check.cgi shows misleading message when it ran on Perl version older than 5.6.1. The message was changed to tell MT4 would not run on Perl older than 5.6.1.
  • Faulty template code found within an tag will now actually be ignored during the linted process as well as the publishing process.
  • MTEntries with MultiBlog modifers such as includeblogs and blogids now works correctly in archive templates. Thanks Fujimoto@Alfasado who reported the issue.
  • " name="html" /> was not working because MT was mistaking the “/>” as the terminator for the tag.
  • A bug in which the upgrade process was being kicked off again and again randomly, even after an upgrade, has not been reported by users for several months. This bug is being marked as resolved.
  • Template refresh plugin has been folded into the core - users should remove this from their distribution
  • Plugin settings can now be registered using yaml files
  • Slight color shifts have been made to the app to more closely coordinate with color shifts made to the logo
  • Wizard now generates StaticFilePath
  • URL Custom Fields validated as well formed URLs
  • Changes to template modules were not getting picked up by Publish Queue - they would change, but PQ would never see the changes unless you restarted the daemon
  • MT4 now works properly with ActivePerl 5.6.1
  • Saving changes to multiple entries via bulk edit entries screen did not call pre_save callback for each entry. Also, saving changes to multiple entries sometimes processed each entry twice. Both bugs have been fixed.
  • With static publishing, it is possible for a tag handler to determine the active tag name being processed, regardless of type of tag (block, function, conditional, etc). But for dynamic publishing, it has only been possible to determine the name of the block handler in context. With dynamic publishing, the $ctx->current_tag() function should yield the tag name of the tag being processed, regardless of whether a function or block tag handler is being called. This is important since we may want to declare the same handler code for multiple tag names, and it would be necessary to query which tag name was being invoked to begin with.
  • Errors are now properly caught via the MT::Template::Context::build subroutine in an edge case - thank you Tim for the catch and fix.
  • Pragma: no-cache now properly set in mod_perl environments.
  • Useless “Close” buttons have been removed from error pages.
  • Having lots of categories made edit entry screen slow in IE 6 and 7.
  • Automatic form fill for captcha has been disabled.
  • All activity log entries are now outputted to a CSV file
  • MT::Objects can now be sorted by their score or rating via the <mt:Entries>, <mt:Comments>, etc tags. Additional filter attributes include: min_score, max_score, min_rate, max_rate, min_count, max_count. FYI - ‘score’ refers to a sum of all the accumulated ratings, while ‘rate’ refers to an average of all the accumulated ratings.
  • The reCaptcha plugin that ships in MT’s extras folder has been fixed.
  • Images inserted into posts are now wrapped properly in <p> tags when Convert Line Breaks is selected.
  • LiveJournal favicon is now transparent
  • Commenter details not always remembered, even if “Remember Me” is checked.
  • Readme.html file has been localized.

Default Templates

  • Support has been added to set the page title independently of the html <title> - new variable has been added to default templates “title”
  • hAtom microformat support has been added to the default templates
  • vCard microformat support has been added to the default templates
  • Search box has minor improvements - “Search” is now text inside the search box that will disappear on focus.


  • A XSS vulnerability has been found: the MTErrorMessage tag in the Dynamic Error template outputs non-sanitized urls. Six Apart feels that this threat is relatively minor. It affects users of IE6 only and users of dynamic publishing only. The fix can be made without modifying the core source code as well (as an interim solution) by using the following patch:

    --- default_templates/dynamic_error.mtml
    +++ default_templates/dynamic_error.mtml
    @@ -9,7 +9,7 @@
    <h1><$MTGetVar name="page_title"$></h1>
    -    <strong><$MTErrorMessage$></strong>
    +    <strong><$MTErrorMessage encode_html="1"$></strong>
    <$MTInclude module="<__trans phrase="Footer">"$>


  • MT::Util::Archive - Re-factored compression and extraction code in Backup/Restore into MT::Util::Archive.
  • Email templates are now stored in the database, as opposed to the file system
  • Memcached is now used to store MT::Scorable values when memcache is enabled.
  • Ampersands in links from within the admin interface have been encoded properly to comply with W3C standards.
  • A user’s OpenID unique identifier is now stored within the “external_id” user property.