diff --git a/doc/grpc_xds_features.md b/doc/grpc_xds_features.md
new file mode 100644
index 00000000000..3537db2b965
--- /dev/null
+++ b/doc/grpc_xds_features.md
@@ -0,0 +1,40 @@
+# xDS Features in gRPC
+
+This document lists the [xDS](https://github.com/envoyproxy/data-plane-api/tree/master/envoy/api/v2)
+features supported in various gRPC language implementations and versions.
+
+Note that a gRPC client will simply ignore the configuration of a feature it
+does not support. The gRPC client does not generate a log
+to indicate that some configuration was ignored. It is impractical to generate
+a log and keep it up-to-date because xDS has a large number of APIs that gRPC
+does not support and the APIs keep evolving too. We recommend reading the
+[first gRFC](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md)
+on xDS support in gRPC to understand the design philosophy.
+
+The EDS policy will *not* support
+[overprovisioning](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/overprovisioning),
+which is different from Envoy. Envoy takes the overprovisioning into
+account in both [locality-weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight)
+and [priority failover](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/priority),
+but gRPC assumes that the xDS server will update it to redirect traffic
+when this kind of graceful failover is needed. gRPC will send the
+[`envoy.lb.does_not_support_overprovisioning` client
+feature](https://github.com/envoyproxy/envoy/pull/10136) to the xDS
+server to tell the xDS server that it will not perform graceful failover;
+xDS server implementations may use this to decide whether to perform
+graceful failover themselves.
+
+The EDS policy will not support per-endpoint stats; it will report only
+per-locality stats.
+
+An [`lb_endpoint`](https://github.com/envoyproxy/envoy/blob/12a4bc430eaf440ceb0d11286cfbd4c16b79cdd1/api/envoy/api/v2/endpoint/endpoint_components.proto#L72)
+is ignored if the `health_status` is not HEALTHY or UNKNOWN.
+The optional `load_balancing_weight` is always ignored.
+
+Initially, only `google_default` channel creds will be supported
+to authenticate with the xDS server.
+
+Features | gRFCs | [C++, Python,
Ruby, PHP, C#](https://github.com/grpc/grpc/releases) | [Java](https://github.com/grpc/grpc-java/releases) | [Go](https://github.com/grpc/grpc-go/releases)
+---------|--------|--------------|------|------
+**xDS Infrastructure in gRPC client channel:**
LDS->RDS->CDS->EDS flow,
ADS stream, | [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | v1.30.0 | v1.30.0 | v1.30.0 |
+**Load Balancing:**
Virtual host matching,
Only default path ("" or "/") matching,
Priority-based weighted round-robin locality picking,
Round-robin endpoint picking within locality,
Cluster route action,
Client-side Load reporting via [LRS](https://github.com/envoyproxy/data-plane-api/blob/master/envoy/service/load_stats/v2/lrs.proto)| [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | v1.30.0 | v1.30.0 | v1.30.0 |
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index f9fcb6142ee..bf68c587f56 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -778,6 +778,7 @@ doc/fail_fast.md \
doc/fork_support.md \
doc/g_stands_for.md \
doc/grpc_release_schedule.md \
+doc/grpc_xds_features.md \
doc/health-checking.md \
doc/http-grpc-status-mapping.md \
doc/http2-interop-test-descriptions.md \
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index 613e824f4d7..1867476c484 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -778,6 +778,7 @@ doc/fail_fast.md \
doc/fork_support.md \
doc/g_stands_for.md \
doc/grpc_release_schedule.md \
+doc/grpc_xds_features.md \
doc/health-checking.md \
doc/http-grpc-status-mapping.md \
doc/http2-interop-test-descriptions.md \
diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core
index 5242b54e13a..8da50b0c21b 100644
--- a/tools/doxygen/Doxyfile.core
+++ b/tools/doxygen/Doxyfile.core
@@ -785,6 +785,7 @@ doc/fail_fast.md \
doc/fork_support.md \
doc/g_stands_for.md \
doc/grpc_release_schedule.md \
+doc/grpc_xds_features.md \
doc/health-checking.md \
doc/http-grpc-status-mapping.md \
doc/http2-interop-test-descriptions.md \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index b0a051f81b8..bff4f23c4a4 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -785,6 +785,7 @@ doc/fail_fast.md \
doc/fork_support.md \
doc/g_stands_for.md \
doc/grpc_release_schedule.md \
+doc/grpc_xds_features.md \
doc/health-checking.md \
doc/http-grpc-status-mapping.md \
doc/http2-interop-test-descriptions.md \
diff --git a/tools/doxygen/Doxyfile.objc b/tools/doxygen/Doxyfile.objc
index 2eace4b5928..0eea44a5c24 100644
--- a/tools/doxygen/Doxyfile.objc
+++ b/tools/doxygen/Doxyfile.objc
@@ -776,6 +776,7 @@ doc/fail_fast.md \
doc/fork_support.md \
doc/g_stands_for.md \
doc/grpc_release_schedule.md \
+doc/grpc_xds_features.md \
doc/health-checking.md \
doc/http-grpc-status-mapping.md \
doc/http2-interop-test-descriptions.md \
diff --git a/tools/doxygen/Doxyfile.objc.internal b/tools/doxygen/Doxyfile.objc.internal
index 93a25087e4d..3c4593c6d1a 100644
--- a/tools/doxygen/Doxyfile.objc.internal
+++ b/tools/doxygen/Doxyfile.objc.internal
@@ -776,6 +776,7 @@ doc/fail_fast.md \
doc/fork_support.md \
doc/g_stands_for.md \
doc/grpc_release_schedule.md \
+doc/grpc_xds_features.md \
doc/health-checking.md \
doc/http-grpc-status-mapping.md \
doc/http2-interop-test-descriptions.md \