name: serverpod-upgrading description: Upgrade Serverpod — minor/patch updates, major upgrade to v3, pubspec updates across all packages. Use when upgrading Serverpod versions or updating dependencies.
Serverpod Upgrading
Minor/patch upgrades
Use the same pinned Serverpod version across all packages.
- Update CLI:
dart pub global activate serverpod_cli - Update pubspecs in every package:
- Server:
serverpod,serverpod_test(dev), module server packages - Client:
serverpod_client, module client packages - Flutter:
serverpod_flutter, module Flutter packages
- Server:
- Fetch and regenerate:
dart pub upgrade+serverpod generatefrom server directory - Migrations (if needed):
serverpod create-migration+dart run bin/main.dart --apply-migrations
Major upgrade: to Serverpod 3.0
Requirements: Dart 3.8.0+, Flutter 3.32.0+.
Steps
- Update CLI:
dart pub global activate serverpod_cli - Update all pubspecs to
3.0.0+ and SDK constraint:sdk: '>=3.8.0 <4.0.0' - Update Dockerfile:
FROM dart:3.8 AS build dart pub upgrade+serverpod generate- Create and apply migration (session log user ID changed to String)
Breaking changes
Web server (Relic):
handleCall:HttpRequest→Request,Future<bool>→FutureOr<Result>, returnResponse.ok(...)instead of writing to responserequest.remoteIpAddress→request.remoteInfo;request.headers.value('name')→request.headers['name']- Widget renames:
AbstractWidget→WebWidget,Widget→TemplateWidget,WidgetList→ListWidget,WidgetJson→JsonWidget,WidgetRedirect→RedirectWidget RouteStaticDirectory(...)→StaticRoute.directory(Directory(...))withcacheControlFactory
Session.request: Optional request property on Session (null for non-HTTP sessions).
Enum serialization: Default now byName. Add serialized: byIndex in YAML to keep old behavior.
Models: SerializableEntity → SerializableModel. YAML: parent=table → relation(parent=table); database → scope=serverOnly; api → !persist.
Auth: session.authenticated is now synchronous. AuthenticationInfo.authId non-nullable, userIdentifier is String. Client: authenticationKeyManager → authKeyProvider. Custom handlers receive unwrapped Bearer token.
Deprecated: Legacy streaming endpoints; use streaming methods.
Checklist
- CLI, pubspecs (versions + SDK), Dockerfile
- Route classes, widgets, static routes
- Enum serialization strategy
SerializableEntity→SerializableModel, YAML keywords- Auth usage updates
- Migration + tests
Mini to full Serverpod
From server directory: serverpod create . — adds full config and structure. Back up first. Then add DB, create-migration, apply.