Releases: connectrpc/connect-kotlin
v0.7.1
What's Changed
Other changes
- Update DCO language by @drice-buf in #300
- Determine protoc version from protobuf version by @pkwarren in #312
- Update to v1.0.3 of conformance suite by @jhump in #318
- Generate
@Deprecated
annotations by @timostamm in #334 - Update gradle to 8.10.2 by @pkwarren in #337
- Update to the latest kotlin K2 compiler by @pkwarren in #338
Full Changelog: v0.7.0...v0.7.1
v0.7.0
Protobuf Major Release
Release v0.7.0 requires the latest major release (4.x) of the com.google.protobuf
runtime library and updates generated code to require the new version of the library. See https://protobuf.dev/support/cross-version-runtime-guarantee/#major for more details on the Protobuf release policy and https://protobuf.dev/news/2023-12-05/ for documentation on changes to the Java runtime library.
Users wishing to remain on the previous major release (3.x) should use v0.5.1.
What's Changed
Improvements
- Update client to pass all conformance tests from connect-conformance
- Add support for Editions by @jchadwick-buf in #297
Other changes
New Contributors
- @jchadwick-buf made their first contribution in #297
- @drice-buf made their first contribution in #298
Full Changelog: v0.6.1...v0.7.0
v0.5.1
What's Changed
API Improvements
- The ConnectException constructor changed signature slightly in #248 (callers must use
.withErrorDetails
to specify error details).
Other changes
- Update to to conformance suite v1.0.1 and fixes numerous bugs identified by conformance tests by @jhump in #248, #252, and #253
Full Changelog: v0.5.0...v0.5.1
v0.6.1
Protobuf Major Release
Release v0.6.1 requires the latest major release (4.x) of the com.google.protobuf
runtime library and updates generated code to require the new version of the library. See https://protobuf.dev/support/cross-version-runtime-guarantee/#major for more details on the Protobuf release policy and https://protobuf.dev/news/2023-12-05/ for documentation on changes to the Java runtime library.
Users wishing to remain on the previous major release (3.x) should use v0.5.1.
What's Changed
API Improvements
- The ConnectException constructor changed signature slightly in #248 (callers must use
.withErrorDetails
to specify error details).
Other changes
- Update to to conformance suite v1.0.1 and fixes numerous bugs identified by conformance tests by @jhump in #248, #252, and #253
Full Changelog: v0.6.0...v0.6.1
v0.6.0
Protobuf Major Release
Release v0.6.0 updates connect-kotlin to the latest major release (4.26.0) of the com.google.protobuf
runtime library and updates generated code to require the new version of the library. See https://protobuf.dev/support/cross-version-runtime-guarantee/#major for more details on the Protobuf release policy and https://protobuf.dev/news/2023-12-05/ for documentation on changes to the Java runtime library.
Users are recommended to regenerate code with Protobuf 26.0 or later.
What's Changed
Enhancements
Full Changelog: v0.5.0...v0.6.0
v0.5.0
Release v0.5.0 includes numerous fixes so that connect-kotlin now passes many test cases in the Connect conformance suite that failed with the previous release. It also includes some clean-up of some of the APIs (and internal implementation) which are not backwards-compatible, but should only require minor changes to user code. See the "API Updates" section below for a list of all changed APIs.
What's Changed
API Improvements
These include some API changes which may require modification to user programs.
- Some cleanup in the HTTP request representations by @jhump in #211
- Denormalize "Code" and further simplification of HTTP interfaces by @jhump in #224
- This is likely the greatest impact to user code. See the "API Updates" for
com.connectrpc.Code
andcom.connectrpc.ResponseMessage
below for more details.
- This is likely the greatest impact to user code. See the "API Updates" for
- Simplify UnaryBlockingCall by @jhump in #225
Enhancements
- Client-only and server-only streaming RPCs can now be used with HTTP 1.1 connections (previously required HTTP/2) by @jhump in #196, #210
- Support for auto-dispatching potentially blocking operations to I/O coroutine context by @jhump in #218
Bugfixes
- Fixes to bugs in unary RPCs that were revealed by conformance tests by @jhump in #193
- Fixes to bugs in stream RPCs that were revealed by conformance tests by @jhump in #210
Other changes
- Adds new conformance/client module by @jhump in #182, #194, #195, #196, #212, #213, #217, and #226
- This adds use of a new conformance suite, which caught numerous bugs also fixed in this release
- Fix android deprecation warning by @pkwarren in #204
New Contributors
- @akshayjshah made their first contribution in #229
API Updates
com.connectrpc.BidirectionalStreamInterface
- methods
sendClose
andreceiveClose
are now suspend methods
com.connectrpc.ClientOnlyStreamInterface
- method
sendClose
is now a suspend method - adds new method:
suspend fun cancel()
, to cancel operation w/out completing it
com.connectrpc.ServerOnlyStreamInterface
- method
receiveClose
is now a suspend method
com.connectrpc.Code
- removes enum constant
OK
- An operation is now determined to be successful by lack of an exception, instead of having an
OK
code
- An operation is now determined to be successful by lack of an exception, instead of having an
- method
fromValue(Int?):Code
changed to return nullableCode?
; an input value of zero returnsnull
com.connectrpc.UnaryFunction
requestFunction
now accepts aUnaryHTTPRequest
instead ofHTTPRequest
com.connectrpc.ResponseMessage
- removed
code
propertySuccess
concrete sub-type does not need a code: code is an error code and does not apply (was previously alwaysOK
)Failure
concrete sub-type now has only the code inside thecause: ConnectException
property (thecode
property was redundant)
- updated constructors for
Success
andFailure
concrete sub-types to no longer accept code
com.connectrpc.StreamResult
- changed
cause
property to beConnectException?
instead ofThrowable?
- calling code can use new
com.connectrpc.asConnectException
extension function to transform aThrowable
into aConnectException
- calling code can use new
- removed
code
property- it was redundant with the code property of
cause
- it was redundant with the code property of
- update constructor to no longer accept code and to require
ConnectException?
for cause fold
is now an inline funmaybeFold
has been removed (trivial to accomplish the same thing withfold
and nullable result type)
com.connectrpc.UnaryBlockingCall
- now an interface, not a class
- otherwise, same API except there is no constructor or factory function
com.connectrpc.http.HTTPClientInterface
- method
unary
now accepts aUnaryHTTPRequest
instead ofHTTPRequest
- method
stream
now accepts aduplex: Boolean
parameter, indicating whether the operation needs to support full-duplex communication with the server (for bidirectional streams)
com.connectrpc.http.HTTPRequest
- no longer has
message
orhttpMethod
properties- for stream operations, method was always "POST" and message was always null/not applicable
- for unary operations, there is now a sub-class
UnaryHTTPRequest
which adds these two properties
- constructor updated to no longer accept message or http method
clone
method updated to no longer accept message or http method
com.connectrpc.http.HTTPResponse
- added
status: Int?
property to indicate the numeric HTTP response code - removed
code
andtracingInfo
propertiestracingInfo
replaced by newstatus
propertycode
is not needed; it is provided by code property ofcause
or inferred from newstatus
property
- constructor updated to accept status and no longer accept code and tracing info
com.connectrpc.http.Stream
- now an interface, not a class
- otherwise, same API except:
- methods
send
,sendClose
, andreceiveClose
are now suspend methods isClosed
method removed; useisReceiveClosed
instead
- methods
- there is also a
Stream
factory function with same signature as previous class constructor except that all three callbacks are now suspend functions
com.connectrpc.okhttp.ConnectOkHttpClient
- updated to conform to changes to
HTTPClientInterface
com.connectrpc.extensions.GoogleJavaJSONStrategy
- added optional constructor parameter:
registry: com.google.protobuf.TypeRegistry
com.connectrpc.extensions.GoogleJavaProtobufStrategy
- added optional constructor parameter:
registry: com.google.protobuf.ExtensionRegistryLite
com.connectrpc.extensions.GoogleJavaLiteProtobufStrategy
- added optional constructor parameter:
registry: com.google.protobuf.ExtensionRegistryLite
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
Enhancements
- Add support for accessing headers and trailers to streaming calls by @jhump in #171
- Add method stream type to generated code by @pkwarren in #172
Bugfixes
- Mark duplex streaming bodies as one shot by @pkwarren in #155
- Fix URL resolution when base URI has non-empty path by @pkwarren in #173
Other changes
- Add conformance tests for lite runtime by @pkwarren in #148
- Upgrade Gradle to 8.5 by @pkwarren in #170
New Contributors
Full Changelog: v0.3.1...v0.4.0
v0.3.1
What's Changed
Other changes
- Fix conformance test and update to protoc 25.0 by @pkwarren in #145
- Support empty buffers on Gzip decompression by @erawhctim in #139
- Allow building with Java 20 and later versions by @pkwarren in #146
- Add some additional E2E tests for client by @pkwarren in #147
New Contributors
- @erawhctim made their first contribution in #139
Full Changelog: v0.3.0...v0.3.1
v0.3.0
Release v0.3.0 improves the streaming API for bidi and server streaming calls, renames ConnectError to ConnectException to match JVM conventions, and supports passing a separate OkHttp client for use in streaming calls.
What's Changed
API Improvements
- Rework ConnectError to ConnectException by @jzbrooks in #120
- Improve API for bidi and server streaming calls by @pkwarren in #130
Other changes
- Allow separate client for streaming calls by @pkwarren in #128
- Update dependencies and fix javadoc artifacts by @pkwarren in #127
- Use a more specific type for error callbacks by @jzbrooks in #132
- Treat warnings as errors in tool and library code by @jzbrooks in #133
New Contributors
Full Changelog: v0.2.0...v0.3.0
API Updates
com.connectrpc.http.HTTPResponse
error
renamed tocause
.
com.connectrpc.BidirectionalStreamInterface
resultChannel
renamed toresponseChannel
. The channel now returns the response messages from the stream (canceling the channel with a ConnectException if an error occurs).
com.connectrpc.ClientOnlyStreamInterface
receiveAndClose
now returns the response message instead of a message wrapped in theResponseMessage
type. The method will throw a ConnectException on error.
com.connectrpc.ConnectError
- Renamed to
ConnectException
. - Changed to extend
Exception
instead ofThrowable
.
com.connectrpc.ResponseMessage.Failure
error
renamed tocause
.
com.connectrpc.ServerOnlyStreamInterface
resultChannel
renamed toresponseChannel
. The channel now returns the response messages from the stream (canceling the channel with a ConnectException if an error occurs).
com.connectrpc.StreamResult.Complete
error
renamed tocause
.
v0.2.0
What's Changed
Release v0.2.0 fixes issues seen with streaming calls and addresses compatibility with gRPC servers.
Although connect-kotlin is still in alpha, we try to maintain compatibility between releases. Some of the fixes however required API changes, which are documented below.
Bugfixes
- Fix handling of gRPC trailers-only responses by @pkwarren in #101
- Fix several streaming issues by @pkwarren in #106
Other changes
- Add SECURITY.md by @smallsamantha in #102
- Update Kotlin to 1.9.10 @pkwarren in #103
- Add callback to cross test by @buildbreaker in #66
- Upgrade to latest spotless plugin by @pkwarren in #104
- Remove unnecessary bufbuild references by @smallsamantha in #105
- Add additional conformance streaming tests by @pkwarren in #108
Full Changelog: v0.1.11...v0.2.0
API Updates
com.connectrpc.BidirectionalStreamInterface
Removed
close()
- Use
sendClose()
instead. This may have confused callers that the close() method would close both send and receive sides of the connection when it was only closing the send side.
- Use
com.connectrpc.ClientOnlyStreamInterface
Added
sendClose()
- This shouldn't typically need to be called as receiveAndClose() already closes the send side of the stream.
isSendClosed()
Changed
receiveAndClose()
- Changed to return a ResponseMessage instead of a StreamResult. This allows callers to easily get access to the response as if they were calling a unary method. Previously, the StreamResult would only return the first result retrieved by the call, which typically was a Headers result (leaving callers unable to access the Message or Completion contents).
Removed
close()
- Replaced with
sendClose()
.
- Replaced with
com.connectrpc.ServerOnlyStreamInterface
Added
receiveClose()
isReceiveClosed()
Removed
close()
- This closed both the send and receive side of the stream (unlike in other interfaces which just closed the send side). If needed, callers should invoke
receiveClose()
instead (although this isn't necessary in normal use).
- This closed both the send and receive side of the stream (unlike in other interfaces which just closed the send side). If needed, callers should invoke
send()
- Callers should invoke
sendAndClose()
instead. Otherwise, reading results fromresultChannel()
will hang since the send side of the stream should be closed before reading responses.
- Callers should invoke
com.connectrpc.StreamResult
Removed
- Removed the
error
field from the baseStreamResult
class. It was never used by theHeaders
orMessage
subclasses and only used on theComplete
type. This should make it easier for callers to useHeaders
andMessage
types since they don't need to worry about handlingerror
.