All Engineering

WebRTC IP Leaks: Should You Still Be Worried?

Before getting to the juicy part of this article, you need to understand why WebRTC requires your IP address and how this is not technically a vulnerability as much as a feature of WebRTC. We’ll explore: Attack vectors that demonstrate how WebRTC can be exploited The privacy impl…

Using SwiftUI Effects Library: How to Add Particle Effects to iOS Apps

Creating particle animations similar to the iMessage screen and bubble effects in iOS can be difficult. The main reason is that the Core Animation Emitter Layer that allows you to animate, emit and render particle effects is complex to set up and configure due to its large number…

Becoming A Successful Open-Source Librarian

The open-source software ecosystem is in a constant state of growth. Every day, new libraries and solutions are introduced on GitHub that are designed to accelerate development speed and make our lives as developers easier. Nowadays most companies, especially startups, are highly…

How to Integrate Live Audio and Video Into iOS Apps Using WebRTC

The main reason is that there are several factors that one needs to consider for the backbone or underlying technology. One way to embed live media into iOS applications is to use Web Real-Time Communication (WebRTC). In this article, you will discover how WebRTC works and how yo…

Building A Conferencing App With WebRTC: P2P, SFU, or MCU

Building A Conferencing App With WebRTC: P2P, SFU, or MCU When dealing with relatively simple real-time data, WebSockets and gRPC have become the go-to mechanisms for most developers. These are relatively simple to work with, and the existing documentation makes building larger a…

HTTP, WebSocket, gRPC or WebRTC: Which Communication Protocol is Best For Your App?

Our forms of communication are constantly improving: getting faster, more convenient, and more reliable. Our communication has evolved from sending messages using carrier pigeons, to postal mail, to the invention of the landline, to email and text messages from a small device tha…

Design Patterns and Architecture: The Android Developer Roadmap – Part 4

We’ve broken down our 2022 Android developer roadmap into a multi-part series, each covering important Android fundamentals and the current ecosystem. In the last post, we discussed essential elements of modern Android development, including Fragments, App Navigation, Architectur…

SFU, MCU, or P2P: What’s the Difference Between These WebRTC Architectures?

SFUs are commonly used in VoIP and video conferencing applications. SFUs differ from Peer-to-Peer (P2P) connections, in which each party sends and receives media directly to and from the other party. They are also different from Multipoint Control Units (MCUs), which receive medi…

Stream Loves Open Source: Aug 2022

At Stream, we rely on open source to build our products and SDKs. In this article, we want to take the time to highlight some of our favorite projects and maintainers ❤️. The key takeaway of this article is to support open source projects you rely on in any way you can. We can al…

Using Xcode: Creating Reusable and Shareable Color Palettes

Having a full range of colors that can be shared and reused in different Xcode projects improves efficiency and workflow because it removes the time wasted in looking for colors that will work together for your projects. Additionally, it ensures consistency of color usage within …

Definitive Flutter Painting Guide

“Everything is a widget.” Well, yes – but what is a widget? Widgets used in making Flutter apps can themselves be composed of smaller widgets. Most widgets carry some kind of visual component – either defined by themselves or represented by smaller widgets. Unlike native framewor…

Exploring Google’s Now in Android Open-Source Project

In 2022 Google I/O, Google’s DevRel team released an open-source project, Now in Android, built with the modern Android architecture and Jetpack libraries. In this article, you will cover the overall architecture, each layer, and tech stacks that are used in Now in Android projec…

Transformations in Machine Learning

On 8th September 2020, an article in the Guardian was written by a robot called GPT-3. They asked the robot to write an article about why humans should not be scared of robots and Artificial Intelligence. The human editors wrote the introduction for the article and instructed GPT…

Seeding a Core Data Store With Remote JSON Data

There are various situations where you’ll find yourself needing to import a sizable amount of JSON to seed a Core Data store. Sometimes you can ship this data alongside your app in the form of a pre-populated SQLite store. Other times, the data that you need to retrieve is so dyn…

WWDC State of the Union, What Can We Look Forward To?

Yesterday we wrote about the Apple WWDC Keynote on our blog. On the same day of the WWDC keynote, Apple also live-streamed the Apple WWDC Platform State of the Union. Apple focussed software developers often call this “the Developer Keynote”. The State of the Union session is a m…

Apple WWDC Keynote Impressions

Like many things, software development happens in cycles. Apple as a company is like this as well. Each year Apple releases new hardware and new major versions of their hardware and software. To give software developers working in the Apple ecosystem a chance to adopt new hardwar…

Server-Side Vapor Swift Implementation With Google, Apple, and Github Authentication

In this post, you’ll learn how to build a server application with the Vapor framework to provide tokens to an iOS app to use with the Stream Chat SDK. You’ll learn how to leverage different types of authentication for users and provide them with tokens. Note: for this tutorial, y…

App Navigation and Jetpack: The Android Developer Roadmap – Part 3

We’ve broken down our 2022 Android developer roadmap into a multi-part series. Each section dives deep into important Android fundamentals and the current Android ecosystem. In the last post, we discussed important elements of Android’s primary components, including Intents and A…

Building Your First Application With Deno

Deno is a recently launched runtime environment for JavaScript and TypeScript used for building modern server-side applications. In this article, you will learn how to build a backend server with Deno. I will show you how to create a live server, create API routes, store environm…

Modeling Retrofit Responses With Sealed Classes and Coroutines

As the rate of data communication increases, the complexity of the application architecture also increases. How an application handles API responses will determine its overall architectural design and code complexity. In this post, you will cover how to model Retrofit responses w…

Scaling Your Xcode Projects With Tuist

One of the biggest challenges for iOS development teams is scaling a codebase when their company or product takes off. Growth and scaling issues are a great thing, but they introduce some typical growing pains as well, like: Clearly defining responsibilities when splitting up you…

Reducing App and SDK Size With Emerge Tools

The Importance of Mobile App and SDK Size When developing a mobile app, one crucial performance metric is app size. An app’s size can be difficult to accurately measure with multiple variants and device spreads. Once measured, it’s even more difficult to understand and identify w…

App Components: The Android Developer Roadmap – Part 2

We’ve broken down the Android developer roadmap into five modules, each covering different aspects of the Android development ecosystem. In the last post, we discussed important elements of Android’s architecture, including the primary Android languages, the OS, the Android Platf…

AvatarView for Android: Take Your Profile Images to the Next Level

Introducing the AvatarView Library AvatarView supports loading profile images with fractional style, borders, indicators, and initials for Android. It also provides internal image loaders to load profile images with your loading strategies. To show you how useful the API is, this…

Tips & Tricks to Improve Flutter Performance

Held in Oslo, Norway (and more recently online), FlutterVikings is the largest community-driven Flutter conference in the Nordic region. Focused on Flutter and Dart, the conference gathers global Flutter experts from some of the world’s most innovative and well-known tech compani…

Build Vikings Feb 2022 Winners 🎉

As avid open-source Flutter developers, the Stream team was in full attendance at this year’s Flutter Vikings conference. Similar to our previous participation at Flutter Vikings, the team decided to host a codelab and hackathon for the event. For this year’s codelab, entrants we…

Exploring Jetpack WindowManager for Foldable Devices

Of this new generation of foldable devices, dual-screen devices, which provide symmetrical screens that work together in unique ways, are particularly interesting. But, they also present unique challenges. A key feature of these foldable, responsive UIs is that screen sizes can c…

The Android Platform: The 2022 Android Developer Roadmap – Part 1

The 2022 Android Developer Roadmap is designed to give you a comprehensive understanding of the current Android ecosystem and provides suggested learning paths along the way to help you grasp the concepts. In part one of this 5-part series, we’ll start by covering the first four …

Why Every Flutter Dev Should Care About BuildContext

While the quest for abstraction and the purist’s assertion that all APIs should be simple by design are both noble pursuits, there is a point where too much abstraction becomes harmful and hinders the personal growth of new developers. One of the most common complaints of develop…

Exploring Material You for Jetpack Compose

You’ll learn all about Material You and how you can dynamically import colors from the Material 3 Compose library into our versatile Chat Compose SDK, giving your app a more polished and personalized feel for your users. To show you just how powerful the API is, you’ll also learn…

macOS Performance Comparison: Flutter Desktop vs. Electron

This article covers the following: The underlying engines and technologies powering Flutter and Electron. Important performance considerations and how they relate to Flutter Desktop and Electron. Real performance metrics demoing example Flutter Desktop and Electron applications o…

Flutter vs React Native: The Ultimate Comparison

Over the years, it’s become common for developers to compare Flutter and React Native. Both are prevalent multi-platform tools for quickly and easily building mobile applications. If you walk into a developer meetup and ask the question, "What should I pick, Flutter or React Nati…

Building a Production-Ready Chat SDK Using Jetpack Compose

Released in July 2021, Jetpack Compose is the highly anticipated native UI toolkit for Android that is designed to help developers build faster and with more ease. After two years in development, Jetpack Compose is now in its 1.0 version, and is both stable and deeply flexible. S…

Keeping Public API in Check With the Kotlin Binary Validator Plugin

Within the Stream Chat Android SDK project, we use the Kotlin binary compatibility validator plugin to keep track of all the changes we make to our public API. This is a first-party plugin by JetBrains, though it’s still experimental (it’s an incubator project by JetBrains on Git…

Clean Chat Example App with Jetpack Compose

Stream now provides a Jetpack Compose Chat SDK. Check out the Compose Chat Messaging Tutorial and give it a try today! We’ve recently published a Jetpack Compose design sample on Twitter, recreating the Contacts & Messages design by Mickael Guillaume on Dribbble. The source code …

Activity Feed Personalization 101: Top Feed Features to Improve User Engagement

Personalization comes in many flavors, and the data science team at Stream can help you build your own feeds personalization engine based on your specific needs. In conjunction with our analytics client we recommend tracking every event for every user, such as clicking on a link)…

Jetpack Compose: First Impressions and Learning Resources

As you most certainly already know, Jetpack Compose is the hot new thing for Android UI development. Its promise is to save us by making all the pain points of the old View system and XML layouts go away. Stream now provides a Jetpack Compose Chat SDK. Check out the Compose Chat …

React Native: How To Build Bidirectional Infinite Scroll

Introduction There have been many discussions on Stack Overflow and GitHub around implementing infinite scroll using React Native, on top of FlatList or SectionList. I’ve found that there aren’t any easy solution out there for bidirectional infinite scroll for React Native. Recen…

Swift WebSockets: Starscream or URLSession in 2021?

Building applications such as online games and real-time chat has never been more straightforward since the standardization of the WebSocket protocol in 2011. Before that, most app experiences were plagued with manual refreshes to access the latest data available. Remember F5? Si…

Singleton vs Dependency Injection in Swift

When coding iOS apps, we often create classes that manage a particular aspect of the application. For example, it’s common to develop "manager" classes that encapsulate methods for interacting with a specific application aspect. These aspects commonly include the REST API, WebSoc…

Publishing Android libraries to MavenCentral in 2021

Introduction This is an updated version of an article published two years ago on blog.autsoft.hu. This new version supports non-Android libraries, uses command line GPG handling instead of a specific Windows GUI app, includes new best practices, and uses GitHub Actions for its CI…

Tutorial: How to Build a Slack Clone with React Native – Part 3

Note: This blog is archived due to limited compatibility with an old version of the React Native chat SDK. Please check our latest tutorial or our finished Slack clone. In Part 2 of this tutorial, we covered how to build Slack-like navigation, channel list screen, channel screen,…

Tutorial: How to Build a Slack Clone with React Native – Part 2

Note: This blog is archived due to limited compatibility with an old version of the React Native chat SDK. Please check our latest tutorial or our finished Slack clone. React Native has come a long way since its first release in 2015. In fact, it has enough components, APIs, and …

Announcing Experimental Multi-Platform Support for the Stream Flutter SDK

Stream is always looking out for the next big thing in developer tools to build new applications. React Native was one of the first mobile development framework supported by our SDKs and is still going strong. We announced support for Dart/Flutter in February of 2020. Flutter has…

Choose Your iOS Dependencies Wisely

Dependencies are vital for most iOS projects. They allow us to speed up development and not reinvent the wheel every time we need components such as networking, rendering, chat, calendar, and many others which can be common to different types of projects. It’s also an efficient w…

How to use GitHub with Android Studio

Android Studio makes it easy to push changes to your favorite Open Source, professional, or personal projects on GitHub. In this tutorial, we’ll learn how to use GitHub with Android Studio. We’ll use an Open Source contribution for context. Android developers use Open Source proj…

Tutorial: How to Build a Slack Clone with React Native – Part 1

Note: This blog is archived due to limited compatibility with an old version of the React Native chat SDK. Please check our latest tutorial or our finished Slack clone. React Native has a significant footprint in the mobile development world. And with every new release, it gets b…

Styled Components vs. CSS Stylesheets

Over the last few years, CSS-in-JS solutions have become prevalent across the front-end landscape with many offerings such as styled-components, and emotion that provides a way to colocate your components and style definitions. The power of these libraries lies in the ability to …

Stream Is Deprecating Virtual Go – It’s Time to Move to Go Modules

TL;DR Stream released vg almost three years ago, and since its inception, Go has improved quite a bit in regards to its dependency management. Since Go has come so far, we’re now advocating that the community use native Go modules rather than vg. The Gist Stream provides an API a…

Rolling a Custom Docs CMS with Slate and Django REST Framework

The Rundown In 2019 we realized we had a big problem here at Stream. Our documentation for Feeds and Chat was outdated, hard to navigate, and difficult to update due to legacy systems that were in place. We made it a goal to set out and build the best documentation site available…