Inkdrop v4 is Now in Private Beta

A Lot of Ground-up Improvements Have Been Made Such As End-to-end Encryption, Better Search UI and Smart Scroll Sync!

Inkdrop v4 is Now in Private Beta

Hi, it’s Takuya here.

Inkdrop is a note-taking app that comes with robust Markdown editor with cloud sync. Thanks to nearly 1,000 users paying for it, this indie app project is now 3 years old 🥳. And today, I am happy to share a great news with you.

A half year ago, as I explained in the roadmap (vol.3), I decided to rebuild the desktop app for making ground-up improvements. It took for 7 months, like rebuilding the mobile app also took for 6 months last year. It was a long journey. After lots of hard work, it is finally available for private beta testing. It still needs some refinements but I guess it’s time to publish. Paid users can join it on our forum. To be honest, I was scared that some users leave due to no version updates for long time. But it looks like fine. Thank you so much for your patience and I can’t wait to hear your thoughts on it!

Now, let me introduce what’s new on Inkdrop v4.

Rebuilt with Modern Stack for Sustainable Development

Note-taking apps can not suddenly disappear as you store a lot of notes in it. So the project’s sustainability is very important. But the app was having some problems in terms of implementation — its stack was kind of out-dated and some dependencies have been already deprecated. That causes dependency conflicts and may cause some security issues. Replacing them with modern stack requires to rewrite the app’s core modules. That’s why I decided to rebuild it. For example, it now depends on:

  • React 0.14 → 16
  • AltJS → Redux
  • Webpack 3 → 4
  • Babel 6 → 7

Platform-agnostic Codebase

Inkdrop’s most codebase can now run on both mobile and desktop platforms. That is, I am able to easily maintain the app working across 5 platforms that comes from a single common codebase that contains: Flux architecture (redux), data model, data synchronization, full-text search, etc.

Why I could do this is that both apps are written in JavaScript since the desktop app is built with Electron and the mobile app is built on top of React Native. Of course, this challenge is not so simple since JavaScript is just a language and does not care about platforms. So there were a lot of problems I resolved to accomplish that due to platform differences. I am planning to write about how I did that in another articles.

Truly Private with End-to-End Encryption Support

Your data will be encrypted and decrypted on the client

I’m excited to introduce end-to-end encryption supported on our app.

Since I am just an indie developer, some people would be afraid to trust my app in spite of the data-at-rest encryption support on server-side. It’s completely understandable as I am not a big company who obtained a security certificate like SOC2. Besides, while data is sent to the server via HTTPS, it’s kind of horrible for me to receive plain data from many people in the application layer on the server.

So I implemented end-to-end encryption, where your data is all encrypted and decrypted on client-side. It works on both desktop and mobile apps. It would let us feel much safer to use/operate Inkdrop. You can audit the source code for it and discuss on our forum (paid users only).

I would like deprecate the current store API with data-at-rest encryption in the future.

Search UI & Performance Improvement

The new search UI has been simplified and became more intuitive to search notes. The old search bar was always showing context search query like book:Blog -status:completed -status:dropped , which is kind of verbose. Some people didn’t like that UI because it’s annoying to start typing queries. The new search bar does not show the context query anymore so it won’t disturb you to search notes. By default, it searches notes in the current context. If you click “Search All” item on sidebar or press Cmd-Shift-F / Ctrl-Shift-F on the search bar, it will switch into global search mode so you can search notes without default filter and context filter applied.

Mobile

The mobile app was having a significant performance problem on search because there was a big overhead in full-text indexing. I replaced the FTS module with new one which is built on top of SQLite3’s FTS. You will notice that it is blazingly faster than old version.

Notebook Submenus & Count Badges

v4 will help your notes keep organized further.

As you add tags to notes, it easily becomes hard to find from tag list on sidebar. Similarly, as you set status to notes, it will be hard to know which notes are currently active. The new version has a sub menu for each notebook, which lets you easily find tags and status only used in a notebook.

It now also supports count badges which are shown on the right side of each item on sidebar. They indicate how many notes are available with an item, so you can quickly know statistics of your notes.

Smart Scroll Sync for Side-by-side Mode

Side-by-side mode syncs scroll position between the editor and the preview. But there was a problem that the synced position is not so accurate, especially when you edit a long note, since it syncs based on a percentage of the document length, while both content heights are different because of images, word-wraps, etc.

Smart Scroll Sync, a line-aware scrolling, would solve this problem. Our markdown renderer outputs html from markdown while marking line numbers in each block. When you scroll the editor or the preview, the app can know which line should be displayed at the top of the pane of the other side.

EDIT (2019/05/09): It has been improved to be much more smoother:

Offline Image Attachments Support on Mobile

Since mobile network is not always online and fast, you can’t see embedded images quickly on the mobile app. It’s kind of frustrating, but now it supports caching images in local. Once you loaded an image, it will be loaded from cache from next time. So you can see images while moving on the metro!

Early Access Open to Paid Users

It would have not been possible without all your support. So I’d like to open this beta testing to our loyalty paid users only.

To join the private beta testing, please follow these steps:

  1. Login to the forum
  2. Open up the topic — It has a restricted access where only paid users can view and post. If you can’t open it, please let me know.
  3. Follow the instruction on the topic.

As always, thank you for your help and support!

— Takuya