  A major difficulty in applying computational design methods to nanophotonic
devices is ensuring that the resulting designs are fabricable. Here, we
describe a general inverse design algorithm for nanophotonic devices that
directly incorporates fabrication constraints. To demonstrate the capabilities
of our method, we designed a spatial-mode demultiplexer, wavelength
demultiplexer, and directional coupler. We also designed and experimentally
demonstrated a compact, broadband $1 \times 3$ power splitter on a silicon
photonics platform. The splitter has a footprint of only $3.8 \times
2.5~\mathrm{\mu m}$, and is well within the design rules of a typical silicon
photonics process, with a minimum radius of curvature of $100~\mathrm{nm}$.
Averaged over the designed wavelength range of $1400 - 1700~\mathrm{nm}$, our
splitter has a measured insertion loss of $0.642 \pm 0.057 ~\mathrm{dB}$ and
power uniformity of $0.641 \pm 0.054~\mathrm{dB}$.
