Cookies

Work with cookies in HTTP requests and responses using Bun's built-in Cookie API.

Bun has a built-in API for working with cookies in HTTP requests and responses. The BunRequest object exposes a cookies property, a CookieMap for reading and modifying cookies. When using routes, Bun.serve() automatically tracks calls to request.cookies.set and applies them to the response.

Reading cookies#

Read cookies from incoming requests using the cookies property on the BunRequest object:

Bun.serve({
  routes: {
    "/profile": req => {
      // Access cookies from the request
      const userId = req.cookies.get("user_id");
      const theme = req.cookies.get("theme") || "light";

      return Response.json({
        userId,
        theme,
        message: "Profile page",
      });
    },
  },
});

Setting cookies#

To set cookies, use the set method on the CookieMap from the BunRequest object.

Bun.serve({
  routes: {
    "/login": req => {
      const cookies = req.cookies;

      // Set a cookie with various options
      cookies.set("user_id", "12345", {
        maxAge: 60 * 60 * 24 * 7, // 1 week
        httpOnly: true,
        secure: true,
        path: "/",
      });

      // Add a theme preference cookie
      cookies.set("theme", "dark");

      // Modified cookies from the request are automatically applied to the response
      return new Response("Login successful");
    },
  },
});

Deleting cookies#

To delete a cookie, use the delete method on the request.cookies (CookieMap) object:

Bun.serve({
  routes: {
    "/logout": req => {
      // Delete the user_id cookie
      req.cookies.delete("user_id", {
        path: "/",
      });

      return new Response("Logged out successfully");
    },
  },
});

Deleted cookies become a Set-Cookie header on the response with the Expires attribute set to a date in the past and an empty value.