A simple format for FAIR data
Built on widely-adopted open standards. Easy to adopt, easy to extend.
Standards-based
Compatible with DataCite Metadata Schema 4.6 for citation and JSON Schema Draft 2020-12 for structural validation.
Format-agnostic
Describes any kind of data — CSV, TSV, JSON, JSONL, Parquet, Arrow, XLSX, ODS, SQLite — through a unified file dialect layer.
FAIR by design
Findable, Accessible, Interoperable, and Reusable. Datasets carry the metadata needed to be properly cited and discovered.
Extensible
Domain-specific profiles add custom properties and validation rules while staying compatible with the base specification.
{
"$schema": "https://fairspec.org/profiles/latest/dataset.json",
"title": "Climate Survey 2025",
"creators": [
{ "name": "Ada Lovelace" }
],
"resources": [
{
"data": "measurements.csv",
"fileDialect": { "format": "csv" },
"tableSchema": {
"primaryKey": ["id"],
"properties": {
"id": { "type": "integer" },
"temperature": { "type": "number" }
}
}
}
]
}Tools for every workflow
Adopt the standard from your language of choice, your terminal, your AI assistant, or a desktop interface.
One command. A FAIR dataset.
Point Fairspec at your files and it describes them: dialect, schema and integrity, ready to cite and validate.
$ cat members.csv
id,name,joined,score
1,Ada,2024-01-15,91.5
2,Grace,2024-02-03,88.0
3,Linus,2024-03-21,79.25$ fairspec dataset infer members.csv --json > dataset.json
$ fairspec dataset validate dataset.json
✔ Validation passed
{
"resources": [
{
"data": "members.csv",
"name": "members",
"textual": true,
"integrity": { "type": "sha256", "hash": "67c830fe…108a" },
"fileDialect": {
"format": "csv", "delimiter": ",",
"lineTerminator": "\n", "headerRows": [1]
},
"tableSchema": {
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"joined": { "type": "string", "format": "date" },
"score": { "type": "number" }
}
}
}
]
}Ready for AI agents
Hand the busywork of describing and checking data to your coding agent or AI assistant.
› Why does broken.csv fail its schema?
Loading the fairspec-validation skill.
Skill(fairspec-validation)
Running the check it recommends.
$ fairspec table validate broken.csv --schema schema.json
✖ Value of the cell x in column id of row 3 is not integer
✖ Value of the cell 2024-02-30 in column joined of row 2 is not date
Both are cell/type errors: fix the value, or the schema's type or format.
Agent skills
npx skills add https://fairspec.orgteaches Claude Code, Cursor or Codex to explore, infer and validate data with Fairspec.MCP server
Gives any MCP-capable assistant tools to validate data, infer schemas and query tables, running on your machine.
A CLI built for scripts
Commands take
--json, so an agent with a shell reads results as data, not prose.Docs agents can read
Every page has a Markdown twin, indexed in
/llms.txt.
Conformance suite
One test suite, every language
Python, TypeScript and Rust run the same language-neutral cases: the same input, the same operation, the same expected result. A difference between them is a failing test, not a surprise in your data.
- test cases
- 2,000+
- operations
- 17
- libraries
- 3
{
"description": "a word is a cell/type error",
"data": "id,name\ninvalid,alice\n2,bob\n",
"valid": false,
"errors": [{
"type": "cell/type", "columnName": "id",
"columnType": "integer", "rowNumber": 1,
"cell": "invalid"
}]
}Performance
Validating a 10 GB CSV against its Table Schema from Python, Rust and TypeScript, against complete validators only: tools that check every cell and report each failing one. Each tool gets at most 10 GB of memory.
- Fairspec (Python)795 MB/s1.0 GB
- Fairspec (Rust)795 MB/s1.0 GB
- Fairspec (TypeScript)647 MB/s1.6 GB
- pandera (DuckDB)154 MB/s6.2 GB
- qsv140 MB/s3.8 GB
- CSV Validator18.9 MB/s3.1 GB
- frictionless-py12.7 MB/s2.7 GB
- pandera (polars)ran out of memory—> 10 GB
- pointblank (polars)ran out of memory—> 10 GB
- dataframelyran out of memory—> 10 GB
- Great Expectations (pandas)ran out of memory—> 10 GB
Input megabytes per second and peak memory, median of 2 runs on an AMD Ryzen 5 PRO 7545U. Every finishing tool reports the same 100 seeded errors. Reproduce with pnpm -C benchmark measure --case nyc-311 --size 10GB.
Describe your data. Make it FAIR.
Read the specifications, browse the examples, and start describing your datasets in minutes.

