Connect-Dart
Connect-Dart is a slim library for using generated, type-safe, and idiomatic Dart clients to communicate with your app's servers using Protocol Buffers (Protobuf). It works with the Connect, gRPC, and gRPC-Web protocol.
Given a simple Protobuf schema, Connect-Dart generates idiomatic dart:
Click to expand eliza.connect.client.dart
import "package:connectrpc/connect.dart" as connect;
import "eliza.pb.dart" as connectrpcelizav1eliza;
import "eliza.connect.spec.dart" as specs;
extension type ElizaServiceClient(connect.Transport _transport) {
Future<connectrpcelizav1eliza.SayResponse> say(
connectrpcelizav1eliza.SayRequest input, {
connect.Headers? headers,
connect.AbortSignal? signal,
Function(connect.Headers)? onHeader,
Function(connect.Headers)? onTrailer,
}) {
return connect.Client(_transport).unary(
specs.ElizaService.say,
input,
signal: signal,
headers: headers,
onHeader: onHeader,
onTrailer: onTrailer,
);
}
Stream<connectrpcelizav1eliza.ConverseResponse> converse(
Stream<connectrpcelizav1eliza.ConverseRequest> input, {
connect.Headers? headers,
connect.AbortSignal? signal,
Function(connect.Headers)? onHeader,
Function(connect.Headers)? onTrailer,
}) {
return connect.Client(_transport).bidi(
specs.ElizaService.converse,
input,
signal: signal,
headers: headers,
onHeader: onHeader,
onTrailer: onTrailer,
);
}
Stream<connectrpcelizav1eliza.IntroduceResponse> introduce(
connectrpcelizav1eliza.IntroduceRequest input, {
connect.Headers? headers,
connect.AbortSignal? signal,
Function(connect.Headers)? onHeader,
Function(connect.Headers)? onTrailer,
}) {
return connect.Client(_transport).server(
specs.ElizaService.introduce,
input,
signal: signal,
headers: headers,
onHeader: onHeader,
onTrailer: onTrailer,
);
}
}
This code can then be integrated with just a few lines:
void main() async {
late ElizaServiceClient elizaClient;
final response = await elizaClient.say(SayRequest(sentence: "Hey!"))
print(response.message);
}
That’s it! You no longer need to manually define request/response models, write encode/decode methods, specify the exact path of your request, nor worry about the underlying networking transport for your applications!
Quick Start
Head over to our quick start tutorial to get started. It only takes ~10 minutes to complete a working chat app that uses Connect-Dart!
Documentation
Comprehensive documentation for everything, including interceptors, streaming, and error handling is available on the connectrpc.com website.
Generation Options
Option | Type | Default | Details |
---|---|---|---|
keep_empty_files |
Boolean | false |
Generate files even if the proto file doesn't have any service definitions |
Example Apps
Example apps are available in /example
.
Contributing
We'd love your help making Connect better!
Extensive instructions for building the library and generator plugins locally,
running tests, and contributing to the repository are available in our
CONTRIBUTING.md
guide. Please check it out
for details.
Ecosystem
- connect-swift: Swift clients for idiomatic gRPC & Connect RPC
- connect-kotlin: Idiomatic gRPC & Connect RPCs for Kotlin
- connect-es: Type-safe APIs with Protobuf and TypeScript.
- connect-go: Service handlers and clients for GoLang
- conformance: Connect, gRPC, and gRPC-Web interoperability tests
Status
This project is stable and follows semantic versioning, which means any breaking changes will result in a major version increase. Our goal is to not make breaking changes unless absolutely necessary.
Legal
Offered under the Apache 2 license.
Libraries
- connect
- Implementation of the Connect protocol for Dart. Simple, reliable, interoperable. Protobuf RPC that works
- http2
- io
- protobuf
- Implements Codec and StatusParser using the protobuf package.
- protocol/connect
- Connect protocol.
- protocol/grpc
- gRPC protocol.
- protocol/grpc_web
- gRPC-Web protocol.
- test
- Testing utilities for working with connect clients.
- web