Skip to main content
Flash is now part of the runpod Python package, so there’s one SDK, one package to install, and one CLI. This guide shows where each part of Flash lives in the Runpod SDK and walks you through moving an existing Flash project over.
Your existing Flash code keeps working. The runpod-flash package is still available, from runpod_flash import Endpoint continues to work, and endpoints you already deployed with Flash keep running. You don’t need to migrate today. New features land only in the runpod package.

What changed at a glance

  • One package. Install runpod instead of runpod-flash. The app SDK, the endpoint client, the Serverless worker SDK, and the API wrapper all ship together.
  • One CLI. Flash commands now run as rp flash COMMAND. Account commands such as rp login live at the root of the same CLI. The CLI is also available as runpod, so runpod flash deploy works too.
  • One login. rp login saves credentials to ~/.runpod/config.toml, which the whole SDK reads. RUNPOD_API_KEY is the only environment variable for authentication.
  • An app-based API. Instead of decorating functions with @Endpoint, you create a runpod.App and attach resources to it with @app.queue, @app.api, or the new @app.task.
  • A separate runtime. The code that runs on workers now ships in its own package, runpod-sdk-runtime, so it can be released independently of the SDK. See Runtime.

What stays the same

  • runpod.Endpoint("ENDPOINT_ID") and its run, run_sync, status, and output methods work exactly as before.
  • runpod.serverless.start and the rest of the Serverless worker SDK are unchanged.
  • API wrapper functions such as runpod.create_pod and runpod.get_pods still work.
  • Your credentials file and RUNPOD_API_KEY carry over, so you don’t need to create a new API key.

Do you need to migrate?

You can keep using Flash, or you can move to the Runpod SDK when you’re ready. Migrate if you want features that are only in the Runpod SDK:
  • @app.task for running one ephemeral Pod per call, such as training or fine-tuning jobs.
  • runpod.Secret for reading environment values from Runpod secrets.
  • runpod.Model for platform-cached model weights.
  • .spawn() and .stream() for background jobs and streamed results.
  • rp flash logs for following worker logs from your terminal.
Stay on Flash for now if your project relies on a pattern that doesn’t work the same way in the Runpod SDK yet. See Known differences before you start.

Requirements

Step 1: Install the SDK and log in

In your project’s virtual environment, remove runpod-flash and install runpod:
Then log in:
If you already logged in with flash login, your saved credentials still work and this step updates the same ~/.runpod/config.toml file.

Step 2: Update your CLI commands

Replace flash commands in your scripts, Makefiles, and CI with their rp flash equivalents: See the CLI reference for all commands and flags.

Step 3: Update your code

The Runpod SDK groups your resources into an app. Work through the sections below in order.

Imports and the app

Replace the runpod_flash import with runpod and create an app. The app name groups your resources when you deploy.

Queue-based endpoints

Replace the @Endpoint decorator with @app.queue:
Run the new version with rp flash dev main.py.

Load-balanced endpoints

This is the biggest change. In Flash, you created an Endpoint instance and attached route functions to it. In the Runpod SDK, you write a class and mark it with @app.api. Methods marked with @runpod.get or @runpod.post become routes, and a method marked with @runpod.init runs once when each worker starts.
Workers keep state on the class instance between requests. In a dev session, call routes through the class, for example MyApi.post("/compute", {"x": 1}).

Calling functions

Hardware

The GpuType and GpuGroup names are the same, and you can also use shorter strings:

Storage

Queue-based and load-balanced resources support one volume, mounted at /runpod-volume. Tasks support one network volume and one global volume at different paths. Global volumes require GPU compute.

Other settings

Environment variables and secrets

You can still pass plain values in env. To keep tokens out of your code, store them as Runpod secrets and reference them with runpod.Secret:

Existing endpoints and custom images

Step 4: Check behavior that changed

These differences don’t raise errors, so check them before you deploy:
  • Default worker range. Resources now default to workers=(0, 3) instead of (0, 1), so a busy endpoint can scale to three workers. Set workers explicitly if you need a different limit.
  • No local server in dev sessions. flash dev ran a local server on localhost:8888 with an API explorer at /docs. rp flash dev main.py runs your @runpod.local_entrypoint function instead and streams worker logs to your terminal. Update any local testing that sent curl requests to localhost:8888.
  • Custom images work differently. You no longer need an image that implements a Serverless handler. The SDK runs your function on any image that has Python 3.
  • One volume per endpoint. Lists of volumes across datacenters aren’t supported.
  • Volumes keep billing. Undeploying an app doesn’t delete the network volumes it created. Delete them separately when you no longer need them.

Step 5: Test, then deploy

  1. Run your migrated app once in a dev session and check the output:
  2. Fix any errors, then deploy:
  3. Confirm your endpoints on the Serverless page in the console.
  4. When the new deployment works, remove the endpoints you deployed with Flash:

Known differences

A few Flash patterns don’t work the same way in the Runpod SDK yet. If your project uses one of them, test it carefully or stay on Flash until it’s supported:
  • Projects split across multiple local files.
  • Classes used as remote resources, other than @app.api classes.
  • Path and query parameters on HTTP routes.
  • Resources that reference an existing template or endpoint with template= or id=.

Flash repository deprecation timeline

The standalone runpod/flash repository is deprecated and will be archived. Archiving makes the repository read-only. It doesn’t remove the runpod-flash package from PyPI, and it doesn’t affect endpoints you’ve already deployed. The deprecation happens in two stages:
  1. Deprecation. Flash is part of the runpod package, and the runpod/flash repository shows a deprecation notice. The runpod-flash package is frozen: it keeps working but gets no new features.
  2. Archive. The runpod/flash repository is archived and becomes read-only. The archive date is announced in the runpod/flash repository.
The Flash pages in these docs stay online for reference, with a notice pointing to the Runpod SDK docs.

Next steps

Last modified on October 12, 2026