Releases: gemmology-dev/mineral-database
v2.3.0 — Embedded crystal models
Highlights
All 208 expressions with a valid CDL now ship with embedded SVG, STL, and glTF crystal models in the SQLite database.
Changes
- Generated
model_svg,model_stl,model_gltffor every expression with valid CDL (208/208 coverage) - Fixed 11 invalid CDL strings whose half-space intersection was unbounded:
- added terminating pinacoid faces (orthorhombic, monoclinic, tetragonal, triclinic prisms)
- replaced
~ radial[cluster]shorthand with explicit forms (hematite-kidney-ore) - parenthesised nested-growth groups (Lechleitner emerald overgrowth)
- Patched
scripts/generate_models.pyto handlenumpy.int64in glTF extras via a NumPy-aware JSON encoder
Notes
- Database grows from 876 KB → 8.2 MB due to embedded geometry assets
- 8 expressions intentionally have empty CDL (assembled stones: doublets/triplets/glass simulant) and ship without models
- All 131 tests pass
v2.2.1 — CI: npm trusted publishing
No functional change vs v2.2.0. This release re-cuts the package to pick up the OIDC trusted-publishing workflow.
Background: release events execute the workflow file from the tagged commit, so v2.2.0 ran the old token-based workflow (which failed with 404 because the long-lived NPM_TOKEN had lost its scope on @gemmology/*). v2.2.1 ships from a commit that includes the OIDC workflow.
Install
pip install gemmology-mineral-database==2.2.1
npm install @gemmology/mineral-data@2.2.1
Database content is identical to v2.2.0: 159 families, 216 expressions.
v2.2.0 — FGA Foundation + Diploma coverage gap-fill
What's new
Closes Gem-A FGA Foundation + Diploma syllabus content gaps identified in the May 2026 audit.
Database growth: 121 → 159 families · 171 → 216 expressions
Added (38 families)
Natural species (23): ametrine, andalusite, benitoite, bronzite, chrome-diopside, chrysocolla, coral, goshenite, hauyne, hematite, hydrogrossular, jet, kornerupine, maw-sit-sit, maxixe-beryl, moldavite, musgravite, obsidian, scapolite, serpentine, sinhalite, star-diopside, taaffeite
Synthetics (6): Czochralski sapphire, flux + hydrothermal alexandrite, hydrothermal ruby, Kashan flux ruby, Lechleitner emerald
Simulants (9): ambroid, bone, copal, dyed howlite, dyed magnesite, French jet, reconstructed turquoise, Slocum stone, vulcanite
Validation
- 131 tests pass
- All values verified against Gem-A, Journal of Gemmology, G&G, Read 7th ed., or Mindat
- Source-of-truth verification manifest reviewed 218 claims pre-build
Install
pip install gemmology-mineral-database==2.2.0
npm install @gemmology/mineral-data@2.2.0
v2.1.2 - Clean crystal models in npm package
Changes
- npm package now includes pre-rendered SVG/STL/glTF models for 163/171 expressions
- SVG renders show crystal structure only (no axes, grid, or coordinate labels)
- Transparent SVG backgrounds for clean integration
- Package size increased from ~576KB to ~7.5MB due to embedded 3D models
Model Style
Before: Crystal with axes, grid panes, coordinate labels (a, b, c)
After: Clean crystal structure only with transparent background
v2.1.1 - Fix crystal model generation for pyroxenes and amphiboles
Changes
- Fix CDL expressions for 5 minerals (jadeite, enstatite, actinolite, tremolite, spodumene) by adding
{001}basal pinacoid to close crystal forms - Pre-rendered SVG/STL/glTF models now included for 163/171 expressions
- Remaining 8 without models are composites/glass with no crystal morphology
Model Coverage
| Format | Count | Coverage |
|---|---|---|
| SVG | 163/171 | 95.3% |
| STL | 163/171 | 95.3% |
| glTF | 161/171 | 94.2% |
v2.1.0
Mineral Database v2.1.0
New mineral families (25)
Garnet endmembers: Almandine, Andradite, Grossular, Hessonite, Pyrope, Uvarovite, Colour-Change Garnet
Quartz varieties: Chalcedony, Rose Quartz, Smoky Quartz
Pyroxenes: Augite, Enstatite, Jadeite, Diopside (enriched)
Amphiboles: Actinolite, Nephrite, Tremolite
Tourmaline species: Dravite, Elbaite, Schorl
Corundum varieties: Padparadscha, Pink Sapphire
Feldspars: Andesine, Bytownite, Sanidine
Other: Spodumene
Database enrichment
- 93 natural mineral families (up from 68)
- 171 expressions (up from 141)
- 13 mineral groups with query API (
list_mineral_groups(),list_families_by_group()) - Dana category classification on all natural minerals (silicates, oxides, carbonates, etc.)
- Fluorescence data on ~20 minerals (UV response, colour, intensity)
- Diagnostic features on ~20 minerals (inclusions, pleochroism, colour zoning, etc.)
API additions
list_mineral_groups()- list all 13 mineral groupslist_families_by_group(group)- list families within a group (e.g. "garnet", "beryl")- CLI
--groupsargument for group listing
Testing
- 131 tests (up from 79), all passing
v2.0.2
v2.0.1 -- CDL Expression Overhaul
CDL Expression Overhaul
Comprehensive review and update of all 141 CDL expressions across 96 mineral families.
Changes
- Doc comments (
#!) added to all non-empty CDL expressions with Species, System, and Habit metadata - Diagnostic features added to 12 minerals (striations, pleochroism, colour zoning)
- Tourmaline point group corrected:
trigonal[32]->trigonal[3m] - Emerald typo fixed:
[inclusion:jardine]->[inclusion:jardin] - New expression: Orthoclase Baveno twin (141 total expressions, up from 140)
- Synthetics & simulants: Doc comments added to all 24 non-empty CDL strings
Validation
- 133/141 expressions parse successfully (8 warnings = empty CDL for composites/glass)
- 79/79 tests pass
v2.0.0 - CDL v2.0 Mineral Database Overhaul
v2.0.0 - CDL v2.0 Mineral Database Overhaul
Highlights
- 140 CDL expressions across 96 mineral families (was 128)
- Fixed misrepresented minerals: turquoise, pearl, malachite, sodalite, lazurite, opal
- 7 amorphous, 5 aggregate, 3 nested growth expressions
- Doc comments on major gem species
- Updated npm package (
@gemmology/mineral-data) with rebuilt minerals.db
v1.8.1 - CDL & Models for Synthetics/Simulants
What's Changed
Added CDL crystal structures and pre-generated 3D models (SVG/STL/glTF) for 13 additional synthetic and simulant entries that have valid crystal structures.
Before
- Only 7 of 28 non-natural entries had CDL and 3D models
After
- 20 of 28 non-natural entries now have full crystal visualizations
- 8 entries correctly remain without models (amorphous materials, aggregates, composites)
CDL Assignments
| Entry | CDL |
|---|---|
| Synthetic Ruby (Verneuil) | trigonal[-3m]:{10-11}@1.0 + {0001}@0.4 |
| Synthetic Sapphire (Verneuil) | trigonal[-3m]:{10-10}@1.0 + {10-11}@0.7 | elongate(c:1.8) |
| CVD Diamond | cubic[m3m]:{100}@1.0 + {111}@0.3 |
| Synthetic Alexandrite | orthorhombic[mmm]:{110}@1.0 + {010}@0.6 + {111}@0.4 |
| Synthetic Spinel (Verneuil) | cubic[m3m]:{111} |
| Cubic Zirconia | cubic[m3m]:{111}@1.0 + {100}@0.8 |
| Moissanite | hexagonal[6mm]:{10-10}@1.0 + {0001}@0.6 |
| YAG | cubic[m3m]:{110}@1.0 + {211}@0.8 |
| GGG | cubic[m3m]:{110}@1.0 + {211}@0.6 |
| Strontium Titanate | cubic[m3m]:{100} |
| Synthetic Rutile | tetragonal[4/mmm]:{110}@1.0 + {100}@0.8 + {101}@0.6 |
| LuAG | cubic[m3m]:{110}@1.0 + {211}@0.7 |
| Gilson Turquoise | triclinic[-1]:{010}@1.0 + {001}@0.9 + {110}@0.7 |