Store data in the browser using localStorage and sessionStorage for persistent client-side data.
The Web Storage API provides two mechanisms for storing key-value pairs in the browser: localStorage and sessionStorage.
localStorage:
sessionStorage:
Shared characteristics:
// localStorage persists
localStorage.setItem('theme', 'dark');
// Close browser, reopen — value is still there!
// sessionStorage is temporary
sessionStorage.setItem('tempData', 'gone when tab closes');Both localStorage and sessionStorage share the same API.
Setting values:
localStorage.setItem('username', 'Alice');
localStorage.setItem('score', '100');Getting values:
const name = localStorage.getItem('username'); // 'Alice'
const missing = localStorage.getItem('nonexistent'); // nullRemoving values:
localStorage.removeItem('username');Clearing everything:
localStorage.clear(); // removes ALL itemsOther properties:
// Number of stored items
console.log(localStorage.length);
// Get key by index
console.log(localStorage.key(0)); // first key nameImportant: All values are stored as strings. If you store a number, it comes back as a string:
localStorage.setItem('count', 42);
const count = localStorage.getItem('count');
console.log(typeof count); // 'string'
console.log(count); // '42' (not 42)Since Storage only accepts strings, you must serialize objects and arrays with JSON.stringify() before storing, and parse them back with JSON.parse() when retrieving.
// Storing an object
const user = { name: 'Alice', age: 30, scores: [95, 87, 92] };
localStorage.setItem('user', JSON.stringify(user));
// Retrieving and parsing
const stored = localStorage.getItem('user');
const parsed = JSON.parse(stored);
console.log(parsed.name); // 'Alice'
console.log(parsed.scores); // [95, 87, 92]Always handle null — getItem returns null if the key does not exist, and JSON.parse(null) returns null (it does not throw):
const data = localStorage.getItem('maybeExists');
const result = data ? JSON.parse(data) : defaultValue;Convenience wrapper functions:
function saveJSON(key, value) {
localStorage.setItem(key, JSON.stringify(value));
}
function loadJSON(key, fallback = null) {
const data = localStorage.getItem(key);
return data ? JSON.parse(data) : fallback;
}
// Usage
saveJSON('settings', { theme: 'dark', lang: 'en' });
const settings = loadJSON('settings', { theme: 'light' });Good use cases for Web Storage:
Limitations:
Alternatives for more advanced needs:
Security note: Never store sensitive data (passwords, tokens, personal information) in localStorage. It is accessible to any JavaScript on the page and vulnerable to XSS attacks.
<div id="output"></div>
<script>
// Store simple values
localStorage.setItem('appName', 'Kodojo');
localStorage.setItem('version', '1.0');
// Store complex data with JSON
const preferences = {
theme: 'dark',
fontSize: 16,
notifications: true
};
localStorage.setItem('prefs', JSON.stringify(preferences));
// Retrieve and parse
const appName = localStorage.getItem('appName');
const prefs = JSON.parse(localStorage.getItem('prefs'));
// Handle missing data with fallback
const language = localStorage.getItem('lang') || 'en';
const output = document.getElementById('output');
output.innerHTML = `
<p>App: ${appName} v${localStorage.getItem('version')}</p>
<p>Theme: ${prefs.theme}</p>
<p>Font size: ${prefs.fontSize}px</p>
<p>Language: ${language} (default)</p>
<p>Items stored: ${localStorage.length}</p>
`;
// Clean up demo data
localStorage.removeItem('appName');
localStorage.removeItem('version');
localStorage.removeItem('prefs');
</script>What happens when you store an object directly in localStorage?