  This letter introduces the NOnSmooth Numerical Optimal Control (NOSNOC)
open-source software package. It is a modular MATLAB tool based on CasADi and
IPOPT for numerically solving Optimal Control Problems (OCP) with piecewise
smooth systems (PSS). The tool supports: 1) automatic reformulation of systems
with state jumps into PSS (via the time-freezing reformulation [Nurkanovi\'c et
al., 2021]) and of PSS into computationally more convenient forms, 2) automatic
discretization of the OCP via, e.g., the recently introduced Finite Elements
with Switch Detection [Nurkanovi\'c et al., 2022] which enables high accuracy
optimal control and simulation of PSS, 3) solution methods for the resulting
discrete-time OCP. The nonsmooth discrete-time OCP are solved with techniques
of continuous optimization in a homotopy procedure, without the use of integer
variables. This enables the treatment of a broad class of nonsmooth systems in
a unified way. Two tutorial examples are given. A benchmark shows that NOSNOC
provides both faster and more accurate solutions than conventional approaches,
including mixed-integer formulations.
