Features

Import & Export

Vextro provides import and export utilities for moving collection data in and out of Convex. Supported formats are CSV and JSON. The system includes schema validation and detailed error reporting.

Exporting data

import { generateCsv } from "vextro/import-export";

const rows = documents.map((doc) => ({
  title: doc.title,
  slug: doc.slug,
  status: doc.status,
}));

const csv = generateCsv(rows);

CSV generation options

OptionTypeDefaultDescription
delimiterstring","Field delimiter character.
quoteAllbooleanfalseQuote all fields, not just those requiring it.
includeBombooleantrueInclude UTF-8 BOM for Excel compatibility.

Importing data

Parse a CSV file and validate against the collection schema:

import { parseCsv, validateImportDocuments } from "vextro/import-export";

const { headers, rows } = parseCsv(fileContent);

const result = validateImportDocuments(rows, collectionFields, {
  requireAllFields: true,
  allowUnknownFields: false,
});
// result.valid    - documents ready to insert
// result.invalid  - documents with errors (row number, error details)
// result.warnings - non-blocking issues (unknown fields stripped)

Validation checks

CheckDescription
Required fieldsNon-optional fields must have a non-empty value.
Type correctnessValues must match expected types (string, number, boolean).
Value constraintsNumbers checked against min/max; strings against maxLength.
Enum valuesSelect and radio fields must contain a valid option.
Slug uniquenessDuplicate slugs within the import set are flagged.
Unknown fieldsFields not in the schema generate warnings and are stripped.

Validation options

OptionTypeDefaultDescription
requireAllFieldsbooleantrueRequire all non-optional fields.
allowUnknownFieldsbooleanfalseKeep fields not in the schema.

Error reporting

Each invalid document includes its row number and a list of field errors:

{
  row: 3,
  document: { title: "", slug: "hello", status: "invalid" },
  errors: [
    { field: "title", message: 'Required field "Title" is empty', value: "" },
    { field: "status", message: 'Invalid value "invalid"', value: "invalid" },
  ],
}
Previous
Storage Adapters