Skip to content

Releases: fullstorydev/grpcui

v1.4.2

29 Nov 14:40
366ca4f
Compare
Choose a tag to compare

Changelog

  • 366ca4f Replace removed goreleaser archives.replacements configuration (#349)
  • 491995b Bump golang.org/x/net from 0.30.0 to 0.31.0 (#345)
  • 8994b91 Bump grpcurl dependency to v1.9.2 (#348)
  • 56053cd fix(frontend): bytes decode when load file finished (#338)
  • b0c061d Bump golang.org/x/net from 0.29.0 to 0.30.0 (#342)
  • feea063 Fix the incorrect parameter order (#339)
  • a53bbd0 Bump golang.org/x/net from 0.28.0 to 0.29.0 (#335)
  • 1928f38 makefile updates (#334)
  • c098e56 Bump golang.org/x/net from 0.26.0 to 0.28.0 (#332)
  • cb4329c Bump google.golang.org/protobuf from 1.34.1 to 1.34.2 (#327)
  • 835ccda fix request file bytes update issue (#323)
  • 636ad1f Bump golang.org/x/net from 0.25.0 to 0.26.0 (#326)
  • 483f037 Bump golang.org/x/net from 0.24.0 to 0.25.0 (#319)
  • 4129a74 Bump google.golang.org/protobuf from 1.33.1-0.20240408130810-98873a205002 to 1.34.1 (#318)
  • a84a94c replace background image (grpc-bg.svg) with a simple gradient (#317)
  • 11bfac0 Support grpc.reflection.v1.ServerReflection (#314)

v1.4.1

10 Apr 19:05
0d16d85
Compare
Choose a tag to compare

Changelog

  • 0d16d85 Be lenient when possible when server can't provide all files (#313)

v1.4.0

10 Apr 17:58
bb1b218
Compare
Choose a tag to compare

Changelog

  • bb1b218 Bump grpcurl dependency to v1.9.1 (#312)
  • a350004 Brand name update (#311)
  • 8071d31 Bump golang.org/x/net from 0.22.0 to 0.24.0 (#309)
  • cd235e7 Bump golang.org/x/net from 0.21.0 to 0.22.0 (#305)
  • 71c8a38 Bump github.com/golang/protobuf from 1.5.3 to 1.5.4 (#303)
  • 0b79039 Bump golang.org/x/term from 0.17.0 to 0.18.0 (#302)
  • ff462d1 Bump golang.org/x/net from 0.20.0 to 0.21.0 (#300)
  • 334661c Bump github.com/jhump/protoreflect from 1.15.5 to 1.15.6 (#299)
  • 28a5c6e Bump github.com/jhump/protoreflect from 1.15.4 to 1.15.5 (#297)
  • 06f546d Adding Emit Defaults Option (#281)
  • 0afbf93 Bump golang.org/x/net from 0.19.0 to 0.20.0 (#294)
  • 7fb117b Bump google.golang.org/protobuf from 1.31.1-0.20231027082548-f4a6c1f6e5c1 to 1.32.0 (#291)
  • 1a50bc2 Bump github.com/jhump/protoreflect from 1.15.3 to 1.15.4 (#290)
  • ea737b2 Bump golang.org/x/net from 0.18.0 to 0.19.0 (#288)
  • 83bbc3b indent: rip out old go 1.9 support (#287)
  • 7a2b91d Bump golang.org/x/net from 0.17.0 to 0.18.0 (#283)
  • 2c5dd5c Bump github.com/fullstorydev/grpcurl from 1.8.8 to 1.8.9 (#278)

v1.3.3

24 Oct 19:35
2c21280
Compare
Choose a tag to compare

Changelog

  • 2c21280 Update Tarball URL used by Homebrew (#277)
  • 73a517a Disable CGO for improved compatibility across distros (#276)
  • dab14f0 Bump golang.org/x/net from 0.16.0 to 0.17.0 (#275)
  • e772cc9 Bump golang.org/x/net from 0.15.0 to 0.16.0 (#274)
  • c12e9f4 SIGSEGV: panic: runtime error: invalid memory address or nil pointer dereference in protoreflect (#272)

v1.3.2

27 Sep 14:05
39332b7
Compare
Choose a tag to compare

Changelog

  • 39332b7 Bump github.com/fullstorydev/grpcurl from 1.8.7 to 1.8.8 (#270)
  • fe80e41 update goreleaser for v1.3.2
  • 74c40f7 Bump golang.org/x/net from 0.14.0 to 0.15.0 (#268)
  • 4196291 Bump golang.org/x/term from 0.11.0 to 0.12.0 (#267)
  • 5e18878 Resolve dependabot; go 1.21 (#266)
  • f047ced Bump golang.org/x/net from 0.11.0 to 0.14.0 (#261)
  • 0f454e2 Bump golang.org/x/term from 0.9.0 to 0.11.0 (#262)
  • 940f64a Bump google.golang.org/protobuf from 1.30.0 to 1.31.0 (#256)
  • b042db5 Bump google.golang.org/grpc from 1.55.0 to 1.56.1 (#255)
  • 1250062 Bump golang.org/x/net from 0.10.0 to 0.11.0 (#253)
  • 8743d41 feat: add headers to grpcurl command (#248)
  • ee77ce9 Add installation instruction for homebrew (#250)
  • 20e0ed7 Don't try to open browser when running in Docker (#246)
  • e26b100 Bump google.golang.org/grpc from 1.54.0 to 1.55.0 (#243)
  • c7b10b8 Bump golang.org/x/net from 0.9.0 to 0.10.0 (#242)
  • 7ae4c9f Add a "Now" button for timestamp (#193)
  • a9244ef Add "raw request gRPCurl" output (#241)
  • b8c1e1f Add "checkgenerate" make target to CI (#239)
  • a628bc6 bugfix: add verification for item.request.metadata (#238)
  • d5f017e Bump golang.org/x/net from 0.8.0 to 0.9.0 (#236)
  • e7e10fa Bump golang.org/x/term from 0.6.0 to 0.7.0 (#235)
  • 8b4ed11 Bump google.golang.org/grpc from 1.53.0 to 1.54.0 (#233)
  • 5ce548e open browser in separate goroutine since misbehaving impls can block indefinitely (#232)
  • af1d530 Bump google.golang.org/protobuf from 1.29.1 to 1.30.0 (#231)
  • 3cc36d3 Bump google.golang.org/protobuf from 1.29.0 to 1.29.1 (#228)
  • cf82562 Bump golang.org/x/net from 0.6.0 to 0.8.0 (#223)
  • b44d4e2 Bump google.golang.org/protobuf from 1.28.1 to 1.29.0 (#226)
  • 86d3aef Bump github.com/golang/protobuf from 1.5.2 to 1.5.3 (#225)
  • d6fda3e Bump golang.org/x/term from 0.5.0 to 0.6.0 (#222)
  • 1808497 Bump golang.org/x/crypto from 0.0.0-20200622213623-75b288015ac9 to 0.1.0 (#220)
  • 20145e9 Bump google.golang.org/grpc from 1.52.3 to 1.53.0 (#217)
  • 9df2eeb Bump golang.org/x/net from 0.5.0 to 0.6.0 (#216)
  • 04acb25 Bump google.golang.org/grpc from 1.52.0 to 1.52.3 (#214)
  • a74d066 Bump github.com/jhump/protoreflect from 1.14.0 to 1.14.1 (#212)
  • 60f5332 Bump golang.org/x/net from 0.4.0 to 0.5.0 (#213)
  • 00e824d Bump google.golang.org/grpc from 1.51.0 to 1.52.0 (#211)
  • 9df8240 Bump google.golang.org/grpc from 1.48.0 to 1.51.0 (#210)
  • dff39c9 Bump github.com/fullstorydev/grpcurl from 1.8.6 to 1.8.7 (#197)
  • 916a49f use go:embed to bind data (#156)
  • 4ddf8a0 Bump google.golang.org/protobuf from 1.28.0 to 1.28.1 (#195)
  • bde7ec3 Bump github.com/jhump/protoreflect from 1.12.0 to 1.14.0 (#203)
  • 7138023 fix: add -H headers argument to reflection request (#186)

v1.3.1

08 Aug 18:21
410c0c3
Compare
Choose a tag to compare

Changes

  • Minor UI style tweaks
  • Several dependency version updates
  • Support for Go 1.18

Changelog

  • 410c0c3 Add go1.18 support; set go1.18 in Dockerfile (#196)
  • 347dfad fix: update go get -u golang.org/x/sys to support Go 1.18 (#178)
  • fa32837 Bump google.golang.org/protobuf from 1.26.0 to 1.28.0 (#189)
  • 4268775 add dependabot
  • cca8f59 don't use now-deleted srcinforeflection package (#172)
  • a5287db tweak the spacing and font size of the top UI elements above the form (#173)
  • 2d4a93e add "Web UI" section to release notes template
  • 15a4e2d use newer goreleaser (#171)

v1.3.0

16 Feb 00:54
6a5a14b
Compare
Choose a tag to compare

Changes

This release includes numerous new features and some bug fixes. The release binaries on GitHub and the published docker images also now include options for arm64 architecture.

Web UI

These changes impact usage of both the command-line tool and the Go packages.

  • The UI will now show error details. Error details consist of zero or more google.protobuf.Any messages that may be attached to any RPC error. Previously, if an error contained details, the UI would not show them.
  • The UI now provides the option to load a file to populate bytes fields.
  • The UI now includes support for "Examples", similar to collections in postman. These can be loaded programmatically, when using the Go packages, or via a new command-line option for the command-line tool (see more below). When examples are included, they appear as a list on the left. Clicking an item in the list loads the form with the contents of that example.
  • The "History" tab of the UI includes a new "Save History" button, for saving all of the requests in the history to a downloaded JSON file. This JSON file is in the same format used to provide examples (see above).
  • The UI now can show more information about the service and method selected. There is a small arrow button to the right of the drop-downs that can be used to show and hide this extra information. This description resembles the original proto source for the service and method, including showing any options as well as comments.
    • Caveat: the comments may only be shown when using proto source files to obtain descriptors. This is because most runtimes discard this information for descriptors that are generated and linked into a program (to reduce binary sizes and memory footprint). So when using server reflection to get descriptors, comments likely will not appear.
  • The UI now includes tool tips for fields in the request form, that shows more information. Like the service and method information, this description resembles the original proto source, including options as comments. (Same caveat regarding comments as above.)
  • Trying to enable (via checkbox) a field of type google.protobuf.Value would result in the UI continuing to show "unset", instead of providing a text input for defining the value. This has been fixed.
  • Entering values for google.protobuf.Timestamp fields would cause errors in Safari browsers, due to the use of a date format that was not universally accepted by all browsers. This has been fixed.
  • All static resources would previously be served using "public" cache control headers. However, the main index page may include RPC service and method names that are not public. Furthermore, if extra assets were added (using options for the standalone Go package), they would also be served using "public" cache control headers.
    • This is a privacy issue and has been fixed. All assets that may contain non-public data (custom assets and the index page) are now served using a "private" cache control header.
    • There was also a caching issue if the same host and port were used to connect to different backend gRPC servers. In this case, when reloading the index page for a different backend server, the cache directive would allow the browser to use a stale cached copy of the index page, with incorrect services and methods. This could lead to runtime errors until a forced-reload was performed. The index page now uses a "must-revalidate" cache control header to prevent the use of an incorrect stale cached resource.

Command-line tool

This release adds some additional command-line flags:

  • A new -base-path flag allows the UI to be served from a path other than /. This can be useful when grpcui is behind a reverse proxy, so / gets routed to other servers and some other sub-path can be routed to grpcui.
  • The -H, -rpc-header, and -expand-header flags supported by grpcurl are now also supported by grpcui. Headers defined this way will not appear in the web form UI, but will be added to the RPC request.
  • The -use-reflection flag supported by grpcurl is now also supported by grpcui. This allows the UI augment the set of descriptors retrieved from a server (via service reflection) with local proto sources. This can be useful for the UI to understand extensions and custom options that the server may not actually be aware of.
  • A new -preserve-header flag has been added that allows the "invoke" XHR endpoint to propagate HTTP headers it receives as request metadata to the server. This can be useful if grpcui is behind an authenticating proxy, like where a JWT (or other credential) header is transparently added to each request which should be forwarded to backend RPC servers.
  • The -vvv flag previously would log the body of all HTTP requests and responses that the grpcui web server received. When the body was binary and the log was streaming to a terminal, this could result in unpleasant output -- not only because the binary data is unreadable, but also because some binary data could be interpreted as control/escape sequences by the terminal. Binary responses are now hex-encoded in the log.
  • New -extra-js and -extra-css flags can be used to inject custom JS and CSS resources into the index page. This allows for a wide variety of customizations not previously possible without a browser extension.
  • A new -also-serve flag can be used to have the grpcui web server host other files/assets. This can be useful, for example, if a custom CSS resource is used which references things like custom fonts or images.
  • A new -examples flag allows configuring the UI to show a library of canned "example" requests, loaded from a JSON file.

Go package "github.com/fullstorydev/grpcui"

  • Two new functions, AllMethodsViaInProcess and AllFilesViaInProcess, have been added to further simplify the use case where a gRPC UI is embedded into a Go gRPC server. They populate the list of exposed services and file descriptors using the actual services registered with a *grpc.Server and can utilize every proto file generated and linked into the program (even those that are not used or imported by the files that define the services).

Go package "github.com/fullstorydev/grpcui/standalone"

  • Numerous new options have been added for the standalone handler that allow serving custom assets without having to load them all into memory: AddJSFile, AddCSSFile, and ServeAssetFile (similar to existing functions AddJS, AddCSS, and ServeAsset). Furthermore, a new ServeAssetDirectory allows easily adding an entire folder of static resources to be served by the handler.
  • Two new options, WithExamples and WithExampleData, allow specifying a library of canned "example" requests, which will be shown in the UI.

v1.2.0

16 Oct 00:54
461f499
Compare
Choose a tag to compare

Changes

This release includes several fixes and improvements to the web UI and some additional features in the command-line tool.

Web UI

These changes impact usage of both the command-line tool and the Go packages.

  • The UI "Response" tab now renders responses as text areas with formatted JSON. The previous UI attempted to store the response in nested HTML tables, but large and complex response structures induced very poor performance in the browser for laying out and presenting the tables. So the UI is now more responsive. While arguably less aesthetically pleasing, another functional improvement is that it means users can easily copy and paste response messages as JSON.
  • Timestamp fields previously would only accept UTC times (where the time zone offset is "Z") or time zones with negative offsets. Time zones with positive offsets were not accpted. This is fixed: time zones with positive offsets are now supported.
  • When the "Request Timeout" value was a duration that overflows math.MaxInt64 nanoseconds, operations would timeout almost immediately. This was due to the overflow leading to a negative timeout, which was expired immediately upon creation. This has been fixed: on overflow, a value of math.MaxInt64 nanoseconds is used instead (which is nearly 300 years, so will certainly suffice).
  • When responses contained a large amount of data, it was possible for it to be un-renderable, due to an error related to the quota limits of browser local storage. This error caused the processing and rendering of the response to abort. This has been fixed in a variety of ways:
    • Response data is no longer stored in the "history" feature, which is what uses local storage. So encountering a quota limit is much less likely.
    • History is limited to 1mb, and older history entries are purged to keep the total stored value below 1mb. This should further ensure that encountering a quota limit error is highly unlikely.
    • If a quota limit error is encountered, despite the above improvements, it will no longer cause processing of the response to abort. Instead, the error will be logged and the history information will not be updated. This way, the response can still be processed and rendered.

Command-line tool

  • Numerous improvements are included for the parsing of protobuf source files. Most of these issues were cases where grpcui would accept a protobuf source file that could not actually be compiled with protoc. Some were the opposite, where grpcui would fail to parse a source file that protoc would accept and compile. More details can be found in the release notes for the changes to the protoparse library, versions v1.9.0, v1.10.0, and v1.10.1.
  • Protobuf source files may now use the optional keyword, even when a syntax = "proto3" is present. This is a new feature that adds the ability to detect presence of a scalar field, even if it has a default/zero value.
  • Support has been added for a -connect-fail-fast=false command-line flag that causes the server to keep retrying (with backoff between attempts) in the face of what would otherwise be considered permanent failures. For example, errors resolving DNS host names and "connection refused" errors will not cause the program to abort. Instead, the server will keep retrying until a connection is established or until the -connect-timeout has elapsed. This can be useful if grpcui is deployed alongside a server such that the server may not yet be ready and listening on the port when grpcui first tries to connect.

v1.1.0

13 Oct 00:24
Compare
Choose a tag to compare

Changes

This release includes a fix for a bug in the web UI, a small fix for users that build grpcui from source, and some new features.

Web UI

These changes impact usage of both the command-line tool and the Go packages.

  • The UI now includes a new tab, alongside the "Request", "Raw Request", and "Response" tabs: a "History" tab. As RPCs are invoked, this will store the details of the request to browser local storage. The user can then review the history of RPCs from this tab and select one to re-run.
  • A runtime error would occur when trying to add elements (via green "+" button) to a repeated or map field that is nested inside the value of another map field. This has been fixed.

Command-line tool

This release adds some additional command-line flags:

  • A new -default-header flag allows you to define request metadata headers from the command-line. Since request metadata is defined in the web UI, via form, the values indicated on the command-line are populated as defaults. So when you load the web UI, the metadata table will be populated with those values instead of being empty.
  • A new -debug-client flag allows you to enable debug logging inside the web UI client. The log messages are logged to the browser's JavaScript console. At the moment, these are fairly sparse, and related to internal callbacks during handling of updates to the UI when the request form is modified. But additional more useful log messages may be added in the future.

Go package "github.com/fullstorydev/grpcui"

This release fixes a build issue related to the removal of a package from a recent version of the "golang.google.com/grpc" module. This impacted users that linked in this package to their own module or that attempted to build grpcui from source in their own module workspace where the newer version of the gRPC module was in use. The work-arounds were to either explicitly upgrade the version of "github.com/fullstorydev/grpcurl" (a dependency of grpcui) to v1.6.1 or newer or to downgrade the version of "golang.google.com/grpc" to v1.31.0. This has now been remedied so upgrading to v1.1.0 of grpcui no longer requires either of these work-arounds and should be compatible with any constraints in one's go.mod file.

v1.0.0

23 Jun 03:58
2a81cb1
Compare
Choose a tag to compare

Version One!

This release marks grpcui reaching a stable state with fundamental features all working correctly.

Changes

There are numerous changes and fixes since the previous release, v0.2.1.

Web UI

These changes impact usage of both the command-line tool and the Go packages.

  • The web UI would reject values greater than 2^31 for uint32 and fixed32 field types, making it impossible to enter half of the valid values for these fields. This has been corrected.
  • A new Request Timeout field has been added to the bottom of the Request Form tab, allowing a deadline to be set for the invocation.
  • There were previously numerous issues in handling of data entered/pasted into the Raw Request (JSON) tab. All of them have been corrected:
    • The UI was strictly requiring strings for 64-bit integers, but the JSON mapping states that numbers are accepted, too. So now one can enter a JSON blob that uses numbers, and they are handled correctly.
    • This UI was requiring that enum values always use the value names. However, the JSON mapping states that the numeric value is also acceptable. So now one can enter a JSON blob in that uses enum value numbers, and they are handled correctly.
    • Field names in the JSON blob were generally handled incorrectly. The logic was always requiring JSON keys to match the protobuf field name. However the JSON mapping states that the name is converted to camel-case and that the json_name field option can override this to a custom JSON key. So now the JSON keys can refer to the correct JSON field names and be successfully processed. Instead of requiring the protobuf field name, it only accepts protobuf field names as a last resort (if a given JSON key does not match the camel-case version of a field name or a json_name option).

Command-line tool

  • If the process's stdin is a terminal, then the program assumes the user is running the tool interactively, so an attempt will be made to automatically open a browser window pointed at the UI. This can be overridden via a new -open-browser flag.

Go package "github.com/fullstorydev/grpcui"

  • The AllFilesViaReflection and AllMethodsViaReflection functions have been updated to accept a grpc.ClientConnInterface argument, instead of a *grpc.ClientConn. This makes them more flexible as any concrete type can be used that implements the correct interface. This change to the API should be backwards-compatible at the source level.

Go package "github.com/fullstorydev/grpcui/standalone"

  • The HandlerViaReflection function has been updated to accept a grpc.ClientConnInterface argument, instead of a *grpc.ClientConn. This makes it more flexible as any concrete type can be used that implements the correct interface. This change to the API should be backwards-compatible at the source level.
  • The CSS, JS, and the actual HTML code served by the standalone handler can all now be overridden/augmented, to provide more customization to embedded UIs. Previously, using custom CSS, JS, or HTML required falling back to the low-level primitives in the github.com/fullstorydev/grpcui package. But now they can be supplied as options to standalone.Handler to create a single, fully-self-contained handler which serves customized content.