# Changelog #004
URL: /changelog/changelog-004

---
title: "Changelog #004"
sidebarTitle: "Changelog #004"
description: "Introducing npx create-steel-app for spinning up full Steel projects from any cookbook recipe, including pure Python projects."
llm: false
publishedAt: "2025-12-19"
---
import Image from 'next/image';

<Image src="/images/aDM_u6zJ-T_yBeJYgkvRh.png" alt="Changelog #004" width={800} height={400} />

Wooooooooooooo!! We got some new updates we’re pumped to share.

### ⭐ New

#### npx create-steel-app

The easiest way to get started with Steel just dropped!

Run `npx create-steel-app` to spin up a full project based on any of the recipes in the Steel cookbook repo.

**_Note:_** This works with pure Python projects too! As long as you have npm installed, you’ll be able quick spin up projects like Browser-use and Playwright-python on Steel!
<Image src="/images/jEdp6vzjOSMWbz2ePv3gO.png" alt="Image" width={500} height={500} />

#### Multitab Support

We shipped support for multiple tabs via the debug URL. This comes with support for embedding specific pages as well as a full browser view that displays all tabs with full interactivity. Essentially a fully embeddable browser UI can now exist right in your app. Light/dark mode supported ;)
<Image src="/images/8LAdzG-x1Li9Nf3Q6VB4P.png" alt="Image" width={500} height={500} />

[Documentation Link](https://docs.steel.dev/overview/sessions-api/embed-sessions/live-sessions)

#### Embed and view session recordings

We’ve published an endpoint (`v1/sessions/:id/events)` and docs around how you can simply embed and view session recordings inside your app.

Here’s a code snippet of how to create an embeddable session replay component:

```typescript Typescript -wcn -f main.ts
import rrwebPlayer from 'rrweb-player';
import 'rrweb-player/dist/style.css'; // important for styling of the player

// Once you've fetched the events
const events = await client.sessions.events(session.id)

// Create player element
const playerElement = document.getElementById('player-container');

// Initialize the player with events
const player = new rrwebPlayer({
  target: playerElement,
  props: {
    events: events,
    width: 800,  // Width of the player
    height: 600, // Height of the player
    autoPlay: true,
    skipInactive: true  // Skip periods of inactivity
  }
});
```

[Documentation Link](https://docs.steel.dev/overview/sessions-api/embed-sessions/past-sessions)

#### CUA x Steel

OpenAI’s Computer-use agent just dropped and it’s awesome! We’ve added a whole bunch of resources across the Steel universe to demo how the CUA agent can control a Steel browser!

*   [Cookbook: Simple CUA Loop (Python)](https://github.com/steel-dev/steel-cookbook/tree/main/examples/openai-computer-use-py)
*   [Cookbook: Simple CUA Loop (Node)](https://github.com/steel-dev/steel-cookbook/tree/main/examples/openai-computer-use-ts)
*   Coming soon to Surf.new 🌊

### 🔧 Bugfixes/Improvements

*   Python/Node SDKs are out of beta and official starting on version `0.0.1` 🥂 This update comes with all the afore mentioned capabilities incorporated into the SDKs.
*   Lots of improvements and fixes to the Surf UI
*   Added guide to docs on how to re-use contexts between sessions for carrying over things like authenticated state ([docs](https://docs.steel.dev/overview/sessions-api/reusing-auth-context))
*   Patches some source of memory leak errors causing slower session times

### 🏡 Housekeeping

*   Carti dropped 🗣️

### 💖 First-time contributors

Special thanks to [@PaperBoardOfficial](https://github.com/PaperBoardOfficial) for making some key PRs and issues on Surf 💖

As always, thanks for testing out the Steel beta. We really look forward to more of your feedback and continuing to build with this awesome, curious, and supportive community.
