running below JavaScript code in set version onsuccess callback: db.createObjectStore(objectStoreName, {keyPath: null}); will trigger IDB_SYNTAX_ERR exception other than successfully create an object store with out-of-line keys. Refer to http://www.w3.org/TR/2011/WD-IndexedDB-20111206/#widl-IDBDatabase-createObjectStore-IDBObjectStore-DOMString-name-IDBObjectStoreParameters-optionalParameters in WebCore::IDBDatabase::createObjectStore function: ... Vector<String> keyPathArray; if (options.get("keyPath", keyPathArray)) keyPath = IDBKeyPath(keyPathArray); ... The options.get() will successfully return true with an empty vector other than return false. in WebCore::JSDictionary::tryGetPropertyAndResult function: case PropertyFound: { Result result; convertValue(m_exec, value, result); ... convertValue will return normally when the value is undefined or null, and improperly set the empty result to context. Chromium with V8 binding doesn't have this issue.
Close this as this is fixed in latest Safari on macOS Monterey 12.3 beta. Tested with following code and no error: var request = indexedDB.open('test'); request.onupgradeneeded = function(event) { event.target.result.createObjectStore('os', { keyPath: null }); }