Modern CSV version 2 (moderncsv.com)

324 points by evanem ↗ HN
Hi, I'm Evan and I developed Modern CSV. Last year, the beta version of version 2 was posted here on Hacker News. As a follow-up, I'm letting you guys know that the beta period is over and Modern CSV 2 is now available.

Modern CSV is a tabular file editor/viewer for Windows, Mac, and Linux. I developed it out of frustration with how spreadsheet programs handle CSV files. Plain text editors, on the other job, do a poor job of handling columns. With Modern CSV, I attempt to combine the best of both worlds.

With version 2, you can expect to see an improved UI/UX, better performance, more useful features, updated documentation, and for Mac users, native Apple Silicon support.

If you haven't tried it yet, give it a shot and let me know what you think!

159 comments

[ 4.9 ms ] story [ 56.1 ms ] thread
(comment deleted)
This is a great tool. I’ve found it to be a great way to open large csv files that crash most gui programs. It’s now my favorite way to open csvs outside of the terminal.
I'll give this a shot.

Heres a link to a big CSV if anyone else looking for one to test: https://github.com/datablist/sample-csv-files/raw/main/files...

I've used the modern csv freeware to open 3Gb+ size CSVs and it does wonderfully well. I might just buy a license now. lol
This is good to hear, I usually use VI to open anything > 2 GB. A modern UI that doesn’t hang or crash on those files would be nice.
It really is good and you can actually have multiple large files loaded into it. Not sure how it manages that but very very good.

Just to give you some info, I just opened a csv that's 3.5 GB and has about 1.6 million rows. It took about 30-40 seconds to load nad it's only using 215 MB of ram. I have managed to crash it a few times but I think it's understandable considering the huge amount of data it's dealing with.

You should add that "Modern CSV is a tabular file editor/viewer for Windows, Mac, and Linux" line to the announcement page on https://www.moderncsv.com/modern-csv-2-is-now-available/ - for this kind of post it's always best to assume that people landing on the page don't know what the software is yet.

(It's easy to assume people will click the link from that page to https://www.moderncsv.com/ in order to find out more, but I'm not sure that's always a safe assumption!)

To expand upon this... the name is a problem.

"How can one make a _modern_ version of the CSV file format, let alone a second?"

Something playing on CSV could work - CSVlad or CSViper or CSVi
CSVi is quite clever. It immediately conjures the idea that its an editor for CSVs.

I assumed from the HN headline that Modern CSV version 2 was an iteration on some new CSV specification.

Spoiler: it's Parquet.
Parquet is great but I'd argue ndjson[1] is closer to "modern" CSV. That is, people who like to describe things as "modern" and "elegant" are likely to want JSON everywhere ;-)

[1]: Newline-delimited JSON, http://ndjson.org/

It is clever but I can imagine the comments the OP would've gotten if posting "CSVi" and it didn't use vi-like keyboard shortcuts!
CSVi is cute and clever in exactly the way you don't want to be. It loses the entire audience of people who are Excel jockeys working with CSV files and maybe frustrated with the experience. Software engineers and system admins know what vi is. The rest of the world doesn't.
The worse is the people who do know what vi is, and assume that it's a vi plugin or worse, an editor using vi bindings, and ignore it.
You know that was my first though as well (new CSV version), but then I thought that a new version wouldn't make sense since (1) there is already a specification (the RFC), and (2) those who don't care about the current RFC won't care about a new spec, either.

CSV is one of those things that are everywhere because it is “obvious”. Then we have to deal with 100 interpretations of “obvious” decades later, since not enough people care about standardization.

i agree with the nibling comment that this name works precisely because it provokes curiosity about its relevance.

i can't be the only dev who saw this headline and wondered whether some entity was pushing for a csv standardization (e.g. guarantees about encoding, escaping, etc.)

No no no, not CSVi, but CSVmacs!!! ;)
The name only refers to the app's features and appearance. Well before I started development, I was looking for a CSV editor for my own use and everything I tried had a 90s look and feel. I figured just because the format is ancient doesn't mean the applications for it should be.
I think it’s a great name. Keep it. Even if it confuses some people at first, it’s the sort of confusion which will inspire many people — especially those who deal with text files all day and get pedantic about this stuff — to satisfy their incredulity and thus be exposed to your program.

This is perfect for a tool which most people, including those who would derive the most benefit from it, won’t even hypothesise the existence of.

>it’s the sort of confusion which will inspire many people

...to skip it, because while they could use a CSV file editor, they don't care to read about yet another "modern CSV" format.

Confusion can only inspire if potential users pass from hearing about this, to the next level (of checking what it is about).

I, for one, almost didn't click the HN submission because of this reason.

This type of marketing by deception is absolute anathema to me.

People will "dig deeper" because you tricked then into thinking what you've made of something else, something that person knows they want. Bleurgh.

Yes, that's consistent with modern marketing: make people get your product even if they don't want it and/or don't need it. But, really, are you so desperate. You might save a 1000 hours by making it clear what the subject is; choosing to waste others time [which I'm not at all claiming the OP has done] is contemptible.

Definitely not my intent.
And it's obvious that it wasn't. Don't apologise. Ignore the critics. Any real potential customer will be far too distracted by the excitement of discovering a new thing which might make their life easier; they're not going to be lingering on the moment of cognitive dissonance. Anyone who does was never going to be your customer anyway.
> it’s the sort of confusion which will inspire many people — especially those who deal with text files all day and get pedantic about this stuff — to satisfy their incredulity and thus be exposed to your program.

Confusion doesn't inspire, it irritates. And to pedantic people, the satisfaction comes from being rightfully irritated.

You're basically advocating in defense of misleading/false advertising.

>The name only refers to the app's features and appearance

Perhaps, but it's very easy to confuse with it being about a modern version of the CSV standard.

In fact that would be probably the default interpretation.

Yeah, that is the first thing I thought.

Modern CSV Editor will probably be a much better name.

Yeah, and perhaps sticking the word together: ModernCSV Editor
CSVEdit? Hopefully not sued by reddit!
I don’t really see the problem. Of course, CSV is more of a vague description of a family of pseudo-standards, rather than an actual standard. But Modern CSV seems like a fine name for an actual standard that takes inspiration from them.
That's exactly the problem.

This isn't about a name "for an actual standard that takes inspiration from them" but for a CSV editing software.

That sort of thing usually breeds curiosity and leads someone to dig in deeper about the product though.
Yeah, the HN title lead me to believe this would be version to of a modern cab specification.

A bit surprised to see that a specification had improved UI before it dawned on me that it’s a CSV reading.

Haha, I had the same thought "Oh wow, I wonder what sorts of modern data storage techniques they managed to backport into simple CSV" And then.... disappoint. At least until I check out the software. It still sounds like the same column functions I get from notepad++ or VS:C
.... one huge thing that I'm assuming theres a fix for. How do i enable light mode? This is insane on the eyes

Edit: I found it under 'set theme'

I REALLY recommend doing light mode as the default, not dark mode. I imagine like 1% of people would actually want to look at big data as white text on black.

Screenshot 2 shows an option to change the theme
Really the default should be "match system". Both Mac and Windows (at the very least) have this baked into the DE at this point.
Spockula theme, like Dracula but with green Vulcan blood highlights.
Just wanted to say I haven't used your product yet, but there are a couple things I really like about your site that led me to download it:

1. The first question I had was "How is this better than Excel?" The Google result for your site directly pulls up this very informative blog post, https://www.moderncsv.com/why-excel-sucks-and-modern-csv-is-... . Note my 2 cents is that I would more prominently link this, or at least have a more prominent section, from your home page.

2. Simple AF pricing. So rare these days. Kudos!

Yeah, Excel's data munging is a massive problem for a lot of CSV stuff.
Thanks for linking that post. I would summarize this tool more as a log viewer and editor, not necessarily a CSV editor. I mean, this: "What if you’re running a script that writes to a CSV file and you want to see it updated?" I have never experienced in my life, and I had my fair share of CSV munging...
I would use that feature. We do data processing, and for testing I developed a version that runs locally on CSV files. It can take a few minutes to work through a large file, but it's stream processing so it starts writing almost immediately. Being able to load that output sooner than once it's done like Excel provides would be a nice improvement.
Love the idea of this. Is there a feature to support views or linked records from other CSV files?

Basically, my team is curious if there's a smaller, lighter, local-alternative to Airtable, which we can collaborate on with Git. It's a big ask and maybe not on your roadmap, but something that is on our minds.

Have you tried the trick where you put CSV into SQLite?

I do that. Many, maybe linked, CSVs. Load all into SQLIte, query, filter, sort, etc.

In the repos to process we have only scripts to load and filter. The SQLite things are short lived.

Also, memory only SQLite FTW!

Duckdb does this straight from csv. You can treat them pretty much just like un-indexed tables, including queries, joins and output back to csv or parquet. its

Really nice.

Git based database? Sounds super interesting. Are you guys actively looking for something or is it a nice to have?
More like a git-based log than database. We use it for requests and questions that come up on our slack. We figured out how to extract threads from slack, transform them into CSV files and then load them into Airtable.

Airtable has a great UI but the data becomes isolated from our ETL script and it means we have to re-download and export to CSV to use in other contexts.

It'd be great if we could load a CSV into a desktop editor, and then have it store certain views/linked records to other CSV files in a local "db.json" file.

If you want a proper relational database, sqlite would suit better. There are GUI tools to work with sqlite database files and sqlite has csv import and export. But that won't help much if you already have a large CSV you just need to edit a few rows on.

As for versioning sqlite data, just don't ever update or delete any rows but instead only ever insert the updates as a new row. Potentially you could add a 'deleted' boolean and 'inserted' date columns to the tables you want to version. That way you can use '... and deleted = false' to filter out old data and you also know when updates occurred.

The problem with SQLite is that you have binary blobs and you don't have useful text diffs. So you lose a lot easy history reviewing tools based on git and also easy merge/pull reviews.

The closest to a best of both worlds is to use something like JSON to store the data in git and then a tool like Datasette to build an SQLite-powered view on top of that repo.

Many moons and a few jobs ago, I rolled an in-house Wiki in python, that was basically a very thin web UI over mercurial. Each page was a checked-in plain text file (I think some sort of markdown flavor, but this was circa 2010, a totally different era!), each edit was a revision/commit. Things like article history just shelled out to mercurial. "Querying" was down via filesystem operations. Rolled the whole thing in a day and a half or so - less than I'd already spent trying to get a MediaWiki instance stood up!
Grist was one of the first tools we looked at but it wasn't the desktop-first app my team was hoping for. Self-hosting a service felt like a little too much upkeep, on top of all the other systems we own. I recall the data was also not git diff-able.
That has not been on my roadmap, but I'll think about it. It sounds like it may have to be a separate product, not that that's a bad thing.
How does it handle dates?
It can convert date and time formats. It can also write down the current date/time in whatever format you want.
I share the frustration! I have to open lots of small and large CSV files daily, with multiple encodings. Usually I'm juggling between Excel, Numbers, and Sublime text editor - depending on which one would open that file faster.

Naturally, I installed Modern CSV seconds after seeing this post.

I'm on MacBook M2, using trackpad 1) the vertical scroll is slow and un-mac-like, unnatural; and 2) horizontal scroll basically doesn't work, it scrolls a column or a half on a full swipe, but it does improve somewhat when there's less content in the cells.

I admire your work, please keep on going, there's a huge need!

You're right, Mac trackpad handling is something I need to address. It's on my to-do list.
Looks like it's scrolling in general, not just trackpad. It appears to limit the maximum scroll speed when I'm using a mouse. I take it this is because the app is programmed using some kind of non-native controls?
I noticed on Windows that if I have the window in focus and scroll, each notch of my scroll wheel scrolls 4 rows. However, if I have another window in focus and hover over the Modern CSV window and scroll it will scroll ~90 rows (not always the same for some reason). The max scroll speed is the same in both scenarios, which I tested using a free-spinning scroll wheel. After some more testing it seems a lot of programs handling scrolling differently between these two scenarios, but it is much more obvious in Modern CSV because a single notch scrolling 90 lines is quite a lot.

I would like to be able to have some kind of scroll options available, choosing between smooth-scrolling or scroll by row/column would be great. Removing the scroll speed limit would be good too.

Looks interesting. Also worth checking out (which I use) is Visidata, similar to this but TUI.
If I buy a personal license can I install it multiple times in different computers? Or do I need to transfer my license from computer to computer?
Yes, you can use it on as many machines as you want and there's no limitation on platforms either.
What UI framework are you using? It kind of reminds me of libgdx + vis-ui.
Qt 6 with C++.
Ah makes sense. It looks nice! I really have been thinking about learning QT or wxWidgets for a future commercial project.
Judging by screenshots, it seems that there are things that can be improved in UI design, for example, in "Solarized Dark Theme", the contrast in selected cell is so low (gray on purple) that the text is barely readable. To be honest, I don't like the colors from any of the themes. All the themes use grey color a lot and have low contrast.

The widgets like inputs or selects also look weird, sometimes they don't have enough padding and content touches the edges, sometimes there is too much padding. In a numeric input there are icrement/decrement buttons, but they are so tiny that I doubt they are usable even with an Apple touchpad. The text in inputs is sometimes aligned to the left and sometimes centered without obvious reasons.

The command search popup is transparent and the background seen behind it makes reading the text harder.

While we're inventing a CSV 2 standard, can we please get rid of the weird quirks like allowing newline literals inside quoted values? It makes parsing about 5 billion times harder because you cannot use the readline() functions available in various languages to parse CSV.

Newlines in values should be explicitly escaped, e.g.

    foo,2.0,bar,this\nis\na\ntest,blah
Is this downloadable via HomeBrew?

    brew install --cask modern-csv
Unfortunately this fails for me:

  curl: (6) Could not resolve host: t6a3m9g6.rocketcdn.me
Haven’t tried ModernCSV. Recently used TAD: https://www.tadviewer.com/ And clickhouse-local
wow, I was still using the 2018 version of TAD and didn't realize they pushed updates in 2022. The 2018 version was still better than other tools I've tried, really happy with all the recent upgrades.
It looks cool.

What are the benefits over converting the CSV to a SQLite DB and using a DB GUI?

ModernCSV is a good tool. However, from the viewpoint of a paying customer, it feels too much like a side/hobby project and that you aren't taking it all that seriously as a business. The v2 beta was announced in May 2022 with indications that the final v2 was just a few weeks/months away, as you announced the beta expiring June 25, 2022. Obviously v2 was not close to ready and paying users had to revert to v1 or to repeatedly request updated betas, each of which expired after a brief period. Your web site was not regularly updated with news or progress reports and the project appeared to be abandoned.

This is all fine for an open source project but once people are paying for a tool, using it daily, and are promised certain updates coming soon, it's not great to have that update delayed by a full year.

https://news.ycombinator.com/item?id=31576554

I agree with your general sentiment, and it's important for businesses to have good communication.

At the same time, the "Premium Personal" price is a one-time payment of $29. My basic chicken sandwich meal at Whataburger was $11 dollars.

Point being, it's obvious to me that this is 1 dude who is developing this, so I'm not going to expect flawless communication for the price of 2.5 Whataburger meals. I'd much prefer to deal with that than have something like a monthly subscription SaaS charge.

That's your opinion, and it's ok, but my employer bought the business version (4.5 whataburgers), and it bought multiple licenses (about 20 or 25 whataburgers, where's the tipping point?), plus I personally spent a lot of time (based on my compensation, likely 50+ whataburgers) vouching for a new vendor and then all the corporate b.s. like establishing purchase orders, creating new budget line items, etc, as well as justifying the purchase to IT dept which believes that Excel handles CSV files just fine.

Doesn't have to be flawless but a full year delay is a little much. I'm not even with that employer anymore.

The real dropped ball isn't the delay, but the communication (or lack there of) of same.
~$1000 USD based on the quoted Whatsburger/USD cross rate.
> At the same time, the "Premium Personal" price is a one-time payment of $29. My basic chicken sandwich meal at Whataburger was $11 dollars.

These coffee/meal prices differ a lot between countries. Similarly, there are huge differences how often people living in different countries can easily afford to eat out or buy a coffee at some café.

Are you saying you are upset that you couldn’t use an unreleased new version, and that you had to resort to using the version you had actually purchased? Or did you purchase V2 before it was released as a sort of pre-purchase?
Our initial purchase was made while v2 was in beta and with a promise of a free upgrade to the final v2, which was expected soon. Except it was never released, until now.
Just to clarify, I did give you version 2 license keys that worked on those beta releases and this version 2 release at no extra charge, as I promised. I also changed the beta releases to not have a time limit and accept license keys instead. The beta releases I provided had nearly the same capability and quality as this one.
There was a gap between the beta expiring and me reaching out and requesting an update, which you supplied. I think the first replacement also expired and we had to make another request but I could be wrong, I'm no longer at that company and have no way to verify. Maybe not.

I am not claiming you ripped us off or that your product is no good. Pretty sure we eventually purchased 4 licenses, because it is a good product. But better communication, taking the whole thing a bit more seriously, would go a long way. You knew what day the betas were expiring, instead of leaving all the customers hanging, you could have proactively sent everyone license keys or a longer-expiring version. You could have posted a quick status update on your web site. As I mentioned in another comment, I vouched for you internally and when asked about it months later (budget reviews, etc) with still just a beta version, I didn't have any answers.

You certainly did the right thing, it sounds like you could've been more responsive though. Learning experience!
That's a fair critique. While the app last year was mostly ready to go (aside from a few features I later decided to add), most of the issues I've had to deal with since have been related to other things (sales form, website, etc.). The license keys I gave you should work on this latest version.
HN: Subscriptions are evil, one time payment is the only way software should be sold

Also HN: Why is the one developper that work on my software when he can because he can't make a living out of my one time 30$ payment doesn't ship all the features and versions I expect in a timely manner

Support contracts start at 500-1000$ a month these days, if you depend on it for your day job maybe invest in your tooling correctly...

- we spent at least 6x of your estimate

- we would have been fine continuing to use a non-expiring v2 beta, but the developer set it up differently (eventually, a non-expiring version was provided)

- we never asked for support, just to not have the software expire without a replacement available

> maybe invest in your tooling correctly...

So your suggestion is that businesses should avoid independent developers altogether? That's a great way to be supportive of the little guy.

Almost seems like HN doesn’t have a single unified opinion on things huh!
I disagree with you there. For organisations that expect support for software over a longer period a recurring support contract is better. Otherwise you can end up supporting their never ending requests for free. Or worse they just choose something else.
You should differ between license fees (right to use the software) and support contract (your support question won't be ignored by the developer).
(comment deleted)
Why does the personal license not have statistics and analysis? Those are useful features currently tied to a business license, but a personal user may not care much for having their license transferable.
In fairness the business pricing isn't really out of reach for an individual (assuming US-based tech worker).

Think it's perfectly fine to tier features and make some stuff gated at a higher price.

Especially when you consider that it's a one time purchase and also it's an editor for a standard that will never change (you won't have to upgrade in a year to support features in the latest version of CSV)

Interesting. Where does it save column size changes, since you can't add that to the absurdly simple CSV “format” (specification)? In metadata? Does it lose this settings if you change the file name behind its back? Or it doesn't try to save such things at all?
Surely all of those settings can be inferred from the file upon opening? Presumably the only settings you actually care about are ones that have predictable consequences for the saved document.
There's a setting to automatically fit the column widths based on the contents and it's turned on by default. You can turn it off and manually change the sizes, but they'll be lost once you close the program. If you change the file name externally, it'll assume the current file has been deleted. You can change the file name within the program with the Rename File command.
Oh God I thought you were writing, "Modern CVS" and I thought: Noooo just let it die!

Good luck on your project!