How Stream Built a Modern RSS Reader With JavaScript

13,237
Stream
Build scalable feeds, activity streams & chat in a few hours instead of months.

By Nick Parsons, Sr. Developer Advocate, Stream


Winds 2.0 by Stream


Winds started out as a simple example app for Stream, but thanks to an outpouring of support from our awesome community we decided to focus more time and energy on the project. The initial response around Winds 2.0 has exceeded all of our expectations. Since launching in mid-May the application ranked #1 on Hacker News for over a day, has 5,200 stars (and counting) on GitHub and became a trending app on Product Hunt.

Going into it, there was no way to anticipate how popular Winds 2.0 would become - would it be an absolute hit or an epic failure and waste of time?? The team enjoys building example apps so I knew it wouldn’t be a total loss, and it’s been rewarding to see this new iteration being used so extensively in the first month after release.

The tech stack for Winds is completely different from that of Stream. You may have seen the blogpost that StackShare wrote about how Stream powers the activity feeds for 300 million users using Go, RocksDB and Raft. Winds, however, is based on Node.js, MongoDB Atlas, Express, PM2, Bull, Babel and React.

To get started with Winds 2.0, you can try the web version or download the application here, or if you feel more adventurous head over to GitHub and spin it up locally. Next up, let’s talk a little bit about the Winds 2.0 stack and why we chose to go with the technologies we did (and why we chose to build Winds in the first place!).


RSS is a Broken Experience 😭

We realize that many RSS power users are developers, designers and journalists. One of our goals with Winds is to answer the questions we had been asking ourselves: What if a community of developers and designers could create an RSS experience that’s simplistic and polished? Could this reverse the downward spiral of less users taking advantage of the technology and more publications dropping support?

The future of RSS is uncertain at best. Our hope with this project is to make a contribution to #ReviveRSS.


Why JavaScript/Node…? 🤔

Another core goal for Winds is to enable a wide range of developers to contribute. We want it to be easy for anyone to be able to notice something they don’t like about their RSS/Podcast experience and easily submit a pull request with a fix or addition.

If you were brave enough to explore the codebase, you probably noticed that we’re using JavaScript for everything – both front and backend. Most of our team is experienced with Go and Python, so Node was not an obvious choice for this example app. What’s funny about JavaScript is how many people complain about it being an inadequate language. Sure, it has its quirks – single threaded, callback hell, etc.– but we believe that it’s possible to build great software in any language.

For Winds, JavaScript has been a great choice to foster a community around the project. More importantly, JavaScript’s maturity has started to shine with the added support of the Async/Await syntax.

Sure... there will be haters who refuse to acknowledge that there is anything remotely positive about JavaScript (there are even rants on Hacker News about Node.js.); however, without writing completely in JavaScript, we would not have seen the results we did. Here’s a quick breakdown of some of the reasons why we chose JavaScript:

  • Nearly every developer knows or can, at the very least, read JavaScript
  • With ES6 and Node.js v10.x.x, it’s become a very capable language
  • Async/Await is powerful and easy to use (Async/Await vs Promises)
  • Babel allows us to experiment with next-generation JavaScript (features that are not in the official JavaScript spec yet)
  • Yarn allows us to consistently install packages quickly (and is filled with tons of new tricks)


DevOps 🖥️

It’s rare that you hear about how a company deploys and manages code. Being that Winds 2.0 is open-source, we wanted to share a few of the tools we use to get the job done when it comes to getting our code from our machines up to the server.

The web version of Winds is statically hosted on S3 with CloudFront. In all, it costs us a few dollars a month to host. Every desktop version of the application is deployed inside of Electron, allowing us to bridge the gap between web and desktop.

As for the back-end API, that’s another story. We have a rather decent deploy flow going on to ensure stability and maintainability. Here’s the rundown:

  1. All code is stored on GitHub
  2. We manually kick off builds on AWS using a combination of Fabric and Boto
  3. CloudFormation create a fresh Winds environment consisting of EC2 instances, Auto Scaling Groups (ASG), Application Load Balancer (ELB), and a Redis instance
  4. AWS CCM stores and retrieves the various configurations required at boot (e.g. current version, etc.)
  5. Dotenv & Environment variables are stored in Puppet and CCM
  6. Once all EC2 instances are available, a Puppet script runs and applies the configuration on all live instances (in apply mode)
  7. PM2 boots, automatically starting the various Node.js processes we need to keep our application alive (API and Workers)

For logging metrics, we use a combination of StatsD + Graphite + Grafana.


Winds 2.0 by Stream


Understanding Electron ⚡

We wanted to experiment with building an Electron app with downloads for every Linux distro, macOS, and Windows, in addition to the web. Fundamentally, this seemed pretty easy: we write code, wrap it in an Electron shell, and release to our desired operating system… It turns out we were wrong.

Electron, though powerful, turned out to be a bigger beast than we had anticipated. Building to different distros was especially hard, even with electron-builder (granted, we had the bad luck of needing to patch electron-builder (and that bug has since been fixed), but that only accounted for some of the pain points we hit). The macOS menu bar had to be just right for the macOS store to accept our app, and performing small tasks with the Electron API, like opening a link in an external browser, turned out to be pretty difficult. Despite the difficulties, our team moved forward with some custom tooling (all visible and open-sourced on GitHub) and we released not only to all of our release targets but to the web, too.


Testing in JavaScript 🗳️

JavaScript is still the wild west to a degree. It’s rather un-opinionated, especially if you’re using Express, so we had to roll our own testing framework to get the job done. Our API, which is built with Express, uses a combination of various Node.js modules. Here’s a list of the tools we use for testing:

  • Mocha as a testing framework
  • Chai as an assertion library
  • Sinon as our mocking library
  • Nock as the HTTP mocking library
  • mock-require as a module mocking library
  • Istanbul as our test coverage tool

Bonus: Here’s an actual example of our test runner.

The combination of test modules we chose our team to move fast with multiple developers working on various feature sets at the same time, without bringing down the API.


Front End 🛠️

React is a phenomenal framework, and in our opinion, has won the battle against other frameworks such as Angular and Ember. Given its updated MIT license, it’s perfect for the Winds 2.0 project.

The main stack that we use for Winds 2.0 is pretty straightforward:

Main Stack

Now let’s look at some of the front-end modules we used to make Winds 2.0 a reality:

Interesting Modules


Back End 🛠️

When you’re building a large application, you generally rely on many libraries and tools to increase the code quality, time to market, etc. With that said, Winds too relies on many libraries and tools. Below are several, but not all, that we use:

FeedParser

FeedParser is a rather complex Node.js module that in our opinion, is the backbone of the project. It handles most of the inconsistencies found in RSS feeds and spits out a “cleansed” version of the feed. Without this module, we would be writing a lot of if/else statements… and that’s no fun.

Franc-Min

Franc-Min is a language detection module that we utilize for determining the language of a feed. This might sound like a small task; however, it’s in fact, a large part of our personalization engine. For example, we only recommend feeds in English to users who speak English. Same with other languages.

Bull

Bull helps keep the Winds 2.0 queue structurally sound with the help of Redis. It comes with a super easy API and supports multiple queues, which is a perfect fit for our use-case. Additionally, there are several open-source monitoring tools on their GitHub page that provide insight into what is happening behind the scenes.

ES6

JavaScript w/ ES6 enables our team to write minimalist code for a wide range of people. All of the code in Winds 2.0 is 100% JavaScript (with the exception of a handful of bash scripts to help with deploy workflows). The team is currently migrating much of the functionality in the codebase to utilize Async/Await to reduce the number of lines of code.

Yarn

Yarn is absolutely amazing. It’s an incredibly fast package manager built specifically for JavaScript. On top of that, it’s 100% open-source and nearly always available, due to it’s caching mechanisms. We’ve used npm in the past, and although it works just fine, the team here at Stream prefers Yarn.

Axios

Axios is a Promise based HTTP client for the browser and Node.js. We actually use it on both the front and back-end for various tasks. For example, all front-end HTTP requests flow through a wrapper to Axios. And for the back-end, we utilize Axios to inspect the size of the file prior to sending them through the parsing process and then off to the database for storage – this ensures large files don’t bring down our worker processes. If you haven’t checked out Axios, you definitely should.

Commander

Commander is another Node.js module, this time providing full support for building command-line interfaces. Yes, that’s right, Winds has a CLI that we use for various tasks such as testing feeds, dropping RSS feeds, and more!

Babel

Babel “allows us to use the next generation of JavaScript, today”. Essentially, if a feature, such as imports isn’t available in a particular JavaScript (front-end and/or back-end), we can still use it by leveraging Babel.

Express

Express is used to power our API. Compared to other frameworks out there, it truly shines when under stress. Honestly speaking, our team has experience with most, if not all, of the JavaScript frameworks and we find Express to be the easiest to work with. It’s regularly maintained, has open-source components, and it’s awesome. 😎

Sentry

Sentry allows for real-time crash reporting for our back- and front-end. What blows us away is how granular you can get with Sentry. Their features help us identify and debug errors and give us insight on when to fix or rollback. When it comes to firefighting, this tool definitely wins the market.

Algolia

Algolia provides lightning-fast (literally) search for our application. In under 2ms, our users can discover RSS feeds and podcasts to read or listen to. They even have components for frameworks such as React and Angular to make the integration better. This is by far one of our favorite; however, we like them all. 😛

Stream

Stream is a key resource to Winds 2.0, as it provides news feeds and activity streams for our users and even machine learning-based personalization. Without Stream, we would not be able to serve up suggested content to our users as we currently do.

MongoDB Atlas

MongoDB Atlas is a phenomenal DBaaS, allowing us to worry about acquiring users, while MongoDB worries about uptime. It’s identical to hosting your own cluster, except MongoDB provides you with a dashboard and a URI to connect to. With MongoDB Atlas, there’s no more worrying about cluster health, monitoring, etc.

Mongoose

Mongoose is a powerful ODM that allows us to define rich models within our MongoDB environment. Generally speaking, NoSQL databases are schemaless (meaning they have or require no form); however, with MongoDB, it’s always a good idea to specify a schema so you can index and organize your data properly. This allows for easy updates and efficient queries.

PM2

PM2 is a Node.js process manager. It allows us to ensure uptime, and scale processes as we need. The CLI for the project is dead simple, which allowed our team to pick it up on the fly.


Final Thoughts 😁

To get started with Winds 2.0, you can try the web version or download the application here. If you’re feeling more adventurous head over to GitHub and spin it up locally.

RSS is in a vicious circle. Winds is a community effort to help turn the tide and #ReviveRSS. Contributions are always much appreciated. To discuss new features check out the official Slack channel for Winds.

If you’re curious to know a little more about Stream and how our API works, we have an easy 5-minute API tour that will walk you through the process of building scalable activity feeds.

Stream
Build scalable feeds, activity streams & chat in a few hours instead of months.
Tools mentioned in article
Open jobs at Stream
DevOps Engineer
Portugal
<section> <p><span style="font-weight: 400;">We are looking for a DevOps Engineer to join Stream on our mission of elevating the quality of apps for billions of users globally. You will be part of the team responsible for our AWS infrastructure. </span></p> <h2><strong>What you will be doing</strong><span style="font-weight: 400;">&nbsp;</span></h2> <p><span style="font-weight: 400;">Most of your day will be spent working on AWS infrastructure and taking care of monitoring, logging, security, and automation. </span></p> <p><span style="font-weight: 400;">You will also work on improving our system observability, </span><span style="font-weight: 400;">operations for performance and maintenance tasks.</span></p> <p><span style="font-weight: 400;">Our team is made up of very experienced engineers, some with decades of experience. By working together, you will learn from each other along the way. </span></p> <p><span style="font-weight: 400;">Y</span><span style="font-weight: 400;">ou will have an enormous impact on making our API service faster, more scalable, and more reliable. Our AWS infrastructure spans across 13 different regions. We store billions of records and serve over two billion end-users around the world. </span></p> <p><span style="font-weight: 400;">For both Feeds and Chat, we run our own distributed K/V storage written in Golang.</span></p> <h2><strong>Why join Stream as a DevOps</strong></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Our API powers feeds and chat for more than 1 billion end-users. Our customers integrate our API on their production apps. Low latency and high availability are critical for our customers.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Our vision is to become the AWS of components and launch more products. We are currently launching video and AI moderation.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Technical execution is very important, our team is very experienced. This is a great opportunity to learn and grow</span></li> </ul> <h2><strong>About you</strong></h2> <p><strong>You have:</strong></p> <ul> <li>3+ years of commercial experience</li> <li>Managed instances in the cloud</li> <li>Experience with scripting languages</li> <li>Ability to manage network infrastructure (Setting up VLAN &amp; Network segmentation)</li> <li>Skills in Linux system administration and hardening</li> <li>Experience with Infrastructure as a Code and tools such as: Puppet, Docker, Ansible, Chef, Terraform, Cloudformation</li> </ul> <p><strong>&nbsp;Bonus points</strong></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Production experience with AWS and Docker</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Worked with live distributed systems</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience scaling high traffic websites or API services</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with NewSQL/NoSQL databases</span></li> </ul> <p><strong>Our tech stack</strong></p> <p><span style="font-weight: 400;">&nbsp;</span><span style="font-weight: 400;">At Stream, we use a wide collection of technologies to offer highly optimised and available features to our customers. Here is a shortlist of the technology that we currently use:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Golang, Python</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Postgresql, RocksDB, CockroachDB</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">AWS, Puppet, CloudFormation, Ansible</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Grafana, Graphite, ELK, Prometheus, OpenTelemetry</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Redis, Etcd</span></li> </ul> <h2><strong>Why join Stream?</strong></h2> <ul> <li style="font-weight: 400;"><strong>History of success.</strong><span style="font-weight: 400;"> From Amsterdam to Boulder and Techstars in-between, Stream has raised over $58.25M to build the best Chat Messaging &amp; Activity Feed infrastructure available, with best-in-class support.</span></li> <li style="font-weight: 400;"><strong>Freedom and endless growth opportunities.</strong><span style="font-weight: 400;"> As a rapidly growing startup (since 2020 we have gone from 30 to 150 employees), Stream gives you unique personal and professional growth opportunities. The opportunity of true ownership and accountability has a massive impact on your career. These are the things you can rarely experience in huge corporations.</span></li> <li style="font-weight: 400;"><strong>Be on the front line of progress and innovation.</strong><span style="font-weight: 400;"> While working with cutting-edge technology, we are passionate about tackling difficult tech problems at scale and creating reusable components for them, empowering engineering teams to ship apps faster, more securely, and with a better user experience.</span></li> <li style="font-weight: 400;"><strong>They believe in us:</strong><span style="font-weight: 400;"> Stream is backed by leading VC companies (Felicis Ventures, GGV Capital, 01.Advisors, Techstars, Arthur Ventures), including backers like Dick Costolo (01 Advisors, ex-CEO of Twitter), Olivier Pomel (CEO of Datadog), Tom Preston-Werner (Co-Founder of GitHub), Nicolas Dessaigne (Co-Founder of Algolia), Johnny Boufarhat (Founder and CEO of Hopin).</span></li> <li style="font-weight: 400;"><strong>Complete location and working hours flexibility.</strong><span style="font-weight: 400;"> If you prefer working from the office, working 100% remotely, combining both, or relocating to our AMS office, you have total freedom to choose what works best for you and makes you happy. We’re here to support you in being productive and feeling part of the team, no matter where you are.</span></li> </ul> <h2><strong>What we have to offer you</strong></h2> <p><span style="font-weight: 400;">Stream employees enjoy some of the best benefits in the industry:</span></p> <ul> <li>A team of exceptional engineers</li> <li>The chance to work on OSS projects</li> <li>A competitive salary</li> <li>A combination of 36 days per year in PTO and public holidays</li> <li>Company equity</li> <li>Remote work flexibility</li> <li>Fitness stipend</li> <li>A Macbook Pro&nbsp;</li> <li>The opportunity to attend or present to global conferences and meetups</li> <li>The possibility to visit our offices in Boulder, CO and Amsterdam, NL</li> <li>Legal employment in your country of residence</li> </ul> <h2><strong>Our culture</strong></h2> <p><span style="font-weight: 400;">Stream has a casual social culture, our team is diverse and we all have different backgrounds. Now, Stream is a team of over 130+ peers from over 35 countries across the globe.</span></p> <p><span style="font-weight: 400;">We value transparency, aim for excellence, and support each other on our way to new victories.</span></p> <p><span style="font-weight: 400;">Our team consists of the strongest talents worldwide, making Stream a great place to learn and improve your skills.&nbsp;</span></p> <p><span style="font-weight: 400;">When it comes to software engineering, our culture is oriented towards ownership and quality: our goal is to deliver stable software.</span></p> <p><span style="font-weight: 400;">If you are interested in becoming a part of what we do, apply now!</span></p> <p><em><span style="font-weight: 400;">Stream provides equal employment opportunities to all employees and applicants for employment and prohibits discrimination and harassment of any type without regard to race, color, religion, age, sex, national origin, disability status, genetics, protected veteran status, sexual orientation, gender identity or expression, or any other characteristic protected by federal, state or local laws.</span></em></p> <p><em><span style="font-weight: 400;">This policy applies to all terms and conditions of employment, including recruiting, hiring, placement, promotion, termination, layoff, recall, transfer, leaves of absence, compensation and training.</span></em></p> <p><strong><em>No recruiters/agencies please</em></strong></p> </section>
Backend Software Engineer (Python/Dja...
Amsterdam, or
<section> <p>We are seeking a skilled Python/Django developer to join our team. <span style="font-weight: 400;">This role is open either in our Amsterdam office or remote (EMEA). <span class="discussion-id-0a7dbfb5-600e-46ec-bce6-8308abf68671 notion-enable-hover" data-token-index="0">Visa sponsorship is possible.</span></span></p> <h2><strong>What you will be doing</strong><span style="font-weight: 400;">&nbsp;</span></h2> <p>You will be responsible for designing, developing, and maintaining our web applications using the Python programming language and the Django framework. The systems that will be worked on as part of the job include a moderation dashboard, Chat and Feeds admin panel, internal tools as well as the integration of external services.</p> <p><br><strong>Responsibilities:</strong></p> <ul> <li>Design and develop web applications using Python and Django</li> <li>Collaborate with the rest of the development team to design and implement new features</li> <li>Write clean, efficient, and well-documented code</li> <li>Troubleshoot and debug issues as they arise</li> <li>Stay up-to-date with the latest developments in the Python and Django communities</li> <li>Monitor production environments for performance and troubleshoot issues as they arise.</li> </ul> <h2><strong>About you</strong><span style="font-weight: 400;">&nbsp;</span></h2> <p><strong>You have:</strong></p> <ul> <li>Strong experience with Python and Django</li> <li>Experience with JavaScript and web development frameworks such as React or Angular</li> <li>Strong understanding of Object-Oriented Programming (OOP) concepts</li> <li>Experience with relational databases (e.g. PostgreSQL, MySQL)</li> <li>Experience with Git and version control</li> <li>Familiarity with Agile development methodologies</li> <li>Strong problem-solving and debugging skills</li> <li>Good communication skills</li> <li>Strong work ethic and ability to work independently or in a team.</li> </ul> <p><strong>Bonus points:</strong></p> <ul> <li>Experience with message queues such as RabbitMQ</li> <li>Experience with automated testing and continuous integration/continuous deployment (CI/CD)</li> <li>Experience with designing and building REST API’s</li> <li>Experience with cloud-based platforms (e.g. AWS, Azure)</li> <li>Bachelor's degree in Computer Science, Engineering or a related field.<br><br></li> </ul> <p><strong>Our tech stack</strong></p> <p>At Stream, we use a wide collection of technologies to offer highly optimized and available features to our customers. Here is a shortlist of the technology that we currently use:</p> <ul> <li>Go, gRPC, RocksDB, Python</li> <li>Postgresql, RabbitMQ</li> <li>AWS, Puppet, CloudFormation</li> <li>Grafana, Graphite, ELK, Jaeger</li> <li>Redis, Memcached</li> </ul> <h2><strong>Why join Stream?</strong></h2> <ul> <li style="font-weight: 400;"><strong>History of success.</strong><span style="font-weight: 400;"> From Amsterdam to Boulder and Techstars in-between, Stream has raised over $58.25M to build the best Chat Messaging &amp; Activity Feed infrastructure available, with best-in-class support.</span></li> <li style="font-weight: 400;"><strong>Freedom and endless growth opportunities.</strong><span style="font-weight: 400;"> As a rapidly growing startup (since 2020 we have gone from 30 to 150 employees), Stream gives you unique personal and professional growth opportunities. The opportunity of true ownership and accountability has a massive impact on your career. These are the things you can rarely experience in huge corporations.</span></li> <li style="font-weight: 400;"><strong>Be on the front line of progress and innovation.</strong><span style="font-weight: 400;"> While working with cutting-edge technology, we are passionate about tackling difficult tech problems at scale and creating reusable components for them, empowering engineering teams to ship apps faster, more securely, and with a better user experience.</span></li> <li style="font-weight: 400;"><strong>They believe in us:</strong><span style="font-weight: 400;"> Stream is backed by leading VC companies (Felicis Ventures, GGV Capital, 01.Advisors, Techstars, Arthur Ventures), including backers like Dick Costolo (01 Advisors, ex-CEO of Twitter), Olivier Pomel (CEO of Datadog), Tom Preston-Werner (Co-Founder of GitHub), Nicolas Dessaigne (Co-Founder of Algolia), Johnny Boufarhat (Founder and CEO of Hopin).</span></li> <li style="font-weight: 400;"><strong>Complete location and working hours flexibility.</strong><span style="font-weight: 400;"> If you prefer working from the office, working 100% remotely, combining both, or relocating to our AMS office, you have total freedom to choose what works best for you and makes you happy. We’re here to support you in being productive and feeling part of the team, no matter where you are.</span></li> </ul> <h2><strong>What we have to offer you</strong></h2> <p><span style="font-weight: 400;">Stream employees enjoy some of the best benefits in the industry:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">A team of exceptional engineers&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The chance to work on OSS projects </span><strong><em>&nbsp;</em></strong></li> <li style="font-weight: 400;"><span style="font-weight: 400;">28 days paid time off plus paid Dutch holidays</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Company equity</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A pension scheme</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Remote work flexibility</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A Learning and Development budget</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Commute expenses to Amsterdam covered or the option to use a company bike within the city</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Fitness stipend&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Monthly in-office chair massages by a professional</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">MacBook Pro&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Healthy team lunches and plenty of snacks</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A generous relocation package</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">An office in the heart of Amsterdam</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The opportunity to attend or present at global conferences and meetups</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The possibility to visit our office in Boulder, CO</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Parental leave paid at 100%</span></li> </ul> <p><span style="font-weight: 400;"><span class="discussion-id-822efe3d-614e-4adc-9991-ea81cdc89918 notion-enable-hover" data-token-index="0" data-reactroot="">Note: </span><span class="discussion-id-822efe3d-614e-4adc-9991-ea81cdc89918 notion-enable-hover" data-token-index="1" data-reactroot="">this list of benefits applies to Netherlands-based employees and is adjusted per your location of residence</span><span class="notion-enable-hover" data-token-index="2" data-reactroot="">.</span></span></p> <h2><strong>Our culture</strong></h2> <p><span style="font-weight: 400;">Stream has a casual social culture, our team is diverse and we all have different backgrounds. Now, Stream is a team of over 130+ peers from over 35 countries across the globe.</span></p> <p><span style="font-weight: 400;">We value transparency, aim for excellence, and support each other on our way to new victories.</span></p> <p><span style="font-weight: 400;">Our team consists of the strongest talents worldwide, making Stream a great place to learn and improve your skills.&nbsp;</span></p> <p><span style="font-weight: 400;">When it comes to software engineering, our culture is oriented towards ownership and quality: our goal is to deliver stable software.</span></p> <p><span style="font-weight: 400;">If you are interested in becoming a part of what we do, apply now!</span></p> <p><em><span style="font-weight: 400;">Stream provides equal employment opportunities to all employees and applicants for employment and prohibits discrimination and harassment of any type without regard to race, color, religion, age, sex, national origin, disability status, genetics, protected veteran status, sexual orientation, gender identity or expression, or any other characteristic protected by federal, state or local laws.</span></em></p> <p><em><span style="font-weight: 400;">This policy applies to all terms and conditions of employment, including recruiting, hiring, placement, promotion, termination, layoff, recall, transfer, leaves of absence, compensation and training.</span></em></p> <p><strong><em>No recruiters/agencies please</em></strong></p> </section> <p>&nbsp;</p>
React Native Developer
Amsterdam or (EMEA)
<section> <h2>React Native Software Engineer</h2> <p>We seek an experienced React Native Engineer to join our SDK development team. This is a full-time position in our Amsterdam office or remote from EMEA.</p> <h2>What you will be doing</h2> <p>You will mainly be responsible for building, maintaining, and taking ownership of Stream’s React Native SDKs (Chat and Video) to allow integration with Stream’s core APIs. Your work will be used by thousands of engineers and consumed by billions of their end-users.</p> <p>As one of Stream’s React Native engineers, you strive to simplify how applications are built. Most of your day will be dedicated to software design, research, and coding. You will be expected to write documentation for the libraries we create and interact with our customers through Github by responding to issues and reviewing pull requests. In addition to feature additions and maintenance, you will also be involved in developer relations for the React Native SDKs.</p> <h2><strong>Responsibilities</strong></h2> <ul> <li>Develop, debug, maintain and enhance existing React Native SDKs.</li> <li>Work across multiple teams to provide technical insight on product and feature development.</li> <li>Collaborate with backend teams to ensure feature parity across SDKs.</li> <li>Pivot, jump in, and assist in the development/maintenance of other JS SDKs.</li> <li>Assist customers with implementation, respond to GitHub issues and review open-source contributions.</li> </ul> <h2>About You</h2> <p>As a team member, you must be excited to grow with Stream. At our core, we are a startup - you should be able to act quickly, thrive in uncertainty, and love pivoting to new technologies.</p> <p><strong>You have</strong></p> <ul> <li>Been working as a software engineer for 5+ years.</li> <li>Professional experience with JavaScript/React Native and at least one other programming language.</li> <li>Computer Science fundamentals.</li> <li>A deep understanding of design and interaction with REST APIs</li> <li>Experience with TDD and CI/CD.</li> <li>Experience building libraries or tools that are used by engineers.</li> <li>TypeScript experience.</li> </ul> <p><strong>Bonus points</strong></p> <ul> <li>Experience interacting with other engineers on Github (opening issues, open-source contributions, or maintenance)</li> <li>Other technical experience with native iOS/Android and NodeJS.</li> </ul> <h2><strong>Our tech stack</strong></h2> <p>At Stream, we use a wide collection of technologies to offer highly optimized and available features to our customers. Here is a short list of the technology that we currently use in the React Native team:</p> <ul> <li>React</li> <li>React Native</li> <li>React Native Testing library</li> <li>Detox</li> <li>Yarn Workspaces/Lerna</li> <li>GitHub Actions</li> <li>Expo</li> <li>Flipper (We even wrote our Flipper <a href="https://github.com/GetStream/flipper-plugin-stream-chat-react-native">plugin</a>)</li> <li>Dcousarus</li> <li>Firebase</li> <li>Sentry</li> <li>Jest</li> <li>Vitest</li> <li>RxJS</li> </ul> <p>And many more…</p> <h2>Why join Stream?</h2> <ul> <li><strong>History of success.</strong> From Amsterdam to Boulder and Techstars in-between, Stream has raised over $58.25M to build the best Chat Messaging &amp; Activity Feed infrastructure available, with best-in-class support.</li> <li><strong>Freedom and endless growth opportunities.</strong> As a rapidly growing startup (since 2020 we have gone from 30 to 150 employees), Stream gives you unique personal and professional growth opportunities. The opportunity of true ownership and accountability has a massive impact on your career. These are the things you can rarely experience in huge corporations.</li> <li><strong>Be on the front line of progress and innovation.</strong> While working with cutting-edge technology, we are passionate about tackling difficult tech problems at scale and creating reusable components for them, empowering engineering teams to ship apps faster, more securely, and with a better user experience.</li> <li><strong>They believe in us:</strong> Stream is backed by leading VC companies (Felicis Ventures, GGV Capital, 01.Advisors, Techstars, Arthur Ventures), including backers like Dick Costolo (01 Advisors, ex-CEO of Twitter), Olivier Pomel (CEO of Datadog), Tom Preston-Werner (Co-Founder of GitHub), Nicolas Dessaigne (Co-Founder of Algolia), Johnny Boufarhat (Founder and CEO of Hopin).</li> <li><strong>Complete location and working hours flexibility.</strong> If you prefer working from the office, working 100% remotely, combining both, or relocating to our AMS office, you have total freedom to choose what works best for you and makes you happy. We’re here to support you in being productive and feeling part of the team, no matter where you are.</li> </ul> <h2>What we have to offer you</h2> <p>Stream employees enjoy some of the best benefits in the industry:</p> <ul> <li>A team of exceptional engineers&nbsp;</li> <li>The chance to work on OSS projects </li> <li>28 days paid time off plus paid Dutch holidays</li> <li>Company equity</li> <li>A pension scheme</li> <li>Remote work flexibility</li> <li>A Learning and Development budget</li> <li>NS business card or a company bike covered</li> <li>Fitness stipend</li> <li>Monthly in-office chair massages by a professional</li> <li>Parental leave paid at 100%</li> <li>MacBook Pro provided</li> <li>Healthy team lunches and plenty of snacks</li> <li>A generous relocation package</li> <li>An office in the heart of Amsterdam</li> <li>The opportunity to attend or present at global conferences and meetups</li> <li>The possibility to visit our office in Boulder, CO</li> </ul> <p><em><strong>Note:</strong> this list of benefits applies to Netherlands-based employees and is adjusted per your location of residence.</em></p> <h2>Our culture</h2> <p>Stream has a casual social culture, our team is diverse and we all have different backgrounds. Now, Stream is a team of over 130+ peers from over 35 countries across the globe.</p> <p>We value transparency, aim for excellence, and support each other on our way to new victories.</p> <p>Our team consists of the strongest talents worldwide, making Stream a great place to learn and improve your skills.</p> <p>When it comes to software engineering, our culture is oriented towards ownership and quality: our goal is to deliver stable software.</p> <p>If you are interested in becoming a part of what we do, apply now!</p> <p><em>Stream provides equal employment opportunities to all employees and applicants for employment and prohibits discrimination and harassment of any type without regard to race, color, religion, age, sex, national origin, disability status, genetics, protected veteran status, sexual orientation, gender identity or expression, or any other characteristic protected by federal, state or local laws.</em></p> <p><em>This policy applies to all terms and conditions of employment, including recruiting, hiring, placement, promotion, termination, layoff, recall, transfer, leaves of absence, compensation and training.</em></p> <p><em><strong>No recruiters/agencies please</strong></em></p> </section>
Technical Director of Engineering - SDK
Amsterdam
<p>We are looking for a highly skilled technical director of engineering to lead our SDK teams. As a director you will manage teams that build our UI component SDKs for all major platforms. As of today we support the following platform with official SDKs: Android, iOS, React, React Native, Flutter, Angular, Unity and Unreal Engine.</p> <p>You will be joining our team from the Amsterdam (NL) office, some of our team is remote across Europe.</p> <h2>What you will be doing</h2> <p>You will report directly to the CTO and co/founder. Directors of engineering at Stream are experts of their own domain, and hands-on coding. Our customers use SDKs to integrate our products into their apps, as a director you will be responsible for ensuring the best developer experience is delivered and that our products can be integrated in days.</p> <p>As a Technical Director of Engineering you will work on the developer experience that our SDK provide, this is the core of our business and one of the reasons we are ahead of our competitors.</p> <h2>Why Join Stream as Technical Director of Engineering</h2> <p>We want to become the AWS of components, we currently power Chat and Feeds for over a billion end-users and are currently building a video and an AI moderation products.</p> <ul> <li>We are a tech startup selling a highly technical product</li> <li>We power feeds and chat for more than 1B end-users</li> <li>Building high quality SDKs across web and mobile is really hard and requires top-talent</li> <li>Hands-on role, we expect directors to build software not only teams and processes</li> <li>Our products are ahead of the competition</li> </ul> <h2><strong>Responsibilities</strong></h2> <ul> <li>Own the technical execution and delivery for our SDKs across all our products</li> <li>Hiring and growing the best talent</li> <li>Manage a team of developers and team leads</li> </ul> <h2>About You</h2> <p>You worked as a director, CTO, technical Co-Founder, tech lead, or team lead in the past and have several years of experience in software development. You have a natural talent with learning different technology and know very well how mobile and web apps are built.</p> <p>As a manager, you maintain a hands-on approach and stay involved with technical challenges, you are passionate about building software and technical teams.</p> <p><strong>You have</strong></p> <ul> <li>More than 5 years of experience managing software engineering teams</li> <li>Experience managing developers and leading complex technical projects</li> <li>Hired top talent and grew them under your management</li> <li>CS degree or similar/relevant experience</li> <li>In-depth experience with cloud infrastructure and with building customer-facing APIs</li> <li>Worked for more than 8 years as a software engineer</li> </ul> <p><strong>Bonus points</strong></p> <ul> <li>Startup experience</li> <li>Prior experience as CTO or as a technical Co-Founder</li> <li>Saas &amp; API products</li> <li>Mobile development background</li> </ul> <p><strong>Our tech stack - SDK teams</strong></p> <p>We support all common platforms used to build applications</p> <ul> <li>Native Android: XML and Jetpack Compose</li> <li>iOS: UIKit and SwiftUI</li> <li>React</li> <li>React Native</li> <li>Angular</li> <li>Flutter</li> <li>Unity</li> <li>Unreal Engine</li> </ul> <h2><strong>Why join Stream?</strong></h2> <ul> <li style="font-weight: 400;"><strong>History of success.</strong><span style="font-weight: 400;"> From Amsterdam to Boulder and Techstars in-between, Stream has raised over $58.25M to build the best Chat Messaging &amp; Activity Feed infrastructure available, with best-in-class support.</span></li> <li style="font-weight: 400;"><strong>Freedom and endless growth opportunities.</strong><span style="font-weight: 400;"> As a rapidly growing startup (since 2020 we have gone from 30 to 150 employees), Stream gives you unique personal and professional growth opportunities. The opportunity of true ownership and accountability has a massive impact on your career. These are the things you can rarely experience in huge corporations.</span></li> <li style="font-weight: 400;"><strong>Be on the front line of progress and innovation.</strong><span style="font-weight: 400;"> While working with cutting-edge technology, we are passionate about tackling difficult tech problems at scale and creating reusable components for them, empowering engineering teams to ship apps faster, more securely, and with a better user experience.</span></li> <li style="font-weight: 400;"><strong>They believe in us:</strong><span style="font-weight: 400;"> Stream is backed by leading VC companies (Felicis Ventures, GGV Capital, 01.Advisors, Techstars, Arthur Ventures), including backers like Dick Costolo (01 Advisors, ex-CEO of Twitter), Olivier Pomel (CEO of Datadog), Tom Preston-Werner (Co-Founder of GitHub), Nicolas Dessaigne (Co-Founder of Algolia), Johnny Boufarhat (Founder and CEO of Hopin).</span></li> <li style="font-weight: 400;"><strong>Complete location and working hours flexibility.</strong><span style="font-weight: 400;"> If you prefer working from the office, working 100% remotely, combining both, or relocating to our AMS office, you have total freedom to choose what works best for you and makes you happy. We’re here to support you in being productive and feeling part of the team, no matter where you are.</span></li> </ul> <h2><strong>What we have to offer you</strong></h2> <p><span style="font-weight: 400;">Stream employees enjoy some of the best benefits in the industry:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">A team of exceptional engineers&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The chance to work on OSS projects </span><strong><em>&nbsp;</em></strong></li> <li style="font-weight: 400;"><span style="font-weight: 400;">28 days paid time off plus paid Dutch holidays</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Company equity</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A pension scheme</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Remote work flexibility</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A Learning and Development budget</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Commute expenses to Amsterdam covered or the option to use a company bike within the city</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Fitness stipend&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Monthly in-office chair massages by a professional</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">MacBook Pro&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Healthy team lunches and plenty of snacks</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A generous relocation package</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">An office in the heart of Amsterdam</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The opportunity to attend or present at global conferences and meetups</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The possibility to visit our office in Boulder, CO</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Parental leave paid at 100%</span></li> </ul> <p><span style="font-weight: 400;"><span class="discussion-id-822efe3d-614e-4adc-9991-ea81cdc89918 notion-enable-hover" data-token-index="0" data-reactroot="">Note: </span><span class="discussion-id-822efe3d-614e-4adc-9991-ea81cdc89918 notion-enable-hover" data-token-index="1" data-reactroot="">this list of benefits applies to Netherlands-based employees and is adjusted per your location of residence</span><span class="notion-enable-hover" data-token-index="2" data-reactroot="">.</span></span></p> <h2><strong>Our culture</strong></h2> <p><span style="font-weight: 400;">Stream has a casual social culture, our team is diverse and we all have different backgrounds. Now, Stream is a team of over 130+ peers from over 35 countries across the globe.</span></p> <p><span style="font-weight: 400;">We value transparency, aim for excellence, and support each other on our way to new victories.</span></p> <p><span style="font-weight: 400;">Our team consists of the strongest talents worldwide, making Stream a great place to learn and improve your skills.&nbsp;</span></p> <p><span style="font-weight: 400;">When it comes to software engineering, our culture is oriented towards ownership and quality: our goal is to deliver stable software.</span></p> <p><span style="font-weight: 400;">If you are interested in becoming a part of what we do, apply now!</span></p> <p><em><span style="font-weight: 400;">Stream provides equal employment opportunities to all employees and applicants for employment and prohibits discrimination and harassment of any type without regard to race, color, religion, age, sex, national origin, disability status, genetics, protected veteran status, sexual orientation, gender identity or expression, or any other characteristic protected by federal, state or local laws.</span></em></p> <p><em><span style="font-weight: 400;">This policy applies to all terms and conditions of employment, including recruiting, hiring, placement, promotion, termination, layoff, recall, transfer, leaves of absence, compensation and training.</span></em></p> <p><strong><em>No recruiters/agencies please</em></strong></p>
Verified by
Building cool things on the internet 🛠️
Software Engineer, Data Science
Account Executive
Software Engineer
Software Architect
Javascript Developer
Marketing Manager
You may also like