CHANGELOG¶
2.1.0 - 2026-10-16¶
cspdk 2.1.0 checks design rules in the cells and fixes the cells that broke CORNERSTONE's rules. It also lets each flavour's DRC use its own rules, adds a submission checker for MPW Run 50 (designs due 11 November 2026), and adds a sample project for every flavour.
Changes that affect existing designs¶
- Cells reject gaps below the design-rule minimum (#406). A gap parameter below its flavour's minimum now raises a
ValueError. - A value exactly at the minimum passes.
None, meaning the cell's default geometry, isn't checked.-
The minimums come from the CORNERSTONE design guidelines:
Flavour gap_min(µm)grating_gap_min(µm)si220, si340, si500 0.2 0.25 sin200 0.2 0.2 sin300 0.25 0.25 -
Cells that broke CORNERSTONE's rules have new defaults (#387):
- si340 and si500
grating_coupler_elliptical, all variants: 350 nm unetched ridges, as si220 has had since 2.0.0. - si340
grating_coupler_elliptical_so: a newtrenches_extra_angleparameter (default 9), set to 11 so the first trenches reach 200 nm beyond the waveguide. - sin300
couplerandcoupler_straight: defaultgap0.25 µm (was 0.236). - DRC uses each project's PDK name (#421). cspdk no longer fixes
pdk = "cspdk"in its DRC settings, so GDSFactory+ checks a project against the rules of the flavour set in itspdk.name, for examplecspdk.si340. - si220 circulax heater (#386):
ThermalPhaseShifternow uses the same phase convention as the SAX models,exp(+1j·φ).- Its defaults now match SAX's
straight_heater_metal: C-band strip neff 2.38, ng 4.30, dispersion, 3 dB/cm. - Mixed SAX and circulax circuits, such as the thermal MZI sample, now agree, and their results change.
New¶
- MPW Run 50 submission checker (#389):
cspdk.si220.submission.check_submission(path)checks the submission rules from the 50th-call design guideline that geometric DRC doesn't cover. A guide comes with it. - Sample projects for si340, si500, sin200, si_sus and ge_on_si (#407). Every flavour now has one.
- Docs (#405): a models page per flavour, giving each SAX model's parameters, defaults and spectrum, plus published notebooks.
Bug fixes¶
- si340 and sin300
dieusedie_frame_with_padsinstead of the deprecateddie_with_pads. The geometry is unchanged (#403). - si220
wire_corner45_straightand sin200die_frameno longer log kfactory duplicate-name errors (#412). - The si220 sample notebook runs with GDSFactory+ 2.x (#414).
Packaging, CI and tests
- The release workflow creates the GitHub release from this file, and can be re-run safely (#388). - CI workflow templates synced; code-security scanning (Semgrep, Trivy) now runs (#414). - Tests: - every SAX model is finite, passive and reciprocal (#404); - regression data for every model's parameters and defaults (#409); - no duplicate cell names (#412); - a manifest of reference-file hashes (#413).2.0.0 - 2026-10-12¶
cspdk 2.0.0 merges the si220 C-band and O-band PDKs into one, matches si220 to the Cornerstone MPW Run 50 library (designs due 11 November 2026), and repairs the other six flavours against their foundry GDS. Existing designs will need changes: see Breaking changes below.
Breaking changes¶
si220 is one PDK (#355)¶
cspdk.si220.cband and cspdk.si220.oband are removed. Use cspdk.si220 and choose the band with the cross-section:
from cspdk.si220 import PDK, cells
PDK.activate()
c = cells.mmi1x2(cross_section="strip_oband") # strip_cband, rib_cband, strip_oband, rib_oband
The old cross-section names strip and rib are gone; use strip_cband, rib_cband, strip_oband or rib_oband.
si220 cells redrawn to the Run 50 library (#377)¶
Layouts that use these cells with default settings change:
crossing,crossing_rib: centred on the origin (they were offset imported GDS). Placing them by absolute position, not by port, moves them.die(): defaults to the 11470 x 4900 um Run 50 design area (was 16000 x 3000 um).die_with_pads:- 16 gratings per side instead of 14.
- Every optical port is renumbered, and the ports sit at x = +-4923 um.
- Pads are 150 x 200 um, and the pad rows moved.
edge_to_grating_distancenow measures to the far end of the gratings.- MMIs:
- Rib MMIs end in a 5 um straight, so their ports move 5 um outwards.
- C strip
mmi1x2is 31.8 um long (was 31). - O strip
mmi1x2outputs are at y = +-1.525 um. - C strip
mmi2x2ports are at y = +-1.015 um (was +-1). mzi_lattice: its outputs move with the MMIs.- Rectangular gratings:
- The fibre port
o2moves. - The C-band rib period is 0.63 um.
- The O band has 80 periods.
grating_coupler_elliptical: the ridges are 350 nm instead of 315.taper_strip_to_ridge,trans_rib10/20/50: the port width follows the cross-section (0.45 um C, 0.40 um O) instead of a fixed 0.5 um.heater:- It is drawn to match the Run 50 Heater cell, a 248 x 182 um footprint.
- It gains electrical ports
e1ande2. - Text:
text_rectangulardefaults to the label layer (100/0).text_rectangular_multi_layerdefaults to(WG, SLAB).
Renamed cross-sections in si340, si500, sin200 and sin300 (#376)¶
The old names were shared between flavours with different geometry. Rename them in code and schematics:
| Flavour | Old | New |
|---|---|---|
| si500 | xs_rc, xs_ro |
xs_rc500, xs_ro500 |
| si340 | xs_sc, xs_so, xs_rc |
xs_sc340, xs_so340, xs_rc340 |
| si500, si340, sin200, sin300 | heater_metal |
heater_metal_si500, _si340, _sin200, _sin300 |
Other flavours match their foundry GDS (#376)¶
Designs in si340, si500, sin200, sin300, si_sus and ge_on_si will differ from 1.4.5 in an XOR:
- the gratings, MMIs, bends, tapers, heaters and dies are redrawn to the foundry cells;
- the routing radii and separations are set to the foundry rules.
The pull request lists the changes per flavour.
Smaller breaking changes¶
- doroutes (#347): cspdk no longer depends on doroutes. si220's
route_astarandroute_astar_metalstrategies are only available when doroutes is installed (pip install doroutes). - Material names (#315): layer-stack materials now use
Si,SiO2,SiN,Ge,TiNandAl(weresi,sin,ge,Aluminum). - Schematic symbols (#314): MZIs use the
mzi-1x2/mzi-2x2symbol types instead ofmzi. - Simulation results: several model fixes change the numbers that si220 circuits produce:
- ring FSR and Q, rib indices, the O-band models and heater physics (#362, #366, #372);
- MMI, crossing, bend, taper, Y-splitter and grating losses, which now use the measured Run 50 data (#377).
New¶
- si220 Run 50 library (#377):
- New cells:
ysplitterandgrating_coupler_focusing_apodized;- the graphene bolometer, EAM and PTE cells, each with a
_with_gcvariant; photodiodeandphotodiode_integrated;laser_fullandlaser_half, each with_with_gcand_or_gcvariants;die_half,bend_circular,taper_mm2sm,taper_rib_to_stripandmzi_heater_loop.
- Named layers for laser, photodiode and graphene integration.
- Models that use the measured Run 50 losses.
- Models:
- SAX models for every flavour, which also work in circulax sweeps (#376).
- A circulax heater model and schematic example (#356).
- MZI lattice cell and models (#107).
- si220 cross-sections: customised cross-sections, such as
strip_oband(width=0.5), keep their band and strip/rib type in cells and models (#371). - Schematics and GDSFactory+:
- Logical electrical pins for SPICE export (#334).
- Electrical connectivity on runtime PDKs (#352).
die_with_padsannotated as a die symbol (#351).- Routing constraints for differentiable optimisation (#215).
- DRC settings in
pyproject.toml(#357). - Sample projects: a public sample project per flavour (si220 and sin300), in
cspdk--sample-projects/(#368). - Docs:
- Cell pages for all seven flavours (#376).
- An interactive layer-stack diagram (#320).
- The Run 50 component notes in
references/components.md(#377).
Bug fixes¶
- si220 ring, coupler and MZI models (#362).
- si220 O-band models inside circuits (#366).
- Robust si220 models: couplers JIT-compile and differentiate, heater physics, rib defaults, circulax references (#372).
- Concrete model defaults so circulax DC sweeps work (#375).
- si220 model dispatch wrappers bound into the module namespace (#358).
- GDSFactory+ finds the si220 models (#368).
- Package keywords (#359) and PDF tab rendering in the docs (#318).
Packaging, CI and dependencies
- The wheel and sdist no longer contain samples, tests or reference files (#377); the build backend is hatchling (#311). - gdsfactory ~=9.51.0 (#354), circulax >=0.2.3 (#333), gdsfactoryplus 1.8.20 (#361), zensical, pre-commit, mkdocs-material and GitHub Actions bumps (#324-#330, #337-#341, #360). - CI: centralised workflow templates and the nyanlib generator (#336, #343, #345, #349); the full test suite runs in CI (#364); all ports are checked for Manhattan orientations (#332).1.4.5 - 2026-08-11¶
No significant changes.
1.4.4 - 2026-06-24¶
No significant changes.
1.4.3 - 2026-05-24¶
No significant changes.
1.4.2 - 2026-02-03¶
- allow zero length straight rings #199
- Bump actions/checkout from 5 to 6 #190
- update changelog #193
- remove samples from wheel #194
1.4.1 - 2026-01-05¶
- update gdsfactory 9.29.1
1.4.0 - 2025-12-19¶
1.3.0¶
1.2.2¶
- fix 3d stack #166
1.2.1¶
- update gdsfactory9.16.3 #165
1.2.0¶
1.1.0¶
1.0.7¶
1.0.4¶
- use default port naming strategy for sax.models
1.0.3¶
- fix models and add tests for models #138
1.0.2¶
- update gdsfactory 9.9.4
0.16.0¶
- update gdsfactory 9.4.0 #110
0.15.0¶
- add heater models #104
0.14.0¶
0.13.0¶
0.12.4¶
- update to gdsfactory 8.31.0
0.12.3¶
- update to gdsfactory 8.30.3 #93
0.12.2¶
- better wire_corner #89
0.12.1¶
- use uv in cicd
- update to gdsfactory 8.27.0
0.12.0¶
0.11.5¶
0.11.4¶
- update gdsfactory 8.20.0 #77
0.11.3¶
- update gdsfactory 8.15.0 #72
0.11.2¶
0.10.0¶
0.9.2¶
- update gdsfactory to 8.4.0 #50
0.9.1¶
0.9.0¶
- Gdsfactory8 #43
- add gplugins to pyproject #46
- Fixes remove partials #45
- fixing tech installation on windows #35
- better values for cross_section #39
- use approx version #37
- update gdsfactory #34
0.8.0¶
- add si500nm pdk #32
- Add logo #28
- better docs #31
- make CORNERSTONE package support all the different pdks #29
- update gplugins #27
- Better docs #24
- simplify routing #22
- update gdsfactory and gplugins #21
- Improve models #16
0.7.0¶
0.5.0¶
- remove info from cells #12