Project of the Week: Jasper

This week we interviewed the creator of Jasper, an Electron-based tool for managing GitHub notifications.


Hello! Who are you?

I'm Ryo Maruyama, a software developer in Japan. I am developing Jasper and ESDoc.

What is Jasper?

Jasper is a flexible and powerful issue reader for GitHub. It supports issues and pull requests on github.com and GitHub Enterprise.

Jasper App Screenshot

Why did you make it?

When people use GitHub in their job or OSS activities, they tend to receive many notifications on a daily basis. As a way to subscribe to the notifications, GitHub provides email and web notifications. I used these for a couple of years, but I faced the following problems:

I was spending a lot of time and energy trying to prevent those problems, so I decided to make an issue reader for GitHub to solve these problems efficiently, and started developing Jasper.

Who's using Jasper?

Jasper is used by developers, designers, and managers in several companies that are using GitHub. Of course, some OSS developers also are using it. And it is also used by some people at GitHub!

How does Jasper work?

Once Jasper is configured, the following screen appears. From left to right, you can see "streams list", "issues list" and "issue body".

Jasper Start Screen

This "stream" is the core feature of Jasper. For example, if you want to see "issues that are assigned to @zeke in the electron/electron repository", you create the following stream:

repo:electron/electron assignee:zeke is:issue

Jasper Start Screen 2

After creating the stream and waiting for a few seconds, you can see the issues that meet the conditions.

Jasper Start Screen 3

What can we do with streams?

I will introduce what kind of conditions can be used for stream.

Users and Teams

Stream Issues
mentions:cat mentions:dog Issues that mention user cat or dog
author:cat author:dog Issues created by user cat or dog
assignee:cat assignee:dog Issues assigned to cat or dog
commenter:cat commenter:dog Issues that cat or dog commented on
involves:cat involves:dog Issues that "involve" cat or bob
team:animal/white-cat team:animal/black-dog Issues that animal/white-cat or animal/black-dog are mentioned in

involves means mention, author, assignee or commenter

Repositories and Organizations

Stream Issues
repo:cat/jump repo:dog/run Issues in cat/jump or dog/run
org:electron user:cat user:dog Issues in electron , cat or dog

org is same as user

Attributes

Stream Issues
repo:cat/jump milestone:v1.0.0 milestone:v1.0.1 Issues that are attached to v1.0.0 or v1.0.1 in cat/jump
repo:cat/jump label:bug label:blocker Issues that are attached bug and blocker in cat/jump
electron OR atomshell Issues that include electron or atomshell

Review Status

Stream Issues
is:pr review:required Issues that are required review in cat/jump
is:pr review-requested:cat Issues that are requested review by cat .
But these are not reviewed yet.
is:pr reviewed-by:cat Issues that are reviewed by cat

As you may have noticed by looking at these, streams can use GitHub's search queries. For details on how to use streams and search queries, see the following URLs.

Jasper also has features for unread issue management, unread comment management, marking stars, notification updating, filtering issues, keyboard shortcuts, etc.

Is Jasper a paid product? How much does it cost?

Jasper is $12. However you can use the free trial edition for 30 days.

Why did you choose to build Jasper on Electron?

I like the following aspects of Electron:

These features enable rapid and simple desktop application development. It is awesome! If you have any product idea, you should consider using Electron by all means.

What are some challenges you've faced while developing Jasper?

I had a hard time figuring out the "stream" concept. At first I considered using GitHub's Notifications API. However I noticed that it does not support certain use cases. After that I considered using the Issues API and Pull Requests API, in addition to the Notification API. But it never became what I wanted. Then while thinking about various methods, I realized that polling GitHub's Search API would offer the most flexibility. It took about a month of experimentation to get to this point, then I implemented a prototype of Jasper with the stream concept in two days.

Note: The polling is limited to once every 10 seconds at most. This is acceptable enough for the restriction of GitHub API.

What's coming next?

I have a plan to develop the following features:

Follow @jasperappio on Twitter for updates.

Have feedback on this post? Let @electronjs know on Twitter.

Need help or found a bug? Contact us.