The problem is with chrome.storage.sync.set({key: testPrefs}
Your data is stored as
{ key: "{"val":10}" } So, your code chrome.storage.sync.get('myKey') return undefined\empty object.
Solution I
Use string "key" as your key
chrome.storage.sync.get("key", function (obj) { console.log(obj); }); or
Solution II
Set data through "myKey" Key.
chrome.storage.sync.set({"myKey": testPrefs}) P.S : Don't forget chrome.storage.sync is permanent storage API, Use chrome.storage.sync.clear before any further testing to see changes
References
EDIT 1
Use this code to set variable value in Chrome.storage
function storeUserPrefs() { var key = "myKey", testPrefs = JSON.stringify({ 'val': 10 }); var jsonfile = {}; jsonfile[key] = testPrefs; chrome.storage.sync.set(jsonfile, function () { console.log('Saved', key, testPrefs); }); } It generates following Output
Object{ myKey: "{"val":10}" }