Release announcements, helpful tips, and community discussion


Cerb (7.1) is a feature upgrade in beta as of December 14, 2015. It currently contains over 111 new features and improvements from community feedback. There are 99 additional improvements provided in 5 maintenance updates.

To check if you qualify for this release as a free update, view Setup » Configure » License. If your software updates expire on or after December 1, 2015 then you can upgrade without renewing your license.


As mentioned with the 7.0 release earlier this year, the theme of 7.x is personalization and machine learning. To that end, we’ve made major improvements to contact management in this release. It also sets the stage for our planned community-building improvements.

In a few weeks, we’ll have been working on Cerb full-time for 14 years. Together, we’ve taken what started as a simple tool for sharing email accounts in a web browser and evolved it into powerful set of enterprise productivity and workflow automation tools used by thousands of teams around the world.

Cerb has always conceptually been few years ahead of its time, and we owe a great measure of gratitude to you early adopters who have glimpsed the future of enterprise software with us: open source, intelligent, and interactive with both humans and other machines.

While so many other projects have followed the pseudo-zen trend of oversimplification, Cerb has empowered teams to meet their tough challenges head on. That’s an investment you won’t regret, and it’s a mission we’d love to stand behind for several more decades.

- Jeff Standen, Software Architect, Cerb

Important Release Notes



Records are summarized on card popups that provide many shortcuts

Since the 4.x versions, Cerb has provided a “peek” feature for viewing and editing records without leaving the current page. This is incredibly useful; however, the feature has always required that a worker have write access to the target record, and the popup jumped directly to record editing by displaying every possible field (including custom fields). This is often an overwhelming amount of information for workers who just need a quick way to glance at a record.

In 7.1, record peek popups now display a card-based summary. Workers without the ability to edit a record can still see its card summary. For instance, a regular worker can view the card of an administrator, or of another worker’s calendar.

We’ve added several shortcuts to cards that make it much faster to perform routine workflows:

  • Cards display the most commonly used fields (properties) for a record. We’ve created a new grid-based UI control to improve readability when there are many properties, as well as to efficiently display a lot of information with a small visual footprint. This grid is also “responsive” – if you have a larger monitor with a wider popup then more columns of properties will be displayed; and a narrower display (e.g. a mobile device) may display everything in a single tall column.

  • Cards display a summary of record links with clickable buttons that immediately pull up those results in a search popup worklist. Previously, links information was only available from a record’s full profile page.

  • Cards provide single-click access to recommendation and watcher functionality.

  • A link to the full profile of a record is available at the top of every card. Holding Cmd/Ctrl while clicking the ‘Profile’ button will open it in a new browser tab/window.

  • Cards display an ‘Edit’ button to workers with the appropriate permissions. This behaves the same way that full page profiles do, but on a card that can pop up wherever you are.

  • If there is a record hierarchy, cards automatically display those parent/child relationships as buttons that open cards and search popups on your current page. For instance, the Organization of an Email Address, the Email Addresses of a Worker, the Contacts of an Organization, etc.

  • On contact-based cards (email addresses, contacts, organizations), a ticket summary is displayed with clickable buttons that open search popups. This subtotals the ticket history by status (open, waiting, closed, or all). Previously, this required many clicks into the tabs of a full page profile. Now you can do the same thing from anywhere in Cerb.

Additionally, we’ve removed the artificial limitation that only one popup of a given type can be open at the same time. You can now open multiple card popups of the same type side-by-side, as well as any number of linked cards, choosers, or search results popups.

The new ticket card popup has a much improved timeline view

The new ticket card popup displays a consolidated timeline for reading a ticket’s full message and comment history from within the popup.

Previously, the message preview option on peek was displayed in a small scrolling window. Now, it scrolls in the main browser window to improve usability.

Previously, comments and messages were displayed separately, which made it a bit confusing to read the timeline and wasted some screen space. Now, messages and comments are displayed in the same timeline.

Previously, attachment links on messages and comments weren’t displayed; now, they are.

Previously, using the next/prev options to read through other messages reloaded the entire popup and lost any editing progress. Now, it just pulls new message content without affecting anything else.

Previously, the message headers (sender/etc) and organization weren’t interactive on message previews. Now, they’re clickable to open their own cards.


Contact records for individuals within organizations independent of communication medium

We’ve added a new ‘Contact’ record type for tracking individual people within organizations independent of the communication medium (e.g. email, IM, Twitter, Facebook, forums, etc). Previously, the closest worker-facing record was ‘Email Address’, which had several flaws: extended contact information like phone numbers didn’t make conceptual sense on address records, an individual may frequently communicate using multiple email addresses leading to a lot of duplication, etc. This improves many customer relationship management (CRM) workflows.

Multiple email addresses may be associated with the same contact, although a single email address per contact is designated as the primary email contact method (which simplifies Virtual Attendant and Broadcast behaviors). Also for simplicity, a contact is associated with a single organization, and in situations where the same individual works for multiple distinct organizations, a separate contact record for each organization may be created for that individual.

Email addresses may still be associated directly with organizations, which covers situations where an email address can’t be associated with an individual contact (e.g. shared sales@ support@ mailboxes).

Contact records now store names and photos which were previously stored directly on address records (and address records no longer have this info unless they are linked to a contact or org). Any existing first/last name data from addresses will be automatically migrated to the new contact records during the upgrade.

Since contacts are now specific to individuals (opposed to email addresses), they provide many more built-in fields: title, gender, date of birth, location, phone, mobile, username, last login, etc. In many environments, this data was stored in custom fields on addresses which may now be migrated to contacts. Cerb makes use of this new CRM information as well (e.g. gender personalizes the default profile picture, etc).

Finally, contacts are designed to be community-facing profiles, and they will be used by community portals to expand public support/collaboration functionality in near-future updates. Previously, in the Support Center plugin, we had ‘Contact Person’ records but they weren’t tightly integrated or utilized in the worker-facing UI. The legacy ‘Contact Person’ records have been removed in favor of the new ‘Contact’ records, and any existing content will be automatically migrated to the new format.

Contact records may be imported from CSV files

Contact records may now be imported/updated using a CSV (comma-separated value) input file from any contact worklist.

Profile Pictures

Built-in profile picture management for every actor record

We now manage our own profile pictures within Cerb. This allows an image to be associated with any record: workers, groups, contacts, email addresses, Virtual Attendants, etc.

Previously, this was only supported through the Gravatar plugin, which had several issues: it didn’t work on intranets or behind firewalls, workers couldn’t set images for other users, users were redirected to a third-party service, when the plugin wasn’t in use we had no fallback, etc.

Internally, the profile picture service in Cerb works much like Gravatar – images are requested through the /avatars// path. Default images are available per record type (e.g. distinguishing between VAs and workers).

For people-based records (e.g. email addresses, contexts, workers), there are several silhouettes that are randomly used. If a gender is known (workers, contacts) then the appropriate default silhouettes are used.

The profile picture editor allows images to be imported and modified

When editing a record that supports profile pictures, an “avatar editor” popup is now available. This allows images to be uploaded or imported by URL, and then zoomed/panned/cropped.

Profile pictures are now shown in many areas as a visual cue

The current worker’s profile picture is now shown in the top right next to their worker menu.

On ticket profiles and worklists, worker profile photos are shown for the ‘Owner’ field.

Profile pictures for workers, senders, and VAs are shown in the ticket timeline for messages, drafts, comments, and notes.

Worker profile pictures are now shown in the recommendations and watchers popups.

If an email address doesn’t have an avatar but it’s assigned to an organization that does, that org’s avatar will be displayed as a default.

The default avatars for contact records select gender appropriate silhouettes (if known).

When using the avatar editor for a worker or contact profile photo, the Gravatar icon for that email address will be automatically suggested if it exists.


The ‘Search’ menu in the top right now opens search results in a popup window rather than on an entirely new page. This improves usability by not requiring workers to open a new tab or leave their current page. Records of that type can also be created, updated, bulk updated, or deleted from the popup without leaving the current page.

Improved search menu usability

The global search menu in the top right is now an icon. This makes it stand out more from the other text-based options (i.e. workspaces/setup).

Quick search can use any placeholders available on the worklist. At minimum, this usually includes ‘Current worker’ placeholders. On Virtual Attendants actions that use worklists, this includes every placeholder on the behavior.

[CHD-4258] Worker, contact, address, and organization records will now be instantly search indexed after creation or modification. Previously, all records were search indexed asynchronously from the scheduler at intervals. This led to issues where a record was created but unable to be found with a quick search using the default filters.

The quick search feature on worklists now supports a ‘sort:’ field for filtering and sorting the results at the same time. The quick search menu now contains a ‘(sort)’ section with sortable fields, along with an ‘ascending’ and ‘descending’ option for each field. A minus (-) sign can be manually prefixed to a field for descending sorts, like ‘sort:-updated’. Sorting from quick search also allows sorting by fields that aren’t columns on the worklist (like name, where it’s a title rather than a column).

When selecting an item from the quick search menu, it will now close automatically. Previously this extra step was required every time.

Append filters with quick search rather than replacing

Prefixing a quick search query with a plus sign (+) will now add the new filters to the existing filters rather than replacing them.

New quick search filters

  • Added an ‘inGroups:’ filter to quick search for worker worklists.

  • Added a ‘group’ field to quick search for bucket worklists.

  • Added a ‘bucket’ field to quick search for ticket records.

  • Added a ‘’ filter to quick search on ticket worklists. This returns tickets where the given contact is one of the recipients with any of their associated email addresses.

  • Added a ‘’ filter to quick search on address records. This returns addresses that are a participant on the given ticket.


Improved edit validation

An error is displayed when required fields are not provided.

When editing a ticket, an error will now be returned if the currently selected owner is not a member of the currently selected group. Previously, these tickets just became invisible to these owners and could be neglected.

Added more built-in fields to worker records

Added new fields to worker records for improved personalization and automation: gender, date of birth, location, mobile number, and phone number.


See who is using a workspace page

[CHD-2908] When editing a workspace page, a list of workers using the page is displayed.

Workspace usability improvements

The “New record created” link that appears above a worklist now displays the record in a peek popup (when possible) rather than a new page.


Table summaries in dashboard chart widgets

[CHD-4122] Line and bar charts on dashboards can now also display a table of series values along with subtotals. Bar charts display a matrix table (series as columns with a common x-axis). Line charts display independent tables for each series, as they can have different ranges/units/scales on the same chart (e.g. tickets per year vs. messages per month). When configuring a chart widget, the options are: Image & Table, Image only, and Table only.

Dashboard widgets can use quick search with placeholders to filter worklists

When using worklist widgets on dashboards, an option is now provided to use a quick search with placeholders to set the filters. Previously, only the filters set on the worklist were used. Since many of those filters didn’t support placeholders, that approach hindered many reporting options. These datasources are much more flexible now.

When using worklist datasources on dashboard widgets, an option is now provided to use a quick search with placeholders to set the filters. Previously, only the filters set on the worklist were used. Since many of those filters didn’t support placeholders, that approach hindered many reporting options. These datasources are much more flexible now.

Current worker placeholders on HTML widgets

On workspace dashboards, Custom HTML widgets can now use the placeholders of the current workers, as well as the entire template scripting syntax.

Fixed week numbering on dashboard chart widgets

Fixed an issue with grouping widget chart data into ‘weeks’. There were some inconsistencies between PHP and the database regarding how week numbering works (Sun/Mon as first day, 1st week contains Jan 1st or first Sun/Mon, etc).

Virtual Attendants

Virtual Attendants can determine the actor in Record Changed events

[CHD-3929] Virtual Attendant behaviors on the ‘Record changed’ event now have access to information about the current actor (app, role, group, worker, VA) that was responsible for the change. This is not always a worker, since worker activity can trigger VA activity (owned by other workers). The ‘actor type’ condition can be used to filter for activity by a specific type. The full set of placeholders for the actor are available; for instance, if the actor is a worker, then ‘actor_title’ and ‘actor_full_name’ placeholders are available.

Virtual Attendants can use quick search to set variables

When setting list variables in Virtual Attendant behaviors, an option is now provided to use a quick search with placeholders to set the filters. Previously, only the filters set on the worklist were used. Since many of those filters didn’t support placeholders, that approach hindered many automation workflows. It should be much easier to create dynamic automations now.

Virtual Attendants can create new attachments

Added a ‘Create an attachment’ action to Virtual Attendant behaviors. This allows the creation of entirely new attachment records, with options for file name, content type, and content. Binary files (e.g. ZIP, PNG, PDF) can be provided in base64 encoding. The resulting attachment meta can be written to a custom placeholder and added to an attachment list behavior variable (e.g. for attachment to outgoing messages). This enables workflows like sending personalized PDFs to contacts, sending license files, attaching custom reports, etc.

Virtual Attendants can search attachments and save results to behavior variables

Virtual Attendant behaviors can now use ‘(List) Attachment’ behavior variables. This allows other actions to find or create attachments that can be used with the send email actions.

Virtual Attendants can attach files to outgoing messages from variables

The ‘Send email’ action on Virtual Attendant behaviors can now include ‘(List) Attachment’ behavior variables.

The ‘Send email to recipients’ action on Virtual Attendant behaviors can now include ‘(List) Attachment’ behavior variables.

Virtual Attendants can add recipients to tickets using variables

The ‘Add recipients’ action in ticket- and message-based Virtual Attendant behaviors can now use address-based list variables for the recipients to add to the current ticket.

Virtual Attendants can remove recipients from tickets

[CHD-4042] Added a ‘Remove recipients’ action to ticket- and message-based Virtual Attendant behaviors. Address-based list variables are accepted as input. The company that suggested this needed a way to easily remove certain internal worker email addresses that were added by ‘Auto-add To/Cc recipients’, unless they were the initial creator of the ticket. VAs can handle that situation easily while the exclusion list in ‘Auto-add To/Cc’ can’t.

Virtual Attendants can run custom behaviors for contact records

Implemented ‘Custom contact behavior’ events for Virtual Attendant automation on contact records.


Shared events between calendars

Calendars can now be datasources for other calendars. This allows calendars to share common events like office hours or holidays. Previously holidays had to be added to every calendar individually.


Shortcut for creating records from choosers

Choosers widgets now have the option of providing a shortcut for creating a new record, in the form of a (+) button next to a form field. Previously, new records had to be added from the chooser in several steps (open the chooser popup, search, click the add button in the worklist, set fields and save, select the new row, save the chooser). This can now be accomplished with the new (+) button directly opening the edit popup and creating a chooser bubble when it’s saved.

Chooser autocomplete improvements

Chooser widgets can now provide an autocomplete input box that is only visible when a value isn’t currently set. The autocomplete input box disappears if a record is selected, and when the last existing record is removed then the autocomplete box reappears.

When using the create shortcut on a contact chooser to create a new contact record from an existing email address popup, the email address and its organization (if set) will be automatically set on the new contact to save time. Previously, this information had to be tediously input twice.

The contact chooser now displays a person’s name, title, organization, and profile picture in the autocomplete menu.

Autocomplete choosers on email address records now show profile pictures, contact names, and the associated organization in search results. Previously, the results only showed the email address.

Autocomplete choosers on org records now show the org name and profile picture. Previously, the results only showed the name.

Autocomplete choosers on worker records now show name, title, and profile picture. Previously, the results only showed the worker’s name.

When using autocompletion for email addresses in input fields, the address record fulltext index is now used for matches. This is much faster for searching partial email addresses, first/last names, or organization names. When the autocomplete phrase contains a special email character (period, underscore, @) then a suffix-wildcard match will be used on the email address (e.g. customer@*). When the autocomplete phrase starts with an @, then the autocomplete will match hosts in email addresses (e.g. @gmail). As previously, the results are sorted with the most frequently contacted first.

Choosers can provide default quick search filters

Abstract choosers can now be opened by other functionality with a default quick search query. For instance, if you need to select a contact from a given organization, the contact chooser can open with an existing filter for the organization.


SMTP errors are now logged

[CHD-3434] The Devblocks mail service now keeps track of SMTP errors. The various areas of mail functionality can refer to this for more useful error messages.

When a mail transport fails to deliver a message (e.g. SMTP failure), this will now be recorded in that transport’s Activity Log.

When a message fails to deliver on a ticket and generates a draft, the draft will now contain a sticky note with more information about the last error.

Ticket timeline improvements

When viewing messages in the ticket timeline, the associated contact, title, and organization of a sender is now displayed more clearly. Clicking any of these elements will display their record’s card in a popup. If the sender is a worker, their card will be displayed when clicked as well. Previously, only the sender address was displayed, and clicks always opened the address popup (even for worker senders).

Comments on draft records are now displayed in the conversation timeline on a ticket.

Improved the display of the ‘pending drafts’ warning on the ticket conversation timeline.

In ticket conversations the labels for drafts, comments, and notes are now highlighted more clearly.

Improved the style of drafts in the ticket timeline so they are consistent with messages and comments.

Improved the style of sticky notes in the ticket timeline.

The expand and collapse icons for messages in the ticket timeline are now buttons rather than text. This is more consistent with the rest of the UI.

The permalink and delete icons displayed on comments are now buttons rather than text labels. This is more consistent with the rest of the UI.

Mail header usability

When toggling ‘full headers’ from a mail timeline, the headers are now always sorted in alphabetical order. Previously, the headers were displayed in an arbitrary order.


Changed the permanent list of ‘recipients’ on tickets to ‘participants’ to differentiate them from other forms of recipients (Cc:, people who receive copies of messages sent by VAs, etc).

Knowledgebase chooser when replying

When replying to a ticket, the ‘Knowledgebase’ button now opens a search popup rather than a chooser. It was confusing people that you could select articles but the popup didn’t do anything with them (like inserting public URLs).


Virtual Attendant shortcut icon

Improved the style of the Virtual Attendant button on profiles. Previously it was an ambiguous-looking remote control icon; now it uses the standard Cerb mascot that represents Virtual Attendant automations.


Improved usability for notifications

Clicking on the notifications alert in the top right will now open the notifications in a popup rather than leaving the current page to switch to the worker’s profile view. This saves extra clicks when viewing and clearing notifications. The new popup also automatically opens the subtotals by event type.

Support Center

Support Center profiles

Added a new ‘Profile’ page to the My Account section in the Support Center. This provides a place for contacts to manage their own details (name, title, gender, location, dob, phone, etc).

The Support Center is now based on contact records

The Support Center plugin now uses the new Contact records for authentication and profiles, which are more tightly integrated with the worker UI as well. The old Contact Person records are automatically migrated to Contacts.

Profile pictures in the Support Center

Support Center users can now upload their own profile pictures (when enabled) from the ‘My profile’ page.

Support Center aesthetic improvements

Improved the style and layout of the Ticket History pages in the Support Center. These now display messages in a format very similar to the worker UI (profile picture, sender name/org/title info, received/sent badges, etc).

Removed the old icons in the Support Center in favor of font-based Glyphicons (as was done in the worker interface for 7.0). The font-based icons are more flexible when customized via CSS (e.g. color, size, animations, etc).

Support Center dependencies

  • Updated the jQuery library from 1.4 to 1.11.3 in the Support Center plugin.


  • Fixed an issue with grouping report data into ‘weeks’. There were some inconsistencies between PHP and the database regarding how week numbering works (Sun/Mon as first day, 1st week contains Jan 1st or first Sun/Mon, etc).



  • Fixed a few minor potential XSS vulnerabilities in various scripts. Most could only have been abused by workers and not outside actors (e.g. creating a group with a functioning script for a name and navigating to an obscure part of the UI).

MySQL strict mode compatibility

  • Fixed various issues when MySQL is running in strict mode.


  • Permalink URLs now use dash (-) rather than underscore (_) to replace spaces and special characters. This is consistent with any prefixed record IDs (rather than mixing dashes and underscores in the same URL).

Removed length limits on some fields

  • Removed the arbitrary 32-character length limit on contact/worker first and last names.

  • Removed the arbitrary 64-character length limit on worker titles.

  • Removed the arbitrary 128-character length limit on worker email addresses.

  • Removed the arbitrary 32-character length limit on group and bucket names.


  • Updated the Parsedown library from 1.5.1 to 1.5.3. This release fixes some reported formatting issues with HTML style
    line breaks.

Developers / Plugins

  • Implemented a jQuery plugin for abstract peek popup handling in Devblocks. Previously, popups were opened by using genericAjaxPopup() directly, along with options for width/layer/etc. This was pretty redundant. Now, any element can trigger a popup to open using $selector.cerbPeekTrigger(). The options are passed in the DOM using HTML5 data attributes (data-context, data-context-id, data-layer, data-edit, data-width). Only the context is required, and the other options will use default values if left blank. Widths can be provided in percentages now rather than absolute pixels. The layer name will be automatically generated if blank to be unique for a given record, so multiple popups of the same type may now be opened simultaneously. Peek popups opened in this manner also provide more flexibility using jQuery events and listeners (cerb-peek-opened, cerb-peek-saved, cerb-peek-deleted).

  • Implemented a jQuery plugin for abstract search popup handling in Devblocks. Previously, searches redirected to the /search/ pages (usually in a new browser tab), and the filters were set by back-end controllers in a rather redundant way. Now, any element can trigger a search popup to open using $selector.cerbSearchTrigger(). The options are passed in the DOM using HTML5 data attributes (data-context, data-query, data-layer). The query option provides the quick search filters to open the search popup with, which will be run immediately. No custom code is required now to create search popups in this manner. Each search popup has a unique layer, so any number of search results can be displayed or nested at once. Search popups trigger a ‘cerb-search-closed’ event when closed.

  • Implemented a jQuery plugin for abstract chooser popup handling in Devblocks. Previously, choosers were implemented redundantly. Now, any element can trigger a chooser popup to open using $selector.cerbChooserTrigger(). The options are passed in the DOM using HTML5 data attributes (data-context, data-field-name, data-query, data-single, data-autocomplete). The context determines which type of records are displayed. The field-name is the name of the hidden form element that contains the IDs of the selected records. The query is the default quick search filters to apply to the chooser, which can be generated from the current record – for instance, if choosing an owner for a ticket, possible workers can be filtered to only those who are members of the ticket’s current group. The ‘single’ option determines if the chooser should close after a single selection has been made; otherwise, multiple selections are allowed. The autocomplete option creates a search box alongside the chooser button for making quick selections without having to open the chooser (for instance, selecting an organization or worker by the first few letters of their name).

  • The genericAjaxGet and genericAjaxPost helpers now always handle responses (fade out/in, render output into container) even when a third-party success callback is given. Previously, any time a callback was provided it had to implement response handling by itself. Now those callbacks can simply perform their own actions (e.g. closing the popup).

  • In a plugin.xml manifest, an extension entity can contain multiple child entities. Previously this was limited to one. Additionally, the entities can provide a 'key' attribute to be associative rather than indexed. This makes it easier to store complex metadata with extensions.

  • In plugin scripts, the genericAjaxPopup() function may now specify the width option as a percentage of the current browser window width, where previously only fixed pixels widths were available. This should improve usability by taking advantage of additional screen space. For instance, search popups and choosers now open to 90% of the browser width rather than an arbitrary 500-750 pixels.

  • Implemented DevblocksPlatform::extractArrayValues() for creating a new array for a specific key across all the given arrays. For instance, this is used in worklists when we want to bulk load all the referenced records for a column in a single query (e.g. all distinct address.contact_id).

  • Implemented Devblocks.uniqueId() in the Javascript API. This is used to generate request-unique IDs for abstract DOM elements.

  • The new create shortcut on choosers can be enabled with the ‘data-create’ attribute. A value of ‘if-null’ will only show the create shortcut when no record is selected in the chooser.

  • The abstract chooser functionality now automatically takes care of the remove icons for the default values in the chooser container. Previously, these had to be added manually along with the code to remove the bubble. Choosers can now listen for items being removed from the list and respond accordingly.

  • Abstract choosers can have a conditional autocomplete helper. This is controlled by the data-autocomplete=”if-null” attribute in the chooser trigger. The autocomplete will be hidden after a selection is made, and shown when the container is empty.

  • Implemented a new ‘Properties Grid’ UI control (.cerbPropertyGrid). This automatically aligns any number of properties into a grid. A desired column width is given in the ‘data-column-width’ attribute, and any properties wider than that are automatically resized into a multiple of the width to fit the grid. Narrower properties are resized to the column width. Renderers are provided for the built-in data types, including record links (with avatars and card popups), so only a few specialized fields need to be directly implemented on a card.