Dev Diary (April 2017)

Corey Montella - 15 May 2017

(Eve is a new programming language, and this is our development blog. If you’re new to Eve, start here)

In April we continued our effort to release v0.3 of Eve. On April 18th we released a second preview of the v0.3 platform, which included several long-requested features. However, toward the end of the month we shifted focus to revamping documentation and making the “getting started” experience for Eve more accessible to new users. Let’s take a look at each of these.


We released a second preview of the v0.3 runtime, featuring the ability to embed Eve-rendered elements into an application; and streamlined watchers with built in support for more DOM events and triggers in the HTML watcher. These are covered in detail in the release notes, but I’ll take a moment now to highlight how multiple parent roots work.

Embedding Eve-rendered Elements in Your Application

We’ve received some requests from people who would like to use Eve to render specific elements in an already existing project. To date, you could only attach Eve-rendered elements to the document root. With v0.3, you’ll be able to embed any piece of Eve-rendered UI into your application arbitrarily. First, you add a reference to the parent element into Eve:

import {Program} from "witheve";

let program = new Program("my program");
let htmlWatcher = program.attach("html");

let someElement = document.querySelector("#eve-wrapper");
htmlWatcher.addExternalRoot("my-root", someElement);

From within Eve, you can search for that element and add children to it, as you would any other record:

  root = [#my-root]

  root.children += [#ui/text text: "Hello!"]

Eve behaves as expected, updating the embedded element as records change. For new users, this is a nice way to introduce Eve to an existing project; instead of porting an application from scratch, you can dip your toes in the water and build a new component in Eve, then inject it into your project wherever you want. As you get more comfortable with Eve, you can use it in more of you application.

Eve Syntax Returns

When we initially released the v0.3 preview, it notably didn’t include a parser for the Eve syntax. We had planned on eventually adding the syntax back, but it wasn’t our main priority because the Javascript DSL served as an adequate replacement for the time being. However, because we received a number of requests to add it back in, we decided to bump adding the syntax higher up on the list. That work is generally completed, and you’ll see it in the next v0.3 preview.

I’d like to say thanks to everyone who gave their input regarding the syntax. When we released it with v0.2, we didn’t know how it would be received, so we were happy to see that people liked it enough to request it return with v0.3. As always, we’re developing Eve in the open, so your feedback has a big impact on how we prioritize work.

Web Presence

Before we can officially release v0.3, a lot of work needs to be done on the usability and documentation side of things. To this end, we revamped our website to make it more accessible to people unfamiliar but curious about Eve. A big part of this effort was actually coming up with a one-sentence pitch, describing Eve in a nutshell.

A new pitch for Eve

Here’s our new one sentence pitch for Eve:

Eve is a modern relational language for writing data-driven programs without the boilerplate.

The intended audience for this pitch is generally the HackerNews crowd – developers who are curious about languages and likely to try something new to the scene. Eve has even deeper aspirations (such as being a language for non-programmers), but this pitch is directed more toward explaining what Eve is today. We wanted to pack as much information into this one sentence as possible, so you can get a general idea of the concepts important to Eve after reading it. This is actually easier said than done, so I’ll break down how we went about this.

The first thing we did was look at how other languages described themselves. We picked about a half dozen languages and chose our favorite pitches between them. Some, like Python, had very nebulous pitches: “Python is a programming language that lets you work quickly and integrate systems more effectively.” I think for anyone whose used Python, this is an accurate description of the language, but it doesn’t really say how Python lets you work quickly. Others, like Haskell, were very specific: “An advanced, purely functional programming language”. That’s definitely Haskell in a nutshell.

We wanted our pitch to tell the reader what Eve is, what makes it unique, and why one would use it over other languages. From the pitch, you can see we arrived at these traits

Modern - It was important for us to note that Eve is a new take on programming, specifically on “relational languages”. On its own, relational may connote SQL, which is not what we want to do. By claiming that we are “modern” we hope to tell the reader that Eve is an updated approach to things they may have seen in the past.

Relational language - there were several candidates to describe what kind of language Eve is. Pattern matching, logic, declarative. We decided on “relational” because relations are a concept central to programming in Eve, and we wanted to highlight this fact upfront.

Data-driven - data is also a central concept to Eve, so having this word in our pitch was important to us. Of course, data is important in all programs, but claiming the language is “data-driven” gets across the idea that the language paradigm is not imperative.

Without the boilerplate - our central thesis in developing Eve is that current approaches to programming are hampered by incidental complexity. A lot of this complexity is driven by simple boilerplate - code that stands between you and the inherent complexity of your programming task. Boilerplate is a pain point for many developers, something we all understand is frustrating, but that we deal with nonetheless. If you’re not sure about a modern relational language for writing data-driven programs, hopefully you can understand the value of a language without boilerplate.

The Eve Homepage

New Homepage

We’re going to be revamping our various web properties (the website, blog, and docs) in the coming weeks. We started the process with the homepage, giving it a fresh coat of paint and some new content. The various links still relate back to v0.2 content, but we’ll be updating those to a consistent look with refreshed content in the coming weeks.


Eve Around the World

Copenhagen, June

Zubair Quraishi is again hosting an Eve meetup in Copenhagen, scheduled for sometime in June. We’ll post another update when he’s set a firm date.

San Francisco, Wednesday May 31 7:00 PM

We’re going to be holding our first official Eve meetup at the Eve office in downtown San Francisco on May 31 at 7:00 PM. If you are interested in attending RSVP on, or if you have any ideas of what you’d like to learn, drop me a line via e-mail or Twitter.