The upperBound() method of the IDBKeyRange interface creates a new upper-bound key range. By default, it includes the upper endpoint value and is closed.

Note: This feature is available in Web Workers


var myIDBKeyRange = IDBKeyRange.upperBound(upper[, open=false])


  • bound specifies the upper bound of the new key range.
  • open indicates whether the upper bound excludes the endpoint value. The default is false. Optional

Return value

IDBKeyRange: The newly created key range.


This method may raise a DOMException of the following type:

Exception Description

The value parameter passed was not a valid key.


The following example illustrates how you'd use an upper bound key range. Here we declare keyRangeValue = IDBKeyRange.upperBound("F"); â€” a range that includes the value "F" and everything before it. We open a transaction (using IDBTransaction) and an object store, and open a Cursor with IDBObjectStore.openCursor, declaring keyRangeValue as its optional key range value. 

If we used IDBKeyRange.upperBound("F", true);, then the range excludes "F"; and instead only includes the values before it.

Note: For a more complete example allowing you to experiment with key range, have a look at our IDBKeyRange-example repo (view the example live too.)

function displayData() {
  var keyRangeValue = IDBKeyRange.upperBound("F");

  var transaction = db.transaction(['fThings'], 'readonly');
  var objectStore = transaction.objectStore('fThings');

  objectStore.openCursor(keyRangeValue).onsuccess = function(event) {
    var cursor =;
      if(cursor) {
        var listItem = document.createElement('li');
        listItem.innerHTML = '<strong>' + cursor.value.fThing + '</strong>, ' + cursor.value.fRating;

      } else {
        console.log('Entries all displayed.');


Indexed Database API 3.0 (Indexed DB 3.0)
# ref-for-dom-idbkeyrange-upperbound①

Browser compatibility

BCD tables only load in the browser

See also