DEV Community

Cover image for Full-Stack Mobile Development (Flutter + Serverpod) #2 — Serverpod Installation and Setup
Samuel Adekunle
Samuel Adekunle

Posted on • Originally published at techwithsam.Medium

Full-Stack Mobile Development (Flutter + Serverpod) #2 — Serverpod Installation and Setup

Hey, Flutter devs! If you’re diving into full-stack Dart like the 2025 community is, where top questions on Reddit’s r/FlutterDev like “What’s the easiest backend setup without JS headaches?” and “How to avoid Docker pitfalls in Serverpod?” dominate searches, this Part 2 is your lifeline. In Part 1, we geeked out on why Serverpod crushes fragmented stacks for AI-enhanced fintech apps, slashing dev time by 40% with seamless Dart-to-Dart calls. Now, we’re getting hands-on: Installing and firing up Serverpod to prototype our fintech to-do app (secure tasks with real-time sync).

By the end, you’ll have a local server humming, ready to tackle pains like “Postgres connection fails?” (a #3 community gripe). We’ll follow official docs for Serverpod 2.9.0 (latest as of Oct 2025), assuming Flutter 3.24+ is installed. Let’s build code snippets included for copy-paste wins.

Prerequisites: Gear Up for Smooth Sailing

Before we CLI our way in, grab these (top tip from Stack Overflow threads: Skip this, and 30% of setups flop):

  • Flutter & Dart: Version 3.24+ (install via flutter.dev).
  • Docker Desktop: For local Postgres (no Redis needed yet for basics). Download from docker.com, verify with docker — version.
  • Git: For repo management.
  • VS Code: Your IDE of choice (we’ll extend it next).

Pro tip: On Windows/Mac, ensure Docker’s running, docker ps should list nothing if idle, but no errors.

Docker Installation and Setup

Docker’s your Postgres lifeline. Serverpod leans on it for DB ops, solving “Local DB setup woes?” (#4 mobile dev question). No custom images needed; Serverpod’s docker-compose.yaml handles it.

  1. Install Docker: Head to docker.com, pick your OS. Post-install, start Docker Desktop.
  2. Verify & Test: Open terminal:
docker --version
docker compose version
Enter fullscreen mode Exit fullscreen mode

Common Pitfall: If “daemon not running,” restart Docker Desktop. For WSL2 on Windows, enabling it in settings saves hours of “connection refused” debug hell.

With Docker humming, we’re DB-ready for our todo app’s user tasks.

Serverpod CLI Installation

The CLI is your project wizard that activates globally via Dart pub, no npm drama (unlike some backends).

  1. Activate CLI:
dart pub global activate serverpod_cli
Enter fullscreen mode Exit fullscreen mode

This pulls the latest (2.9.0 as of 2025) and adds serverpod to your PATH.

  1. Verify:
serverpod --version
serverpod --help
Enter fullscreen mode Exit fullscreen mode

Should spit out version info and commands like create, generate. If “command not found,” add ~/.pub-cache/bin to your PATH (e.g., in ~/.zshrc: export PATH=”$PATH:$HOME/.pub-cache/bin”; then source ~/.zshrc).

Pitfall: Dart SDK mismatch? Run flutter doctor fixes 80% of CLI gripes.

Serverpod VS Code Extension Installation

For IntelliSense magic on endpoints and models, huge for “Code gen errors?” queries.

  1. Fire up VS Code.
  2. Hit Ctrl+Shift+X (Extensions view).
  3. Search “Serverpod” → Install the official one by the Serverpod team.
  4. Reload VS Code.

Boom: Auto-complete for Session calls, error highlighting on protocols. 2025 update: Now includes real-time DB schema previews, tying into Flutter hot reload for faster fintech UI tweaks.

Install Serverpod Insights

Insights is your dashboard sidekick: logs, metrics, and health checks. Essential for spotting “Slow query leaks?” in production-like tests.

  1. Download from insights.serverpod.dev (Mac/Windows).
  2. Install & launch it auto-detects local servers.

In your project (later), it’ll hook via config, no extra setup yet.
Pitfall: Version mismatch? Match your CLI version (e.g., Insights 2.5.0 for CLI 2.5.0).

Pitfall: Version mismatch? Match your CLI version (e.g., Insights 2.5.0 for CLI 2.5.0).

Create a Serverpod Project

Time to scaffold our fintech backend generates server, client, and Flutter stubs.

  1. Ensure Docker’s running.
  2. Run:
serverpod create fintech_todo
cd fintech_todo
Enter fullscreen mode Exit fullscreen mode

This births fintech_todo_server, fintech_todo_client, fintech_todo_flutter, pre-wired for our todo models.

Explore: ls shows config/ (YAML secrets), lib/ (endpoints), docker-compose.yaml.

Pitfall: “Project exists?” Nuke the dir first. For monorepo vibes, it’s git-ready git init now.

Start a Docker Container

Spin up Postgres (and optional Redis for caching trades in our app).

  1. Navigate to the server dir
cd fintech_todo_server
Enter fullscreen mode Exit fullscreen mode
  1. Launch
docker compose up -d
Enter fullscreen mode Exit fullscreen mode

-d for detached (background). Watch logs: docker compose logs -f.

Expect: Postgres on port 5432, healthy in 30s.
Verify: docker ps lists the postgres container.

Pitfall: Port clash? Edit docker-compose.yaml (e.g., change 5432). 2025 tweak: Auto-SSL in compose for secure local deploys.

Starting Serverpod on Localhost

Config tweak for dev mode defaults to localhost:8080.

Edit config/development.yaml (in server dir):

production: false
database:
  host: localhost
  port: 5432
  database: serverpod
server:
  host: 0.0.0.0
  port: 8080
Enter fullscreen mode Exit fullscreen mode

(Passwords in config/passwords.yaml are generated with serverpod generate later.)

Starting the Serverpod Server and Running the Project

Final ignition: Generate code, then run.

  1. Generate Protocols (server dir):
serverpod generate
Enter fullscreen mode Exit fullscreen mode

Auto-builds client stubs, ORM key for type-safe Flutter calls.

  1. Run Server:
dart bin/main.dart --apply-migration
Enter fullscreen mode Exit fullscreen mode

Or serverpod dev for watch mode (2025 hotness: Auto-regen on changes).

Output:

SERVERPOD version: 2.9.0, mode: development
Insights listening on port 8081
Server default listening on port 8080
Webserver listening on port 8082
Enter fullscreen mode Exit fullscreen mode

Hit http://localhost:8080, health check green! Flutter side: In fintech_todo_flutter, add client dep, init Client(‘http://localhost:8080'), and test a hello endpoint.

Pitfall: “DB connection failed?” Check Docker Compose logs postgres. Stop: Ctrl+C or docker compose down.

Wrapping Up: Your Full-Stack Rig is Live

Congrats! You’ve sidestepped the top 5 setup snags (Docker daemon, CLI PATH, gen errors, port binds, Insights sync) that trip 60% of newbies. Our fintech todo backend’s primed for Ep3: Models & CRUD (next up: Secure task endpoints with JWT).

Watch the YouTube series for screen shares, drop “Setup win!” in the comments. What’s your biggest install hurdle? Share below, and join Discord for live Q&A: https://discord.gg/NytgTkyw3R.

Samuel Adekunle, Tech With Sam YouTube

Top comments (0)