IndexedDB — JavaScript-интерфейс прикладного программирования (API) клиентского хранилища большого объема структурированных данных, в том числе файлы/blobs. Другими словами, это NoSQL-хранилище данных в формате JSON внутри браузера. Стандарт разработан W3C и внедрен в браузерах с 2011 года.
Поддержка IndexedDB была добавлена в Firefox версии 4, Google Chrome версии 11, и Internet Explorer версии 10. Safari в конечном счете добавил поддержку в версии 8.
База данных Web SQL была предшествующим API, разработанным Apple. Но Mozilla выступила против его стандартизации, потому что не было предложено альтернатив движку SQLite. Таким образом, он был объявлен устаревшим в пользу IndexedDB.
В базе данных сайты IndexedDB могут постоянно хранить и читать данные клиентского хранилища. Каждый домен имеет свою собственную область хранения, доступ к данным, хранящимся в другом домене, не предоставляется в соответствии с принципом одинакового источника (англ. Same Origin Policy). Размер доступной памяти зависит от браузера, обычно существует фиксированный предел, который не может быть превышен, и мягкий предел, из которого пользователь должен сначала согласиться на хранение. В принципе, хранилище является постоянным, но браузеры предлагают своим пользователям возможность удаления сохраненных данных.
База данных является объектной базой данных, обычно хранятся объекты JavaScript, с одной из записей в качестве ключа, с помощью которого можно получить данные. Индексы также могут быть созданы для других записей хранимых объектов, чтобы обеспечить эффективный поиск.
Доступ к базе данных асинхронный: клиент делает запрос и регистрирует функции обратного вызова. Как только станет известен результат запроса, он будет проинформирован об этом и, в случае успеха будут предоставлены запрошенные данные, в случае ошибки - причина. При доступе транзакции используются для обеспечения согласованности данных, даже если, например, две одновременно открытые вкладки имеют независимый доступ к базе данных.
Точная реализация базы данных не фиксирована, однако она представляет собой B-дерево. Все современные браузеры поддерживают стандарт, так как он постоянно развивается, не всегда в текущей версии. В браузерах Microsoft интерфейс реализован лишь частично. Старых версиях браузеров API все еще частично снабжен префиксом разработчика.
Web Storage — гораздо более простая альтернатива хранения данных, но с меньшим числом возможностей, предназначенная для небольшого объема данных.
Альтернативным стандартом, представляющим собой базу данных, к которой можно обращаться посредством SQL-запросов, был Web SQL. Однако этот стандарт был реализован только в нескольких браузерах, поэтому его разработка была прекращена в пользу IndexedDB.
В старых браузерах IndexedDB можно моделировать с помощью полифилов (англ. Polyfill).