Enyo 2.4 General Availability

In February, we pulled the covers off of a huge body of work the Enyo team has been building out over the past year in our Enyo 2.4 preview announcement.  This included a new data layer with two-way bindings, models, collections, sources, and data-aware controls, allowing for fully declarative model-driven views.  The other exciting announcement was around our new TV offerings: a new UI library called Moonstone designed by the vaunted webOS User Experience team specifically for developing immersive lean-back TV experiences, as well as a focus manager called Spotlight, which takes the headache out of developing TV apps that need remote-control based 5-way navigation.

Today, we’re announcing that Enyo 2.4 is now officially released for general availability.  We’ve completed our cross-platform testing of all of the standard Enyo libraries (core, Onyx, layout, etc.) across our Tier 1 platform matrix, which we recently updated to address new devices and platforms released since Enyo 2.2.  For now, the Moonstone library is officially supported only for the LG webOS TV, but we plan to ramp up cross-TV testing of Moonstone, so stay tuned for announcements about expanded TV support in the future.

Two great references for getting started with Enyo 2.4 are a new set of documentation for the data layer, as well as a new tutorial that takes you from soup-to-nuts through developing a data-driven application using the new Moonstone UI library.

For a full set of changes, see the Enyo 2.4 release notes, or head to the download page to grab the code and get started.

Releasing Mochi

Back in January, The Verge published a story called The Lost Secrets of webOS, which lifted the veil on some forward-thinking webOS hardware and software products that unfortunately never saw the light of day. Featured prominently in that article was Mochi, a striking new design language that the webOS UX team had been working on for the next generation of webOS phones and tablets before everything abruptly and famously screeched to a halt.

In the transitional period before we were acquired by LG, our designers continued to work on Mochi. We worked closely with them, implementing many of the Mochi widgets in the form of a new UI library for Enyo 2 — but we had to put this work in progress on the shelf in early 2013 when we shifted our focus to TV and started pouring most of our energy into Moonstone and Spotlight.

When the Verge story hit, however, it understandably sparked some interest in Mochi. While we don’t have any immediate plans to resume our Mochi work, we would be thrilled to see the community pick up where we left off. With that in mind, we showed Mochi off in an online hangout session in January, and since then — in our copious spare time — we’ve been working toward a public release. This work has included lining up community members to act as maintainers, fixing font licensing issues, and gathering up the internal design documents that would let our community developers understand the ideas behind the UI and see what’s yet to be implemented from the original vision.

Today, we’re pleased to announce that Mochi is now open source and available under the Apache 2.0 license, just like the rest of the Enyo source. The Mochi GitHub repo is now public, and we’ve started putting up some documentation in the Mochi wiki. Of particular note is our list of design documents which includes the PDFs and PNGs that were developed internally to guide Mochi’s development. Not only can this guide future work, but it shows just how much thought went into how these widgets work together. It also points to features that are yet to be implemented.

As maintainers for Mochi, we have two members of the webOS Ports community: Herman van Hazendonk (Herrie82) and Tom King (ka6sox). They will be handling reviewing pull requests and maintaining the code, with the Enyo team at LG providing guidance. Thanks, Herman and Tom, for stepping up!

It’s fun to have Mochi out in the open after all this time. Give it a spin, let us know what you think, and — if you’re so inclined — work with Herman and Tom to move it forward.

Enyo meetup

Continuing our renewed outreach to the Enyo community the Developer Relations and the Enyo teams hosted our inaugural Enyo JS meetup at LG’s-Silicon Valley Lab in Santa Clara on wednesday night.

With LG’s new webOS TV’s (powered by Moonstone, Enyo’s new “made for TV” UI) released, this was a great opportunity for the core engineering to share with the community the hard work that has been done and discuss the road ahead.

We had a good turn out of both experienced Enyo developers and novices, making for a fun and lively exchange of Q&A’s. Some of which came from our youngest attendee who at 13 had some great questions and made the Enyo team earn their pizza! It was great to see some new faces and we hope to continue growing the community as we do more of these meetups in the coming months,

If there are any topics you would like to go over, or any questions, send us a message to meetups@enyojs.com .  We are also thinking about hosting a meetup in the San Francisco area or in other cities.  Give a shout out and gather a crowd and let’s get another one going in a city near you!

See you soon!

Bay Area Enyo JS Meetup on March 26th

If you’re in the SF Bay Area, you’re invited to a in-person meetup for Enyo developers featuring many of the engineers at LG Electronics who work on the framework and support it with the development community. It’s at the LG Silicon Valley Lab office near Great America in Santa Clara, California starting at 5:30PM on Wednesday, March 26th.

Pizza and drinks are provided, and there should be some nice show-and-tell of the work that we’ve been doing over the last year.

Details and RSVP at http://www.meetup.com/Enyo-Meetup/events/170075182/.

Guest Post: Greenius Web App - Enyo and Clojure Stack integration

From time to time we come across an app built with Enyo that piques our interest. When we heard about Greenius and read a little bit about how it was put together we definitely wanted to know more. We reached out to the team at Greenius and asked if they could talk a little more about how they used Enyo with their back-end systems. They are very enthusiastic about Enyo and Greenius’ Aseir Galdos happily prepared this guest post. Take it away, Aseir:

Greenius is a smart platform that brings together people who love growing their food in their gardens, farms or balconies.

More and more people are getting into fresh and local food (farm to table movement, organic farming, slow food) for health and ethical reasons, and many of them grow their own food. These tech-savvy and connected gardeners want to learn more or share their experience about the passionate process of growing their own food. Greenius gives them an easy, fast and cool platform to connect to other gardeners and farmers.


The underlying technology we use for Greenius is built with Enyo and Pure on the client side and the “Clojure Stack” on the server side: Clojure language, Ring and Compojure libraries, and the time-based immutable Datomic database.

Enyo offers us a cross-platform, extensible, lightweight and fast JavaScript framework, and with Clojure we can leverage the benefits of functional, dynamic programming and data immutability, as well as Java’s robust runtime and libraries (it is hosted on the JVM). 

So, how is all this technology wired?

Communication is an exchange of pure data structures between both sides, client and server, using JSON format. In Enyo we submit web requests using the Ajax wrapper; in Clojure we use Ring for request and response plumbing and Compojure for routing.

In Greenius, gardeners can follow and be followed by other users, as in a social network. Let’s dive into the client/server communication paradigm with the example of the “Follow” function:


First, we create a Kind (i.e.: onyx.Button) that ‘ontap’ triggers the Ajax call to the server:

  new enyo.Ajax({
      url: '/api/follow',
      method: 'PUT',
      contentType: 'application/json',
      cacheBust: false,
      postBody: {
        action: action,
        user: “Mike”,
        followee: “Sarah”

On the server, we have composed hierarchies of routes with Compojure, one of them being ‘/api/follow’, so now we can handle it as follows:

(defroutes api-routes
 (PUT "/api/follow" {:keys [params db conn]}
    (follow params db conn)))

Ring represents the request as the following Clojure map:

{:keys [{"followee" "Sarah", "user" "Mike", "action" "follow"} datomic.db.Db@2066c0a4 #<Connection {:db-id "greenius-29bc7792-ccdf-4597-abf5-85d91d54b58d", :unsent-updates-queue 0, :pending-txes 0, :next-t 1931, :basis-t 1930, :index-rev 0}>]}

- “params” represents the postBody of the enyo Ajax call

- “db” represents the Datomic database

- “conn” represents a specific Datomic database connection

Then, we process the Follow action with a private function and we return a Ring response with a given body (in this case a boolean) and no headers to the client, so that Enyo can handle this response.

(defn- follow
  [{:strs [action user followee]} db conn]
  (if (= action "follow")
    (response (success (social/follow-user db conn user followee)))
    (response (success (social/unfollow-user db conn user followee)))))

And this is the gist of it. No added complexity, just pure data structure exchange.

It has been and is being truly exciting to build Greenius with this technology stack, as we can achieve the scalability, flexibility and simplicity we need to minimize risks and maximize results. It has allowed us to focus on the core business problems and -we hope!- build a useful and elegant Web App that will foster the green lifestyle for present and future generations.


Enyo at Apps World Hackathon

A few weeks ago, we unveiled the upcoming Enyo 2.4 release and the new Moonstone and Spotlight libraries, setting the stage for developers to create next-generation apps for smart TVs.

The backdrop for our announcement was the Apps World conference at Moscone Center in San Francisco. We had a full contingent in attendance to meet developers and spread the word about Enyo. We had a booth on the exhibition floor, gave a talk and joined in on a great panel discussion — but undoubtedly one of the highlights of our Apps World experience was our participation in the two-day hackathon.


Kevin Schaaf, one of the leaders of the Enyo team, kicked off the event by introducing Enyo, Moonstone and Spotlight. During the event Enyo and DevRel engineers were on hand to answer questions and help the teams.


The response was amazing! In total there were 5 projects featuring Moonstone presented to the judges at the end of the event. After conferring, the judges unanimously agreed that Learn TV, one of the Moonstone projects, was the winner. Learn TV is a brilliant concept requiring adolescent viewers to earn “credit” before gaining access to TV content. Credit is earned by completing academic exercises within the app. The app also looked beautiful, showcasing the strength of Moonstone’s elegant UI and design patterns.

As well as taking the hackathon’s top prize, LearnTV also won Enyo’s sponsor prize and will be able to view their app on one of the first LG webOS TV’s to roll off the production line.

Also collecting Enyo prizes for their Moonstone apps were mobiTV who won an LG GPad for their parental Monitor and notification app and BetTV who picked up an LG G2 for their social betting app.

Congratulations to Learn TV and everyone that took part! We look forward to seeing the completed apps on our TVs in the future.


A lot of hard work went into developing Moonstone and the Enyo team really enjoyed mingling with developers and seeing first hand the fruits of their labor. Stay tuned for more events; we’re working on putting together an Enyo meetup for the near future.

Introducing Moonstone, Spotlight and Enyo 2.4

It has been an exciting few months for the Enyo team. First, late last year, we broke a long silence with the public release of Enyo 2.3.0-pre.10. Then, in January we celebrated the unveiling of the webOS-powered 2014 LG Smart TV at CES. Today, we’re thrilled to finally give everyone a closer look at what we’ve been working on for the last year.



In conjunction with the rebirth of webOS as a platform for smart TV, we’ve built Moonstone: an innovative, beautiful, full-featured UI library for building TV apps. Moonstone features a comprehensive set of UI widgets optimized for TV and a fresh take on the panel-based navigation that has been a hallmark of Enyo since Enyo 1. Moonstone panels support two distinct user interaction patterns — an “always viewing” pattern for lean-back experiences, and an “activity” pattern for more active engagement with an app. Moonstone comes out of the box with light and dark themes and is easily customized to make your app stand out. It also has robust support for internationalization, including widgets that work in both left-to-right and right-to-left contexts.


To go along with Moonstone, we’ve developed Spotlight, a library enabling apps to support key-based navigation — a must for TV, where users often have nothing more than simple up-down-left-right controls. Spotlight uses a nearest-neighbor algorithm to automatically determine where to move focus each time the user presses a key, minimizing developer effort. That said, it’s fully customizable, giving you fine-grained control over how users interact with your app. Spotlight switches seamlessly between pointer-based and key-based navigation, ensuring that users have the best possible experience on devices that support both modes. Spotlight support is baked into Moonstone widgets, but Spotlight has been designed to work with any Enyo UI library.

Cross-Platform and Open-Source

Moonstone and Spotlight will of course power the core apps for the next generation of LG Smart TVs and be the centerpiece of the forthcoming webOS TV SDK — but they’re not just for LG or webOS. In keeping with our deep commitment to supporting cross-platform development, Moonstone and Spotlight are open-source and available for use on any platform.

With CES behind us, today we’ve made the GitHub repositories for Moonstone and Spotlight public. Continuing work on Moonstone and Spotlight will be done in full view, just as it is for Enyo and its other libraries. We’ve not yet had a chance to do extensive testing or optimization on non-webOS platforms, but we’ve been developing with cross-platform support in mind and are excited to see Moonstone apps running on all types of big screens.

Enyo 2.4

In addition to flipping the GitHub repos public, we’ve prepared another pre-release (version 2.4.0-pre.1) of Enyo and its libraries so that you can easily explore docs and samples on the Enyo site. We’ve also updated our Bootplate starter kit and created a Moonstone-specific version of it, so you can grab a mobile-centric or a TV-centric Enyo distribution directly from the site if you’re so inclined.

While Moonstone and Spotlight are certainly highlights of Enyo 2.4, you may be just as interested in the robust new data-layer support you’ll find in this release. Enyo 2.4 has support for observers, one- and two-way bindings, computed properties, models and collections, and a set of new data-aware UI controls.

Astute observers will note that we’ve skipped straight from a 2.3 pre-release to a 2.4 pre-release. Moonstone, Spotlight and the new data-layer support will technically debut in Enyo 2.3, which is in its final release-candidate stage as we speak — but the schedule for Enyo 2.3 is tightly bound to the release and production schedule for the LG webOS TV and therefore has a life of its own. As we continue to shepherd Enyo 2.3 through this process, we’ve decided to move forward with Enyo 2.4 and make that release our primary focus for the cross-platform Enyo community.

We hope you’ll be as excited as we are about Enyo 2.4, Moonstone and Spotlight, and we’re eager to get your feedback. Here are some quick links for exploring what’s new:

If you’re in the San Francisco area today or tomorrow, be sure to stop by Apps World at Moscone Center West and say hello. You’ll find us alongside our webOS colleagues in the LG booth.

MoDevEast 2013

Closing out this year’s Enyo events, members of the team attended the MoDevEast Conference last week in beautiful McLean, VA. The two day event coincided with the release of 2.3 RC2, giving us the opportunity to discuss the latest additions to the framework with our ever growing community of cross-platform developers.

A slow first day gave way to a packed and very busy second day. The Enyo booth in the exhibitor hall was well-attended and had a steady stream of excited developers, many curious about the Enyo roadmap for the near future. More on that next month!

On stage, our own celebrity author Roy Sutton gave a comprehensive talk, for roughly 90 minutes, covering the history of Enyo as well as the development of a simple to-do application using the new data-binding tools in Enyo 2.3. Capping off the talk was preview of the Ares IDE, which is under active open source development. While Roy’s talk was not filmed, his slides are online, along with all the source code if you would like to check it out yourself

Later in the day, during lunch, Roy signed copies of his book, Enyo: Up and Running, courtesy of O’Reilly Media.


To close out the event, the MoDev organizers came by and gave Enyo, along with all other sponsors, a box of cupcakes from Georgetown Cupcakes. We enjoyed the cupcakes, as did the developers who were participating in the MoDev hackathon.


We appreciate all your support this year and look forward to unveiling some of the new and exciting features we’ve been working on in the New Year.

Happy holidays! See you in 2014.

HTML5 Developer Conference 2013

The HTML5 Developer Conference took place this past week in San Francisco. Our own Senior Developer Relations Engineer, Dave Freeman, was there to present the latest features from the newly released Enyo 2.3.0-pre.10.

The focus of Dave’s energetic talk was on the new data-driven features of Enyo. After giving an overview of the new enyo.Model and enyo.Collection kinds, Dave walked through a college football demo app which binds the data in its models and collections with data aware controls.

Dave also touched on other new features in Enyo, such as the new enyo.Application kind, the enyo.ready() function, and application routing with enyo.Router.

Finally, Dave compared and contrasted some of Enyo’s new features with similar functionality in other frameworks such as Backbone, Angular and Ember.

Check out the Enyo 2.3.0-pre.10 blog post to learn more about the new features in Enyo!


Announcing Enyo 2.3.0-pre.10

If you’ve been following Enyo, you’ve probably noticed that it has been a while since our last public release. From the outside it may appear that the pace of Enyo development has slowed, but appearances can be deceiving — it has actually been an exceptionally busy, productive year for the Enyo team.

So what have we been up to? For starters, we’ve been doing some exciting UI work to support an upcoming LG product release. We can’t share this work with you just yet, but it will ultimately be open-sourced alongside our other Enyo libraries. We’ve also been pushing forward on the Ares IDE, with our HP team members playing a leading role.

In parallel, we’ve been working hard on Enyo 2.3, the most significant update to Enyo since we released version 2.0 last year. Enyo 2.3 will add some powerful new features to the core framework, centered around integrating and managing application data. Highlights include:

  • Observers, computed properties and bindings
  • Robust data layer support, via enyo.Model, enyo.Collection, enyo.Source and enyo.Store
  • Data-aware repeater and list controls: enyo.DataRepeater, enyo.DataList and enyo.DataGridList
  • The enyo.Application kind, providing a clear entry point for app developers and a place to put data and functionality that require application scope

A handful of adventurous developers have been following our progress on Enyo 2.3 over the last several months, asking questions, giving feedback and making the occasional pull request. In doing so, they’ve been living on the bleeding edge: watching our GitHub repositories directly and following us through some significant twists and turns as we converged on a solution.

Enyo 2.3 isn’t quite done yet, but we’re charging down the home stretch and ready to start sharing our work with a larger audience. Today, we’re excited to announce the availability of Enyo 2.3.0-pre.10.

As that mouthful of a name indicates, Enyo 2.3.0-pre.10 is a pre-release. Because we haven’t done any public pre-releases since Enyo 2.0 was in beta, it’s worth a few words about what that means:

  • In general, pre-releases are subject to API changes. If you start coding against a pre-release, you should be prepared to make some changes as the APIs stabilize. In the specific case of Enyo 2.3.0-pre.10, we don’t anticipate any more major changes, but some minor tweaks are likely before 2.3 goes final.
  • Pre-releases are tested and are intended to be in solid, usable form, so they represent a more stable alternative to pulling directly from the master branches of our GitHub repos. That said, a pre-release is a work in progress and doesn’t get the same QA treatment as our final releases, so you should expect bugs.
  • For each pre-release, we’ll tag our repos and provide instructions for getting the code from GitHub. We’ll also provide release notes and updated docs at release-specific URLs. However, we won’t update the main docs section on the Enyo site, or the downloadable Enyo distribution. Those will continue to point to the last official release (currently Enyo 2.2).

We invite you to take Enyo 2.3.0-pre.10 for a spin and let us know what you think. Here’s the simplest way, using git from the command line:

git clone --recursive https://github.com/enyojs/bootplate-mvc.git
cd bootplate-mvc
git checkout tags/2.3.0-pre.10
git submodule update --init --recursive

After following the steps above, open the debug.html file in your browser, play with the (extremely simple) app, and walk through the source code to see what’s going on.

Here are some handy links:

2.3.0-pre.10 release notes

2.3.0-pre.10 docs

2.3.0-pre.10 API reference

And a few more things you should know:

  • Developer Guide content for the new 2.3 features is still very thin, and we haven’t yet written a new tutorial. We’re working on fleshing the docs out, but in the meantime you’ll find that the new features have fairly comprehensive API docs.
  • You’ll find the term “MVC” sprinkled through the release notes and in the name of the bootplate-mvc repository, but we’ll be weeding this terminology out as we complete the 2.3 docs. Enyo 2.3 has all of the primitives you’d expect from an MVC framework (models, views, and, yes, controllers) and an MVC purist could probably find ways of bending it to his will, but the patterns that we’ll be promoting look less like traditional MVC than we thought they might when we began work on 2.3.
  • In addition to the new features highlighted above, we’ve added support for a new JavaScript internationalization library called iLib. You can use iLib in your Enyo project by including enyo-ilib in your app. iLib is a descendant of the older g11n library, which will be deprecated in favor of iLib going forward.

Thanks for looking, and please drop by the forums to let us know what you think! We’ll follow up with additional pre-releases on a regular basis between now and the official 2.3 release.

P.S. If you’re in San Francisco next week, you can catch developer relations engineer Dave Freeman giving a talk called “Data-driven Applications with Enyo 2.3” at the HTML5 Developer Conference. Dave will be speaking on Wednesday at 11:40 at Moscone Center (room E-131).