Leverage Ktlint & PsiViewer to supercharge your team’s linting workflow.

Table of Contents

Chicken, or Egg?
Diving into the matrix
Get Psi-ched
· Psi-Viewer
· The Fun Part (Implementation)
Hol’ Up a Minute
· The Good Stuff
· Wrap Up


In my previous article, I talked about how to leverage the power of git hooks and Ktlint to bring sanity to your team’s linting workflow. In this article, I’ll show you how to improve upon that by leveraging on custom rule-sets in Ktlint. Yes! Custom linting rules!

Chicken, or Egg?

During my search for the how-tos in custom linting rules, I have come across…

A linting workflow leveraging on git hooks and Ktlint


This article will talk about the linting workflow my Android team and I use to ensure new code entering into our code base adheres to the standards set by the team. Our linter of choice is Ktlint, considering that our code base is written entirely on Kotlin.

There are few other articles and blog posts that uses the same approach, but I found their information to either be outdated, or incomplete. So this article is meant to aggregate my findings of those articles, with a little extra sprinkled in.

The Problem

So, a couple of years back, when I first introduced Ktlint…

feat. buddybuild

Image obtained from buddybuild

Machines Maketh Man

We have learned to delegate our tasks to machines.

Since the dawn of mankind we sought to conquer the elements, to be the captain of our fates. We weren’t the fastest nor the strongest beast in the wilds, but we were blessed with superior intelligence. We crafted tools that allowed us to forage faster, hunt more efficiently, and eventually positioning us at the apex of the food chain as empires were moulded from these very same tools.

Our ingenuity opened up a realm of possibilities, where once it took an entire village to maintain a field of crops, it could…

Photo credits to http://willcoxathletics.com/

As of version 25 of the Design Support Library, the Bottom Navigation View(BNV) is a native component in the Android Framework. There is no need for me to include a foreword to explain a year old component, and this write-up is not so much a guide on how to implement it than it is a discussion (a bit of a rant as well). A discussion that involves both technical and design knowledge. So, let’s get cracking shall we?

Material Design Guidelines

This is the primary reason why I was driven to write this article, well, this and my boss, because I believe we…

As part of a presumed few who have just only finished Final Fantasy XV post patch 1.08 , I wish to offer my condolences to my predecessors. My brain is unable to wrap around the idea that the version of FF I have just completed over the span of 40 or so odd hours was supposed to be an improved version over the launch version. What improvement?

But sweet baby Jesus, post Chapter 8? A PTSD trigger to Final Hallway XIII.

Now, to make things clear, I do not hate the game. As a matter a fact, I adored it…

Jason Low

https://twitter.com/jasonlowdh Full-time Android developer. I write about anything Android/software development, tech, and life’s musings.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store