Ur/Web is a new approach to coding for the web set out in a white paper being presented by MIT researcher Adam Chlipala. Built on the foundations of the existing Haskell and ML code family, Ur/Web extends the Ur language to include a library of rules useful in a web development context. It has the potential to significantly streamline web development, taking the stack of technologies which make up a website and putting them all inside a single application that compiles all the required XML, JavaScript, SQL and CSS.

The key aspects of Ur/Web that make it different to traditional web development are its approach to security, and the way it enables coordination and management of relationships between all the components that make up a webpage.


More than 1,200 New Atlas Plus subscribers directly support our journalism, and get access to our premium ad-free site and email newsletter. Join them for just US$19 a year.


Ur/Web has at its heart a development principle known as "strong typing," which means that whenever a piece of code or "function" is written, the author also defines what type of data the function accepts as an input and what it will return as a result.

This enables an author to effectively define what each page element can interact with and how this interaction can happen. To give a practical example, when these various components are integrated manually under a standard development approach, a hacker could inject malicious code into a site’s database by submitting it through a web form field. This would have to be explicitly guarded against, whereas under Ur/Web this is implicitly denied as the two components are only able to interact under the specific terms defined in the function.

Behind the scenes, the default behaviors are defined by a library of data types for SQL, XML and CSS that determine what tasks they can perform and what data they are able to process.

Another facet to this model that helps keep security tight is how new variables created as a product of a function are handled. If a function needs to generate new variables in order to perform a calculation, for example summing numbers to calculate an average, these variables are not, by default, available outside of the function itself.

The ability to define and manage all the various components of a page simplifies the landscape for all the underlying technologies that make a website tick. Because data types for functions are explicitly stated, if one component passes data or a request to another that it's either not expecting, or is unable to deal with, this will be flagged during development.

It's possible that Ur/Web won’t be met with universal approval. While this approach has the potential to make development more streamlined, the variety of technologies that can be used in building a website are often viewed as a positive rather than as a complicating factor. As such, the Ur/Web approach could be considered constricting in this regard.

All of these things add up to a language that has the potential to change not only how websites are developed, but also the way the development process is managed. The language is in its early stages, and is principally academic at the moment. While this in itself isn’t a negative factor, it is generally not until a language is put to use and experimented with by developers in the wild that its viability is properly tested.

Once authors begin to use and adapt the language to everyday use, and overcome the inevitable learning curve, it has the potential to become a simplified and convenient way of managing the overall development of a website.

Sources: MIT, Adam Chlipala