diff --git a/cmd/sb/shell.go b/cmd/sb/shell.go
index e3bfe93..9d5e2e2 100644
--- a/cmd/sb/shell.go
+++ b/cmd/sb/shell.go
@@ -169,7 +169,18 @@
 	return d, nil
 }
 
-func dumpDB(ctx *context.T, w io.Writer, d nosql.Database) error {
+func mergeErrors(errs []error) error {
+	if len(errs) == 0 {
+		return nil
+	}
+	err := errs[0]
+	for _, e := range errs[1:] {
+		err = fmt.Errorf("%v\n%v", err, e)
+	}
+	return err
+}
+
+func dumpTables(ctx *context.T, w io.Writer, d nosql.Database) error {
 	tables, err := d.ListTables(ctx)
 	if err != nil {
 		return fmt.Errorf("failed listing tables: %v", err)
@@ -182,15 +193,43 @@
 		}
 	}
 	if len(errs) > 0 {
-		err := fmt.Errorf("failed dumping %d of %d tables:", len(errs), len(tables))
-		for _, e := range errs {
-			err = fmt.Errorf("%v\n%v", err, e)
-		}
-		return err
+		return fmt.Errorf("failed dumping %d of %d tables:\n%v", len(errs), len(tables), mergeErrors(errs))
 	}
 	return nil
 }
 
+func dumpSyncgroups(ctx *context.T, w io.Writer, d nosql.Database) error {
+	sgNames, err := d.GetSyncgroupNames(ctx)
+	if err != nil {
+		return fmt.Errorf("failed listing syncgroups: %v", err)
+	}
+	var errs []error
+	for _, sgName := range sgNames {
+		fmt.Fprintf(w, "syncgroup: %s\n", sgName)
+		sg := d.Syncgroup(sgName)
+		if spec, version, err := sg.GetSpec(ctx); err != nil {
+			errs = append(errs, err)
+		} else {
+			fmt.Fprintf(w, "%+v (version: \"%s\")\n", spec, version)
+		}
+	}
+	if len(errs) > 0 {
+		return fmt.Errorf("failed dumping %d of %d syncgroups:\n%v", len(errs), len(sgNames), mergeErrors(errs))
+	}
+	return nil
+}
+
+func dumpDB(ctx *context.T, w io.Writer, d nosql.Database) error {
+	var errors []error
+	if err := dumpTables(ctx, w, d); err != nil {
+		errors = append(errors, fmt.Errorf("failed dumping tables: %v", err))
+	}
+	if err := dumpSyncgroups(ctx, w, d); err != nil {
+		errors = append(errors, fmt.Errorf("failed dumping syncgroups: %v", err))
+	}
+	return mergeErrors(errors)
+}
+
 func makeDemoDB(ctx *context.T, w io.Writer, d nosql.Database) error {
 	if err := demodb.PopulateDemoDB(ctx, d); err == nil {
 		fmt.Fprintln(w, "Demo tables created and populated.")
