Changelog
2.1.0 - 2026-11-06
Section titled “2.1.0 - 2026-11-06”Added
parametric.extend_portsextends a component’s waveguide ports with straight sections, or with transitions to a new port specification, keeping the original port names.eo_s21computes the electro-optic response of a terminated traveling-wave modulator in the frequency domain, from the same code and arguments asTerminatedModTimeStepper.lvs_checkruns Siemens Calibre LVS withengine="calibre", andload_lvs_resultsreads its results, as DRC already could.- Port names in Touchstone files:
SMatrix.write_snpwrites each port’s name and mode in an[Optical Port List]block, andSMatrix.load_snpreads them back whenportsis not given. Argumentcommentsreplaces the block, and argumentconjugate, also inload_snp, conjugates the data. - Reference queries in the
updatesofCircuitModel.startcan be path strings, such as"SUB/BEND[1]"or"**/COMP*": names separated by/, with*and?wildcards,[i]for the i-th reference and**for any depth.select_referenceslists the references a query selects. TimeStepper.write_verilog_aexportsTerminatedModTimeStepperwith frequency-dependent RF index, impedances or loss, given as anInterpolatoror mode-solved, which it used to refuse: the exported module applies the time stepper’s own electro-optic response.AvalanchePhotodiodeTimeStepper,ElectroAbsorptionModTimeStepperandSemiconductorAmplifierTimeStepperexport to Verilog-A withTimeStepper.write_verilog_a.- Reference arrays in PDA projects: a
Referencewith severalcolumnsorrowsis stored as one array, and the ports, terminals and connections of each element carry over.
Changed
abstract.fiberis one component stepped in sections, instead of a chain of single-section components, and its defaultmax_phaseis 0.15: nonlinear spans run 2 to 5 times faster and are more accurate.- The default
max_phaseofAnalyticWaveguideTimeStepperandAnalyticWaveguideModel.nonlinearis 0.15, up from 0.05: nonlinear waveguides need about three times fewer sections for a smaller error. - The
black_box_componentof each model draws the model’s schematic symbol in a box with the model type below it, as theabstractcomponents do, instead of a placeholder marked “BB”. - A reference query in
updatesthat selects no reference emits aRuntimeWarning, and an invalid query raisesValueErrororTypeErrorinstead ofKeyError,RuntimeErrororre.error. - Gradient evaluation with
Tidy3DModelreuses structure reconstructions and permittivity samples within an evaluation, reducing repeated work for parametric components.
Fixed
AnalyticWaveguideTimeSteppertakes its nonlinearity at the power halfway along each section rather than at its entrance, which removes a first-order error in lossy waveguides. It splits a nonlinear waveguide’s dispersion around its nonlinear steps, so the phase of generated light, such as a four-wave-mixing idler, converges as the square of the number of sections instead of linearly.TimeStepper.write_verilog_anow exports the self-heating ofDMLaserTimeStepper: thermal rollover, the threshold shift and the thermal frequency drift.PhotodiodeTimeStepperpink noise follows 1/f at every time step and corner frequency.TimeStepper.write_verilog_akeeps the noise of a filteredPhotodiodeTimeStepper.TimeStepper.write_verilog_anow exports the nonlinear terms ofRingTimeStepper.AnalyticWaveguideTimeStepperappliesn_effatreference_frequency, asAnalyticWaveguideModeldoes, rather than at the carrier.- Dispersion in
AnalyticWaveguideTimeStepperno longer lengthens a waveguide shorter than the default filter’s latency, such as a ring. - The electro-optic response of
TerminatedModTimeSteppernear velocity matching. - Ports of
abstractcomponents and black boxes lie on the grid. - Improved load speed and robustness of
pda.load_projecton a project with a largeDataModel. - A string key in
updates, such as"ARM", was read as one regular expression per character and silently selected nothing; strings are now path queries. copy.copyandcopy.deepcopyof aModel,TimeStepperorRandomVariablekeep itsproperties.
2.0.0 - 2026-10-14
Section titled “2.0.0 - 2026-10-14”Added
reference_chaincreates a chain of connected references from a text sequence, with explicit ports, mirroring, repetition and spacers.parametric.filltiles a region with a structure or component at a fixed pitch, around keep-out layers.intersectstests whether two sets of structures overlap or touch.- Argument
min_widthinparametric.transition, so that layers present on only one side of the transition do not taper down to zero width. - Argument
verboseinlive_viewer.LiveViewerto silence its messages. live_viewer.LiveViewerworks behind path proxies, such as code-server’s/proxy/<port>/, and accepts edits from the code-server host without extra settings.- Terminals can be wired into nets in the LiveViewer’s layout view, as ports are, and the Properties panel lists a cell’s models with the active one marked.
Changed
- Breaking:
target_neffinPortSpecandFiberPortdefaults toNone, which estimates it from the cross-section media at the solve frequencies. The port specifications inbasic_technologyuse this new setting. - Ports whose specifications differ only in
target_neffcan be connected directly, including designs saved with the previousbasic_technology. - Breaking: arguments of
live_viewer.LiveViewerafterportare keyword-only. - Breaking: removed the deprecated
Technology.connectionsattribute andconnectionsargument ofTechnology(useTechnology.connected_layers), the argumentsbend90andbend90_costofparametric.route_auto(usebendandbend_cost), and thefrom_bytesclass methods of the built-in models.
1.6.0 - 2026-10-12
Section titled “1.6.0 - 2026-10-12”Added
- Schematic editing in
live_viewer.LiveViewer: place, move, wire and route components in the Schematic view or on the layout, with undo and redo. - The LiveViewer’s DRC section runs KLayout or Calibre DRC on the design on screen and draws the markers of any KLayout or Calibre report on the layout.
drc_checkandlvs_checkrun DRC and LVS on a component or layout file. See Layout Verification.load_drc_resultsandload_lvs_resultsread an existing results database.config.default_drc_lvs_enginesets the default DRC/LVS engine.config.klayout_executableandconfig.calibre_executableto select the KLayout and Siemens Calibre executables used by DRC/LVS checks.parametric.route_electricalfor automatic routing of electrical connections, with vias, bundles and optional 45° tracks.LayerSpec.min_widthandLayerSpec.min_spacingdesign rules, used as defaults byparametric.route_electrical.AnalyticWaveguideModel.nonlinearbuilds a nonlinear waveguide model (Kerr effect, two-photon absorption and free carriers) from physical parameters, the medium’s nonlinear specification, or a port mode solve.- Arguments
sections,peak_power,max_phaseanddn_fc_mapinAnalyticWaveguideTimeStepperfor split-step simulation of nonlinear waveguides. PolarizationModeDispersionTimeStepper, used byabstract.pmd_fiberin time-domain simulations instead of a pole-residue fit.- Argument
dual_polarizationinabstract.fiber, for fibers that carry both polarizations and connect toabstract.pmd_fiber.AnalyticWaveguideTimeSteppernow supports multi-mode ports. - PDA traceability:
pda.Project.version_history,pda.Project.trace,pda.Project.attachment_status,pda.Project.treeandpda.Project.traceability_matrixrelate attached files to the component versions they describe, andpda.Project.add_versiontags attachments with the new version. - PDA edit history:
pda.Project.edit_log,pda.Project.latest_head,pda.Project.changed_sinceandpda.Project.watch, and argumentsaveinpda.Project.loadandpda.Project.componentto load a design as it was after any save. pda.restore_projectandpda.Project.restoreto recover retired projects, components and technologies.- Attachments on technologies in PDA projects, and argument
searchinpda.Project.attachments. - Experimental dataset pointers in PDA projects:
pda.Project.attach_query,pda.Project.load_queryandpda.Project.run_query.
Changed
- Breaking:
live_viewer.LiveViewerlistens on127.0.0.1by default. To reach it from another machine, use an SSH tunnel or the newhostandallowed_hostsarguments. Creating a viewer again on the same port replaces the previous one. - Breaking: Abstract Components are drawn in the layout as their schematic symbols, which changes their size and port positions.
- Faster time-domain simulations: built-in time steppers run in native code, and
CircuitTimeSteppercan compile circuits with numba (install thenumbaextra; seeconfig.compile_circuit_time_steppers). Results can differ slightly from previous versions: loops without delay are solved with Newton’s method, and noise samples differ for the same seed. - PhotonForge settings are kept in tidy3d’s configuration under
[plugins.photonforge], where they can be saved and overridden withTIDY3D_PLUGINS__PHOTONFORGE__<NAME>environment variables. Settingremote_logging = falsethere stops sending usage data (see Privacy and Usage Data). - SVG previews of virtual nets draw dashed lines only between members not yet connected by metal.
Fixed
Tidy3DModel.batch_datano longer returns an empty batch when the Tidy3D local cache is disabled or cold. Tasks without a local copy are resolved through their own ids and downloaded when the data is accessed.pda.list_librariesfailing for accounts with access to many projects.- Adding the first component to an empty PDA project.
- Saving from the PDA GUI no longer drops a component’s own geometry, ports and models.
- SVG previews showing the wrong geometry for different components that share a PDA id, such as two versions of one component.
BraggGratingModel.bragg_wavelengthincludes dispersion when solving the Bragg condition, and accepts an interpolated effective index without a reference frequency.- Dispersion in
AnalyticWaveguideTimeStepperandabstract.fiberno longer attenuates signals near the edges of the simulation band. - Breaking: signs that did not follow the time convention.
frequencyinOpticalPulseTimeStepperplaced the pulse on the wrong side of the carrier, and a positivechirpgave a down-chirp instead of an up-chirp. A positivechirpinElectroAbsorptionModTimeStepper,AnalyticWaveguideModelandAmplitudeModTimeStepperred-shifted the rising edge; it now blue-shifts it, as datasheet values expect. Results change only for nonzero values of these arguments. EMEModelfailing on components with aFiberPort.CircuitModelfailing on unrotated references to components with aFiberPort.- Entries in
config.default_kwargsfor a parametric function, such as"bend", were passed to other functions, such as the routers, as the argument with the same name. - Argument
turnsofparametric.circular_spiralwas shown with length units in parameter forms.
1.5.4 - 2026-09-21
Section titled “1.5.4 - 2026-09-21”Added
- New models
BraggGratingModel(guide) andPolarizationModeDispersionModel. - New time steppers
SemiconductorAmplifierTimeStepper,AvalanchePhotodiodeTimeStepper, andElectroAbsorptionModTimeStepper. - New abstract components
abstract.avalanche_photodiode,abstract.fiber,abstract.pmd_fiber,abstract.awg,abstract.semiconductor_amplifier,abstract.electro_absorption_modulator,abstract.bragg_grating,abstract.nonlinear_ring, andabstract.vcsel. - Utility functions
franz_keldysh_absorption,saturation_output_power,dispersion_from_beta2,srh_lifetime, andmiller_gain. LayerSpec.conductiveandLayerSpec.device_marker, used for connectivity extraction.- Lumped-element circuit solving in
CircuitModel: references joined by terminal connections are assembled into a single MNA system, solved, and composed with the surrounding wave network. - Electrical connectivity extraction from layout geometry through
Component.extract_connectivity. Component.add_virtual_net,Component.remove_virtual_net,Component.remove_virtual_net_member, andComponent.virtual_netsto declare electrical nets.- Virtual net support in
component_from_netlist. - Batch mode-solving support in
port_modes. - Path-length matching for existing routes through
match_path_lengths, specified per group byPathLengthMatching: geometric length, optical phase, or group delay, matched to explicit targets or to the longest net in the group, with per-net length offsets, bend-count contracts, and a spacing floor. - Argument
matchinginparametric.route_auto, which matches groups on the routed paths, before any geometry is emitted. - Arguments
lengthandlength_toleranceinparametric.route, for a single route meandered to an exact geometric length. - Argument
group_indexineffective_route_length, to build the index from group indices and measure group delay instead of phase. TimeStepper.write_verilog_aas a simpler interface replacing the experimentalspicemodule (guide).- fiber module with helpers for fiber model design.
Changed
Component.get_netlistlists the physical and the virtual N-way MNA nodes.- Conversion to SPICE raises an error on hierarchies that use terminal connections, which it cannot represent.
- GDSII readers warn and skip on malformed data that is not geometry-related. Geometry-related errors remain fatal.
Fixed
- Argument
metal_layerofbasic_technologywas ignored, and its value was never validated. - Layer names in
Technology.connectionsare now resolved against the technology being created or configured, instead of the default technology. - Call-time technology updates in
Reference.updatenow chain to the referenced component. abstract.ring_resonatornow passes the complex coupling factors to its time stepper instead of magnitude only.
1.5.3 - 2026-08-26
Section titled “1.5.3 - 2026-08-26”Changed
- Made the new layout readers (for GDSII and OASIS files) more lenient with degenerate structures.
1.5.2 - 2026-08-21
Section titled “1.5.2 - 2026-08-21”Added
- Support for transformed
Referencearrays (columns > 1orrows > 1). - Automatic notebook updates in
live_viewer.LiveViewerafter successful cell execution in Jupyter notebooks/IPython. - Support for file attachments on individual PDA components.
spicemodule for generating SPICE models and converting components to Verilog-A. Removed in 1.5.4 in favour ofTimeStepper.write_verilog_a.
Changed
- Breaking: changed defaults on
parametric.route_autofor better performance. The grid size now defaults to half the routing radius, and collision checks default to the layers used by the routed waveguide. - Improved accuracy for extrusions with sidewall angles.
- Improved memory usage on GDSII and OASIS reading and writing.
- Improved
live_viewer.LiveViewerperformance and responsiveness for large layouts, hierarchy filtering, and raster rendering. - Local mode-solving (
config.use_local_mode_solver) available only when subpixel is enabled intidy3d-extraspackage to guarantee accuracy. - Documented that
DelayedTimeStepperquantizes delays down to whole time steps.
Fixed
PhotodiodeTimeSteppershot noise now follows the instantaneous space-charge-limited photocurrent by default, independent of the simulation time step.RingTimeSteppernow rejects non-unitary coupling coefficients during construction.ElectricalAmplifierTimeSteppercompression_powerandip3handling to correctly apply to real tones.OpticalPulseTimeStepperrelative intensity noise now applies to optical power instead of field amplitude.- Reflection coefficient no longer ignored in
OpticalPulseTimeStepper. DMLaserTimeStepperrelative intensity noise application independent of time step.- Corrected bend, S-bend, and crossing costs in
parametric.route_auto, including off-grid component access, and improved 45-degree bend normalization and collision protection. - Improved network connection robustness for PDA.
1.5.1 - 2026-07-16
Section titled “1.5.1 - 2026-07-16”Added
- Cross-section visualization tool for
live_viewer.LiveViewer. - Argument
reference_frequencytoRingTimeStepper,PhaseModTimeStepper, andTerminatedModTimeStepper, as well as their corresponding Abstract Components. - Added carrier-aware rebasing and mode-key validation for explicit pole-residue matrices.
Changed
- The default
abstract.phase_modulatornow includes dispersion introduced by a non-zero value ofn_group, aligning it to the default behavior of other Abstract Components. MuxDemuxModelnow uses causal Butterworth filters with integer order and constant reflections.- Port names now use natural ordering across models and time steppers (P9 before P10).
photonforge-server --examplewill use the latest compatible Abstract Component Library it finds, instead of raising an error if the exact version is not found.
Fixed
- Bug in
pda.Project.add_librarynot working when library name is not unique. - Bug in
pda.Projectproducing an error whenever a model or component schema is upgraded. - Bug in PDA using the wrong library name for projects that were renamed after being versioned.
- Bug in delay buffers using the wrong value until the delay was reached, making the result of
CircuitTimeStepperorder-dependent in certain situations. pole_residue_fitnot providing a clear error or warning when the requested number of poles is above the limit in certain cases.- Bug in
load_snppreventing files to load properly when frequency points were scaled. - Bug in serialization of bytes objects in phf files.
Modelcopies not including customizedTimeStepper.
1.5.0 - 2026-07-08
Section titled “1.5.0 - 2026-07-08”Added
parametric.route_autofor automatic bundle routing with collision detection and crossing insertion.parametric.route_u,parametric.route_z,parametric.route_lfor simple routing of parallel port bundles.routing_collisionsto check for collisisons in routing.- Argument
endpointtoparametric.straightto allow precise diagonal segments to be built without having to rotate them. - Support for automatic selection of geometry or permittivity-based automatic differentiation in
Tidy3DModel.
Changed
- More robust parametric component name hashing.
- Changed the name of the default cladding material in
basic_technologyto"Palik_LowLoss"because"Palik_LossLess"is deprecated in Tidy3d.
Fixed
- Incorrect duplicate name error when adding or updating routes in PDA projects.
- Missing degrees to radians conversion factor in
phase_biasforMZMTimeStepper. - Default return loss of a few Abstract Components to ensure passivity.
1.4.7 - 2026-06-25
Section titled “1.4.7 - 2026-06-25”Added
- Argument
carrier_frequencytoSMatrixTimeStepperand smarter selection of electrical or optical model when time-stepping circuits.
Changed
- Improved the robustness of
DirectionalCouplerCircuitModel. - Improved performance of simulations in
photonforge-server.
Fixed
- Bug in
photonforge-serverpreventing use of read-only libraries.
1.4.6 - 2026-06-22
Section titled “1.4.6 - 2026-06-22”Added
pda.Project.attach,pda.Project.detach,pda.Project.attachments, andpda.Project.download_attachmentto work with file attachments in PDA projects.- Support for permittivity-based automatic differentiation and adjoint optimization of parametric components.
Changed
- Performance improvements in the PDA system for storing and loading large projects or libraries.
Fixed
- Bug in
Component.get_netlistthat provoked a segfault when a warning would be issued for a disconnected 3D port. - Bug in
monte_carlo.s_matrixnot reporting correct errors on simulation failures.
1.4.5 - 2026-06-15
Section titled “1.4.5 - 2026-06-15”Added
- Time-domain simulation support for built-in lumped elements.
Changed
- Increased timeout for finding and retrieving PDA documents to better accpunt for connection problems.
Fixed
- Fix time-dependent term sign in all
LumpedModelto be compatible with the Tidy3d convention . - Removed the connection limit for the PDA client to handle larger data payloads.
1.4.4 - 2026-06-10
Section titled “1.4.4 - 2026-06-10”Added
- Support for Tidy3d’s automatic differentiation and adjoint optimization with parametric components.
Changed
- Added the flexibility of specifying the phase of the coupling coefficient in the
RingTimeStepper. - Improved
live_viewer.LiveViewer: faster rendering, support for large layouts (millions of shapes), shape-snapping ruler, geometry culling by layer, cell or hierarchy depth.
Fixed
- Bug in
photonforge-servernot resolving required parameters correctly from all referenced components. - Bug in
pda.Project.add_libraryignoring the selected library version and always using latest.
1.4.3 - 2026-05-27
Section titled “1.4.3 - 2026-05-27”Added
pda.Project.list_tagsandpda.Project.list_versionsto list tags and versions for the project or its contents.pda.Project.retire_unusedto automatically clean up unused internal components in the project.pda.Project.is_read_onlyto query the read/write state of a loaded project.- Argument
external_onlytopda.Project.componentsto filter returned results.
Changed
- More performance improvements to the PDA system and
photonforge-server. - Breaking:
pda.Project.reloadrenamed topda.Project.load_latest.
Fixed
- Bug in analytic models not using the provided reference frequency to compute dispersion.
- PDA projects are loaded at specific versions or tags as read-only.
- PDA incompatibility with python < 3.12.
- Bug in PDA projects preventing custom modules to be saved in certain scenarios.
- Bug in deep copying objects with cyclic dependencies through parametric keyword arguments.
1.4.2 - 2026-05-12
Section titled “1.4.2 - 2026-05-12”Changed
- Performance improvements to the PDA system and
photonforge-serverwhen loading projects or adding libraries.
1.4.1 - 2026-05-10
Section titled “1.4.1 - 2026-05-10”Fixed
- Bug on the
photonforge-serverthat prevented parametric components to be updated after copy and paste.
1.4.0 - 2026-05-08
Section titled “1.4.0 - 2026-05-08”Added
- Photonic Design Automation (PDA) support.
- Abstract component library: Abstract Components.
LumpedModelto support compact models for lumped elements, andCapacitor,IdealTransformer,IdealTransmissionLine,Inductor,ParallelRLC,Resistor,SeriesRLC.- New result and support classes
ZMatrix,YMatrix,MNAMatrix. - New models:
CirculatorModel,IsolatorModel,MuxDemuxModel,RingModel, andDualRingModel. - New time steppers:
MZMTimeStepper,AmplitudeModTimeStepper, andRingTimeStepper. effective_route_lengthto compute the effective length of waveguides.Polygon.filletfor rounding polygon corners.Technology.extrusion_layers,ExtrusionSpec.mask_layers, andMaskSpec.get_layers.Model.transformthat can be specialized to transform models that have any spatial dependency.Component.active_model_nameto retrieve the name of the currently active model(s).- Extended
Interpolatorto handle multi-dimensional interpolation and constant extrapolation. - Trimming arguments to
offset. - Argument
include_labelsto bounds and convex hull computations for components and references. - Argument
layerstoComponent.boundsandComponent.convex_hull. - Argument
bit_sequencetoWaveformTimeStepperto allow custom bit sequences to be used. - Arguments
gridandmultipletosnap_to_grid,grid_floor, andgrid_ceil. - Argument
suppress_warningstoComponent.get_netlist.
Changed
- Improved parametric function naming scheme to avoid using hashes too frequently.
- Simplified handling of butt-coupling connections that internally use an
EMEModel. - Component extrusion uses
ConstructiveSolidto merge structures with common media. - Coordinate snapping on parametric components is more robust to most numerical inaccuracy sources.
- SVG representations make use hatching patterns defined in
LayerSpec. - Breaking: Argument change in
PhaseModTimeStepper:tau_rcwas replaced by a more convenientf_3dB.
Fixed
Component.updateaffecting the wrong component through caching.Path.bezierbug that prevented high order bezier curves from working.- Handle circuits with both electrical and optical connections that require phase corrections simultaneously.
- Improved automatic extrusion tolerance for RF ports with self-intersecting geometries.
n_group2precedence inAnalyticMZIModel- Circuit simulations with transformed sub-components and user-defined bounds are now correctly transformed.
- Bug in
TerminatedModTimeStepperaffecting cases where the source was not matched to the modulator’s characteristic impedance. - Energy conservation bug in
PhotodiodeTimeStepperwhen a reflection coefficient was used.
1.3.2 - 2026-02-04
Section titled “1.3.2 - 2026-02-04”Added
- New time steppers:
AnalyticWaveguideTimeStepper,FilterTimeStepper,OpticalAmplifierTimeStepper,ElectricalAmplifierTimeStepper,ExpressionTimeStepper,DifferentialTimeStepper,IntegralTimeStepper. - New model
DirectionalCouplerCircuitModel, used as new default for parametric directional couplers. - Argument in
Component.get_netlistto ignore virtual connections. Useful for checking layout-only connections.
Changed
WaveguideModelhas increased phase accuracy for bends by accounting for polarization rotations between ports.route_lengthwas improved to work with multi-path waveguides, like CPW transmission lines.
Fixed
- Breaking: EMEModel compatibility fix for Tidy3d 2.10.2 (EMEModels created with Tidy3d 2.10.1 and PhotonForge 1.3.0 and 1.3.1 will be incompatible with this and future releases due to a schema change in Tidy3d.).
- Bug in
Tidy3DModelwhen simulating a small region inside a large component that affected extended ports. - Bug in
parametric.route_taperwhen both terminal structures were 1-dimensional and orthogonal. - Invalid Euler bend parameters now raise proper error.
- Division by zero in some waveguide models when
vpi_Lwas set to 0. - Division by zero error in empty circuits.
1.3.1 - 2026-01-14
Section titled “1.3.1 - 2026-01-14”Fixed
- SVG previews no rendering the correct colors.
1.3.0 - 2026-01-14
Section titled “1.3.0 - 2026-01-14”Added
- Support for connections between ports with different profiles in
Component.get_netlist, bridged through EME or an impedance mismatch model in circuits. PortSpec.impedanceto be used on electrical ports to pre-define the port impedance.- Terminated phase modulator time stepper
TerminatedModTimeStepper - Argument
post_load_functiontoload_layoutto help automating port/pin detection when loading layout files.
Changed
- Breaking: classes derived from
TimeStepperrequire akeysattribute or property, and the interface forTimeStepper.step_singleuses arrays instead of dictionaries for improved performance. Custom user-defined time steppers will have to be manually updated. - Impedance argument
z0controls the conversion between wave amplitudes and voltages/currents inDMLaserTimeStepperandPhotodiodeTimeStepper
Fixed
- Handling of
pre_export_functioninwrite_layout. PhotodiodeTimeStepperbug when using saturation current (undefined variable).
1.2.3 - 2025-12-19
Section titled “1.2.3 - 2025-12-19”Fixed
CWLaserTimeStepperandDMLaserTimeStepperphase signs.
1.2.2 - 2025-12-12
Section titled “1.2.2 - 2025-12-12”Added
Interpolatorto be used when certain class arguments must be defined as interpolated values.config.svg_reference_depthreplaces the now deprecatedconfig.svg_referencesto give more fine-grained control over reference display in SVG previews.- Support for transforming empty paths into polygons when their end caps allow it.
Changed
- New parametric component arguments for setting models. Old “kwargs” style parameters have been deprecated.
- Improved performance of
CircuitTimeStepper. - Better default model naming.
Fixed
- Removed unused arguments
show_progressandmodel_kwargsfromplot_s_matrix.
1.2.1 - 2025-11-13
Section titled “1.2.1 - 2025-11-13”Added
Fixed
- Bug in
CircuitTimeStepperwhen using rotated references. - Warning message bug in
SMatrixTimeStepper. live_viewer.LiveViewernot properly displaying images after server update.
1.2.0 - 2025-11-12
Section titled “1.2.0 - 2025-11-12”Added
- Time-stepping functionality for single components and circuits using the new classes
CircuitTimeStepper,SMatrixTimeStepper,DelayedTimeStepper,PhaseModTimeStepper,CWLaserTimeStepper,DMLaserTimeStepper,WaveformTimeStepper,PhotodiodeTimeStepper(subclasses ofTimeStepper), andTimeSeries. - New model classes:
AnalyticDirectionalCouplerModel,AnalyticMZIModel,AnalyticWaveguideModel,CrossingModel,PolarizationBeamSplitterModel, andPolarizationSplitterRotatorModel. Component.replace_technologyto replace technologies on the component and its dependencies.Component.rename_port,Component.rename_terminal, andComponent.rename_modelto rename existing ports, terminals, and models, respectively.Component.centerandReference.centerto get entity centers.stencil.apodized_gratingandstencil.apodized_focused_gratingfor creation of apodized gratings based on lists of teeth widths and gaps.Model.estimate_costallows cost estimation for any models that support it, includingCircuitModel.- Terminals are now exported from
Component.get_netlist, in a similar fashion to ports. - Added “active models” key to the netlist accepted by
component_from_netlistto enable setting separate active models for optical and electrical frequency ranges. SMatrix.force_symmetricto make an S matrix symmetric by construction.- Convenience argument and attribute
GaussianPort.waist_distanceto align with the definition of Tidy3D’sGaussianBeam. Properties.getto retrieve a value with a default fallback.
Changed
LayerSpecwill be assigned a random color and pattern when none are specified.- Fix for translation of Gaussian source w.r.t. their field monitor, improving reciprocity of results.
Model.startimplementations can return anSMatrixinstance directly. ClassModelResulthas been deprecated.Tidy3DModel.batch_datareplace the now deprecateddata_path_for,batch_file_for, andbatch_data_for.EMEModel.simulation_datareplace the now deprecateddata_path_for,data_file_for, andsimulation_data_for.
Fixed
- Bug in
basic_technologyparsing argumentstop_mediumandsubstrate_medium.
1.1.7 - 2025-07-23
Section titled “1.1.7 - 2025-07-23”Fixed
- Error in PHF storage for
Path.
1.1.6 - 2025-07-08
Section titled “1.1.6 - 2025-07-08”Added
- Argument
use_angle_rotationto Tidy3D conversion functions fromPortandFiberPort, to enambleangle_rotationin theModeSpecthey generate, if necessary.
Changed
- Mode fields are only stored in Tidy3d simulation data when needed for mode remapping.
Fixed
- Critical error in annotated types from parametric component library (unhashable types).
1.1.5 - 2025-06-24
Section titled “1.1.5 - 2025-06-24”Added
PortSpec.default_radiuscan be used to set preferred radius for any port specification.- Interpolation method
"poleresidue"toDataModelto use a pole-residue matrix fit for frequency interpolations. - Argument
pre_export_functiontowrite_layout,Component.write_gds, andComponent.write_oasto make temporary changes in components right before exporting. Rectangle.perimeter,Circle.perimeter,Polygon.perimeter, andPath.perimeterfor perimeter computation.Propertiesto all objects to hold arbitrary metadata.- Argument
min_evalstoCircleandPathsection methods to override the minimal number of points used in polygonal conversion based onconfig.tolerance. - Argument
max_evalstoPathsection methods to allow the construction of complex geometries that require more evaluations that the default. PortSpec.path_profiles_listto get path profiles always as a list.
Changed
- Deprecation: All
jsonmethods have been deprecated for removal in the 1.2 release.
Fixed
- Memory access bug in S matrix comparison.
- Other minor memory leak fixes.
1.1.4 - 2025-05-03
Section titled “1.1.4 - 2025-05-03”Added
Component.slice_profileto create path profiles from existing waveguide geometries.ExtrusionSpec.referenceto change the reference plane for sidewall angle dilations and erosions.MaskSpec.translationto allow masks to be translated during extrusion (mainly for mask alignment sensitivity tests).- Support for SubpixelSpec to
Tidy3DModelandEMEModel. - Helper function
virtual_port_specto quickly create virtual port specifications.
Changed
WaveguideModelnow accepts aPortSpecor the string"cross-section"for more flexible propagation index calculation.- Updated minimal
config.gridsize to avoid truncation errors when snapping ports. - Updated default settings for electrical simulations (experimental feature).
- Updated default values for electrical simulation grids and
cpw_spec.
Fixed
parametric.rectangular_spirallength incorrectly calculated in specific cases.- Serialization of complex Tidy3D objects included in a
Tidy3DModel. - Improved error handling in a few python interfaces.
- Segfault in
Path.bezier.
1.1.3 - 2025-04-11
Section titled “1.1.3 - 2025-04-11”Added
- Support for angled ports in circuit simulations.
- Several
Pathattributes. Path.interpolateto query path positions by length.Path.updated_copyto create copies with different widths and offsets.ExtrusionTableandPortSpecTablevisualizers, used by default withTechnology.extrusion_specsandTechnology.ports.- Better console and HTML representations for
Technology. - Support for ports in curved waveguides with
Port.bend_radius.
Fixed
- Backwards compatibility fix in phf files using specific parametric technologies.
1.1.2 - 2025-03-25
Section titled “1.1.2 - 2025-03-25”Fixed
- Crash when no active model is present in phf file.
1.1.1 - 2025-03-24
Section titled “1.1.1 - 2025-03-24”Added
- Terminal routes in
component_from_netlistaccepts keyword arguments. Component.queryandReference.queryto look for ports and terminals within the component dependency tree.- Arguments
boundary_marginandminimal_turn_angletoComponent.detect_portsto fine-tune port detection grid_layoutto arrange components or other structures in a rectangular grid.pack_layoutto pack components or other structures in a compact area.- Support for specifying waypoints as 2D coordinates in
parametric.route_manhattan.
Changed
- Analytical models include all-zero elements in S matrix output.
Fixed
- Tidy3D simulation hanging when an error occurs during upload or download.
- Axis label in
plot_s_matrix. Component.detect_portsproperly detects and ignores co-linear vertices in polygons.- Data arrays from numpy and xarray within Tidy3D objects breaking serialization.
1.1.0 - 2025-03-04
Section titled “1.1.0 - 2025-03-04”Added
- Electrical interface support: electrical port specifications and terminals, terminal routing with
parametric.route_taper, andparametric.route_manhattanandcpw_specutility function to create CPW port specifications. - Class
TimeDomainModelfor time-stepping based on aPoleResidueMatrix. live_viewer.LiveViewerfor live geometry and component visualization.- Functions
PoleResidueMatrix.is_passive,PoleResidueMatrix.enforce_passivity, andPoleResidueMatrix.get_rms_error. - Options
passive,delays,stable, andfeedthroughinpole_residue_fitto better control the fitting process. parametric.circular_spiralas an alternative to existing rectangular spiral.- Argument
full_lengthtoparametric.rectangular_spiralandparametric.circular_spiralto preset the desired spiral length. - FDTD cost estimation with
Tidy3DModel.estimate_cost. - Defaults for parametric components and models can be set in
config.default_kwargs. Path.arc,Path.turn, andPath.s_bendcan use defaults forradiusandeuler_fractionfromconfig.default_kwargs.- Function
s_bend_lengthcan be used to calculate the ideal S bend length for specific radius and offset. Component.sizeandReference.size.Terminal.centerandTerminal.size.- Subscript operation to
Componentto retrieve ports and terminals. Component.disconnected_reference_portsandComponent.add_reference_portsto facilitate adding ports from references.Component.tree_viewto pretty-print component dependency trees.- Parameter
on_boundarytoComponent.detect_portsto limit search at the component boundaries. - Function
healto remove small features from structures. - Added bulge option to automatically widen long straight waveguide sections.
config.svg_reference_labelsto control display of labels from references.- Json representation for planar structures.
- Class
FiberPortfor general waveguide ports. Port.can_connect_toverifies if 2 ports can be connected by a waveguide route.PortSpec.combined_withto combine path profiles from port specifications.PortSpec.added_solver_modesto port specifications, which allows for single TM mode ports.- Attribute
MaskSpec.layerfor single-layer mask specifications. LayerTablevisualizer for technology layer specifications, used by default withTechnology.layers.- Argument
verbosetoTidy3DModel.start,EMEModel.start,WaveguideModel.start, andCircuitModel.start. - Accept simplified forms of port symmetries and added
Tidy3DModel.test_port_symmetries. abort_pending_taskscan be used to abort all running simulations at once.- Function
SMatrix.estimate_phasefor estimation of minimum-phase-shift data from given amplitude data, and functionsSMatrix.apply_time_delayandSMatrix.estimate_delays. - Function
port_modesto solve port modes using caches. - Argument
parallel_jobsto start multiple Monte Carlo tasks in parallel inmonte_carlo.s_matrix.
Changed
- Parallel upload and download of Tidy3D tasks.
- Default
run_timequality factor changed from 10 to 5 in order to decrease the default estimated cost of Tidy3D runs. - Use default precision in mode solver.
- Remove out-of bounds structures from simulations to avoid Tidy3D warnings.
- Where available, default keyword arguments for parametric components and technologies are included in
Component.parametric_kwargsandTechnology.parametric_kwargs.
Fixed
- Bug in
MaskSpeccomparison. - Do not create complex geometry with more than 100 sub-geometries to avoid errors in Tidy3D.
- Vernier scale stencil bug fix to generate proper geometry.
- Support for numpy complex scalars in phf streams.
- Better HTML escaping in SVG representations.
- Improved Tidy3D object conversion to include spatial data arrays in runtime caches.
- Port mode numbering for S matrices is consistent with and without setting
PortSpec.polarization. - Bug in error handling within paths.
1.0.5 - 2025-01-02
Section titled “1.0.5 - 2025-01-02”Added
- Attribute
_idfor internal use. - Configuration option
config.svg_label_scaling.
Changed
- More robust guarantees for gradients for path endpoints.
- Paths are stored as polygons by default in GDSII and OASIS files.
Reference.componentcan be set.- Simplified
updatesargument inCircuitModel.start.
Fixed
- Path alignment fixes for parametric couplers.
- Minor docstring fixes.
1.0.4 - 2024-11-21
Section titled “1.0.4 - 2024-11-21”Added
- Complex vector fitting for baseband signals via
pole_residue_fitwithreal=False.
Changed
- Sign convention for the frequency variable in
PoleResidueMatrix. - In
pole_residue_fit,min_polesandmax_polesnow count a single conjugate pair as two poles. - S matrices store all-zeros instead of dropping them.
- Routes can be specified by reference and port name to facilitate updating if the reference is transformed.
Fixed
- Significant accuracy improvements in
pole_residue_fit. - Component comparison takes ports into account.
1.0.3 - 2024-11-01
Section titled “1.0.3 - 2024-11-01”Fixed
- Function
stencil.as_componenttakes a technology argument for the created component. - Apply union to polygons before erosion, as indicated in the documentation.
1.0.2 - 2024-10-25
Section titled “1.0.2 - 2024-10-25”Added
- Function
Tidy3DModel.test_port_symmetriesgained averboseargument to control printed messages.
Changed
- Function
tidy3d_plotwill use the component’sTidy3DModelif it has one.
Fixed
- Function
Port.to_tidy3d_mode_solvercorrectly sets the generatedgroup_index_step. Tidy3DModelsupports 2D simulations when bounds are overridden.
1.0.1 - 2024-10-15
Section titled “1.0.1 - 2024-10-15”Changed
- Suppress extrusion error message from Tidy3D when falling back to triangular mesh.
Fixed
- Always export paths with round or beveled joins as polygons.
- Forbid inheritance from PhotonForge classes (except
Model) because the internal design does not support it. - Error when parsing arguments in
Path.parametric. - Runtime errors in
EMEModel. - Degenerate port modes are handled correctly when symmetry is used in
Tidy3DModelandEMEModel.
1.0.0 - 2024-10-10
Section titled “1.0.0 - 2024-10-10”Initial release.