Browsing open source projects

This week I've asked my open source students to research three new (to them) projects.  In the spirit of walking-the-talk, I wanted to share three that I found recently.

I'm constantly looking at new projects and repos.  I love GitHub's Trending feed, and discovering new things via Twitter, podcasts, and blog posts.  Partly I'm just curious, and love to find inspiration in other people's work.  And partly I'm always shopping for new places that my students can get involved.  Helping hundreds of students find open source projects each year is a full-time job.

Without further ado, here are the projects I wanted to discuss:

  1. The Buttercup password manager
  2. The Open Railroad Tycoon 2 game
  3. The Svelte UI Framework

Buttercup

I'm a huge fan of password managers.  I myself use 1Password, and have purchased the Family Plan so everyone in our house can use it, safely share accounts, sensitive documents, sync between all our devices, etc.  However, not everyone needs all these features, nor does it make sense for everyone to take on the subscription cost.

Luckily there are a number of good free and/or open alternatives to 1Password.  One that I've recently learned about is Buttercup.  I first learned about it via this Changelog podcast episode.  In it, one of the two core maintainers of Buttercup, Perry Mitchell, discuss the history and future of the project.

The scope and quality of the project is really striking, with desktop clients for every OS, mobile apps, and browser extensions, all of which look beautiful.

Buttercup desktop (Electron) client

The project is built using React, Electron, React-Native, and also includes encryption code in Rust and WebAssembly.  Very often I have students tell me that they want to work on something that uses React vs. contributing to React itself, and in my experience, it can hard to find projects like this.  Everyone uses it, but not everyone who uses it does so in an open source context.  Similarly, people want to work on mobile apps, or tell me they want to try something with Rust.  Having so much of this modern tech all in one project is great.  

I also really like how the whole thing is split up into an ecosystem of separate apps, tools, and repos.  There are lots of ways someone could get involved without having to necessarily take on the whole thing.  Right now there are 232 open issues across all these repos--plenty of opportunity for a few students to dive in and make a contribution.

OpenRTC2

The second project I wanted to mention is one I recently saw via Twitter, an open source remake of the popular game RollerCoaster Tycoon 2.  I don't play many games, but many of my students do, and this is what caught my interest.  

OpenRTC2 is a fairly big project, with roughly half-a-million lines of C/C++ code, and a very active developer and user community.  There are great docs and lots of open issues (944), with some even labelled as good first issue.

Because our students study C/C++ for 3 terms before they get to the open source courses, a lot of them tell me that they want to work on something in C++.  However, when I show them possible projects, the code often overwhelms them because there is too much of a gap between their academic experience and real-world C++.  Also, the projects written in C++ can often be very low level, abstract, and difficult to use in ways that are easy for a beginner to understand, or only work on particular platforms.  With OpenRTC2, a lot of these problems are less of an issue, with the game running on every OS, and the "build" being relatively easy and fun to test.

Svelte

The last project I wanted to discuss is one I also heard about via a podcast.  Svelte is a framework-less UI framework.  I've heard about it in the past, but never used it, or dug into the project in any depth.  Listening to Rich Harris discuss the upcoming 3.0 release, I got really interested in the approach.  Where React and Vue update UI by applying runtime diffs between a virtual DOM and the real DOM, Svelte takes a different approach: using compile time analysis to generate pure JavaScript UI code that doesn't need a runtime framework.

For work that I'm about to start on some UI components, I've been looking for a way to write code that isn't necessarily React, Vue, Angular, etc. but could be used in those frameworks, or in a vanilla DOM app.  Svelte seems like a good middle road for building something that can work in a lot of different contexts.

The community is a lot smaller than React or Vue, which you could view as a good or bad thing.  I think it's good from the standpoint of someone wanting to contribute, because there is a bit less pressure on the issues.  The community uses Discord for real-time chat, which is nice for contributors wanting to get a question answered.  There are lots of open issues across all the various repos in the ecosystem.  Like Buttercup, the project is split into many separate, smaller repos.