Skip to content

Device Storage

DeviceStorage provides local persistent storage on the device. Data is stored only on the current device and is not synced across devices. Accessed via Telegram.WebApp.DeviceStorage. Bot API 8.0+

Limits

ItemLimit
Maximum storage capacity5 MB
Maximum key length128 characters
Key charactersA-Z, a-z, 0-9, _, -

Methods

setItem

javascript
Telegram.WebApp.DeviceStorage.setItem(key, value, callback)

Stores a key-value pair in device storage.

ParameterTypeRequiredDescription
keyStringYesKey name, 1-128 characters
valueStringYesValue
callbackFunctionNoCallback with (error, success) parameters
javascript
Telegram.WebApp.DeviceStorage.setItem('cache_data', JSON.stringify({
  timestamp: Date.now(),
  data: largeDataSet
}), (error, success) => {
  if (error) {
    console.error('Storage failed:', error);
  }
});

getItem

javascript
Telegram.WebApp.DeviceStorage.getItem(key, callback)

Reads the value of a specified key from device storage.

ParameterTypeRequiredDescription
keyStringYesKey name
callbackFunctionYesCallback with (error, value) parameters

removeItem

javascript
Telegram.WebApp.DeviceStorage.removeItem(key, callback)

Removes a specified key from device storage.

ParameterTypeRequiredDescription
keyStringYesKey name
callbackFunctionNoCallback with (error, success) parameters

clear

javascript
Telegram.WebApp.DeviceStorage.clear(callback)

Clears all data in device storage.

ParameterTypeRequiredDescription
callbackFunctionNoCallback with (error, success) parameters

Comparison with Cloud Storage

FeatureCloudStorageDeviceStorage
Data syncCross-device syncLocal only
Capacity1024 keys × 4KB values5 MB total
Use casesUser preferences, small dataCache, large local data
Min versionBot API 8.0+

Usage Example

javascript
const deviceStorage = Telegram.WebApp.DeviceStorage;

// Cache API response
function cacheResponse(endpoint, data) {
  const cacheEntry = JSON.stringify({
    data: data,
    cachedAt: Date.now()
  });
  deviceStorage.setItem('cache_' + endpoint, cacheEntry);
}

// Read cache
function getCachedResponse(endpoint, maxAge, callback) {
  deviceStorage.getItem('cache_' + endpoint, (error, value) => {
    if (error || !value) {
      callback(null);
      return;
    }
    const entry = JSON.parse(value);
    if (Date.now() - entry.cachedAt > maxAge) {
      callback(null); // Cache expired
    } else {
      callback(entry.data);
    }
  });
}