PhotonForge 2.0

PhotonForge 2.0 is an end-to-end design automation platform for photonic integrated circuits. It takes a chip from the PDK to tape-out and test: schematic, layout and routing, device and circuit simulation, design-rule checks, and version control of the design and its data. Engineers and AI agents design the chip together, with the same Python API and the same local GUI.

The PhotonForge local GUI on a laptop, next to chip layouts that AI agents built with PhotonForge: a hexagonal mesh processor, a 32x32 Benes switch, a full test die, a 20-mode processor and more

Free to start, in one command

PhotonForge 2.0 Community is free for research and commercial use, with unlimited seats for engineers and AI agents.

pip install photonforge

Layout, schematic, routing, DRC and circuit simulation run on your computer. A free Tidy3D account adds device simulation in the cloud. Next, build your first circuit in the local GUI with the Quick Start.

PhotonForge Enterprise, licensed as Photonic Canvas, adds foundry PDKs, EDA connectors, and version control and traceability for teams that take designs to production (see Community and Enterprise).

From Schematic to Tape-Out on One Chip

The steps below follow one chip through the design flow: a five-channel ring-modulator transmitter for a datacom link. The chip uses SiPhoPDK, a demo silicon photonics PDK. Each step shows what PhotonForge does and links to the guides and examples.

The PhotonForge design cycle: schematic and PDK, components, device simulation, component DRC, compact models, placement and routing, verification, and tape-out and test, all in one project The five-channel transmitter in the local GUI, from the whole die down to one ring modulator and its pads

1. Schematic and PDK

A PDK in PhotonForge holds the layer stack, the waveguide cross sections, the cells and their models. Install an open PDK with pip, or load your foundry PDK. Then draw the circuit as a schematic in the local GUI, with the PDK cells in the library panel, or write it as a netlist in Python.

In the local GUI, a search for "ring" in the component library finds the SiPhoPDK ring resonator, which is then dragged onto the schematic

2. Components

Each cell is a parametric component: a Python function that draws the layout from its parameters and attaches a simulation model. Change a parameter, and the layout and the model change with it. The same component shows as a symbol in the schematic and as geometry in the layout. You can also draw a cell in the layout tool you already use and import it as a GDS or OASIS file, or load it from Cadence Virtuoso through its OpenAccess database.

A ring modulator cell in a notebook: a smaller radius redraws the layout and updates the model

3. Device Simulation

Send a component to Tidy3D directly from its layout. PhotonForge builds the 3D structures from the PDK layer stack and places the ports. FDTD, EME or the mode solver then calculates the S parameters. The same structures go to the Tidy3D charge, heat and RF solvers.

The ring modulator as a 3D Tidy3D simulation, with the heater, the contacts and the bus waveguide Four solvers on structures made from PhotonForge layouts: FDTD field in a splitter, carriers in a PN junction, ring heater temperature, and a travelling-wave electrode

4. Component DRC

Check each cell against the foundry design rules before you place it on the chip. Run DRC from the local GUI or from Python. Each violation shows in a list and as a marker on the layout.

Run DRC in the local GUI on a ring with a 100 nm coupling gap: the panel lists the 150 nm spacing rule with five markers, and a click on a marker shows it in the gap

5. Compact Models

For circuit simulation, each component carries a compact model. A model comes from an analytic formula, from Tidy3D results, or from measured data. Time-domain models include lasers, modulators, rings with nonlinear effects, optical amplifiers and photodiodes. Export a model to Verilog-A to run it in a SPICE simulator next to the electronics.

A Tidy3D simulation of the ring modulator becomes a compact model: transmission at 0, -2 and -4 V The same modulator model in PhotonForge and, after Verilog-A export, in SPICE: the two outputs and the SPICE eye diagram agree

6. Placement and Routing

In the local GUI, Place puts the cells on the chip where the schematic has them, and Route draws the waveguides.

The ring channel in the local GUI: the schematic is wired but the layout is empty; Place puts the nine cells on the chip and Route draws the eight waveguides

The autorouter routes all optical nets in one call. It avoids obstacles, adds waveguide crossings where it needs them, and can make the path lengths equal.

The 21 optical nets of the transmitter routed one after the other

This script routes four waveguides to a fiber array with equal path lengths:

import photonforge as pf

pf.config.default_technology = pf.basic_technology()

chip = pf.Component("FANOUT")
wg = pf.parametric.straight(port_spec="Strip", length=20)

# Four waveguides 30 µm apart, and four fiber-array inputs 127 µm apart
devices = [chip.add_reference(wg).translate((0, 30 * i)) for i in range(4)]
fibers = [chip.add_reference(wg).translate((600, 100 + 127 * i)) for i in range(4)]

# Route the four nets in one call, with equal path lengths
routes = pf.parametric.route_auto(
    port1=[(d, "P1") for d in devices],
    port2=[(f, "P0") for f in fibers],
    radius=10,
    matching=[pf.PathLengthMatching()],
)
chip.add_reference(routes)
Four routes from waveguides 30 µm apart to fiber-array inputs 127 µm apart; the inner routes have meanders so that all four are 962.4 µm long Four routes between two banks of MZIs, before path-length matching (210 µm spread) and after (all four 685.91 µm long)

Electrical traces go to the pads on the metal layers of the PDK, with a via where a trace changes layer.

An electrical route from a photodiode to its ground pad goes up on the first metal, through a via, and over another trace on the second metal; a cross section shows the two metals and the via

7. Verification

Run DRC on the full chip with the foundry rule deck. LVS extracts the optical and electrical netlist from the layout and compares it with the schematic. Post-layout simulation then runs the circuit as it is drawn, with every route, for example to get the eye diagram of one modulator channel.

Two heated MZIs; the three metal nets found from the layout geometry light up one after the other Post-layout simulation of channel 3: the drive signal, the photodiode output and the 200 Gb/s eye diagram through the routed chip

Cadence Virtuoso users load the PDK cells into PhotonForge, run Tidy3D multiphysics simulations on them, and write the finished chip back to Virtuoso, where Check Against Source compares it with the schematic. The design stays in their existing EDA flow. Contact us to set up the Cadence connector.

The transmitter written back to Cadence Virtuoso, zooming from the pads to one ring channel

8. Tape-Out and Test with Photonic Canvas

A Photonic Canvas project keeps the design, the PDK version, the simulation results and the measured data together. Release a version for tape-out and attach the mask, the DRC report and, later, the measurements to it. A measured die then traces back to the exact design that made it.

A project drawn as a tree: the technology, the PDK library, the source file, a component at version 1.1.0 and every attached file with its version

Ways to Work

Python

Every step is a Python call, so a notebook or a script can run the whole flow. This script builds an MZI from three building blocks and simulates its spectrum:

import numpy as np
import photonforge as pf

# Three building blocks with analytic models
splitter = pf.abstract.y_splitter()
short_arm = pf.abstract.straight(length=100)
long_arm = pf.abstract.straight(length=150)

# Connect them as a netlist
mzi = pf.component_from_netlist({
    "instances": {"split": splitter, "join": splitter, "short": short_arm, "long": long_arm},
    "virtual connections": [
        (("split", "P1"), ("short", "P0")),
        (("split", "P2"), ("long", "P0")),
        (("short", "P1"), ("join", "P1")),
        (("long", "P1"), ("join", "P2")),
    ],
    "ports": [("split", "P0"), ("join", "P0")],
    "models": [pf.CircuitModel()],
})

# Simulate the circuit over the C band
wavelengths = np.linspace(1.53, 1.57, 801)
s = mzi.s_matrix(pf.C_0 / wavelengths)
transmission = np.abs(s[("P0@0", "P1@0")]) ** 2
MZI transmission in dB from 1530 to 1570 nm, with fringes from the 50 µm path difference

Local GUI

The local GUI runs on your computer and opens from Python. It shows the layout and the schematic side by side, with the PDK library, routing tools and design-rule checks. Edits in the GUI and edits in Python apply to the same design.

To open it, run:

from photonforge.live_viewer import LiveViewer

viewer = LiveViewer()

The command prints the address to open in your browser. To show a component from Python, call viewer(component).

The PDKs you install with pip are listed in the Component Library. To add one, click PDKs above the library, then Add to library. A public PDK that is not installed yet is listed under Not installed, with its pip command and an Install button.

The PDKs dialog of the local GUI: SiPhoPDK is in the library, and the SiEPIC and Luxtelligence PDKs installed with pip each have an Add to library button

AI Agents

Use PhotonForge from the AI coding tool you already use: Claude Code, Codex, Cursor, VS Code or Copilot. The PhotonForge plugin gives the agent skill files (step-by-step instructions for common tasks) and a documentation server. The agent writes PhotonForge code, runs it, and checks the result in the local GUI.

An AI agent in a terminal turns one ring into a five-channel ring bank, while the local GUI shows each change

To install the plugin on macOS or Linux, run this command and select PhotonForge:

curl -LsSf https://raw.githubusercontent.com/flexcompute/plugin-marketplace/main/install.sh | bash

Windows instructions and the list of skills are in the plugin repository.

EDA Tools

PhotonForge reads and writes GDS and OASIS layouts. The Cadence connector loads PDK cells and parametric cells from Cadence Virtuoso and writes finished layouts back. Virtuoso users can then run Tidy3D multiphysics simulations on their own cells and keep their existing EDA flow for layout and verification. DRC and LVS connectors run the foundry rule decks. Contact us for the EDA connectors.

PDKs

PDK

Platform

Install

SiEPIC EBeam

Silicon, 220 nm

pip install siepic-forge

SiEPIC SiN

Silicon nitride

pip install siepic-sin-forge

Luxtelligence LNOI400

Thin-film lithium niobate

pip install luxtelligence-lnoi400-forge

Luxtelligence LTOI300

Thin-film lithium tantalate

pip install luxtelligence-ltoi300-forge

Cornerstone

Silicon, 220 nm, passive

Contact us

Foundry PDKs come with PhotonForge Enterprise. They include PDKs from GlobalFoundries, Tower Semiconductor, AIM Photonics, imec, AMF, Ligentec, Fraunhofer HHI and SMART Photonics. Each foundry PDK also needs your own NDA with the foundry.

You can also build your own PDK in Python: a technology (layers, layer stack and waveguide cross sections) and a library of parametric cells with models.

The SiPhoPDK layer stack in cross section: a photodetector, a ring modulator with its heater, the PN junction, strip and rib waveguides, a silicon nitride waveguide, a grating coupler, an edge coupler and the metal stack

Community and Enterprise

Community: free, unlimited seats

  • Local GUI with schematic-driven layout

  • Optical and electrical autorouting

  • DRC and LVS

  • Circuit simulation in the time and frequency domain

  • Integration with Tidy3D (simulations use FlexCredits)

  • AI agents through the PhotonForge plugin

  • Open PDKs

Enterprise: Photonic Canvas license

Everything in Community, and:

  • Foundry PDKs, with support and updates

  • Version control and traceability in Photonic Canvas projects, from design to measured data

  • EDA connectors for layout and verification

  • Automated compact model generation (Verilog-A)

  • On-premises deployment

Contact us about Enterprise.

What Runs Where

On your computer

  • The PhotonForge Python package and the local GUI

  • Layout, schematic and routing

  • Circuit simulation, in the time and frequency domain

  • DRC, LVS and Verilog-A export

  • Your files: scripts, notebooks, GDS and OASIS

In the Flexcompute cloud

  • Tidy3D simulations: FDTD, EME, mode solver, charge, heat and RF, paid in FlexCredits

  • Photonic Canvas projects for version control and sharing, if you use them

Photonic Canvas also has an on-premises deployment, which keeps projects on your own servers. See Local and Cloud for details.

Questions and Answers

What PhotonForge Is

What PhotonForge is and how to start.

PDKs

Foundries, access, EDA tools, verification and custom PDKs.

AI Agents

Skill files, the documentation server and autonomous design.

Components

Parametric cells, custom models and device simulation.

Circuits and Chips

Netlists, circuit simulation and schematic-driven layout.

Layout and Routing

Autorouting, length matching, crossings and vias.

More on Simulation

Optimization, nonlinear models, Verilog-A and variation.

Verification

DRC, LVS and Check Against Source.

Free and Paid

What is free and what is in Enterprise.

Local and Cloud

What runs on your computer and where your data is.

Simulation and Measurement

Compact models from measured data.

Version Control, Traceability and Collaboration

Versions, traceability and sharing.