Go + Flutter: Build a Real-Time gRPC App
Learn Go from the ground up, then build Field Notes, a team task and project app, from an empty repository to a secure, deployable Go gRPC service consumed by a Flutter client. This is designed as a follow-along book: each chapter tells you what to create, gives commands and code, explains what you should see, and ends with exercises and a checkpoint.
Course at a glance
- Audience: Beginners to Go who can use a terminal and edit files. Basic programming helps but is not required. Flutter/Dart experience is helpful; Flutter concepts are introduced as needed.
- Format: 18 guided chapters, each designed for 1–3 hours, plus a capstone and optional extensions.
- Outcome: Learners understand Go's core language and tooling, then build a Flutter app that signs in, manages projects and tasks, reconnects safely, and receives live updates from a Go service backed by PostgreSQL.
- Teaching pattern: Learn a concept, implement one vertical slice, run it from Flutter, then complete a small challenge.
Learning outcomes
By the end, learners can design versionable Protocol Buffer APIs; generate Go and Dart stubs; implement unary and streaming RPCs; translate domain errors to gRPC status codes; use deadlines, cancellation, metadata, TLS, and authentication; persist data; test services and clients; and package/deploy the system with observability.
Prerequisites and setup
Bring Go, Flutter/Dart, Git, Docker Compose, and the Protocol Buffer compiler (protoc). Install the Go protobuf plugins and Dart protoc_plugin; ensure all compiler plugins are on PATH. Pin tool versions in the course repository once a cohort starts. Exact install instructions vary by OS and should be checked against the official Go, Flutter, gRPC, and protobuf documentation linked in References.
Android emulators reach the host through 10.0.2.2; iOS simulators commonly use localhost; physical devices need a reachable LAN address or deployed endpoint. Start with insecure local transport only, then replace it with TLS before deployment.
Suggested repository layout
field-notes/
api/fieldnotes/v1/service.proto
gen/go/fieldnotes/v1/
server/cmd/api/
server/internal/{tasks,projects,auth,store}/
flutter_app/lib/{data,features,shared}/
deploy/compose.yaml
Keep .proto files as the contract source of truth. Generated code is reproducible output. Do not hand-edit generated files.
Course map
- Install Go and write your first program
- Variables, types, control flow, and functions
- Slices, maps, structs, and JSON
- Methods, interfaces, packages, and modules
- Errors, tests, and debugging
- Goroutines, channels, and context
- The product, gRPC, and the development loop
- Protocol Buffers and API design
- Your first Go gRPC server
- Flutter client and the first vertical slice
- CRUD, validation, and error contracts
- Persistence with PostgreSQL
- Deadlines, cancellation, and pagination
- Server streaming and live updates
- Identity, authorization, and TLS
- Testing, code generation, and compatibility
- Observability and deployment
- Capstone polish and production review
Read How to use this book, Capstone specification, Assessment rubric, and References alongside the chapters.
On Windows? Follow the Windows setup and run guide.
Definition of done
The course project is complete when a new user can authenticate, create a project and tasks, update task state, see changes arrive in another connected client, recover after reconnecting, and run the stack using documented commands. The service must validate inputs, scope reads and writes to the authenticated user, use TLS outside local development, and have automated tests for core behavior.