diff --git a/services/syncbase/.api b/services/syncbase/.api
index 36bafaf..bb7b6a8 100644
--- a/services/syncbase/.api
+++ b/services/syncbase/.api
@@ -69,7 +69,6 @@
 pkg syncbase, method (*BlobManagerPutBlobServerCallStub) Init(rpc.StreamServerCall)
 pkg syncbase, method (*BlobManagerPutBlobServerCallStub) RecvStream() interface {  Advance() bool; Value() []byte; Err() error;}
 pkg syncbase, method (*BlobRef) VDLRead(vdl.Decoder) error
-pkg syncbase, method (*CollectionRow) VDLRead(vdl.Decoder) error
 pkg syncbase, method (*CollectionRowPattern) VDLRead(vdl.Decoder) error
 pkg syncbase, method (*CollectionScanServerCallStub) Init(rpc.StreamServerCall)
 pkg syncbase, method (*CollectionScanServerCallStub) SendStream() interface {  Send(item KeyValue) error;}
@@ -117,8 +116,6 @@
 pkg syncbase, method (BlobFetchStatus) VDLWrite(vdl.Encoder) error
 pkg syncbase, method (BlobRef) VDLIsZero() bool
 pkg syncbase, method (BlobRef) VDLWrite(vdl.Encoder) error
-pkg syncbase, method (CollectionRow) VDLIsZero() bool
-pkg syncbase, method (CollectionRow) VDLWrite(vdl.Encoder) error
 pkg syncbase, method (CollectionRowPattern) VDLIsZero() bool
 pkg syncbase, method (CollectionRowPattern) VDLWrite(vdl.Encoder) error
 pkg syncbase, method (ConflictDataBatch) Index() int
@@ -305,9 +302,6 @@
 pkg syncbase, type CollectionClientStub interface, Scan(*context.T, BatchHandle, []byte, []byte, ...rpc.CallOpt) (CollectionScanClientCall, error)
 pkg syncbase, type CollectionClientStub interface, SetPermissions(*context.T, BatchHandle, access.Permissions, ...rpc.CallOpt) error
 pkg syncbase, type CollectionClientStub interface, unexported methods
-pkg syncbase, type CollectionRow struct
-pkg syncbase, type CollectionRow struct, CollectionId Id
-pkg syncbase, type CollectionRow struct, Row string
 pkg syncbase, type CollectionRowPattern struct
 pkg syncbase, type CollectionRowPattern struct, CollectionBlessing string
 pkg syncbase, type CollectionRowPattern struct, CollectionName string
diff --git a/services/syncbase/syncbase.vdl.go b/services/syncbase/syncbase.vdl.go
index 8469ae5..999f8c9 100644
--- a/services/syncbase/syncbase.vdl.go
+++ b/services/syncbase/syncbase.vdl.go
@@ -520,85 +520,6 @@
 	}
 }
 
-// CollectionRow encapsulates a collection id and row key or row prefix.
-type CollectionRow struct {
-	CollectionId Id
-	Row          string
-}
-
-func (CollectionRow) __VDLReflect(struct {
-	Name string `vdl:"v.io/v23/services/syncbase.CollectionRow"`
-}) {
-}
-
-func (x CollectionRow) VDLIsZero() bool {
-	return x == CollectionRow{}
-}
-
-func (x CollectionRow) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_8); err != nil {
-		return err
-	}
-	if x.CollectionId != (Id{}) {
-		if err := enc.NextField("CollectionId"); err != nil {
-			return err
-		}
-		if err := x.CollectionId.VDLWrite(enc); err != nil {
-			return err
-		}
-	}
-	if x.Row != "" {
-		if err := enc.NextField("Row"); err != nil {
-			return err
-		}
-		if err := enc.StartValue(vdl.StringType); err != nil {
-			return err
-		}
-		if err := enc.EncodeString(x.Row); err != nil {
-			return err
-		}
-		if err := enc.FinishValue(); err != nil {
-			return err
-		}
-	}
-	if err := enc.NextField(""); err != nil {
-		return err
-	}
-	return enc.FinishValue()
-}
-
-func (x *CollectionRow) VDLRead(dec vdl.Decoder) error {
-	*x = CollectionRow{}
-	if err := dec.StartValue(__VDLType_struct_8); err != nil {
-		return err
-	}
-	for {
-		f, err := dec.NextField()
-		if err != nil {
-			return err
-		}
-		switch f {
-		case "":
-			return dec.FinishValue()
-		case "CollectionId":
-			if err := x.CollectionId.VDLRead(dec); err != nil {
-				return err
-			}
-		case "Row":
-			switch value, err := dec.ReadValueString(); {
-			case err != nil:
-				return err
-			default:
-				x.Row = value
-			}
-		default:
-			if err := dec.SkipValue(); err != nil {
-				return err
-			}
-		}
-	}
-}
-
 // SyncgroupSpec contains the specification for a syncgroup.
 type SyncgroupSpec struct {
 	// Human-readable description of this syncgroup.
@@ -653,7 +574,7 @@
 }
 
 func (x SyncgroupSpec) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_9); err != nil {
+	if err := enc.StartValue(__VDLType_struct_8); err != nil {
 		return err
 	}
 	if x.Description != "" {
@@ -729,7 +650,7 @@
 }
 
 func __VDLWriteAnon_list_1(enc vdl.Encoder, x []Id) error {
-	if err := enc.StartValue(__VDLType_list_11); err != nil {
+	if err := enc.StartValue(__VDLType_list_10); err != nil {
 		return err
 	}
 	if err := enc.SetLenHint(len(x)); err != nil {
@@ -750,7 +671,7 @@
 }
 
 func __VDLWriteAnon_list_2(enc vdl.Encoder, x []string) error {
-	if err := enc.StartValue(__VDLType_list_12); err != nil {
+	if err := enc.StartValue(__VDLType_list_11); err != nil {
 		return err
 	}
 	if err := enc.SetLenHint(len(x)); err != nil {
@@ -778,7 +699,7 @@
 
 func (x *SyncgroupSpec) VDLRead(dec vdl.Decoder) error {
 	*x = SyncgroupSpec{}
-	if err := dec.StartValue(__VDLType_struct_9); err != nil {
+	if err := dec.StartValue(__VDLType_struct_8); err != nil {
 		return err
 	}
 	for {
@@ -831,7 +752,7 @@
 }
 
 func __VDLReadAnon_list_1(dec vdl.Decoder, x *[]Id) error {
-	if err := dec.StartValue(__VDLType_list_11); err != nil {
+	if err := dec.StartValue(__VDLType_list_10); err != nil {
 		return err
 	}
 	if len := dec.LenHint(); len > 0 {
@@ -856,7 +777,7 @@
 }
 
 func __VDLReadAnon_list_2(dec vdl.Decoder, x *[]string) error {
-	if err := dec.StartValue(__VDLType_list_12); err != nil {
+	if err := dec.StartValue(__VDLType_list_11); err != nil {
 		return err
 	}
 	if len := dec.LenHint(); len > 0 {
@@ -892,7 +813,7 @@
 }
 
 func (x SyncgroupMemberInfo) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_13); err != nil {
+	if err := enc.StartValue(__VDLType_struct_12); err != nil {
 		return err
 	}
 	if x.SyncPriority != 0 {
@@ -931,7 +852,7 @@
 
 func (x *SyncgroupMemberInfo) VDLRead(dec vdl.Decoder) error {
 	*x = SyncgroupMemberInfo{}
-	if err := dec.StartValue(__VDLType_struct_13); err != nil {
+	if err := dec.StartValue(__VDLType_struct_12); err != nil {
 		return err
 	}
 	for {
@@ -1033,7 +954,7 @@
 }
 
 func (x ResolverType) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_enum_14); err != nil {
+	if err := enc.StartValue(__VDLType_enum_13); err != nil {
 		return err
 	}
 	if err := enc.EncodeString(x.String()); err != nil {
@@ -1107,7 +1028,7 @@
 }
 
 func (x BatchSource) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_enum_15); err != nil {
+	if err := enc.StartValue(__VDLType_enum_14); err != nil {
 		return err
 	}
 	if err := enc.EncodeString(x.String()); err != nil {
@@ -1150,7 +1071,7 @@
 }
 
 func (x BatchInfo) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_16); err != nil {
+	if err := enc.StartValue(__VDLType_struct_15); err != nil {
 		return err
 	}
 	if x.Id != 0 {
@@ -1197,7 +1118,7 @@
 
 func (x *BatchInfo) VDLRead(dec vdl.Decoder) error {
 	*x = BatchInfo{}
-	if err := dec.StartValue(__VDLType_struct_16); err != nil {
+	if err := dec.StartValue(__VDLType_struct_15); err != nil {
 		return err
 	}
 	for {
@@ -1305,7 +1226,7 @@
 }
 
 func (x ValueState) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_enum_17); err != nil {
+	if err := enc.StartValue(__VDLType_enum_16); err != nil {
 		return err
 	}
 	if err := enc.EncodeString(x.String()); err != nil {
@@ -1356,7 +1277,7 @@
 }
 
 func (x Value) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_18); err != nil {
+	if err := enc.StartValue(__VDLType_struct_17); err != nil {
 		return err
 	}
 	if x.State != ValueStateExists {
@@ -1397,7 +1318,7 @@
 	*x = Value{
 		Bytes: vom.RawBytesOf(vdl.ZeroValue(vdl.AnyType)),
 	}
-	if err := dec.StartValue(__VDLType_struct_18); err != nil {
+	if err := dec.StartValue(__VDLType_struct_17); err != nil {
 		return err
 	}
 	for {
@@ -1463,7 +1384,7 @@
 }
 
 func (x RowOp) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_19); err != nil {
+	if err := enc.StartValue(__VDLType_struct_18); err != nil {
 		return err
 	}
 	if x.Key != "" {
@@ -1521,7 +1442,7 @@
 
 func (x *RowOp) VDLRead(dec vdl.Decoder) error {
 	*x = RowOp{}
-	if err := dec.StartValue(__VDLType_struct_19); err != nil {
+	if err := dec.StartValue(__VDLType_struct_18); err != nil {
 		return err
 	}
 	for {
@@ -1540,7 +1461,7 @@
 				x.Key = value
 			}
 		case "LocalValue":
-			if err := dec.StartValue(__VDLType_optional_20); err != nil {
+			if err := dec.StartValue(__VDLType_optional_19); err != nil {
 				return err
 			}
 			if dec.IsNil() {
@@ -1556,7 +1477,7 @@
 				}
 			}
 		case "RemoteValue":
-			if err := dec.StartValue(__VDLType_optional_20); err != nil {
+			if err := dec.StartValue(__VDLType_optional_19); err != nil {
 				return err
 			}
 			if dec.IsNil() {
@@ -1572,7 +1493,7 @@
 				}
 			}
 		case "AncestorValue":
-			if err := dec.StartValue(__VDLType_optional_20); err != nil {
+			if err := dec.StartValue(__VDLType_optional_19); err != nil {
 				return err
 			}
 			if dec.IsNil() {
@@ -1613,7 +1534,7 @@
 }
 
 func (x ScanOp) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_21); err != nil {
+	if err := enc.StartValue(__VDLType_struct_20); err != nil {
 		return err
 	}
 	if x.Start != "" {
@@ -1652,7 +1573,7 @@
 
 func (x *ScanOp) VDLRead(dec vdl.Decoder) error {
 	*x = ScanOp{}
-	if err := dec.StartValue(__VDLType_struct_21); err != nil {
+	if err := dec.StartValue(__VDLType_struct_20); err != nil {
 		return err
 	}
 	for {
@@ -1758,7 +1679,7 @@
 }
 
 func (x OperationRead) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_union_22); err != nil {
+	if err := enc.StartValue(__VDLType_union_21); err != nil {
 		return err
 	}
 	if err := enc.NextField("Read"); err != nil {
@@ -1774,7 +1695,7 @@
 }
 
 func (x OperationWrite) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_union_22); err != nil {
+	if err := enc.StartValue(__VDLType_union_21); err != nil {
 		return err
 	}
 	if err := enc.NextField("Write"); err != nil {
@@ -1790,7 +1711,7 @@
 }
 
 func (x OperationScan) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_union_22); err != nil {
+	if err := enc.StartValue(__VDLType_union_21); err != nil {
 		return err
 	}
 	if err := enc.NextField("Scan"); err != nil {
@@ -1806,7 +1727,7 @@
 }
 
 func VDLReadOperation(dec vdl.Decoder, x *Operation) error {
-	if err := dec.StartValue(__VDLType_union_22); err != nil {
+	if err := dec.StartValue(__VDLType_union_21); err != nil {
 		return err
 	}
 	f, err := dec.NextField()
@@ -1877,7 +1798,7 @@
 }
 
 func (x RowInfo) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_23); err != nil {
+	if err := enc.StartValue(__VDLType_struct_22); err != nil {
 		return err
 	}
 	if x.Op != nil && !x.Op.VDLIsZero() {
@@ -1903,7 +1824,7 @@
 }
 
 func __VDLWriteAnon_list_3(enc vdl.Encoder, x []uint64) error {
-	if err := enc.StartValue(__VDLType_list_24); err != nil {
+	if err := enc.StartValue(__VDLType_list_23); err != nil {
 		return err
 	}
 	if err := enc.SetLenHint(len(x)); err != nil {
@@ -1933,7 +1854,7 @@
 	*x = RowInfo{
 		Op: OperationRead{},
 	}
-	if err := dec.StartValue(__VDLType_struct_23); err != nil {
+	if err := dec.StartValue(__VDLType_struct_22); err != nil {
 		return err
 	}
 	for {
@@ -1961,7 +1882,7 @@
 }
 
 func __VDLReadAnon_list_3(dec vdl.Decoder, x *[]uint64) error {
-	if err := dec.StartValue(__VDLType_list_24); err != nil {
+	if err := dec.StartValue(__VDLType_list_23); err != nil {
 		return err
 	}
 	if len := dec.LenHint(); len > 0 {
@@ -2033,7 +1954,7 @@
 }
 
 func (x ConflictDataBatch) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_union_25); err != nil {
+	if err := enc.StartValue(__VDLType_union_24); err != nil {
 		return err
 	}
 	if err := enc.NextField("Batch"); err != nil {
@@ -2049,7 +1970,7 @@
 }
 
 func (x ConflictDataRow) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_union_25); err != nil {
+	if err := enc.StartValue(__VDLType_union_24); err != nil {
 		return err
 	}
 	if err := enc.NextField("Row"); err != nil {
@@ -2065,7 +1986,7 @@
 }
 
 func VDLReadConflictData(dec vdl.Decoder, x *ConflictData) error {
-	if err := dec.StartValue(__VDLType_union_25); err != nil {
+	if err := dec.StartValue(__VDLType_union_24); err != nil {
 		return err
 	}
 	f, err := dec.NextField()
@@ -2130,7 +2051,7 @@
 }
 
 func (x ConflictInfo) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_26); err != nil {
+	if err := enc.StartValue(__VDLType_struct_25); err != nil {
 		return err
 	}
 	if x.Data != nil && !x.Data.VDLIsZero() {
@@ -2165,7 +2086,7 @@
 	*x = ConflictInfo{
 		Data: ConflictDataBatch{},
 	}
-	if err := dec.StartValue(__VDLType_struct_26); err != nil {
+	if err := dec.StartValue(__VDLType_struct_25); err != nil {
 		return err
 	}
 	for {
@@ -2255,7 +2176,7 @@
 }
 
 func (x ValueSelection) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_enum_27); err != nil {
+	if err := enc.StartValue(__VDLType_enum_26); err != nil {
 		return err
 	}
 	if err := enc.EncodeString(x.String()); err != nil {
@@ -2305,7 +2226,7 @@
 }
 
 func (x ResolutionInfo) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_28); err != nil {
+	if err := enc.StartValue(__VDLType_struct_27); err != nil {
 		return err
 	}
 	if x.Key != "" {
@@ -2363,7 +2284,7 @@
 
 func (x *ResolutionInfo) VDLRead(dec vdl.Decoder) error {
 	*x = ResolutionInfo{}
-	if err := dec.StartValue(__VDLType_struct_28); err != nil {
+	if err := dec.StartValue(__VDLType_struct_27); err != nil {
 		return err
 	}
 	for {
@@ -2391,7 +2312,7 @@
 				}
 			}
 		case "Result":
-			if err := dec.StartValue(__VDLType_optional_20); err != nil {
+			if err := dec.StartValue(__VDLType_optional_19); err != nil {
 				return err
 			}
 			if dec.IsNil() {
@@ -2446,7 +2367,7 @@
 }
 
 func (x CrRule) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_29); err != nil {
+	if err := enc.StartValue(__VDLType_struct_28); err != nil {
 		return err
 	}
 	if x.CollectionId != (Id{}) {
@@ -2501,7 +2422,7 @@
 
 func (x *CrRule) VDLRead(dec vdl.Decoder) error {
 	*x = CrRule{}
-	if err := dec.StartValue(__VDLType_struct_29); err != nil {
+	if err := dec.StartValue(__VDLType_struct_28); err != nil {
 		return err
 	}
 	for {
@@ -2570,7 +2491,7 @@
 }
 
 func (x CrPolicy) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_30); err != nil {
+	if err := enc.StartValue(__VDLType_struct_29); err != nil {
 		return err
 	}
 	if len(x.Rules) != 0 {
@@ -2588,7 +2509,7 @@
 }
 
 func __VDLWriteAnon_list_4(enc vdl.Encoder, x []CrRule) error {
-	if err := enc.StartValue(__VDLType_list_31); err != nil {
+	if err := enc.StartValue(__VDLType_list_30); err != nil {
 		return err
 	}
 	if err := enc.SetLenHint(len(x)); err != nil {
@@ -2610,7 +2531,7 @@
 
 func (x *CrPolicy) VDLRead(dec vdl.Decoder) error {
 	*x = CrPolicy{}
-	if err := dec.StartValue(__VDLType_struct_30); err != nil {
+	if err := dec.StartValue(__VDLType_struct_29); err != nil {
 		return err
 	}
 	for {
@@ -2634,7 +2555,7 @@
 }
 
 func __VDLReadAnon_list_4(dec vdl.Decoder, x *[]CrRule) error {
-	if err := dec.StartValue(__VDLType_list_31); err != nil {
+	if err := dec.StartValue(__VDLType_list_30); err != nil {
 		return err
 	}
 	if len := dec.LenHint(); len > 0 {
@@ -2686,7 +2607,7 @@
 }
 
 func (x SchemaMetadata) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_32); err != nil {
+	if err := enc.StartValue(__VDLType_struct_31); err != nil {
 		return err
 	}
 	if x.Version != 0 {
@@ -2719,7 +2640,7 @@
 
 func (x *SchemaMetadata) VDLRead(dec vdl.Decoder) error {
 	*x = SchemaMetadata{}
-	if err := dec.StartValue(__VDLType_struct_32); err != nil {
+	if err := dec.StartValue(__VDLType_struct_31); err != nil {
 		return err
 	}
 	for {
@@ -2762,7 +2683,7 @@
 }
 
 func (x BlobRef) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_string_33); err != nil {
+	if err := enc.StartValue(__VDLType_string_32); err != nil {
 		return err
 	}
 	if err := enc.EncodeString(string(x)); err != nil {
@@ -2846,7 +2767,7 @@
 }
 
 func (x BlobFetchState) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_enum_34); err != nil {
+	if err := enc.StartValue(__VDLType_enum_33); err != nil {
 		return err
 	}
 	if err := enc.EncodeString(x.String()); err != nil {
@@ -2884,7 +2805,7 @@
 }
 
 func (x BlobFetchStatus) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_35); err != nil {
+	if err := enc.StartValue(__VDLType_struct_34); err != nil {
 		return err
 	}
 	if x.State != BlobFetchStatePending {
@@ -2931,7 +2852,7 @@
 
 func (x *BlobFetchStatus) VDLRead(dec vdl.Decoder) error {
 	*x = BlobFetchStatus{}
-	if err := dec.StartValue(__VDLType_struct_35); err != nil {
+	if err := dec.StartValue(__VDLType_struct_34); err != nil {
 		return err
 	}
 	for {
@@ -2994,7 +2915,7 @@
 }
 
 func (x CollectionRowPattern) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_36); err != nil {
+	if err := enc.StartValue(__VDLType_struct_35); err != nil {
 		return err
 	}
 	if x.CollectionBlessing != "" {
@@ -3047,7 +2968,7 @@
 
 func (x *CollectionRowPattern) VDLRead(dec vdl.Decoder) error {
 	*x = CollectionRowPattern{}
-	if err := dec.StartValue(__VDLType_struct_36); err != nil {
+	if err := dec.StartValue(__VDLType_struct_35); err != nil {
 		return err
 	}
 	for {
@@ -3114,7 +3035,7 @@
 }
 
 func (x StoreChange) VDLWrite(enc vdl.Encoder) error {
-	if err := enc.StartValue(__VDLType_struct_37); err != nil {
+	if err := enc.StartValue(__VDLType_struct_36); err != nil {
 		return err
 	}
 	if x.Value != nil && !x.Value.VDLIsZero() {
@@ -3149,7 +3070,7 @@
 	*x = StoreChange{
 		Value: vom.RawBytesOf(vdl.ZeroValue(vdl.AnyType)),
 	}
-	if err := dec.StartValue(__VDLType_struct_37); err != nil {
+	if err := dec.StartValue(__VDLType_struct_36); err != nil {
 		return err
 	}
 	for {
@@ -6789,35 +6710,34 @@
 	__VDLType_string_6    *vdl.Type
 	__VDLType_struct_7    *vdl.Type
 	__VDLType_struct_8    *vdl.Type
-	__VDLType_struct_9    *vdl.Type
-	__VDLType_map_10      *vdl.Type
+	__VDLType_map_9       *vdl.Type
+	__VDLType_list_10     *vdl.Type
 	__VDLType_list_11     *vdl.Type
-	__VDLType_list_12     *vdl.Type
-	__VDLType_struct_13   *vdl.Type
+	__VDLType_struct_12   *vdl.Type
+	__VDLType_enum_13     *vdl.Type
 	__VDLType_enum_14     *vdl.Type
-	__VDLType_enum_15     *vdl.Type
-	__VDLType_struct_16   *vdl.Type
-	__VDLType_enum_17     *vdl.Type
+	__VDLType_struct_15   *vdl.Type
+	__VDLType_enum_16     *vdl.Type
+	__VDLType_struct_17   *vdl.Type
 	__VDLType_struct_18   *vdl.Type
-	__VDLType_struct_19   *vdl.Type
-	__VDLType_optional_20 *vdl.Type
-	__VDLType_struct_21   *vdl.Type
-	__VDLType_union_22    *vdl.Type
-	__VDLType_struct_23   *vdl.Type
-	__VDLType_list_24     *vdl.Type
-	__VDLType_union_25    *vdl.Type
-	__VDLType_struct_26   *vdl.Type
-	__VDLType_enum_27     *vdl.Type
+	__VDLType_optional_19 *vdl.Type
+	__VDLType_struct_20   *vdl.Type
+	__VDLType_union_21    *vdl.Type
+	__VDLType_struct_22   *vdl.Type
+	__VDLType_list_23     *vdl.Type
+	__VDLType_union_24    *vdl.Type
+	__VDLType_struct_25   *vdl.Type
+	__VDLType_enum_26     *vdl.Type
+	__VDLType_struct_27   *vdl.Type
 	__VDLType_struct_28   *vdl.Type
 	__VDLType_struct_29   *vdl.Type
-	__VDLType_struct_30   *vdl.Type
-	__VDLType_list_31     *vdl.Type
-	__VDLType_struct_32   *vdl.Type
-	__VDLType_string_33   *vdl.Type
-	__VDLType_enum_34     *vdl.Type
+	__VDLType_list_30     *vdl.Type
+	__VDLType_struct_31   *vdl.Type
+	__VDLType_string_32   *vdl.Type
+	__VDLType_enum_33     *vdl.Type
+	__VDLType_struct_34   *vdl.Type
 	__VDLType_struct_35   *vdl.Type
 	__VDLType_struct_36   *vdl.Type
-	__VDLType_struct_37   *vdl.Type
 )
 
 var __VDLInitCalled bool
@@ -6847,7 +6767,6 @@
 	vdl.Register((*BatchOptions)(nil))
 	vdl.Register((*BatchHandle)(nil))
 	vdl.Register((*KeyValue)(nil))
-	vdl.Register((*CollectionRow)(nil))
 	vdl.Register((*SyncgroupSpec)(nil))
 	vdl.Register((*SyncgroupMemberInfo)(nil))
 	vdl.Register((*ResolverType)(nil))
@@ -6880,36 +6799,35 @@
 	__VDLType_struct_5 = vdl.TypeOf((*BatchOptions)(nil)).Elem()
 	__VDLType_string_6 = vdl.TypeOf((*BatchHandle)(nil))
 	__VDLType_struct_7 = vdl.TypeOf((*KeyValue)(nil)).Elem()
-	__VDLType_struct_8 = vdl.TypeOf((*CollectionRow)(nil)).Elem()
-	__VDLType_struct_9 = vdl.TypeOf((*SyncgroupSpec)(nil)).Elem()
-	__VDLType_map_10 = vdl.TypeOf((*access.Permissions)(nil))
-	__VDLType_list_11 = vdl.TypeOf((*[]Id)(nil))
-	__VDLType_list_12 = vdl.TypeOf((*[]string)(nil))
-	__VDLType_struct_13 = vdl.TypeOf((*SyncgroupMemberInfo)(nil)).Elem()
-	__VDLType_enum_14 = vdl.TypeOf((*ResolverType)(nil))
-	__VDLType_enum_15 = vdl.TypeOf((*BatchSource)(nil))
-	__VDLType_struct_16 = vdl.TypeOf((*BatchInfo)(nil)).Elem()
-	__VDLType_enum_17 = vdl.TypeOf((*ValueState)(nil))
-	__VDLType_struct_18 = vdl.TypeOf((*Value)(nil)).Elem()
-	__VDLType_struct_19 = vdl.TypeOf((*RowOp)(nil)).Elem()
-	__VDLType_optional_20 = vdl.TypeOf((*Value)(nil))
-	__VDLType_struct_21 = vdl.TypeOf((*ScanOp)(nil)).Elem()
-	__VDLType_union_22 = vdl.TypeOf((*Operation)(nil))
-	__VDLType_struct_23 = vdl.TypeOf((*RowInfo)(nil)).Elem()
-	__VDLType_list_24 = vdl.TypeOf((*[]uint64)(nil))
-	__VDLType_union_25 = vdl.TypeOf((*ConflictData)(nil))
-	__VDLType_struct_26 = vdl.TypeOf((*ConflictInfo)(nil)).Elem()
-	__VDLType_enum_27 = vdl.TypeOf((*ValueSelection)(nil))
-	__VDLType_struct_28 = vdl.TypeOf((*ResolutionInfo)(nil)).Elem()
-	__VDLType_struct_29 = vdl.TypeOf((*CrRule)(nil)).Elem()
-	__VDLType_struct_30 = vdl.TypeOf((*CrPolicy)(nil)).Elem()
-	__VDLType_list_31 = vdl.TypeOf((*[]CrRule)(nil))
-	__VDLType_struct_32 = vdl.TypeOf((*SchemaMetadata)(nil)).Elem()
-	__VDLType_string_33 = vdl.TypeOf((*BlobRef)(nil))
-	__VDLType_enum_34 = vdl.TypeOf((*BlobFetchState)(nil))
-	__VDLType_struct_35 = vdl.TypeOf((*BlobFetchStatus)(nil)).Elem()
-	__VDLType_struct_36 = vdl.TypeOf((*CollectionRowPattern)(nil)).Elem()
-	__VDLType_struct_37 = vdl.TypeOf((*StoreChange)(nil)).Elem()
+	__VDLType_struct_8 = vdl.TypeOf((*SyncgroupSpec)(nil)).Elem()
+	__VDLType_map_9 = vdl.TypeOf((*access.Permissions)(nil))
+	__VDLType_list_10 = vdl.TypeOf((*[]Id)(nil))
+	__VDLType_list_11 = vdl.TypeOf((*[]string)(nil))
+	__VDLType_struct_12 = vdl.TypeOf((*SyncgroupMemberInfo)(nil)).Elem()
+	__VDLType_enum_13 = vdl.TypeOf((*ResolverType)(nil))
+	__VDLType_enum_14 = vdl.TypeOf((*BatchSource)(nil))
+	__VDLType_struct_15 = vdl.TypeOf((*BatchInfo)(nil)).Elem()
+	__VDLType_enum_16 = vdl.TypeOf((*ValueState)(nil))
+	__VDLType_struct_17 = vdl.TypeOf((*Value)(nil)).Elem()
+	__VDLType_struct_18 = vdl.TypeOf((*RowOp)(nil)).Elem()
+	__VDLType_optional_19 = vdl.TypeOf((*Value)(nil))
+	__VDLType_struct_20 = vdl.TypeOf((*ScanOp)(nil)).Elem()
+	__VDLType_union_21 = vdl.TypeOf((*Operation)(nil))
+	__VDLType_struct_22 = vdl.TypeOf((*RowInfo)(nil)).Elem()
+	__VDLType_list_23 = vdl.TypeOf((*[]uint64)(nil))
+	__VDLType_union_24 = vdl.TypeOf((*ConflictData)(nil))
+	__VDLType_struct_25 = vdl.TypeOf((*ConflictInfo)(nil)).Elem()
+	__VDLType_enum_26 = vdl.TypeOf((*ValueSelection)(nil))
+	__VDLType_struct_27 = vdl.TypeOf((*ResolutionInfo)(nil)).Elem()
+	__VDLType_struct_28 = vdl.TypeOf((*CrRule)(nil)).Elem()
+	__VDLType_struct_29 = vdl.TypeOf((*CrPolicy)(nil)).Elem()
+	__VDLType_list_30 = vdl.TypeOf((*[]CrRule)(nil))
+	__VDLType_struct_31 = vdl.TypeOf((*SchemaMetadata)(nil)).Elem()
+	__VDLType_string_32 = vdl.TypeOf((*BlobRef)(nil))
+	__VDLType_enum_33 = vdl.TypeOf((*BlobFetchState)(nil))
+	__VDLType_struct_34 = vdl.TypeOf((*BlobFetchStatus)(nil)).Elem()
+	__VDLType_struct_35 = vdl.TypeOf((*CollectionRowPattern)(nil)).Elem()
+	__VDLType_struct_36 = vdl.TypeOf((*StoreChange)(nil)).Elem()
 
 	// Set error format strings.
 	i18n.Cat().SetWithBase(i18n.LangID("en"), i18n.MsgID(ErrNotInDevMode.ID), "{1:}{2:} not running with --dev=true")
diff --git a/services/syncbase/types.vdl b/services/syncbase/types.vdl
index cf7251e..fa114eb 100644
--- a/services/syncbase/types.vdl
+++ b/services/syncbase/types.vdl
@@ -63,12 +63,6 @@
 	Value any
 }
 
-// CollectionRow encapsulates a collection id and row key or row prefix.
-type CollectionRow struct {
-	CollectionId Id
-	Row          string
-}
-
 // SyncgroupSpec contains the specification for a syncgroup.
 type SyncgroupSpec struct {
 	// Human-readable description of this syncgroup.
