connectrpc 0.3.0 copy "connectrpc: ^0.3.0" to clipboard
connectrpc: ^0.3.0 copied to clipboard

Implementation of the Connect protocol for Dart. Simple, reliable, interoperable. Protobuf RPC that works

Connect-Dart #

Build License

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.dart
extension type ElizaServiceClient(connect.Transport _transport) {
  Future<connectrpcelizav1eliza.SayResponse> say(
    connectrpcelizav1eliza.SayRequest input, {
    connect.Header? header,
    connect.AbortSignal? signal,
    Function(connect.Header)? onHeader,
    Function(connect.Header)? onTrailer,
  }) {
    return connect.Client(_transport).unary(
      const connect.Spec(
        '/$name/Say',
        connect.StreamType.unary,
        connectrpcelizav1eliza.SayRequest.new,
        connectrpcelizav1eliza.SayResponse.new,
      ),
      input,
      signal: signal,
      header: header,
      onHeader: onHeader,
      onTrailer: onTrailer,
    );
  }

  Stream<connectrpcelizav1eliza.ConverseResponse> converse(
    Stream<connectrpcelizav1eliza.ConverseRequest> input, {
    connect.Header? header,
    connect.AbortSignal? signal,
    Function(connect.Header)? onHeader,
    Function(connect.Header)? onTrailer,
  }) {
    return connect.Client(_transport).bidi(
      const connect.Spec(
        '/$name/Converse',
        connect.StreamType.bidi,
        connectrpcelizav1eliza.ConverseRequest.new,
        connectrpcelizav1eliza.ConverseResponse.new,
      ),
      input,
      signal: signal,
      header: header,
      onHeader: onHeader,
      onTrailer: onTrailer,
    );
  }

  Stream<connectrpcelizav1eliza.IntroduceResponse> introduce(
    connectrpcelizav1eliza.IntroduceRequest input, {
    connect.Header? header,
    connect.AbortSignal? signal,
    Function(connect.Header)? onHeader,
    Function(connect.Header)? onTrailer,
  }) {
    return connect.Client(_transport).server(
      const connect.Spec(
        '/$name/Introduce',
        connect.StreamType.server,
        connectrpcelizav1eliza.IntroduceRequest.new,
        connectrpcelizav1eliza.IntroduceResponse.new,
      ),
      input,
      signal: signal,
      header: header,
      onHeader: onHeader,
      onTrailer: onTrailer,
    );
  }
}
copied to clipboard

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);
}
copied to clipboard

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 in alpha, and we will make a few changes as we gather feedback from early adopters.

Offered under the Apache 2 license.

10
likes
130
points
2.96k
downloads

Publisher

verified publisherconnectrpc.com

Weekly Downloads

2024.09.21 - 2025.04.05

Implementation of the Connect protocol for Dart. Simple, reliable, interoperable. Protobuf RPC that works

Homepage
Repository (GitHub)

Documentation

Documentation
API reference

License

Apache-2.0 (license)

Dependencies

fixnum, http2, path, protobuf

More

Packages that depend on connectrpc