A polished, production-ready backend framework in Dart.

Get Started Video Tutorials

Install it right away:
# Install the Galileo CLI, and scaffold a project.
$ pub global activate galileo_cli
$ galileo init hello
Ready for showtime.
With features like hot reloading , GraphQL, and ORM, Galileo is the perfect Dart backend to power production apps.

Galileo also provides support for server-side templating, WebSockets, authentication, and much, much more.
See Galileo in production...
import 'package:galileo_framework/galileo_framework.dart';
import 'package:galileo_framework/http.dart';

main() async {
  var app = Galileo(), http = GalileoHttp();
    ..get('/', (req, res) => res.writeln('Hello, Galileo!'));
    ..fallback((req, res) => throw GalileoHttpException.notFound());
  await http.startServer('', 3000);
  print('Listening at ${http.uri}');
class AccountsController extends Controller {
  // Auto-injected by Galileo
  final QueryExecutor executor;


  renderProfile(String username, ResponseContext res) async {
    var query = UserQuery()..where.username.equals(username);
    var user = await query.getOne(executor);
    await res.render('profile', {'user': user});
Batteries included.
With over 3 dozen official extension packages and counting, and the flexibility to easily add functionality, Galileo has all the tools you need to build an application of any size.
Galileo is designed with extensibility in mind, so even when you need a feature that's not officially supported, you can easily implement it yourself.
View all packages...
It just works.
Galileo is stable, and won't unexpectedly break you. What's more, components like ORM and serialization are designed from the ground-up to work together, seamlessly.

And thanks to its unit testing support, you can ensure that your product works as expected, before hitting production. Spend less time worrying about unforeseen bugs, and more time getting your product to market.
Learn about testing...
void main() {
  TestClient client;

  setUp(() async {
      var app = Galileo();
      await app.configure(myApp.configureServer);
      client = await connectTo(app);

  tearDown(() => client.close());

  test('cannot view secret content', () async {
      var response = await client.get('/secret');
      expect(response, hasStatus(403));