DEV Community

Cover image for Snipline 2 Progress Report May 2021
Mitch Stanley
Mitch Stanley

Posted on • Originally published at

Snipline 2 Progress Report May 2021

If you don’t know what Snipline is, here’s a brief run-down: Snipline started as a tool to scratch my own itch. I wanted an app that streamlined saving, searching and using shell commands.

If you’re interested in learning more, checkout the home page.

UI Refresh

Version 1 vs Version 2

The most obvious change is the UI. The structure is very similar and yet very different at the same time. I've moved from Tailwind 1 to Tailwind 2, and with that I'm also using Tailwind UI for some of the elements. There's also some other noticeable changes like no more settings button, and the moved 'New Snippet' button.

Farewell Command Bar, Hello Command Palette

The command bar in v1 vs the command palette in v2

In the UI Refresh screenshot, you may have noticed the command bar is no longer visible, and that's because it no longer exists. I want to move Snipline 2 to a command palette style workflow. Popularised by apps such as Sublime Text 2 where you hit a keybind and you select an action.

In v1 the flow was either

a) Search snippet and click run/copy.

b) Search and type the snippet number in the command bar (E.g. :1 to run, or :e 1 to edit etc ).

In v2 the flow is

a) Search snippet and click run/copy

b) Search snippet, press enter to open the command palette on the selected snippet, choose your action, e.g. run.

c) Ctrl/Command+enter to skip the palette and run the selected snippet.

It's a big change which makes using Snipline more visual and app-like.

Dedicated preference window

v1 settings vs v2 preferences

In Snipline 1 the settings were done within the main app window. This worked fine, but there were two issues that bugged me.

  1. There needed to be a button to open the settings within the main app which took up space.
  2. It's more difficult to scale out the settings within a potentially constrained size.

With Snipline 2 I'm pleased to show that the preferences are in their own window. This can be opened from the menu or by the Operating Systems conventional preference shortcut (e.g. in MacOS this is ⌘+,).

This means the icon is no longer required within the main app, which helps to make it look cleaner. More importantly, I can expand the preferences into different tabs like most applications do.

New Features

There are lots of small QoL improvements in this release, but here are some of the bigger ones.

Custom keybinds and Global shortcut!

It's a common request for Snipline to have a global keybind and here it is. Personally, I have it set to hyper+s but this is configurable to your own taste.

Many of the navigational elements can be customised and support chording. What is chording? Those familiar with Vim will know, instead of using a single combination of keys, you can press multiple keys in succession. A common one for Vim would be g g to go to the bottom of the file.

And if you use command/ctrl keys in your shortcuts you can use these without leaving the search bar!

Offline mode

See the 'Internal Updates' and 'Pricing' sections later in this post for more details on why I'm adding this.

New syntaxes

I have not started implementing these yet so I can't make any promises, but there are three new syntaxes I'd like to add: One for replacing text with your current clipboard, some kind of confirm/if statement, and variable transforming (e.g. to camelCase, snake_case, etc).

Internal Updates

In the beginning, the main reason I labelled this as 'Snipline 2' was because of all the internal updates I wanted to do. Most importantly, it's using Ember Octane and Electron 12, which I hope will make the app more performant. And perhaps more noticeably, the switch to Tailwind 2 and TailwindUI components.

However, the biggest internal change is the fact it's storing snippets locally by default. This means no more signing in to your account or having an active internet connection.

Since Snipline 2 will be local by default it means that Snipline CLI and Snipbar will not be compatible with it - at least initially. I may do an update for these, or possibly new apps. Time will tell.


One of the biggest complaints I received from Snipline 1 was the fact it was subscription based. I sort of addressed this by bringing in the 'Pay what you want' model, reducing the initial price down to $9/year. I can happily say this helped bring in more subscribers and as I've mentioned in previous blog posts, and I still get many people that go for the original price of $18/year which I really appreciate.

I completely understand subscription fatigue, and I wanted to address this from the start with Snipline 2. So I'm pleased to announce that the base app, which is usable offline and has 90% of the features, will be a one time cost. Buying this will give you a license key which you can use on your devices for as long as you want.

I plan to create two tiers of subscriptions: Pro and Team which have some additional server based features.

The Pro plan will include syncing between devices, Sharing Snippets via a web URL, and snippet revisions. A side effect of this plan is that you essentially have a back up of your snippets, too.

The Team plan will include the Pro features but allow you to share snippets between teammates.

The price of these are to be confirmed, but it's safe to say they're not going to be too different to the current price.

Upgrade plan

Chances are, if you're interested enough to read this far, you're probably a subscriber to Snipline 1.0, and you're wondering What about me?

My plan for active Snipline 1.0 users is to offer a free license for the app, and one year of the Pro plan. I'll also hopefully be giving beta invites for these users first!

I've said in a previous blog post that Snipline 1 and Snipline 2 can be run side by side. This is still true, but they will not be synced with each other. I would encourage Snipline 1 migrants to import their existing Snippets into Snipline 2 and when they are ready move over to the new subscription.


You reached the end of the blog! Thanks for reading, feel free to reach out to me on Twitter if you have any questions.

Top comments (0)