Let’s face it: modern application development is hard. Savvy consumers demand the world from developers: applications that are elegantly designed, buttery smooth, and well integrated with the services and content they love. At Layer, we believe the future is a world of more intimate, connected, digital experiences where applications are woven together with the most human of fabrics: communication.

When an app is empowered with communications it becomes immediately more useful, personal, and engaging. But these benefits come with a steep price tag.

Developers are asked to take on a whole new set of problems around real-time communications. At the same time, advanced consumer messaging applications such as iMessage, Facebook Messenger, and WhatsApp have raised the bar on what can be considered table stakes functionality. Consumers demand not just fast and reliable messaging, but features such as delivery & read receipts, the transmission of photo and video content, and robust offline experiences.

Over the last year thousands of developers have worked with the Layer platform and integrated our native SDKs into their applications, gaining access to simple, elegant APIs that provide world-class messaging primitives with all of the features their users expect and demand. With Layer integrated, developers were freed from the minutiae of networking, persistence, security, and state management and could focus on the core value of their user experience.

But then something funny, and in retrospect, not all that surpising started happening: Developers began pinging us to see if we had any UI code laying around that they could use to bootstrap their integration and accelerate their time to market. For quite awhile we had envisioned creating a set of UI components to complement our SDKs and the iOS and Android teams were already maintaining sample applications for internal dog-fooding. Why not prioritize, polish, and Open Source this work so that all our developers can benefit?

Six months and nearly 3000 Git commits later we are ready to unveil the fruits of this labor and proudly introduce Atlas, a set of native user interface components for Layer-enabled applications.

Atlas is a powerful new tool in the app developer’s kit, extending the leverage offered by Layer beyond infrastructure and core messaging services up through the UI, enabling developers to rapidly add rich messaging to new or existing applications.

Prior to Layer, developers were required to make significant up-front investments in infrastructure, application architecture, and networking to add communications to their apps. With Layer, the infrastructure and architectural requirements are minimized, shifting the development focus to the user interface. Here developers encounter a set of second order bootstrapping problems: an initial user interface must be designed, developed, and integrated with the underlying messaging functionality before the real work of product iteration can begin.

Atlas closes this gap by providing developers with ready made UI components that are well engineered and tightly integrated with the underlying messaging capabilities provided by the Layer SDK’s, enabling product teams to access the collaborative, iterative phase of development in hours rather than days or weeks.

Layer + Atlas Development Cycle

Introducing Atlas

Atlas is a library of user interface components that provide familiar messaging experiences on top of LayerKit, the iOS SDK for Layer. Atlas is composed of a number of fully-integrated user interface experiences as well as the individual views from which the components are constructed. Since the entire communications stack and UI components were built by Layer, these components are are fully functional out of the box and provide an Apple-esque developer experience.

Although this is an initial release, Atlas is packed full of features including:

  • A searchable, selectable address input bar like found in the most popular messaging apps.
  • A Conversation List that displays all the Conversations in which the user is participating. Changes in the latest message or the unread state of the Conversation are automatically updated in the UI.
  • A scrollable, auto-paginating message display experience that manages unread state, optionally displays delivery & read receipts, and overlays a typing indicator as others are typing.
  • A flexible, auto-sizing message input bar that handles text, images, and location updates.
  • A detail view for managing conversations by adding, removing, or blocking participants and deleting or resigning from a conversation.
  • A library of accessory views such as incoming and outgoing bubble cells and a dynamically rendered placeholder image that displays user initials.

Atlas is available immediately as source code from Github or you can experience Atlas now by creating your own Atlas enabled app via Layer.

API Design & Customization

In designing the Atlas API, we focused on achieving three primary objectives:

  1. Provide good looking, high quality implementations of familiar messaging experiences out of the box. By default Atlas is styled to look much like iMessage, the most familiar messaging experience to iOS users.
  2. Enable quick and easy branding of the user experience via integration with UIAppearance and Interface Builder. All fonts, colors, etc. can be customized via an extensive set of UIAppearance selectors. This enables developers to quickly add messaging to an existing application and match the components with the existing style.
  3. Support full customization of the user interface by enabling developers to plug in their own views in any of the experiences. Developers should be able to implement any design while continuing to leverage the scaffolding that is driving the messaging UIs.

Atlas is designed to be both very easy to get started using and scale with the demands of your application as you work to implement your design. If you choose to do so you can register custom cells and views for all of the visual elements, while continuing to leverage the Atlas scaffolding to retrieve and vend appropriate messaging objects to the user interface for rendering.

Getting Started

Atlas provides a whole new level of engineering leverage to developers and we can’t wait to get it into your hands. To make it easier to see Layer and Atlas in action, we are also releasing a fully featured Atlas example application on Github and have created the Experience Atlas Now flow to streamline build and configuration.

Concurrent with the release of Atlas we are pleased to announce that Layer is now generally available and ready to power native communications in your app.

We are eternally thankful to the apps and passionate developers who participated in our early access program, which officially wraps today as we open up the Layer platform. Many of these apps are live in production, today providing excellent communications experiences to their users around the world.

You can get started with Atlas and Layer immediately by visiting the Experience Atlas Now page. And if you’re local to San Francisco, join us for a Meetup at Layer this Monday, March 2 to learn more.

We can’t wait to see what you build.