This project aims to improve software reliability by offering programmers a way to express detailed information about how the program should execute and then exploiting that detailed information to check that the program is actually executing as intended. The underlying technology in this project, contracts, is well-known but available only in academic languages. As such, the novelty of the project is to bring that technology to JavaScript. The project's impact is in improving the reliability of software written in JavaScript. <br/><br/>In more detail, contracts offer lightweight, dynamically checked specifications of a module’s behavior. They are written in a notation similar to types but are more expressive, allowing value-specific declarations and smoothly accommodating dependencies without additional effort from the programmer. Contracts also offer comprehensive information when they fail, pinpointing the faulty file as well as the specific values that caused the failure. Contracts have proven themselves useful in the academic dynamic language Racket, and this work will exploit the similarities between Racket and JavaScript, as well as the investigator's 25-year experience building Racket's contract system, to bring contracts to JavaScript.<br/><br/>This award reflects NSF's statutory mission and has been deemed worthy of support through evaluation using the Foundation's intellectual merit and broader impacts review criteria.