I downloaded Modern CSV, hopeful that it would be a quick and easy solution. I really wanted to like it! I even paid for it. I made it my default app for opening CSV files. But after a week or so, I gave up in frustration. It has lots and lots of editing functions (like, 50+ editing commands!) but first and foremost it has to work as a viewer, and it doesn't. It has too many design decisions that don't make sense for a viewer.
Take, for example, the most common use case: I want to see what's in a CSV file, and it has a header row, because the vast majority of CSV files have a header row. What are the things I want to know?
1. What columns are present?
2. What do the columns mean?
3. What does the data look like?
Let's see how this goes.I. Headers
The first thing that stands out is that, by default, Modern CSV highlights the headers, but — misleadingly — doesn't freeze them. What's the point of headers if they are not frozen? As soon as I scroll, the answer to #1 is gone. Within the first 10 seconds of using Modern CSV, I find myself hunting for the "Freeze Headers" command.
I right-click on the headers, but it's not among the 25+ items in the context menu. I have to scan through all the pull-down menus, to find the single most commonly needed command: it's buried on the second level of menus, after 27 other menu options. 27! It is also mixed in with a few other similar commands, so I have to think about which one to pick:
Toggle Highlight Header Rows
Toggle Highlight Header Columns
Toggle Freeze Header Rows
Toggle Freeze Header Columns
Toggle Freeze Header Rows and Columns
What are "Header Columns", by the way? In my whole life, I have worked with many, many CSV files and I've never seen header columns. Clicking Toggle Freeze Header Columns doesn't seem to have any visible effect.Ah, now I've found "Toggle Freeze Header Rows." I will need to do this 99% of the time I open a file. Does it have a hotkey? No. I will have to navigate through two levels of menus to find item #27, every time.
II. Hotkeys
I know I won't last long if I have to navigate two levels of menus every time I open a file, so I look for a way to add a hotkey. Unlike every other Mac app, Modern CSV doesn't have a preference menu in the usual place, and Command-Comma doesn't open the preferences.
To add a hotkey, you must edit a CSV file of hotkey definitions, which means learning how the file is organized and the syntax for specifying hotkeys. Deviously, the column with the hotkeys in it is not the one you edit. Editing this column does nothing; you must instead edit the empty column next to it. This is explained in the instructions, but of course you can't see them, because they disappear when you scroll down to find the row you want.
Also, as you scroll down to find the "Toggle Freeze Header Rows" command, the column with the command names occasionally disappears off the left side of the screen because Modern CSV insists on letting you scroll over to column 49 even though there are only 3 columns in the file. Which brings me to...
III. Scrolling
Having solved this, my the next action is to scroll around to look at the data. And here I am stymied again: the scrolling response is maddeningly hard to control, for four reasons.
First, vertical scrolling happens at a constant speed. It doesn't matter how slow or fast you swipe your fingers on the touchpad; there are exactly two speeds: zero, and about 60 rows per second. If you are scrolling down to row 1,000, you must swipe and swipe and swipe continuously, and wait for ages until you get there. The constant speed also means that if you want to adjust the view up or down by one or two rows, it's impossible; the view will jump by 7 or 8 rows no matter how tiny your swiping movement.
Second, scrolling will continue coasting after you stop, for some distance. This distance varies, but it is too far; when I swipe only a small amount, the scrolling continues for about 30 rows. I tried a few tiny swipes, gradually swiping a little more and more, to try to figure out the algorithm; and it appears that the coasting distance stays at zero for the smallest swipes, and then suddenly jumps from zero to about 30 rows. Again, the discontinuity makes it very difficult to control.
Third, horizontal scrolling only moves by whole columns. You get no visual feedback until the view jumps by an entire column, and columns in CSV files can often be quite wide. This makes it very hard to control how much you scroll, and again, hard or impossible to shift your view by just one or two columns.
Fourth, Modern CSV always shows 50 columns, even if your file has fewer. That means there will often be a giant empty space off to the right of your data. And because there is no feedback until the view jumps by an entire column, it's easy to accidentally scroll over and get lost in that empty space.
The first of these problems alone is enough to make me want to quit the app.
IV. Filtering
If the header doesn't make it obvious what's in a column, a good way to understand it is to see what values are present. The Filter feature in Google Sheets and Excel is great for this: you get a dropdown menu in each column that shows you a list of unique values in that column, which you can tick on or off to apply a filter.
Modern CSV doesn't have this feature. "Filter Selected Column" is in the context menu for a column, which is great, but it doesn't work; it's a paid feature. This is basic stuff; you can't explore a 10,000-line CSV file without filters.
In a licensed copy of Modern CSV, "Filter Selected Column" brings up a dialog with ten lines of syntax instructions for me to read, and a blank text field to enter a filter expression. I don't want to have to read syntax instructions to apply a filter. If the window is a normal width, I can't even see all the syntax instructions, because they are cut off and cannot be scrolled into view. Resizing my window won't help; I have to close the dialog, resize my window, and open the dialog again to read the instructions.
The filtering syntax has three different ways to specify a range of numbers (>=20 & <=30, or 20+ & 30-, or 20–30), but if I want to filter for a particular string value that appears in half the rows, I have to retype the string into the box. In Google Sheets or Excel, you just tick a checkbox.
—
The whole app feels like this. Sophisticated operations are possible, but the most basic, common operations don't work properly or are unnecessarily complicated. I was really sad to go back to Excel because it's so heavy and slow, but I went back to Excel.
I know this is a long rant, and no one asked for my advice. But I hope this is helpful information. If I were to advise the author, I would recommend:
Make easy things easy.
Make scrolling work.
Choose good defaults.
Provide filtering in the free version, and make it easy.
That would bring me back to Modern CSV.—
All these things become obvious if you watch someone try to use the app for the first time. Perhaps even better advice would be:
Stop adding features.
Watch someone use the app for the first time, for
a real-life use case with a real-life data file.
Just watch. Do not say anything. Record every
frustration they encounter in the first ten minutes.
Then, with maniacal focus, eliminate every one of
those frustrations and test again and again until
the first-use experience is completely smooth.
I guarantee this will get you more paid users.- A preferences window for settings, keyboard shortcuts, and file extension options
- A Unique Values feature
- A File Metadata pane to easily set up things like header rows
- The command launcher width changes as the window width is changed.
A few were addressed in version 1:
- Persistent storage of settings set via command
- Headers rows frozen by default
Header columns work the same way as header rows, just vertically. I use consistent verbiage for clarity. If they appeared to do nothing for you, the reason is probably that the number of header columns is 0 by default. I haven't seen any confusion about it since adding the File Metadata pane.
There's a Minimum Number of Table Rows/Columns setting that's set to 50 by default. You can set it as low as 1. There's also a Number of Buffer Rows/Columns that will add rows and columns beyond the data. It's set to 2 by default.
I'll take a good look at scrolling on Mac. I haven't seen problems with my setup, so I'll work to reproduce what others are seeing.
This is a huge problem when dealing with European and UK/US CSV formats (or whatever you mat want to call them) for me daily.
Excel only auto opens the format supported by the current locale, so anything else will just not be detected.
1. Open Modern CSV.
2. Open any file.
3. Select any cell.
4. Hit ctrl-c.
Expected: The cell contents would be copied.
Actual: The program becomes completely unresponsive with high CPU usage and must be force-quit.
Happy to help however I can, because so far I really like this product and I want to be using it.
I tried testing it out just now by copying a 5 million row by 14 column selection of random data, ~620MB, and it completely freezes up right after hitting command-c on my 2019 macbook pro 15. Even after waiting minutes, it's still frozen.
- I couldn't figure out how to paste a CSV from clipboard and have it parse the CSV as-is. Instead, it just creates a single column with each line as a row. I think "Split Selected Cells Horizontally" might do it, but that's locked behind the paid version, so I can't verify. Either way, this seems like basic functionality that should be free.
- Selecting seems buggy; if I click down on a cell in row 0 then drag down, it only selects rows 0-2 and then stops. If I select anything below row 0 then drag up or down, it selects everything. I'm on Linux, maybe just a Linux thing? I dunno.
- I'd appreciate a "paste from MySQL table" tool or something; I tend to copy table output from my terminal (i.e. a +----+----+ kind of table), it would be nice to not need to switch the MySQL output to CSV first if I want to paste it in here quickly to futz with it.
- It's very annoying to see tons of options and buttons that I can't use at all in the free version. Please mark those up-front in the UI/command palette as not being available, it's not fun to click something, get a popup, have to dismiss it, then hunt elsewhere for a solution because I don't have access to it. Feels a bit dickish so it makes me want to pay for it less, tbh.
- As others have said, pricing seems fair, but I'm not convinced yet so I'll wait for now.
2. That first bug is known and for reasons I don't recall, is much trickier than one would think. It's still on my to-do list. The thing with dragging and selecting everything sounds like it might be scrolling really fast.
3. I'll consider it. Perhaps a smart paste option where it attempts to determine the nature of the text (e.g. whether it's a database table or what kind of delimiter it uses) and pastes accordingly.
4. I'll give this some thought as well. I'm not sure that disabling the commands is the way to go if the user doesn't know why they're disabled.
5. If you have any more questions, feel free to ask. Also, if you do buy and change your mind, just let me know and I'll issue a refund right away.
[1]: https://flatpak.org/ [2]: https://flathub.org/
This fella has got over the biggest, greatest hurdle of them all - actually getting something out of the door - so should be commended for that. This is not to say that well thought out criticism isn't useful, of course it is, but maybe lead your comment with "Hey, amazing work on getting this far! ...if I may here's a couple of extra suggestions.." rather than "you should name it X / do Y / I didn't like Z".
Just a thought.
I posted about version 2 a year and a half ago and thought I'd do a follow up since I've added a lot of features since then. I just added printing and PDF export capability, a popular request among my user base. I've also added pivot tables, JSON and XML importing and exporting, improved statistics, ASCII Separated Values parsing, aesthetic improvements, and a bunch of little things to improve the user experience.
It's enough to justify a major version upgrade, but I have some lofty plans for version 3 which is in the works. If you have any requests, I'd love to hear them!