A repository for gRFCs
Go to file
AJ Heller 7c47d4ce98
Update link to LoadReport proto
The previously linked version was missing key fields, which are necessary for A58 to make sense.
2024-01-10 13:28:06 -08:00
A6_graphics
A14_graphics
A27_graphics A27: xDS-Based Global Load Balancing (#170) 2020-03-18 11:25:53 -07:00
A28_graphics A28: gRPC xDS traffic splitting and routing (#178) 2020-06-15 16:44:34 -07:00
A31_graphics A31: xDS Timeout Support and Config Selector Design (#192) 2020-09-18 08:41:16 -07:00
A37_graphics A37: xDS Aggregate and Logical DNS Clusters (#216) 2021-02-11 15:20:58 -08:00
A42_graphics A42: xDS Ring Hash LB Policy (#239) 2021-06-09 11:09:37 -07:00
A44_graphics A44: gRPC xDS Retry Support (#253) 2021-08-16 17:26:35 -07:00
A50_graphics A50: gRPC xDS Outlier Detection Support (#281) 2022-02-16 13:01:15 -08:00
A52_graphics A52: gRPC xDS Custom Load Balancer Configuration (#298) 2022-05-09 10:01:54 -07:00
A55_graphics A55: Stateful session affinity for gRPC clients (#319) 2023-01-24 08:17:52 -08:00
A60_graphics A60: xDS WeightedClusters support for Stateful Session Affinity (#348) 2023-04-27 23:54:49 +05:30
L9_graphics
L38_graphics
L50_graphics
L55_graphics
L56_graphics
L63_graphics L63: Core/C++ CallCredentials DebugString() (#171) 2020-02-27 14:30:28 -08:00
L73-java-binderchannel BinderChannel: Clarify that only stream transactions are counted in flow control (#311) 2022-06-15 08:39:33 +08:00
L96_graphics L96: .NET: Load balancing, connectivity and wait for ready in client (#240) 2022-03-08 15:49:05 +01:00
.gitignore
A1-http-connect-proxy-support.md
A2-service-configs-in-dns.md
A3-channel-tracing.md
A5-grpclb-in-dns.md
A6-client-retries.md A6 update: make changes based on conversations (#339) 2023-02-03 13:47:31 -08:00
A8-client-side-keepalive.md
A9-server-side-conn-mgt.md
A10-avoid-grpclb-and-service-config-for-localhost-and-ip-literals.md
A14-channelz.md
A15-promote-reflection.md
A16-binary-logging.md A16-binary-logging: fix config format (#195) 2020-07-14 11:04:45 -07:00
A17-client-side-health-checking.md
A18-tcp-user-timeout.md Update A18: Java was implemented in 2019 (#400) 2023-11-07 15:51:26 -08:00
A21-service-config-error-handling.md A21 update: Add note on fallback to default service config if no service config is found (#142) 2022-09-06 17:20:01 -07:00
A24-lb-policy-config.md
A26-grpclb-selection.md A26: gRPCLB Selection (#164) 2019-11-08 09:31:53 -08:00
A27-xds-global-load-balancing.md A27 update: note restrictions on locality priority and weight, and on addresses (#332) 2022-10-13 10:32:40 -07:00
A28-xds-traffic-splitting-and-routing.md A28 update: fake content-type header and exclude -bin headers (#378) 2023-07-18 15:20:42 -07:00
A29-xds-tls-security.md A29: xDS-Based Security for gRPC Clients and Servers (#243) 2021-08-30 11:42:43 -07:00
A30-xds-v3.md A30 update: remove info about ongoing xDS version changes (#333) 2022-10-25 08:32:01 -07:00
A31-xds-timeout-support-and-config-selector.md A31: update xds field names to reflect recent changes (#209) 2020-09-24 12:22:37 -07:00
A32-xds-circuit-breaking.md A32: mention circuit breaking atomics are shared globally for entire client process (#220) 2021-02-12 16:32:29 -08:00
A33-Fault-Injection.md Patch the gRFC A33 with details around 200/OK and headers (#225) 2021-03-01 14:17:23 -08:00
A36-xds-for-servers.md Update the C++ API for connection drain grace time (#280) 2022-01-19 11:30:20 -08:00
A37-xds-aggregate-and-logical-dns-clusters.md A37, A42, and A52 update: clarify aggregate cluster handling, and LB policy registry algorithm (#390) 2023-08-24 13:25:42 -07:00
A38-admin-interface-api.md A38: Admin Interface API (#218) 2021-03-05 13:20:59 -08:00
A39-xds-http-filters.md A39 update: Require that the HTTP filter list be non-empty. (#266) 2021-10-07 10:32:47 -07:00
A40-csds-support.md [CSDS] Add a description for picking the config dump wrapper (#267) 2021-10-20 10:19:37 -07:00
A41-xds-rbac.md A41: Call out precise HeaderMatcher.invert_match semantics (#270) 2022-06-06 16:16:18 -07:00
A42-xds-ring-hash-lb-policy.md A42 update: Clarify a few points in the design (#393) 2023-09-07 17:39:03 -07:00
A43-grpc-authorization-api.md A43: gRPC Authorization API (#246) 2022-02-04 13:18:42 -08:00
A44-xds-retry.md A44: gRPC xDS Retry Support (#253) 2021-08-16 17:26:35 -07:00
A45-retry-stats.md grfc: fix typo in the title of A45 (#324) 2022-08-25 16:43:50 -07:00
A46-xds-nack-semantics-improvement.md A46: xDS NACK Semantics Improvement (#260) 2021-09-20 12:52:24 -07:00
A47-xds-federation.md A47 update: EDS resource name field is required for new-style CDS resources (#377) 2023-06-13 13:23:18 -07:00
A48-xds-least-request-lb-policy.md Update A48: remove reference to Go's base balancer (#387) 2023-11-07 13:14:56 -08:00
A50-xds-outlier-detection.md A50 update: Explicitly mention that attributes are not used, and explain why (#396) 2023-10-06 11:20:10 -07:00
A51-custom-backend-metrics.md Update link to LoadReport proto 2024-01-10 13:28:06 -08:00
A52-xds-custom-lb-policies.md A37, A42, and A52 update: clarify aggregate cluster handling, and LB policy registry algorithm (#390) 2023-08-24 13:25:42 -07:00
A53-xds-ignore-resource-deletion.md A53 update: Add Java as implemented (#318) 2022-08-17 10:04:30 -07:00
A54-restrict-control-plane-status-codes.md A54: Restrict Control-Plane Status Codes (#314) 2022-08-24 16:19:33 -07:00
A55-xds-stateful-session-affinity.md update status and implementation details (#347) 2023-03-21 14:26:43 -07:00
A56-priority-lb-policy.md A56: priority LB policy (#321) 2022-12-06 14:33:53 -08:00
A57-xds-client-failure-mode-behavior.md A57: XdsClient Failure Mode Behavior (#335) 2022-11-15 09:32:35 -08:00
A58-client-side-weighted-round-robin-lb-policy.md A58 update: Prefer application_utilization to cpu_utilization (#373) 2023-06-07 08:14:30 -07:00
A59-audit-logging.md A59: gRPC Audit Logging (#346) 2023-10-02 10:04:57 -07:00
A60-xds-stateful-session-affinity-weighted-clusters.md A60: xDS WeightedClusters support for Stateful Session Affinity (#348) 2023-04-27 23:54:49 +05:30
A61-IPv4-IPv6-dualstack-backends.md A61: IPv4 and IPv6 Dualstack Backend Support (#356) 2023-12-15 17:44:13 -08:00
A62-pick-first.md A62 update: clarify that shuffling happens upon address list update (#375) 2023-06-08 07:50:50 -07:00
A63-xds-string-matcher-in-header-matching.md A63: xDS StringMatcher in Header Matching (#359) 2023-05-18 13:05:22 -07:00
A64-lrs-custom-metrics.md A64: xDS LRS Custom Metrics Support (#368) 2023-05-26 23:10:10 -07:00
A65-xds-mtls-creds-in-bootstrap.md A65: mTLS Credentials in xDS Bootstrap File (#372) 2023-06-09 13:49:50 -07:00
A66-otel-stats.md Add authorship to A66 (#403) 2023-11-29 14:33:08 -08:00
A71-xds-fallback.md A71: xDS Fallback (#386) 2024-01-04 15:50:38 -08:00
CODE-OF-CONDUCT.md
G1-true-binary-metadata.md
G2-http3-protocol.md Update G2-http3-protocol.md (#331) 2022-11-11 13:53:19 -08:00
GOVERNANCE.md
GRFC-TEMPLATE.md template: add section for environment variable protection (#222) 2021-03-11 10:30:42 -08:00
L1-cpp-stream-coalescing.md
L2-cpp-completion-queue-creation-api.md
L5-node-client-interceptors.md
L6-core-allow-cpp.md
L7-go-metadata-api.md
L8-cpp-internalization.md
L9-go-resolver-balancer-API.md
L11-ruby-interceptors.md
L12-csharp-interceptors.md
L13-python-interceptors.md
L15-php-interceptors.md
L17-cpp-sync-server-exceptions.md
L18-core-remove-grpc-alarm.md
L21-core-gpr-review.md
L22-cpp-change-grpcpp-dir-name.md
L23-node-protobufjs-library.md
L24-cpp-extensible-api.md
L25-cpp-expose-buffer-reader-writer.md
L26-cpp-raw-codegen-api.md
L29-cpp-opencensus-filter.md
L30-cpp-control-max-threads-in-SyncServer.md
L31-php-intercetor-api-change.md
L32-node-channel-API.md
L33-node-checkServerIdentity-callback.md
L34-cpp-opencensus-span-api.md
L35-node-getAuthContext.md
L38-objc-api-upgrade.md
L39-core-remove-grpc-use-signal.md
L40-node-call-invocation-transformer.md
L41-node-server-async-bind.md
L42-python-metadata-flags.md
L43-node-type-info.md
L44-python-rich-status.md
L45-cpp-server-load-reporting.md
L46-python-compression-api.md
L48-node-metadata-options.md
L49-objc-flow-control.md
L50-objc-interceptor.md
L51-java-rm-nano-proto.md
L52-core-static-method-host.md
L54-python-server-wait.md
L55-objc-global-interceptor.md
L56-objc-bazel-support.md
L57-csharp-new-major-version.md
L58-python-async-api.md L58: Async API for gRPC Python (#155) 2020-05-26 10:25:34 -07:00
L59-core-allow-cppstdlib.md
L60-core-remove-custom-allocator.md L60: Remove custom allocation function overrides from core surface API (#162) 2019-10-31 14:13:32 -07:00
L62-core-call-credential-security-level.md gRFC L62-core:gRPC security level negotiation between channels and call creds (#167) 2020-01-06 10:34:31 -08:00
L63-core-call-credentials-debug-string.md L63: Core/C++ CallCredentials DebugString() (#171) 2020-02-27 14:30:28 -08:00
L64-python-runtime-proto-parsing.md Update simple stubs status to implemented (#207) 2020-09-08 16:24:18 -07:00
L65-python-package-name.md L65: Additional PyPI Packages for gRPC Python (#177) 2020-06-01 10:00:02 -07:00
L66-core-cancellation-status.md L66: Core server RPCs will not report cancellation if completed with non-OK status (#179) 2020-06-11 09:07:44 -07:00
L67-cpp-callback-api.md L67: C++ callback-based asynchronous API (#180) 2021-05-27 14:52:01 -07:00
L68-core-callback-api.md L68: Core callback completion queue (#181) 2020-06-23 12:44:19 -07:00
L70-node-proto-loader-type-generator.md L70 update: Type branding for proto-loader-gen-types (#342) 2022-12-05 07:37:54 -08:00
L72-core-google_default_credentials-extension.md L72: Allow Call Credentials to be Specified in `grpc_google_default_credentials_create` (#190) 2020-07-20 11:44:56 -07:00
L73-java-binderchannel.md L73-java-binderchannel - Remove OnDevice*Builder. (#313) 2022-07-06 09:00:52 -07:00
L74-java-channel-creds.md L74: Fix missed updates to factory methods (#235) 2021-05-06 15:43:58 -07:00
L75-core-remove-grpc-channel-ping.md L75: Proposal to remove grpc_channel_ping from core surface API (#203) 2020-09-08 11:32:16 -07:00
L77-core-cpp-third-party-identity-support-for-call-credentials.md L77: Core and C++ Third Party Identity Support for Call Credentials (#221) 2021-02-08 13:55:47 -08:00
L78-python-rich-server-context.md L78: Python: Expose rich server context (#224) 2021-03-31 10:19:01 -07:00
L79-cpp-byte-buffer-slice-methods.md L79: C++ API changes on ByteBuffer and Slice (#232) 2021-05-25 13:36:18 -07:00
L80-cpp-async-response-reader-destruction.md L80: change to only a minor version bump. (#242) 2021-06-05 10:20:23 -04:00
L84-cpp-call-failed-before-recv-message.md L84: Add grpc_call_failed_before_recv_message() to C-core API (#257) 2021-09-09 10:16:07 -07:00
L86-aspect-based-python-bazel-rules.md L86: Start new gRFC for aspect-based python bazel rules (#263) 2021-10-21 16:38:34 -07:00
L88-cpp-absl-status-conversions.md L88-cpp: Add conversion operators between absl::Status and grpc::Status. (#273) 2021-11-16 09:20:02 -08:00
L89-core-remove-grpc-insecure-channel-creation-api.md L89: C-core: Remove grpc_insecure_channel_create and grpc_server_add_insecure_http2_port from Core Surface API (#272) 2022-03-29 14:52:37 -07:00
L91-improved-directory-support-for-python-bazel-rules.md L91: Improved handling of subdirectories and external repositories for py_proto_library (#277) 2021-12-13 10:07:10 -08:00
L92-dotnet-grpc-web.md L92: grpc-dotnet gRPC-Web proposal (#169) 2022-01-04 15:35:35 +01:00
L93-node-securecontext-creds.md L93: Add a new Node API to create credentials from a SecureContext (#282) 2022-01-10 14:05:43 -08:00
L94-core-eliminate-slice-interning.md L94: C-core: Eliminate slice interning (#284) 2022-01-25 08:09:31 -08:00
L95-python-reflection-client.md L95: Python reflection client (#286) 2022-02-10 09:51:19 -08:00
L96-csharp-load-balancing.md L96: .NET: Load balancing, connectivity and wait for ready in client (#240) 2022-03-08 15:49:05 +01:00
L98-requiring-cpp14.md Update L98-requiring-cpp14 to have the OSS policy doc (#312) 2022-06-30 13:22:34 -07:00
L99-core-eliminate-corking.md L99: C-core: Eliminate corking (#316) 2022-08-16 07:00:18 -07:00
L100-core-narrow-call-details.md L100: C-core: Narrow grpc_call_details (#317) 2022-08-16 07:00:07 -07:00
L101-core-remove-grpc_register_plugin.md L101: Remove grpc_register_plugin (#325) 2022-09-20 07:41:05 -07:00
L102-cpp-version-macros.md Added L102-cpp-version-macros (#327) 2022-10-27 15:55:45 -07:00
L103-core-move-insecure-creds-declaration.md L103: C-core: Move insecure credentials functions into their own header file (#329) 2022-11-17 09:58:03 -08:00
L104-core-ban-recv-with-send-status.md L104: Ban GRPC_OP_SEND_STATUS_FROM_SERVER in combination with recv ops (#336) 2023-01-14 08:33:59 -08:00
L105-python-expose-new-error-types.md L105: Python Add New Error Types (#388) 2023-09-27 09:46:48 -07:00
L106-node-heath-check-library.md L106: Node Heath Check Library 2.0 (#391) 2023-09-13 16:59:22 -07:00
L107-node-noop-start.md L107: Node: Make `Server#start` a no-op (#395) 2023-10-17 14:55:20 -07:00
L108-node-grpc-reflection-library.md L108: Node.js Reflection Server Library (#397) 2023-11-08 15:20:24 -08:00
L109-node-server-unbind.md L109: Node: Server API to unbind ports (#398) 2023-11-08 13:52:21 -08:00
L110-csharp-nullable-reference-types.md L110: C# nullable reference types proposal (#394) 2023-10-23 09:54:06 -07:00
L111-node-server-drain.md L111: Node: Server API to drain connections on a port (#401) 2023-12-01 11:43:50 -08:00
LICENSE
P1-cloud-native.md
P3-grfcs-for-core-api-changes.md
P4-grpc-cve-process.md P4 update: Remove dead link to ISSUE_TEMPLATE (#376) 2023-06-09 13:14:14 -07:00
P5-jdk-version-support.md P5: JDK Version Support Policy (#283) 2022-01-14 13:50:37 -08:00
README.md Copy edit README.md (#176) 2020-05-28 08:46:42 -07:00

README.md

gRPC RFCs

Introduction

Please read the gRPC organization's governance rules and contribution guidelines before proceeding.

This repo contains the design proposals for substantial feature changes for gRPC that need to be designed upfront. The goal of the upfront design process is to:

  • Provide increased visibility to the community on upcoming changes and the design considerations around them.
  • Provide ability to reason about larger “sets” of changes that are too big to be covered either in an Issue or in a PR.
  • Establish a consistent process for structured participation by the community on large changes, especially those that impact multiple runtimes and implementations.

Prerequisites

This process needs to be followed for any significant change to gRPC that needs design. Changes that are considered significant can be:

  • Features that need implementation across runtimes and languages.
  • Process changes that affect how the gRPC product is implemented.
  • Breaking changes to the public API (i.e. semver major changes).

Process

  1. Fork the repo and copy the template GRFC-TEMPLATE.md.
  2. Rename it to $CategoryName-$Summary, eg.: A6-client-retries.md (see category definitions below)
    • For language-specific proposals, include the name of the language: L##-$Language-$Summary. Canonical names: core, cpp, csharp, go, java, node, objc, php, python, ruby.
  3. Write up the RFC.
  4. Submit a Pull Request.
  5. Someone from gRPC team will be assigned as an APPROVER as part of this review. Once the APPROVER is assigned, the OWNER needs to start a discussion on grpc-io and update the PR with the discussion link. After this is done, the OWNER should update the gRFC to the state of In Review. It is expected that the APPROVER will help the OWNER along this process as needed.
  6. For at least a period of 10 business days (the minimum comment period), it is expected that the OWNER will respond to the comments and make updates to the RFC as new commits to the PR. Through the process, the discussion needs to be kept to the designated thread in the mailing list in order to avoid splintering conversations. The OWNER is encouraged to solicit as much feedback on the proposal as possible during this period. PR comments should be limited to formatting and vocabulary.
  7. If there is consensus as deemed by the APPROVER during the comment period, the APPROVER will mark the proposal as final and assign it a gRFC number. Once this is assigned (as part of the closure of discussion), the OWNER will update the state of the PR as final and submit the PR. Commits must not be squashed; the commit history serves as a log of changes made to the proposal.

APPROVER

  • By default a11r is the approver unless another approver is assigned on a per-proposal basis.
  • If the assigned APPROVER and the OWNER cannot satisfactorily settle an issue, the final APPROVER is still a11r.

Proposal Categories

The proposals shall be numbered in increasing order.

  • #An - Affects all languages.
  • #Pnn - Affects processes, such as the proposal process itself.
  • #Lnnn - Language specific changes to external APIs or platform support.
  • #Gnnnn - Protocol level changes.

Proposal Status

  1. Every uncommitted proposal candidate starts off in the Draft state.
  2. After it accepted for review and posted to the group, it enters the In Review state.
  3. Once it is approved for submission by the arbiter, it goes into the Final state. Only minor changes are allowed (what qualifies as minor is left to the APPROVER).
  4. If a proposal needs to be revisited, it can be moved back to the Draft or In Review state. This can happen if issues are discovered during implementation. At which point, the review process as described above must be followed.
  5. Once a proposal is Final and if it has been implemented by a language, it can be updated to a status of Implemented with the implementing languages listed. (Listing versions is not required.)