Skip to main content

Storing data about a user

How the metadata updates work#

In the SuperTokens core, we update the metadata using the following steps:

  1. Load old metadata from DB or use an empty object if we have nothing stored.
  2. Overwrite all root-level properties with the fields of the update object.
  3. Remove all root-level properties with a null value.

This way, you can update parts of the metadata object without loading and merging the whole thing yourself.


Only root-level properties are merged into the stored object. Nested objects and all lower-level properties will be replaced.


  • The stored object has a theme set in preferences, emails enabled in notifications, and a single todo item, telling them to switch to text messages:
"preferences": { "theme": "dark" },
"notifications": { "email": true },
"todos": ["use-text-notifs"]
  • Now, we want to update this by changing the notification setting and removing the entire todo list:
"notifications": { "sms": true },
"todos": null
  • The result will be then:
"preferences": { "theme": "dark" },
"notifications": { "sms": true }

How to use#

import express from "express";
import { verifySession } from "supertokens-node/recipe/session/framework/express";
import UserMetadata from "supertokens-node/recipe/usermetadata";

let app = express();"/updateinfo", verifySession(), async (req, res) => {
const session = req.session;
const userId = session.getUserId();

await UserMetadata.updateUserMetadata(userId, { newKey: "data" });

res.json({ message: "successfully updated user metadata" });
Which frontend SDK do you use?
supertokens-web-js / mobile