Notes on converting apps from Horde 4 to Horde 5. These are by far not complete. Mandatory Use Horde_PageOutput * There is a new class Horde_PageOutput which is an OO-style output buffer common header to $page_output->header horde/templates/common-header.inc does not exist anymore require $registry->get('templates', 'horde') . '/common-header.inc'; echo Horde::menu(); $page_output->header(array( 'title' => _("List") )); Page Footer require $registry->get('templates', 'horde') . '/common-footer.inc'; $page_output->footer(); Adding Javascript Horde::addScriptFile('jquery-ui/jquery-1.7.min.js', 'insysgui'); $page_output->addScriptFile('jquery-ui/jquery-1.7.min.js'); New parameter format for entries in menu In Application.php's menu function, entries now go like this $menu->add(Horde::url('data.php'), _("_Import/Export"), 'horde-data'); It's link, caption, css class. The Icon now has to be defined in css: .turba-edit, #tabEditContact a { background-image: url("graphics/edit.png"); } UI Topbar search bar * If your app sported a custom search bar (like wicked, sesha or whups), convert it to the Horde Topbar $topbar = $injector->getInstance('Horde_View_Topbar'); /* Make topbar visible */ $topbar->search = true; /* Define where to redirect when the button is clicked */ $topbar->searchAction = new Horde_Url('list.php'); /* Define the grayed-out hint text in the search field */ $topbar->searchLabel = $session->get('sesha', 'search') ?: _("Stock Id"); /* Define a search icon. Leave away if you want the default */ $topbar->searchIcon = Horde_Themes::img('search-topbar.png'); Custom apps handling If your conf.xml had such a section Menu Settings drop it. It won't work anymore now that the app-specific menu lives in the sidebar. The New Button Horde 5 introduces a visually enhanced "New Item" button. In the default theme, it is green and enlarged. There can be only one "New" Button per application. It is expected that the button creates the primary domain item of the app (like in a app calendar, it would add a new event, not a new calendar - in an addressbook app, it would add a new addressbook entry, not a new address book...) Use the ->addNewButton() call TODO: Code example here