Releases: gemmology-dev/mineral-database
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 |
v1.8.0 - Synthetic Gems, Simulants & Composites
What's New
This release adds 28 new material families to the mineral database, bringing the total from 68 to 96 families with 123 expressions.
Origin Classification
Every mineral family now has an origin field:
- Natural (68 families) - naturally occurring minerals
- Synthetic (15 families) - lab-grown materials with same composition as natural counterparts
- Simulant (9 families) - materials that imitate other gems
- Composite (4 families) - assembled stones (doublets, triplets)
New Materials
Synthetics: Verneuil ruby/sapphire, flux ruby/sapphire/emerald, hydrothermal emerald/quartz, CVD diamond, HPHT diamond, Czochralski alexandrite, Verneuil spinel, Gilson opal, lab-grown Paraiba tourmaline
Simulants: Cubic zirconia, moissanite, YAG, GGG, strontium titanate, synthetic rutile, LuAG, glass, Gilson turquoise/lapis, synthetic coral
Composites: Garnet-topped doublet, opal doublet, opal triplet, soude emerald
New Query API
from mineral_database import list_synthetics, list_simulants, get_counterparts, list_by_origin
list_synthetics() # All synthetic entries
list_synthetics("flux") # Filter by growth method
list_simulants() # All simulant entries
get_counterparts("diamond") # Synthetics + simulants for diamond
list_by_origin("natural") # Filter by originCLI
mineral-db --synthetics # List all synthetics
mineral-db --simulants diamond # Simulants for diamond
mineral-db --counterparts ruby # All counterparts for ruby
mineral-db --list --origin natural # Filter presets by originnpm Package
@gemmology/mineral-data updated to v1.8.0 with the expanded database.
Backwards Compatible
All existing APIs continue working and now include synthetic/simulant/composite entries alongside natural minerals.
v1.7.0 - Pre-generated 3D Models for All Expressions
🎉 Pre-generated 3D Models for All Expressions
This release adds pre-generated SVG, STL, and glTF models for all 95 mineral expressions, stored directly in the SQLite database.
New Features
- Expression Models: All 94 crystalline expressions now have:
model_svg: 2D SVG visualizationmodel_stl: Binary STL for 3D printingmodel_gltf: glTF for web 3D viewers
- Updated Generation Script:
generate_models.pynow supports:--expressionsmode (default) for generating expression models--output-dirto export static SVG files- Legacy
--mineralsmode still available
Database Changes
- Database size increased from 532KB to 2.78MB (includes embedded models)
- 94 of 95 expressions have models (opal skipped - amorphous)
model_svg,model_stl,model_gltfcolumns populated inmineral_expressionstable
API Additions
get_all_expressions()function in db.pyupdate_expression_models()for updating expression model data
Breaking Changes
None - fully backwards compatible with v1.6.0
v1.6.0 - Mineral Families & Expressions
What's New
This release adds the normalized mineral family/expression structure:
New Database Tables
- mineral_families - 68 deduplicated mineral families with shared gemmological properties
- mineral_expressions - 95 crystal forms/habits (e.g., fluorite-octahedron, fluorite-cube)
Changes
- Database size increased from 241KB to 532KB with enriched data
- Enables website tools to show deduplicated results
- Backward compatible - existing
mineralstable still works
For Website Integration
import { dbPath } from '@gemmology/mineral-data';
// Query mineral_families for deduplicated results
// Query mineral_expressions for crystal form variants