FLUTTER ECOSYSTEM

vania-dart/framework

快速、簡單且強大的 Dart 後端框架,由 ❤️ 建構

框架 專案封面
Stars
255
Forks
22
最近推送(UTC)
2026年9月12日
專案狀態
未封存
Vania GitHub avatar
GITHUB Organization

Vania ↗

Simple and powerful backend framework for the Dart

語言Dart

此儲存庫發佈的套件

原始 README

以下為英文專案原文快照,最新內容請造訪 GitHub。

展開 / 收合專案 README

Vania

Vania

A fast, simple, and unapologetically batteries-included backend framework for Dart.

pub package docs license


Dart is a great language for writing servers — it's fast, it AOT-compiles to a single binary, and if you already ship Flutter you know it. What it has been missing is the boring, unglamorous infrastructure every real backend ends up needing: routing, validation, an ORM, migrations, auth, sessions, a job of a CLI to tie it all together.

Vania is that infrastructure. If you've written Laravel, most of it will feel familiar. If you haven't, it should still feel obvious.

Quick start

dart pub global activate vania_cli
vania create my_api
cd my_api
vania serve

Your server is on http://localhost:8000, and vania serve reloads it whenever you save a Dart file.

What an app looks like

A route file:

import 'package:vania/route.dart';

class TodosRoute extends Route {
  @override
  String? get prefix => 'api';

  @override
  void register() {
    super.register();

    Router.get('/todos', todoController.index);
    Router.post('/todos', todoController.store);
    Router.get('/todos/{id}', todoController.show).whereInt('id');
    Router.put('/todos/{id}', todoController.update).whereInt('id');
    Router.delete('/todos/{id}', todoController.destroy).whereInt('id');
  }
}

A controller:

class TodoController extends Controller {
  Future<Response> store(Request req) async {
    await req.validate({'title': 'required|string|max_length:255'});

    final todo = await Todo().query().insertGetId({
      'title': req.input('title'),
    });

    return Response.json(todo, 201);
  }
}

And the entrypoint, which is the whole bootstrap:

void main(List<String> args) async {
  await Application().initialize(config: config);
}

The database layer

Vania's ORM, query builder, migrations, seeders, and relations all live in the core package. Drivers are thin — they translate the shared contract to a real connection and nothing more. In practice that means your application code imports one thing:

import 'package:vania/database.dart';

and the driver name appears exactly once, in main.dart:

registerMysqlDriver();   // or registerPostgresqlDriver() / registerMongodbDriver()

Swapping MySQL for PostgreSQL is a one-line change. Models, relations (hasMany, belongsTo, belongsToMany, and the full morph family), migrations, and query-builder calls come along unchanged, because none of them ever belonged to the driver in the first place.

final users = await User()
    .query()
    .where('active', '=', true)
    .orderBy('created_at', 'desc')
    .paginate(perPage: 20);

Packages

Core ships what every server needs. Everything else is opt-in — add the package, register its provider, done.

Package What it gives you
vania HTTP server, router, middleware, validation, ORM, migrations, sessions, views, mail
vania_cli Project scaffolding, generators, migrations, serve, build
vania_mysql MySQL driver
vania_postgresql PostgreSQL driver
vania_mongodb MongoDB driver and document query builder
vania_auth JWT and personal access tokens, guards, hashing, revocation
vania_redis Redis client, cache driver, pub/sub, Lua scripting, pooling
vania_websocket WebSockets with channels, rooms, presence, broadcasting
vania_graphql GraphQL execution, HTTP transport, subscriptions
vania_grpc gRPC server and client
vania_swagger OpenAPI 3.0 generation and Swagger UI
vania_elasticsearch Elasticsearch client, query builder, bulk indexing

CLI

vania create <name>          Create a new project
vania serve                  Run with hot reload
vania build                  Compile to a native executable
vania route:list             List registered routes
vania key:generate           Generate APP_KEY into .env

vania make:controller        vania make:model
vania make:middleware        vania make:provider
vania make:migration         vania make:migration-alter
vania make:mail              vania make:auth

vania migrate                Run pending migrations
vania migrate:seed           Run seeders
vania db:seed                Create and register a seeder

Examples

Runnable projects, smallest first:

Documentation

Full docs live at vdart.dev/docs. The source is in docs/ — start with installation, then directory structure and configuration.

Contributing

Issues and pull requests are welcome — see CONTRIBUTING.md. If you're fixing a bug, a failing test that reproduces it is the fastest way to get the fix merged.

License

MIT © Vania contributors — see LICENSE.