diff --git a/css/entity_browser.pager.css b/css/entity_browser.pager.css
new file mode 100644
index 0000000..303a5f6
--- /dev/null
+++ b/css/entity_browser.pager.css
@@ -0,0 +1,38 @@
+.js-form-type-entity-browser-pager {
+    margin-top: 10px;
+    text-align: center;
+}
+
+.js-form-type-entity-browser-pager input,
+.js-form-type-entity-browser-pager input:hover,
+.js-form-type-entity-browser-pager input:focus {
+    background: 0;
+    border: 0;
+    border-radius: 0;
+    box-shadow: none;
+    color: #2a678c;
+    font-size: 1.08em;
+    font-weight: bold;
+    margin: 0;
+    padding: 0;
+}
+
+.js-form-type-entity-browser-pager span {
+    color: #8c8c8c;
+    font-size: 1.08em;
+    font-weight: bold;
+    margin: 0.8em;
+}
+
+.js-form-type-entity-browser-pager input[name="prev_page"]:disabled,
+.pager input[name="next_page"]:disabled {
+    visibility: hidden;
+}
+
+.js-form-type-entity-browser-pager input:focus:not(:disabled),
+.js-form-type-entity-browser-pager input:hover:not(:disabled) {
+    border-radius: 0;
+    color: #0074bd;
+    font-size: 1.08em;
+    font-weight: bold;
+}
diff --git a/entity_browser.libraries.yml b/entity_browser.libraries.yml
index acae8a0..6c5f396 100644
--- a/entity_browser.libraries.yml
+++ b/entity_browser.libraries.yml
@@ -6,6 +6,12 @@ common:
     - core/underscore
     - core/drupal.dialog.ajax
 
+pager:
+  version: VERSION
+  css:
+    theme:
+      css/entity_browser.pager.css: {}
+
 entity_browser:
   version: VERSION
   css:
diff --git a/src/Element/EntityBrowserPagerElement.php b/src/Element/EntityBrowserPagerElement.php
new file mode 100644
index 0000000..33d9c10
--- /dev/null
+++ b/src/Element/EntityBrowserPagerElement.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Drupal\entity_browser\Element;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Element\FormElement;
+use Drupal\Core\Render\Element;
+
+/**
+ * Provides an Entity Browser pager form element.
+ *
+ * Properties:
+ * - #entities_list: List of paginated entities displayed on current page.
+ * - #per_page: Items to be displayed per page.
+ *
+ * @FormElement("entity_browser_pager")
+ */
+class EntityBrowserPagerElement extends FormElement {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getInfo() {
+    $class = get_class($this);
+    return [
+      '#process' => [[$class, 'processEntityBrowserPager']],
+      '#pre_render' => [[$class, 'preRenderEntityBrowserPager']],
+      '#theme_wrappers' => ['form_element'],
+      '#attached' => [
+        'library' => ['entity_browser/pager'],
+      ],
+    ];
+  }
+
+  /**
+   * Process Entity browser pager element.
+   */
+  public static function processEntityBrowserPager(&$element, FormStateInterface $form_state, &$complete_form) {
+    $page = $form_state->get('page') ?: 1;
+    $element['previous'] = [
+      '#type' => 'submit',
+      '#submit' => [[self::class, 'submitPager']],
+      '#value' => t('‹ Previous'),
+      '#name' => 'prev_page',
+      '#disabled' => $page == 1,
+      '#attributes' => ['class' => ['prev']],
+    ];
+    $element['current'] = [
+      '#type' => 'html_tag',
+      '#tag' => 'span',
+      '#value' => t('Page @page', ['@page' => $page]),
+      '#attributes' => ['class' => ['current']],
+    ];
+    $element['next'] = [
+      '#type' => 'submit',
+      '#submit' => [[self::class, 'submitPager']],
+      '#value' => t('Next ›'),
+      '#name' => 'next_page',
+      '#disabled' => count($element['#entities_list']) < $element['#per_page'],
+      '#attributes' => ['class' => ['next']],
+    ];
+
+    return $element;
+  }
+
+  /**
+   * Prepares a #type 'entity_browser_pager' render element.
+   *
+   * @param array $element
+   *   An associative array containing the properties of the element.
+   *   Properties used: #current_page, #entities_list, #per_page.
+   *
+   * @return array
+   *   The $element with prepared variables.
+   */
+  public static function preRenderEntityBrowserPager($element) {
+    Element::setAttributes($element, [
+      'entities_list',
+      'per_page',
+    ]);
+
+    return $element;
+  }
+
+  /**
+   * Submit handler for next and previous buttons.
+   *
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   Form state.
+   */
+  public static function submitPager($form, FormStateInterface $form_state) {
+    $page = $form_state->get('page') ?: 1;
+
+    $triggering_element = $form_state->getTriggeringElement();
+    if ($triggering_element['#name'] == 'prev_page') {
+      $page--;
+    }
+    elseif ($triggering_element['#name'] == 'next_page') {
+      $page++;
+    }
+
+    $form_state->set('page', $page);
+    $form_state->setRebuild();
+  }
+
+  /**
+   * Paginate entities list.
+   *
+   * @param array $entities_list
+   *   Entities list.
+   * @param int $page
+   *   Current page.
+   * @param int $per_page
+   *   Number of items displayed per page.
+   *
+   * @return array
+   *   Prepared array of entities to display on current page.
+   */
+  public function paginateEntities($entities_list, $page, $per_page) {
+    return array_slice($entities_list, ($page - 1) * $per_page, $per_page);
+  }
+
+}
diff --git a/tests/modules/entity_browser_test/config/install/entity_browser.browser.pager.yml b/tests/modules/entity_browser_test/config/install/entity_browser.browser.pager.yml
new file mode 100644
index 0000000..912552d
--- /dev/null
+++ b/tests/modules/entity_browser_test/config/install/entity_browser.browser.pager.yml
@@ -0,0 +1,26 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - entity_browser_test
+name: pager
+label: pager
+display: iframe
+display_configuration:
+  width: '650'
+  height: '500'
+  link_text: 'Select entities'
+  auto_open: false
+selection_display: no_display
+selection_display_configuration: {  }
+widget_selector: tabs
+widget_selector_configuration: {  }
+widgets:
+  7e334547-c1e4-4397-8cc0-07e4e5c277ac:
+    settings:
+      items_per_page: 2
+      submit_text: 'Select entities'
+    uuid: 7e334547-c1e4-4397-8cc0-07e4e5c277ac
+    weight: 1
+    label: pager_test
+    id: pager_test
diff --git a/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml b/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml
index 12635dc..a50c8ef 100644
--- a/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml
+++ b/tests/modules/entity_browser_test/config/schema/entity_browser_test.schema.yml
@@ -16,3 +16,14 @@ entity_browser.browser.widget.multiple_submit_test_widget:
     submit_text:
       type: string
       label: 'Submit button text'
+
+entity_browser.browser.widget.pager_test:
+  type: mapping
+  label: 'Pager widget configuration'
+  mapping:
+    submit_text:
+      type: string
+      label: 'Submit button text'
+    items_per_page:
+      type: integer
+      label: 'Items per page'
diff --git a/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/PagerTestWidget.php b/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/PagerTestWidget.php
new file mode 100644
index 0000000..7693077
--- /dev/null
+++ b/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/PagerTestWidget.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Drupal\entity_browser_test\Plugin\EntityBrowser\Widget;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\entity_browser\WidgetBase;
+
+/**
+ * Pager test widget implementation for test purposes.
+ *
+ * @EntityBrowserWidget(
+ *   id = "pager_test",
+ *   label = @Translation("Pager test widget"),
+ *   description = @Translation("Pager test widget existing for testing purposes."),
+ *   auto_select = FALSE
+ * )
+ */
+class PagerTestWidget extends WidgetBase {
+
+  /**
+   * Entity to be returned.
+   *
+   * @var \Drupal\Core\Entity\EntityInterface
+   */
+  public $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['items_per_page' => 2] + parent::defaultConfiguration();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getForm(array &$original_form, FormStateInterface $form_state, array $additional_widget_parameters) {
+    $form = parent::getForm($original_form, $form_state, $additional_widget_parameters);
+
+    $form['pager_eb'] = [
+      '#type' => 'entity_browser_pager',
+      '#per_page' => $this->configuration['items_per_page'],
+      '#entities_list' => '',
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array &$element, array &$form, FormStateInterface $form_state) {
+    $this->selectEntities([$this->entity], $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareEntities(array $form, FormStateInterface $form_state) {
+    return $form_state->getValue('dummy_entities', []);
+  }
+
+}
diff --git a/tests/src/FunctionalJavascript/PagerElementFormTest.php b/tests/src/FunctionalJavascript/PagerElementFormTest.php
new file mode 100644
index 0000000..55725e2
--- /dev/null
+++ b/tests/src/FunctionalJavascript/PagerElementFormTest.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Drupal\Tests\entity_browser\FunctionalJavascript;
+
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+
+/**
+ * Tests entity browser pager form element.
+ *
+ * @group entity_browser
+ */
+class PagerElementFormTest extends EntityBrowserJavascriptTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'entity_browser_test',
+    'node',
+    'field_ui',
+    'views_ui',
+    'system',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->drupalCreateContentType(['type' => 'foo', 'name' => 'Foo']);
+
+    FieldStorageConfig::create([
+      'field_name' => 'field_reference_pager',
+      'type' => 'entity_reference',
+      'entity_type' => 'node',
+      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
+      'settings' => [
+        'target_type' => 'node',
+      ],
+    ])->save();
+
+
+    FieldConfig::create([
+      'field_name' => 'field_reference_pager',
+      'entity_type' => 'node',
+      'bundle' => 'foo',
+      'label' => 'Reference',
+      'settings' => [],
+    ])->save();
+
+    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
+    $form_display = $this->container->get('entity_type.manager')
+      ->getStorage('entity_form_display')
+      ->load('node.foo.default');
+
+    $form_display->setComponent('field_reference_pager', [
+      'type' => 'entity_browser_entity_reference',
+      'settings' => [
+        'entity_browser' => 'pager',
+        'field_widget_display' => 'label',
+        'open' => TRUE,
+      ],
+    ])->save();
+
+    $account = $this->drupalCreateUser([
+      'access pager entity browser pages',
+      'create foo content',
+      'access content',
+    ]);
+    $this->drupalLogin($account);
+  }
+
+  /**
+   * Test entity browser pager form element.
+   */
+  public function testPagerElement() {
+    $this->drupalGet('node/add/foo');
+    $this->getSession()->getPage()->clickLink('Select entities');
+    $this->getSession()->switchToIFrame('entity_browser_iframe_pager');
+    $this->assertSession()->buttonExists('‹ Previous');
+    $this->assertSession()->pageTextContains('Page 1');
+    $this->assertSession()->buttonExists('Next ›');
+  }
+
+}
