Welcome to Scenic’s documentation!

Scenic is a domain-specific probabilistic programming language for modeling the environments of cyber-physical systems like robots and autonomous cars. A Scenic program defines a distribution over scenes, configurations of physical objects and agents; sampling from this distribution yields concrete scenes which can be simulated to produce training or testing data. Scenic can also define (probabilistic) policies for dynamic agents, allowing modeling scenarios where agents take actions over time in response to the state of the world.

Scenic was designed and implemented by Daniel J. Fremont, Eric Vin, Edward Kim, Tommaso Dreossi, Shromona Ghosh, Xiangyu Yue, Alberto L. Sangiovanni-Vincentelli, and Sanjit A. Seshia, with contributions from many others. For a description of the language and some of its applications, see our journal paper on Scenic 2, which extends our PLDI 2019 paper on Scenic 1; the new features in Scenic 3 are described in our CAV 2023 paper. Our publications page lists additional papers using Scenic.


The syntax of Scenic 3 is not completely backwards-compatible with earlier versions of Scenic, which were used in our papers prior to 2023. See What’s New in Scenic for a list of syntax changes and new features. Old code can likely be easily ported; you can also install older releases if necessary from GitHub.

If you have any problems using Scenic, please submit an issue to our GitHub repository or ask a question on our community forum.

Table of Contents

General Information

Indices and Tables


Scenic is distributed under the 3-Clause BSD License.