Running Applications with Aqueduct Serve

The aqueduct serve command-line tool runs applications. This tool is run in a project directory and it generates a Dart script that bootstraps your application.

The structure of the project does matter - if you are creating a project from the template, the appropriate structure already exists. Otherwise, you must ensure you have a library file with the same name as your application (as defined in pubspec.yaml). For example, an application named todo must have a lib/todo.dart file. This file must import the file that declares your application's ApplicationChannel.

You may specify options like the number of isolates to run the application on and which port to listen for requests on. See more details with aqueduct serve --help.

Hot Reload

In Flutter, a hot reload restarts an application after a code change, but keeps the state of the application intact - such as which screen the user is on and what data is available in memory. This is an incredible feature for faster development cycles in an environment that can often be difficult to test efficiently.

Hot reload is often requested as a feature of Aqueduct, but it doesn't quite make sense in an HTTP API which is not supposed to retain state. Truth be told, our team rarely uses a development cycle that involves making frequent code changes to a locally running instance. Instead, we use package:aqueduct_test to ensure all of our testing efforts are captured in automated tests that continually run over the course of the project.

A shortcut to restart the locally running application after a change is admittedly useful in some scenarios. However, this is already an existing feature of most IDEs and should not be implemented by aqueduct. In IntelliJ, this feature is called 'Rerun' and the default keyboard shortcut is ^F5 in macOS. To use this shortcut, instead of running with aqueduct serve, right-click on the bin/main.dart script that is generated when you create a new project and select Run. Once this process is running, you can rerun it with ^F5 or with the Rerun button on the Run panel.