I’m Niki. Here I write about programming and UI design Subscribe

I consult companies on all things Clojure: web, backend, Datomic, DataScript, performance, etc. Get in touch: niki@tonsky.me

I also create open-source stuff: Fira Code, DataScript, Clojure Sublimed, Humble UI. Support it on Patreon or Github


Where Should Visual Programming Go?7/18

Clojure macros continue to surprise me7/15

Local, first, forever6/24

Going to the cinema is a data visualization problem5/14

Humble Chronicles: Shape of the Component4/30

Humble Chronicles: The Inescapable Objects4/30

Hardest Problem in Computer Science: Centering Things4/16

Daylight Saving Time is a perfect test for UI designer3/31

JavaScript Bloat in 20242/22

New Library: clj-reload2/17

In Loving Memory of Square Checkbox1/28


Humble Chronicles: Managing State with VDOM12/21

New Library: Simple Router10/21

The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 (Still No Excuses!)10/2

A case for ClojureScript 2.06/26

Humble Chronicles: Managing State with Signals5/18

Humble Chronicles: State Management4/29

Adventures in REPL implementation3/9


GMTK Game Jam 2022: Dice Out7/26

Ideas for Clojure Network Eval API5/13

Ideas for DataScript 24/13

Forbidden West and the Art of Editing3/28

Humble Chronicles: Developer Experience2/22

Humble Chronicles: The Layout2/21

Humble Chronicles: Decomposition2/17


Sublime ❤︎ Clojure12/13

Python as a build tool9/23

Thoughts on Clojure UI framework9/8

Zig, Skia, Clojure, Geometry and the Japanese TV Show: ICFP Contest 20217/12

Building an ultimate writing machine from Sublime Text4/6

Font size is useless; let’s fix it3/29

Emoji under the hood3/24

Phil Libin: Find a new way to ski3/9

Macs and 4K 120Hz displays compatibility list2/24


Skija: Graphics for JVM11/14

People expect technology to suck because it actually sucks9/25

The most important feature of Sublime Text9/18

Cognitect, please stop adding alpha to your namespaces7/31

Time to upgrade your monitor6/17

Computers as I used to love them6/15

Cleaning up form UI3/31

Grumpy chronicles: The question of utils2/21

Performance first1/27

SwiftUI defaults considered harmful1/20


Good times create weak men12/30

Grumpy chronicles: Pedestal and routing6/13

Grumpy chronicles: deps and uberdeps6/3

How NOT to hire a software engineer3/11

Redesigning Github repository page2/28


It is fast or it is wrong12/29

Better Clojure formatting12/5

You need neither PWA nor AMP to make your website load fast11/21

Solve the problem at hand11/14

Medium is a poor choice for blogging11/13

Apple Design Team vs the World11/5

Address the root cause10/24

Software disenchantment9/17

Designing good DSL7/16

Library focus7/11

Speed is a feature4/4

JavaScript v. backward compatibility3/12

Hiccup, Macros, API design, and magic1/31

Cursor keys belong at the center of your keyboard1/22


My web app died from performance bankruptcy11/5

You don’t want many options9/17

Readable Clojure5/24


Blind Spot in Dependency Management7/1

The Blessing of Interactive Development4/11


The Web After Tomorrow6/23

A shallow dive into DataScript internals2/23


Couple of DataScript resources12/18

Streams: Mail 3.0 concept10/27

Another powered-by-DataScript example10/6

Chatting cats use DataScript for fun9/18

Irrelevant Things8/12

Reinventing Git interface6/17

Unofficial guide to Datomic internals5/6

Datomic as a Protocol4/29

Decomposing web app development4/24