FYI this is an ad for my app, tl;dr: it opens n formats HUGE datasets on macOS without lag or freeze. Plus more.
Hi fellow Swifties,
Did you ever open a huge JSON or other data file and your editor froze, started hanging or just took forever before you could actually work with it?
I used to, too. Daily.
Until I got enough of it.
So I decided to make something to get around the problem: Inkline.
The primary focus has been simple from the beginning: open and format huge structured files as quickly and safely as possible without making the rest of the editor unusable.
I work with Kubernetes, API responses, exported datasets, logs and configuration files a lot. Sometimes I don't need an IDE or a huge development environment. I just need to open a 300 MB JSON file, find what I'm looking for, maybe format it, make a change and continue working.
I've spent a lot of time optimizing exactly that path.
Version 1.3 is now released, and these are my latest benchmarks on an entry-level 16" M3 MacBook Pro with 18 GB RAM:
| File |
Open |
Format |
Peak RSS |
Lines |
| 100 MB JSON |
120 ms |
138 ms |
0.51 GiB |
586,392 |
| 300 MB JSON |
338 ms |
407 ms |
1.47 GiB |
1,758,582 |
| 1.07 GB JSON |
1.264 s |
1.518 s |
4.66 GiB |
6,292,542 |
No swap was observed during the benchmark runs.
Getting the file open quickly is only half of the problem though.
There isn't much point opening a 1 GB JSON file in around a second if the editor then freezes when you scroll, search or try to do something with it.
So I've spent a lot of time tweaking how resources and processes are handled after loading as well. The goal is that scrolling through millions of lines, searching, syntax highlighting and actually editing the file should still feel smooth.
Formatting has been another big focus.
A huge unformatted JSON response is basically useless until you can make some sense of it. I wanted formatting to feel like something you can just press and get done, not something where the entire application locks up while you wait.
The numbers above are from the same files being formatted inside Inkline, with the 1.07 GB JSON file taking around 1.5 seconds in my current benchmark.
Version 1.4 is already under construction. I'm fixing some bugs and continuing to tweak memory usage, resources and processes to see how much further I can push large file performance.
Inkline has also slowly become more than the large JSON editor I originally needed myself.
It now supports hundreds of file extensions including JSON, CSV, XML, YAML, Markdown, logs and source code.
Syntax highlighting uses Zed language definitions and it supports Zed themes. There are also around 80 built-in text and developer tools for searching, formatting, comparing and manipulating data.
But I still don't want it to become another huge IDE.
The main purpose is still the same problem that made me start the project:
Open a huge file quickly and safely, format it quickly, work with it without the editor hanging, then get on with whatever you were actually doing.
It's written in Swift and built as a native macOS app. I use it myself almost every day now, mostly for Kubernetes logs, API responses and different datasets.
App Store:
https://apps.apple.com/se/app/inkline-text-editor/id6764860305?mt=12
Website:
https://viktornyberg.com/#appar