Updated 28 September 2026
Data schema
Twenty-six fields, four enumerations, one record per material grade. The machine-readable version of this page ships as schema-1.6.0.json in every release and is what cinderq validate checks against.
Fields
| Field | Type | Unit | Req. | Notes |
|---|---|---|---|---|
| id | string | - | yes | Pattern CC-\d{4}. Assigned once, never reused. |
| name | string | - | yes | Generic grade description in lower case, not a trade name. |
| family | enum | - | yes | One of eleven values, listed below. |
| aliases | list of string | - | no | Other names for the same class. Empty list, never null. |
| al2o3_pct | number | % by mass | no | As reported. Sources rarely agree past one decimal. |
| sio2_pct | number | % by mass | no | Includes free silica; no distinction is made. |
| mgo_pct | number | % by mass | no | Reported as MgO even for dolomitic grades. |
| cr2o3_pct | number | % by mass | no | Present only in the chrome-bearing family. |
| c_free_pct | number | % by mass | no | Free carbon after coking, not total carbon in the mix. |
| max_service_c | integer | °C | yes | Continuous limit, rounded to the nearest 10 °C. |
| max_service_atmosphere | enum | - | yes | The atmosphere max_service_c applies to. |
| air_limit_c | integer | °C | no | Separate limit in air for grades whose main limit is for a reducing or inert atmosphere. |
| k_1000_w_mk | number | W/(m·K) | no | Thermal conductivity. Read together with the next two fields. |
| k_ref_c | integer | °C | no | Temperature the conductivity figure belongs to. Usually 1000; 400 for grades not rated that high. |
| k_method | enum | - | no | Mandatory since v1.6.0 whenever k_1000_w_mk is present. |
| bulk_density_g_cm3 | number | g/cm³ | no | Dry. For castables, after the drying schedule named in the source. |
| open_porosity_pct | number | % by volume | no | Apparent porosity by water or kerosene displacement. |
| ccs_mpa | number | MPa | no | Cold crushing strength at room temperature. |
| hmor_mpa | number | MPa | no | Hot modulus of rupture. The test temperature lives in the source, not in this field - a known weakness. |
| rul_t05_c | integer | °C | no | Refractoriness under load, temperature at 0.5% subsidence. |
| thermal_shock_cycles | integer | cycles | no | Cycles to failure. Meaningless without the next field. |
| shock_protocol | enum | - | no | Which cycling test produced the count. |
| slag_index | integer | 1–5 | no | Project-assigned ordinal. See the caveat below. |
| source_ids | list of string | - | yes | At least one id from sources.csv. |
| confidence | enum | - | yes | high, medium or low, assigned by the rules on the methodology page. |
| updated | date | ISO 8601 | yes | Date of the last accepted change to this record. |
An empty cell is not a zero
This is the single most common way to misread the dataset, so it gets its own rule set:
- An empty value -
nullin JSON, nothing between the commas in CSV - means no source we hold reports that property for that grade. It says nothing about the material. - A zero means a source reported zero. In practice this only happens for
c_free_pctandcr2o3_pct, where a source states explicitly that the grade is carbon-free or chrome-free. - An empty list in
aliasesorsource_idsis written as[], never asnull. Forsource_idsan empty list is invalid and the validator rejects it. - Pass
--include-nullsto the reader if you want the empty cells kept in CSV output; by default rows are dropped from a filter when the filtered field is empty, which is a choice you should be aware of.
Enumerations
family
fireclay silica high-alumina corundum silicon-carbide magnesia magnesia-carbon chrome-bearing zirconia-bearing carbon-graphite insulating
Family is a filing decision, not chemistry. A dense 90% alumina castable sits in high-alumina next to a brick, because people look for them together. insulating cuts across chemistry entirely and holds anything whose job is to not conduct: firebrick below 1.2 g/cm³, boards, blankets, microporous panels.
max_service_atmosphere
- oxidising
- Air or combustion products with free oxygen. The default, and what 318 of the 412 records are quoted for.
- reducing
- Carbon monoxide rich or otherwise oxygen starved. Used for most carbon-bearing grades.
- inert
- Argon, nitrogen or similar. Mostly graphite records.
- vacuum
- Six records only, all from one vacuum-degasser paper.
k_method
- hot-wire
- Parallel or cross-array hot wire, the usual method for bricks and castables.
- panel
- Calorimeter or guarded hot plate on a built panel. Reads lower than hot wire on porous grades.
- calculated
- Derived by the source from density and composition rather than measured. 46 records are like this and all carry
confidenceof at most medium.
shock_protocol
- water-quench-1000
- Heat to 1 000 °C, quench in water, repeat until failure. Harsh, and the most commonly published.
- air-quench-1000
- Same heating, forced air cooling. Cycle counts run several times higher than the water figure for the same grade, which is exactly why the two must not be mixed.
- prism-950
- Prism test at 950 °C with cooling in still air, mostly from older European literature.
One record, in full
{
"id": "CC-0137",
"name": "corundum brick, 99% Al2O3",
"family": "corundum",
"aliases": ["sintered alumina brick", "AL99"],
"al2o3_pct": 99.1,
"sio2_pct": 0.3,
"mgo_pct": null,
"cr2o3_pct": 0.0,
"c_free_pct": 0.0,
"max_service_c": 1750,
"max_service_atmosphere": "oxidising",
"air_limit_c": null,
"k_1000_w_mk": 3.0,
"k_ref_c": 1000,
"k_method": "hot-wire",
"bulk_density_g_cm3": 3.10,
"open_porosity_pct": 17.5,
"ccs_mpa": 85.0,
"hmor_mpa": 9.5,
"rul_t05_c": 1700,
"thermal_shock_cycles": 12,
"shock_protocol": "water-quench-1000",
"slag_index": 4,
"source_ids": ["S-004", "S-019"],
"confidence": "high",
"updated": "2026-06-28"
}
The CSV carries the same fields in the same order, with lists joined by a semicolon:
id,name,family,aliases,al2o3_pct,sio2_pct,mgo_pct,cr2o3_pct,c_free_pct,max_service_c,
max_service_atmosphere,air_limit_c,k_1000_w_mk,k_ref_c,k_method,bulk_density_g_cm3,
open_porosity_pct,ccs_mpa,hmor_mpa,rul_t05_c,thermal_shock_cycles,shock_protocol,
slag_index,source_ids,confidence,updated
CC-0137,"corundum brick, 99% Al2O3",corundum,"sintered alumina brick;AL99",99.1,0.3,,0.0,
0.0,1750,oxidising,,3.0,1000,hot-wire,3.10,17.5,85.0,9.5,1700,12,water-quench-1000,4,
"S-004;S-019",high,2026-06-28
The header line is one line in the real file; it is wrapped here to fit the page. Quoting follows the usual CSV convention, UTF-8 without a byte order mark, LF line endings.
On the slag index. It is the only field in the dataset we invented rather than transcribed, and it compresses a judgement into one digit. A 5 for magnesia-carbon describes resistance to basic steelmaking slag; a 5 for fused cast AZS describes resistance to molten glass. Those two numbers are not on the same scale and should never be compared, averaged or plotted together. We keep the field because readers kept asking for a first sort, and we would rather define it in the open than let people infer it from density.
Field stability
Within a major version, a field is never removed and its meaning never changes; new fields may appear. Three fields are marked provisional in the JSON schema and may still change shape before v2.0.0: air_limit_c, hmor_mpa and slag_index. If you build something on the dataset, pin the release and read the changelog before you move.