Skip to main content
  • Subscribe by RSS
  • Ex Libris Knowledge Center

    Primo VE Customization - Best Practices

    Return to menu


    In order to provide users with the best experience in Primo VE, Ex Libris carried out an extensive user study that included the following tasks to help redesign the classic Primo user interface:
    • Analyzed search logs
    • Conducted surveys of librarians during workshops
    • Interviewed users at different academic levels and from various countries and disciplines 
    During the design and development of the new interface, accessibility was tested as well as its responsiveness on several devices to ensure that the new design met the goals based on the results of the user study.
    Because every library has its own needs and brand, we have implemented a new customization framework that allows customers to tap into predefined hooks for each UI component, thus allowing them to customize each component as needed.
    In order to ensure a quality user experience and optimal system performance, we encourage customers to test every change that they make for both accessibility and responsiveness in their staging environments before uploading any packages to their production environment.

    Additional Resources

    Refer to the following resources for further Primo VE customization options:

    Inspecting Web Elements with Your Browser

    Most Web browsers provide developer tools that allow you to inspect the currently-loaded HTML and find specific elements on a page. In most browsers, you can either click F12 or right-click the page and then select the Inspect Element option.

    In order to customize Primo VE, you should be familiar with the following: CSS, HTML, JavaScript, and AngularJS. Depending on your experience with each of these languages and frameworks, you will be able to perform more complex customizations.


    Full Display Page - Get It Section

    The following procedure shows how to use the browser's inspect tool to locate the code table used to define a label in Primo VE.

    To locate a label on the page:
    1. On the page that you want to inspect, press F12.

    2. Click the inspect item button (#1) and then click the label (#2) that you want to modify. Each component should highlight as you move the cursor over the item.


      Inspection Brief Results Page
    3. In the HTML tab, you should see the label and its corresponding code (#3). If you do not see a translate parameter, you can instead search for the label’s description on the All Code Tables page.

    4. On the All Code Tables page (Configuration Menu > Discovery > Display Configuration > Labels), either search for the code or description (the actual display label).

      The following figure shows an example of a search for a code:


      Code Search Example

      The following figure shows an example of a search for a label:


      Label Search Example

    Using the UI Customization Package Manager

    The Customization Package Manager enables you to upload and manage customization packages, which enables you to brand and further customize Primo VE. If no packages are loaded, the system uses the out-of-the-box configurations.

    • Database files (.db) are not permitted in your customization package. If the following error occurs while uploading your ZIP file, remove all .db files:

      Validation error: File type db is not allowed in the zip file
    • Set Windows to display hidden files if you cannot see any .db files in your customization package folder.

    To ensure that a customization package integrates properly with Primo VE, ensure that its ZIP file is structured as follows:


    Customization Package Structure
    • <View_Code> – The top folder of your customization package. Ensure that you change the name of the top folder to your institution's view code, which must be in the following format: <institution_code>-<view_code>.

    • css – This subfolder contains the custom1.css file, which includes your CSS rules. These rules override corresponding rules in the default CSS.

    • img – This subfolder contains all customized images for Primo VE. To ensure that the correct image appears in Primo VE, make sure that you use the same file name as the original.

    • js – This subfolder contains the custom.js file, which includes your scripts.

    • html – This subfolder contains the following subfolders, which store all customized HTML files for Primo VE:

      • homepage – The homepage_en.html file allows you to customize the area of the page below the search box on the Primo VE Home page. To support other languages, you can create and upload new HTML files with the relevant language code. For example, homepage_fr.html. For more information, see Home Page.

        Primo VE Home Page
        • The system does not use content inside <script> tags.

        • Since this code is nested inside the main HTML code, wrap this code with a <div> tag (insets of the <html> tag).

      • email – The email_<2-character_language_code>.html template files (such as email_en.html) allow you to configure the layout and format of the emails (per supported UI languages) that are sent when users perform the Send To Email action. Note that the email folder is not created for you. For more information, see Customizing the Email Template.

      • help – The help_en.html file allows you to create a help page for your view. To support other languages, you can create and upload new HTML help files with the relevant language code. For example, help_fr.html. For more information, see Creating a Custom Help Page. Since a help page is not provided out of the box, you need to add the help directory to your customization package.

    You can create a customization package from either the View Configuration page or Primo Studio, but you need to use the View Configuration page to deploy the customization package for both methods. For more information, see the following sections:

    Accessing Primo Studio

    Primo Studio allows you to interactively customize some aspects of your view and create a customization package for deployment with the View Configuration page in Primo VE. For more information, see Primo Studio for Primo VE.

    To access Primo Studio:
    1. Edit your view on the View Configuration page (Configuration Menu > Discovery > Display Configuration > Configure Views).

    2. Select the Manage Customization Package tab.

    3. Select Go to Primo Studio in the Create a Customization Package section.

    Creating a Customization Package

    To create a customization package:
    1. On the Views List page (Configuration Menu > Discovery > Display Configuration > Configure Views), edit your view.

    2. Click the Manage Customization Package tab.


      Manage Customization Package Tab
    3. Click Download to download the customization package. If this is the first time, download the template package. Otherwise, download the current package to ensure that you are using the latest version.

    4. Unzip the file.

    5. Ensure that the top folder of your package's zip file is the <View_Code> folder, which must have the following format: <institution_code>-<view_code>. For example, PRMO_OAP_INST-Alma.

    6. As needed, customize the configuration files and folders associated with the home page, images, and CSS. You must retain the file structure and names of files that you are overriding. Refer to the following sections for details on how to brand and make simple changes to your view:

    7. Zip the view code folder.


      Zipped View Code Folder

      For Windows users, we recommend using a compression tool such as 7zip or Winrar instead of Windows Send to > Compress folder to avoid upload errors.


      For Mac users, use the following procedure to zip and remove any hidden .DS_Store files:

      1. Open the Terminal application under Applications > Utilities.

      2. Move to the parent directory of the folder that you want to compress. For example: 
        cd /Users/<user name>/<parent folder>

      3. Enter the following command to compress the file:
        zip –r <target file>.zip <My_View> -x "*.DS_Store"

    8. Specify the name of the zipped package and click Upload.

    9. Click Save to deploy the changes.

    10. Refresh your view in the Web browser and test your changes prior to uploading the changes to the production server.

    Adding a Clickable Logo

    The Manage Customization Package tab on the View Configuration page (Configuration Menu > Discovery > Display Configuration > Configure Views) allows you to upload a new logo and define a link that opens a page when user's click the logo. The following image formats are supported: PNG and SVG.

    IE11 may not fully support the display of SVG images.

    To upload a new logo:
    1. Edit your view on the View Configuration page (Configuration Menu > Discovery > Display Configuration > Configure Views).

    2. Select the Manage Customization Package tab.

    3. In the Upload Logo section, perform the following steps:

      1. Select an image to upload in the Upload Logo File field.

        The system places the following restrictions on the logo file:
        • The file format of the image must be .png or .svg.

        • The height of the image cannot exceed 100 pixels.

        • The width of the image cannot exceed 300 pixels.

        • The size of the image cannot exceed 30 KB.

      2. Select Upload.

        If you want to remove the clickable logo, select Remove Logo.

      3. If you want the image to be clickable, specify the redirection URL in the Logo Clickable URL field.

    4. Select Save to save changes to the customization package.

    Customizing the Email Template

    Primo VE allows you to customize the format of emails sent to users after selecting the Send To Email action in Primo VE. You can customize the format with or without Primo Studio. With either method, you must upload the customized email templates with the View Configuration page. In addition, you can create separate email templates for each supported language in the UI.

    • The email template for Primo VE supports a maximum of 50 records. If a user sends more than 50 records, the system reverts to the classic email template, which was used in previous releases.

    • For security reasons, all links are removed from your email template.

    The following figure shows the sample output of the out-of-the-box Email template for Primo VE.


    Example Email for Send To Email Actions in Primo VE

    The Email template is in HTML format and includes the following sections:

    • Logo – Displays the logo from your view's customization package.

    • Institution note – Displays the text configured with the following code in the Send Email and SMS code table: By default, this field has no value and does not display if left empty.

    • List of records – For each record, the email displays the record's brief display and availability statement.

    • Disclaimer – Displays the text configured with the following code in the Send Email and SMS code table:

    Configuration Options 

    The email_<2-character_language_code>.html template files (such as email_en.html) allow you to configure the layout and format of the emails (per supported UI languages) that are sent when users perform the Send To Email action in Primo VE. For more details and examples of how to customize the email templates, see the following page on GitHub: 

    Note that the default email template file is called email_en_US.html on GitHub.

    • If you decide to customize the out-of-the-box email template and your view supports additional languages, you must create and upload a separate template file for each language (including the default email_en.html file).

    • The alignment of the email's text is based on the email client settings.

    After you have created or modified any email template files, edit your view (Configuration Menu > Discovery > Display Configuration > Configure Views), select the Manage Customization Package tab, and then use one of the following methods to upload the email template files to the UI:

    • Store the custom email template files under the html/email directory in your view's customization package and upload the entire customization package.

    • If you are not using a customization package, you can use the Upload Templates section to upload your email template files or choose to use the classic email template. By default, your view will use the new email template.


      View Configuration Page - New Upload Templates Section

    If you want to delete an email template file, remove the email template file under the html directory in the view's customization package and upload the modified package to the UI. If you want to revert to the out-the-box email template, remove all email templates under the html directory in the view's customization package and upload the modified package to the UI.

    Customizing Image Files

    Any of the out-of-the-box images can be customized by creating or modifying a view’s package, placing the customized image under the img folder, uploading the updated package to the server, and then deploying the package. Here are some of the commonly customized images for the purpose of branding:
    • library-logo.png – Contains the library logo.
    • favicon.ico – Contains the favicon.
    • icon_<resource_type>.png – Contains the image for the specified resource type <resource_type>. For example: icon_audio.png

    From your Home page (homepage_en.html), you can use the HTML img tag to load any image stored in the /img directory. For example:

    <img src="/discovery/custom/01INST-MyView/img/circdesk.png" alt="Circulation desk image">

    CSS Components and Customizations

    This section identifies the major CSS components for each page of Primo VE and provides an example of how to move the facets to the left side of the page using CSS.

    Home Page

    This section identifies the major components of the Home page.


    Home Page Components
    1. .prm-primary-bg.prm-hue1, prm-search-bar.prm-hue1, prm-spinner.prm-hue1.overlay-cover.light-on-dark:after, prm-topbar .top-nav-bar{}
    2. .prm-primary-bg, prm-search-bar, prm-spinner.overlay-cover.light-on-dark:after{}
    3. view_code/html/homepage_en.html
    If you want to display drop-down lists for the view's default tab and search scope in the search box initially, include the tab parameter as follows in Primo VE's URL:

    If you want to display a drop-down list for a specific search scope initially, include the search_scope parameter as follows in Primo VE's URL:


    Brief Results Page

    This section identifies the CSS selectors of the major components on the Brief Results page.
    Brief Results Page Components
    1. .alert-bar{}
    2. md-content,{}
      1. .section-title {}
      2. .section-content .md-chips .md-chip strong{}
      3. .md-autocomplete-suggestions .suggestion-scope, .text-italic{}
      4. .link-alt-color, .section-title prm-icon {}
    3. prm-search-result-list .results-title {}
      Brief Result Item Components
    4. prm-brief-result-container .list-item-primary-content {}
      1. prm-brief-result .item-title{}
      2. prm-brief-result .item-detail{}
      3. .item-expanded .secondary-content-holder .md-tab:nth-child(2), .item-expanded .secondary-content-holder md-tab-item:nth-child(2){}
      4. .item-expanded .secondary-content-holder .md-tab:nth-child(3), .item-expanded .secondary-content-holder md-tab-item:nth-child(3) {}
      5. .item-expanded .secondary-content-holder .md-tab:nth-child(4), .item-expanded .secondary-content-holder md-tab-item:nth-child(4) {}
      6. .item-expanded .secondary-content-holder .md-tab:nth-child(5), .item-expanded .secondary-content-holder md-tab-item:nth-child(5) {}
      7. .item-expanded .secondary-content-holder .md-tab:nth-child(6), .item-expanded .secondary-content-holder md-tab-item:nth-child(6) {}
      8. .item-expanded .secondary-content-holder .md-tab:nth-child(7), .item-expanded .secondary-content-holder md-tab-item:nth-child(7) {}
      9. .item-expanded .secondary-content-holder .md-tab:nth-child(8), .item-expanded .secondary-content-holder md-tab-item:nth-child(8) {}

    Hiding the Sign-In Link

    To hide the "Sign in to get complete results and to request items" link:
    .alert-bar {

    Changing the Color of the Versions Link

    To change the color of the "See all versions" link:
    1. Open the Discovery UI Labels code table (Configuration Menu > Discovery > Display Configuration > Label).

    2. Edit the Results Tile Labels code table.
    3. Change the description of the code to include your color settings. For example:
      <font color="green">See all versions</font>

    Full Display Page

    This section identifies the CSS selectors of the major components on the Full Display page. For details on configuring Alma's View It and Get It services, see Branding the View for Primo VE.
    Full Record Page Components
    1. prm-full-view prm-brief-result-container{}

    Upper Menu

    This section identifies the CSS selectors of the major components in the Upper Menu.
    Upper Menu Components
    1. view_code/img/library-logo.png
    2. .layout-align-end-center { }
    3. prm-topbar .md-button:not(.md-icon-button) {}

    Hiding the Language Menu

    To hide the language menu:
    prm-change-lang {
      display: none;

    Disabling Automatic Capitalization of Main Menu Links

    To disable the automatic capitalization of all characters in the main menu links:
    prm-topbar .md-button {
    text-transform: none;

    Library Search Bar

    This section identifies the CSS selectors of the major components in the Library Search Bar.
    Library Search Bar Components
    1. prm-search-bar {}
    2. /* the text color in the search box */
      prm-search-bar input::-webkit-input-placeholder { }
      prm-search-bar input:-moz-placeholder { /* Firefox 18- */}
      prm-search-bar input::-moz-placeholder {  /* Firefox 19+ */}
      prm-search-bar input:-ms-input-placeholder {}
    3. prm-search-bar md-autocomplete-wrap input {}
    4. prm-search-bar .simple-search-wrapper .search-actions .md-button {}
    5. prm-search-bar .search-switch-buttons .md-button {}

    Database and Journal Search Bars

    This section identifies the major components of the Database and Journal Search Bars.
    Database and Journal Search Bar Components (Database Search)
    1. prm-atoz-search-bar {}
    2. prm-atoz-search-bar
    3. /* the text color in the search box */
      prm-atoz-search-bar input::-webkit-input-placeholder { }
      prm-atoz-search-bar input:-moz-placeholder { /* Firefox 18- */}
      prm-atoz-search-bar input::-moz-placeholder {  /* Firefox 19+ */}
      prm-atoz-search-bar input:-ms-input-placeholder {}
    4. prm-atoz-search-bar md-autocomplete-wrap input {}
    5. prm-atoz-search-bar .simple-search-wrapper .search-actions .md-button {}

    Browse Search Bar

    This section identifies the CSS selectors of the major components in the Browse Search Bar.
    Browse Search Bar Components
    1. prm-browse-search-bar {}
    2. prm-browse-search-bar
    3. /* the text color in the search box */
      prm-browse-search-bar input::-webkit-input-placeholder { }
      prm-browse-search-bar input:-moz-placeholder { /* Firefox 18- */}
      prm-browse-search-bar input::-moz-placeholder {  /* Firefox 19+ */}
      prm-browse-search-bar input:-ms-input-placeholder {}
    4. prm-browse-search-bar md-autocomplete-wrap input {}
    5. prm-browse-search-bar .simple-search-wrapper .search-actions .md-button {}

    Newspaper Search Bar

    This section identifies the CSS selectors of the major components in the Newspaper Search Bar.
    Newspaper Search Bar Components
    1. prm-newspapers-search-bar{}
    2. prm-newspapers-search-bar
    3. /* the text color in the search box */
      prm-newspapers-search-bar input::-webkit-input-placeholder { }
      prm-newspapers-search-bar input:-moz-placeholder { /* Firefox 18- */}
      prm-newspapers-search-bar input::-moz-placeholder {  /* Firefox 19+ */}
      prm-newspapers-search-bar input:-ms-input-placeholder {}
    4. prm-newspapers-search-bar md-autocomplete-wrap input {}
    5. prm-newspapers-search-bar .simple-search-wrapper .search-actions .md-button {}

    Tags Search Bar

    This section identifies the CSS selectors of the major components in the Tags Search Bar.
    Tags Search Bar Components
    1. prm-tags-search-bar{}
    2. prm-tags-search-bar
    3. /* the text color in the search box */
      prm-tags-search-bar input::-webkit-input-placeholder { }
      prm-tags-search-bar input:-moz-placeholder { /* Firefox 18- */}
      prm-tags-search-bar input::-moz-placeholder {  /* Firefox 19+ */}
      prm-tags-search-bar input:-ms-input-placeholder {}
    4. prm-tags-search-bar md-autocomplete-wrap input {}
    5. prm-tags-search-bar .simple-search-wrapper .search-actions .md-button {}

    Moving the Facets to the Left Side

    Out of the box, Primo VE displays the facets on the right side of the results page. Use the Side bar (tweak my results) position option in the General tab on the View Configuration page (Configuration Menu > Discovery > Display Configuration > Configure Views) to move the facets to either the left or the right side of the page.

    Creating a Search Box with Deep Links to Primo VE

    This example creates a search box that uses a deep link to search your institution's catalog.
    Search Box
    To create a search box:
    1. Create an HTML file and include the following lines, making sure that you fill in the host name and customizable parameters, such as view code and tab (search profile):
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <!-- Script that converts the query string into valid parameter -->
      <script type="text/javascript">
      function searchPrimo() {
      document.getElementById("primoQuery").value = "any,contains," + document.getElementById("primoQueryTemp").value.replace(/[,]/g, " ");
      <!-- Fill in Highlighted Parameters -->
      <form id="simple" name="searchForm" method="get" target="_self" action="https://<host_name>/discovery/search" enctype="application/x-www-form-urlencoded; charset=utf-8" onsubmit="searchPrimo()">
      <input type="hidden" name="vid" value="<inst_code>:<view_code>">
      <input type="hidden" name="tab" value="<tab_code>">
      <input type="hidden" name="search_scope" value="<scope_name>">
      <input type="hidden" name="lang" value="<2_char_lang_code>">
      <!-- Fixed parameters -->
      <input type="hidden" name="query" id="primoQuery">
      <input type="text" id="primoQueryTemp" value="" size="35">
      <!-- Search Button -->
      <input id="go" title="Search" onclick="searchPrimo()" type="button" value="Search" alt="Search" style="height: 22px; font-size: 12px; font-weight: bold; background: #DE6E17; color: #ffffff; border: 1px solid;">

      Example search query:,contains,herring&tab=Everything&search_scope=MyInst_and_CI&vid=PRIMO_OAP_INST:MyInst&lang=en

      If you are displaying multiple search boxes on a page, you must define separate functions and forms for each search box, ensuring that the red names and IDs are unique for each search box.

    2. To test the search box, open the HTML file in a browser and perform a search. If you saved the HTML file on a Web server, use the following URL to access the search box:

    Creating a Twitter Feed

    This procedure creates a link on the home page, which opens your Twitter feed in a new tab.


    Link to Twitter Feed on Home Page
    To add a Twitter feed:
    1. Create an HTML link based on your Twitter feed. For details, see

    2. Edit the homepage_en.html file and embed the HTML link created in the previous step.

      For example:

      <div flex-xs flex="40" layout="column">
       <md-card class="default-card">
       <span class="md-headline">Twitter</span>

      <a class="twitter-timeline" href="">Tweets by ExLibrisGroup</a> <script async src="" charset="utf-8"></script>

    3. Compress, upload, and deploy your updated customization package. For more information, see Using the UI Customization Package Manager.

    Creating a Custom Help Page

    Primo VE allows you to create and embed a custom help page, which contains information on how to utilize the interface to access services provided by your institution. To provide a custom help page, create the help file, upload the help file to the server, and add a link in Primo VE to allow users to access the help page.

    Creating and Uploading the Help File

    Primo VE enables you to provide help files for each language supported by your institution. The naming convention is help_<language>.html (such as help_en.html). All custom help files must be placed in the html/help directory of your view's customization package.
    To create and upload the help files:
    1. Download your view's customization package (see Modifying a View-Level Package).
    2. For each language supported, create an HTML help file (using the naming convention mentioned above).
    3. Save the help files under the html/help directory of your view's customization package. You may need to create the help directory first.
    4. Compress your view's package and upload it to the server (see Modifying a View-Level Package).

    Adding the Help Link to the UI

    The Links Menu tab on the Views Configuration page allows you to define the Help link that appears at the top of the page in Primo VE.
    Help Link in the Main Menu
    To add the Help link:
    1. On the View Configuration page (Configuration Menu > Discovery > Display Configuration > Configure Views), edit your view.
    2. Select the Links Menu tab.
    3. Click Add Link to open the Edit Link Menu page.
    4. Specify the following fields:
      • Code – Enter primo_help.
      • URL – Enter static-file/help.
      • Label – Enter the display label for the help link (such as Help). Click the Translate icon PVE_TranslateIcon2.png to define a language-specific label.
      • Description – Specify the text that displays when a users hover the cursor over the link. Click the Translate icon PVE_TranslateIcon2.png to define a language-specific description.
      Edit Link Menu Page
    5. Click Save.

    Disabling Short Permalinks in Primo VE 

    By default, the Send To action Permalink, which appears on both the Brief and Full Display pages, creates a shortened URL that includes the institution code, record ID, and a key:

    <Primo Domain>/permalink/<institution_code>/<key>/<record_ID>

    When the shortened URL is entered in a browser, Primo converts the URL to its full URL and displays the record's full details.

    • Short format –

    • Long format –

    To disable short permalinks:

    This enhancement is enabled by default. If you would like to revert to the long format, add the following lines to the CSS file in your customization package:

    .__xs prm-permalink .layout-column>.long-permalink, prm-permalink .layout-column>.long-permalink {

        display: inherit;



    .__xs prm-permalink .layout-column>.short-permalink, prm-permalink .layout-column>.short-permalink {

        display: none;


    Improved Format of Saved Search Alert Emails

    URM-112191This enhancement provides an improved format of emails sent to users for Saved Search alerts. This format is configured with the Saved Searches Letter template on the Letter Configuration page (Configuration Menu > General > Letters > Letters Configuration). For information on how to configure email letters, see Configuring Alma Letters. The alerts are scheduled with the Saved Searches Alert job (Admin > Manage Jobs and Sets > Monitor Jobs > Discovery).


    Example Alert Email in Primo VE
    • The logo is taken from your view's customization package.

    • The email displays a maximum of 25 items.

    Configuration Options

    The following table lists the changes to the Send Email and SMS Labels code table to support the display labels used for alert emails.

    Code Old Description New Description


    No change.


    New search results: {0}

    No change.


    Note that {0} items are included in this email.

    Note that {0} items are included in this email:


    There are new items in your saved search:

    No change.


    There are no new items in your saved search.

    No change.

    All new records can be found via the following link:

    No longer in use.

    (new) alert.title


    List of New Items for your Saved Search.

    (new) alert.custom.subtitle


    Note that {0} items are included in this email.

    (new) alert.unsubscrib


    Click here to unsubscribe.

    (new) alert.headingNew


    {0} new items found for the search query: {search query}


    To stop receiving emails with new records for this query, disable this alert by using the link below:

    No change.

    Customizing the RefWorks Link in the Primo User Area Menu

    When the RefWorks code is enabled in the Brief Record Display tab on the View Configuration page, the RefWorks link is enabled by default in the Primo User Area Menu.


    Primo User Area Menu - RefWorks Link

    You can perform the following configurations to customize it:

    • Update the code in the User Tile Labels code table to modify the link's display label.

    • Hide the link in the Primo User Area menu by setting the following class selectors in your custom CSS file: 

      .my-refworks-ctm {

         display: none;



      .my-refworks-separator-ctm {

         display: none;


    • Was this article helpful?