Create symbolic links

fman 1.7.3 just came out. It adds a feature that has long been requested: An easy way to create symbolic links. To use it, simply press Shift+F5. You will get the following dialog:

Confirm, and you get a symbolic link in the destination :-)

Small bug fixes

fman 1.7.2 is out, with two small bug fixes:

The units in which fman displays file sizes are B, KB, MB and GB. Each unit is a factor 10^3 larger than the last. In computing however, there are also other units: KiB, MiB etc. These grow in factors of 2^10. fman's mistake was to perform its internal calculations using 2^10 (which is almost but not quite 10^3) but to display the 10^3 units. This is now fixed: fman also uses 10^3 in its calculations.

A second bug was with copy and paste: In some special cases, when you copy-pasted a folder, then its directory structure wasn't correctly preserved. This too is now fixed.

Both of these were kindly pointed out by fman users. Thank you to technopunk42 and Daniel Cervenkov!

Improvements for macOS Catalina

macOS Catalina introduced endless permission dialogs similar to the following:

fman would like access to your folder

Furthermore, when you ask fman to move a file to the Trash, Catalina shows:

fman wants access to control Finder.

The problem was, if you accidentally said no to these dialogs, then it was hard to get them back. This lead to fman not displaying some folder contents, or to files magically "re-appearing" after you deleted them.

To fix this, fman now opens a new documentation page when you are on macOS Catalina or later on first start. Other operating systems are not affected.

fman asking whether to open the documentation for macOS Catalina

(A nicer way to fix this would have been for fman to check "do I have this permission?". Alas, macOS does not give us developers an API for doing that.)

Enjoy!

fman works again on macOS Mojave

fman wouldn't start on macOS Mojave. I just released fman 1.6.9 that fixes this. Because of fman's auto-update mechanism, this caused problems for many people. I'm very sorry for the trouble.

Here's the back story: The latest version of macOS, Catalina, introduced a new requirement called Notarization for app developers. Basically, if you want to publish an application, then you need to send your binaries to Apple for verification before you can give it to your users. Otherwise, anybody who downloads your app gets a very ugly warning "this app needs to be updated by its developer".

To make fman ready for Catalina, I released version 1.6.7 a few days ago. It worked fine on my test systems running macOS Sierra, High Sierra, Mojave and Catalina. Unfortunately, it didn't work for quite a few of fman's users, particularly on Mojave.

The mistake I had made in notarizing fman was that I didn't supply an entitlements file. Here are the gory technical details in case you are a developer who found this page on Google:

fman is a PyQt application. When its users tried to start it on Mojave, the following error occurred. (You can see this by launching your app via the Terminal):

$ /Applications/fman.app/Contents/MacOS/fman

Traceback (most recent call last):
  File "PyInstaller/loader/pyiboot01_bootstrap.py", line 127, in 
  File "", line 971, in _find_and_load
  File "", line 955, in _find_and_load_unlocked
  File "", line 665, in _load_unlocked
  File ".../PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module
  File "ctypes/__init__.py", line 538, in 
  File "ctypes/__init__.py", line 273, in _reset_cache
MemoryError
[13379] Failed to execute script pyiboot01_bootstrap

The fix for this is to supply an entitlements file when code signing your application. Here is the file which fman uses:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<dict>
		<!-- Avoid ctypes MemoryError: -->
		<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
		<true/>
		<!-- Required for loading unsigned .so files from plugins: -->
		<key>com.apple.security.cs.disable-library-validation</key>
		<true/>
	</dict>
</plist>

You save this to a file (say entitlements.plist) and supply it when invoking the codesign command:

codesign ... --entitlements entitlements.plist ...

As you can see in the code comment above, the allow-unsigned-executable-memory is required to fix the MemoryError. In addition to this, fman requires the disable-library-validation entitlement. The reason for this is that fman has a plugin system and plugins may load (unsigned) .so library files. In particular this entitlement fixes the following error, which I encountered:

ImportError: dlopen(.../osxtrash.cpython-36m-darwin.so, 2): no suitable
image found.

Did find: .../osxtrash.cpython-36m-darwin.so:

code signature in .../osxtrash.cpython-36m-darwin.so not valid for use in
process using Library Validation: mapped file has no cdhash, completely
unsigned? Code has to be at least ad-hoc signed.

Hopefully this helps someone else. If you are a PyQt developer, you may be interested in fman's build system. It hugely simplifies the deployment and packaging of PyQt apps.

Improved support for Google Drive File Stream

fman 1.6.8 just came out. It fixes fman's support for Google Drive File Stream on Windows. (This is essentially the desktop client for Google Drive, which lets you treat files in the cloud as if they were local.) For more information, please see the Changelog.

Notarization for macOS Catalina

macOS Catalina was released a while ago. This added extra requirements for application developers when it comes to code signing. (If, as an app developer, you don't code sign – or more precisely notarize – your app, then your users get ugly warnings when trying to open your app). I just released fman 1.6.7 that is notarized on macOS and should thus hopefully avoid the ugly warnings. Some users have already reported that this works for them, but if it doesn't work for you, please let me know here.

This was another (to me) surprising case of how much work goes into simply keeping a paid desktop application running. Code signing is also a hassle on Windows, where I had to renew fman's certificate this year. And then are other things. In a previous post, I explained how I had to basically re-write fman's payment implementation from scratch due to new regulations in Europe. These are all things that add no additional value, yet they require a significant amount of work on my part. I must admit, this is pretty annoying.

Anyways, enjoy the new version of fman!

How fman works as a business

I spent the past two days recording a video about how exactly fman works as a business. The video shows what I learned from working on fman for more than 3,000 hours, exactly how fman makes money, things I'd do again and mistakes I would not repeat. If you want to see me walk you through the behind-the-scenes of fman as a business, then I recommend you check it out!

Improved Theme support

fman has limited support for custom Themes. For instance, this lets you change the font size.

A new fman user asked to be able to change the font color in the location bar (=the address bar). This was previously not possible.

I just released fman 1.6.6 that improves this. Now, you can for instance write the following in Theme.css:

.locationbar {
    color: red;
}

This makes the text in the location bar red:

Enjoy!

SCA experiences of a small business

Sometimes, the work that goes into fman is not visible to fman's users at all. August has been a good example of this.

In Europe, we have a new payment regulation coming up called "Strong Customer Authentication". It's a scheme devised by EU bureaucrats to combat online fraud. It requires companies that take online payments to build additional authentication into their checkout process. Essentially, where you may have previously been able to just enter your credit card details, you may now also be required to authorize the payment in an app on your phone, or receive and provide an SMS TAN code.

After the EU data protection directive (GDPR) from last year, this is another case where I, as a small business owner, have to invest huge efforts, for benefits I do not perceive. Data protection and safer online payments sound good in theory; But in practice I have never had any problems, in 15 years of being online, with either of these topics. Like the forced and abundant warnings "this site uses cookies" that EU visitors to web sites get, I only see added complexity - and in my case very real financial cost to small businesses. But I guess after making me spend a week on GDPR issues last year, the EU has no qualms about making me spend a week on payment flows this year.

fman's web site uses Stripe and PayPal to process online payments. Fortunately, no work seems to be required to make PayPal's payment flows SCA-compatible. Unfortunately, for Stripe it's a different story.

Stripe offers a library called Checkout for letting you open a popup where customers can enter their credit card details. fman's web site uses the version of Checkout that was current at the time of initial implementation. Unfortunately, this version of Checkout is not SCA-compatible. Stripe essentially require me to rewrite all of fman's payment flows. While I'm generally a big fan of Stripe, I feel let down by this. I think they could have made it easier.

Because rewriting fman's Stripe integration from scratch did not seem like a pleasant task, I looked at alternatives. Fastspring seemed like a good candidate. Whereas with Stripe you need to handle everything from taxes to handling subscription renewals, cancellations, etc. yourself, Fastspring acts as a reseller that simply does all these things for you. Unfortunately, after a lot of time spent learning about Fastspring's (generally very powerful) APIs, it turned out that it does not support fman's particular payment model. (See fman's purchase page for details.)

So I dug my heels in and rewrote fman's Stripe-based payment flow. It does exactly the same thing as before. Just now, it's "SCA-ready".

I do also want to report that I encountered a hurdle in doing this, and was actually put in touch with Stripe's product manager for Checkout, who then saw to it that they implemented a change I needed. It only took them two weeks. That is pretty cool about working with such a dynamic company.

Still, for future projects, if at all possible I would start out with a reseller such as Payhip or Fastspring. It's just so much easier when you don't have to worry about issuing invoices, charging appropriate taxes, PayPal's 99 problems, or managing subscriptions.

I wonder how I'll be spending my EU-imposed "holiday" week next year ;-)

fman 1.6.5

I'm happy to report that I just released fman 1.6.5. It fixes three rare but important bugs:

  • You can now use gvim as the F4 editor on Windows.
  • Moving nested folders across devices (eg. from your local HDD to a network drive) required multiple invocations of the Move command (F6). This is now fixed.
  • fman showed Column 'Modified' raised error when some of your files had invalid time stamps on Windows. This too is now fixed.

fman user @alphaniner greatly helped with fixing the above problems. Thank you!

fman 1.6.3 fixes a small bug

fman 1.6.3 just came out. It fixes a bug with moving folders across devices, for instance from your local disk to a network drive. Sorry for the trouble, and enjoy the new version!

fman on Fedora 30

Version 30 is the recent, latest release of the Fedora Linux distribution. I released fman 1.6.1 today to add support for it. Unfortunately, this broke fman on CentOS. Fortunately, a user found a way to get fman to work on Fedora 30 while keeping its compatibility with other Fedora / CentOS versions: To install fman on Fedora 30, please execute the following command:

dnf install compat-openssl10.x86_64

I've updated the instructions on the Download page. Enjoy!

fman 1.5.9 fixes a critical issue

A user on Linux reported that fman sometimes loses data when moving files to a read-only mounted SMB share. I could fix this issue within 24 hours of being able to reproduce it. It appears as if this issue would not affect many people, but I cannot rule out the possibility that it also affects other operating systems. If you can, I recommend that you update fman as soon as possible. Sorry for the trouble.

PayPal vs Stripe for small businesses in 2019

This post made the #1 spot on Hacker News and was read by more than 10,000 people within 24 hours. If you're interested, join the discussion on HN.

PayPal and Stripe are online payment processors. As a business owner, you may ask yourself which of the two to use. This post shares my experiences.

I'm developing a software product called fman. It's a file manager for Windows, Mac and Linux. It's free to try, but people who use it regularly must buy a license.

Initially, payments for fman were handled exclusively via Stripe. This let customers pay by credit card. But I got many requests that people also wanted to use PayPal. So I added it as a second option. It was a horrible experience: PayPal's APIs are extremely difficult to use. Supposedly, Braintree make it possible to integrate PayPal much more easily.

Despite these difficulties, it turns out that offering PayPal was a good decision: Even though Stripe is the default option, two thirds of fman purchases are now made with PayPal. From feedback, I know that some people simply can't pay by credit card. Thus, offering PayPal significantly increases fman's (small) revenue.

So why is this? There are are several reasons. As mentioned above, some people simply don't have a credit card. But another, I believe more important reason is that people like that PayPal acts as a "safe" intermediary. It has its advantages: When you use PayPal to pay for a subscription service, you can cancel that subscription right in PayPal's admin interface. This is not possible when you directly use your credit card on a site.

The above points hold because fman is mostly bought by individuals. For your business, it will depend: Are you targeting consumers? Then offering PayPal is probably a good idea. Otherwise, I would avoid the pain and simply use Stripe.

fman's development journey

fman is based on the Qt GUI framework. The company behind Qt invited me to give a webinar about how I created fman. Watch it here to learn what goes into creating a cross-platform desktop app:

The video explains why I decided to open source fman's build system: Months of fman's development went into "boring" tasks such as creating installers for the various operating systems. I strongly feel that we should not have to waste time on such things in 2019. The above link shares fman's solutions in the hope that it will spare other developers much of the effort.

Year in Review 2018

Hi! In case you haven't been here before: fman is a cross-platform file manager. You use it as an alternative to Explorer on Windows, or Finder on Mac. It lets you browse directories, copy and move files, etc. All this much more efficiently than the "normal" file managers provided by the operating system. In case you know Sublime Text and Total Commander: fman essentially combines the best ideas of the two. Here is what it looks like:

fman has been in development since 2016, when I felt that we deserve a better file manager. If you want an overview of the journey up to the start of 2018, see the Year 2017 in Review post.

One year ago, fman had had some respectable successes. It was selling its first licenses. People were already loving it. But fman was also still missing some very basic features:

  • fman didn't have a context menu.
  • It was not possible to cancel Copy/Move operations.
  • Performance was pretty terrible.

All these things were fixed or at least greatly improved in the past twelve months. After an interesting discussion, fman received a scriptable but non-native context menu. It now also shows cancellable progress dialogs for file operations. Finally, performance was hugely improved as well: A year ago, it took fman an unacceptable 18 seconds to display a folder with 5,000 files. This is now down to under a second. This 20x speedup required a lot of work, and it's still not as fast as it should be. But it's a start.

fman's business metrics have improved as well: At the end of 2017, fman was selling around $350 per month in licenses. Nowadays, roughly one license is sold per day, for a monthly revenue of ~ $500. Retention – that is, the percentage of people who use fman a second time within the first week of initially downloading it – increased from 20% to 30%. If we were talking about bigger numbers, this increase would translate almost directly to more license sales, and is thus highly significant.

Nevertheless, both of the above improvements fall short of the goals I had set for myself in the post about 2017: I had wanted to double revenue to $700 and increase retention to 40%. While it's humbling that every day there is someone on this world who buys fman, the number $500 is not a sign of a great business.

Another goal for 2018 was to open source fman's build system. This was born out of the frustration that months of fman's development time went into tasks completely irrelevant to its mission: Taking fman's Python source code and turning it into a standalone executable, say an .exe on Windows, is already non-trivial. Then creating an installer on each operating system: fmanSetup.exe on Windows, fman.dmg on Mac, etc. And finally, implementing automatic updates. These tasks, however mundane they are, require learning and integrating a lot of different technologies. Now that fman's build system is on GitHub, other developers will hopefully not have to waste the same months as I.

So what's next? Here's what's most important right now in my eyes:

  • Custom Theme Support because it's the most-requested feature.
  • An API that lets fman plugins implement custom columns. This achieves several much-requested features: 1, 2, 3.
  • Further improvements to fman's performance and stability.

Have a great 2019!

Qt World Summit Berlin 2018

fman uses a technology called Qt to display its (cross-platform) GUI. You can see it mentioned throughout this blog, and in a guest post on the official Qt blog, where I explain what went into creating fman.

As an avid user of Qt, I attended the Qt World Summit in Berlin two weeks ago. I had a chance to talk with fellow Qt users, and also had the pleasure of meeting some Qt staff in person for the first time. They're exceptionally nice people.

What was really cool was that several people at the conference already knew fman. Most striking was this guy: We only realised after hanging out at the conference for two days that he is an fman user:

Qt World Summit Berlin 2018 - Michael Herrmann and an fman user

Cheers Patrick ;-)

fman paid my rent

November was an exceptionally good month for fman in terms of revenue: After payment provider fees (but before tax), it brought in € 742. That is exactly € 15 more than my rent. My living expenses are somewhere around € 2,000 so I still lost € 1,300 working on fman. But hey, it is a start!

The reason November was so good was mainly that a blog post I wrote went to the top of r/programming. This attracted many visitors from fman's core target audience: programmers. If you bought fman after reading this post, then thank you for your support!

On average, one person buys fman per day now. That brings in around € 540 per month. Let's see what December brings!

Fundamentalism

Yesterday, a very interesting post was discussed on Hacker News. It was by David Power, the co-founder of a new email app. He bemoaned that whenever he mentions his app in Linux circles on Reddit, he is immediately (and solely) criticised for not making it open source. He calls this the "fundamentalist FOSS mentality".

As another author of a proprietary app, I have the exact same experience. When I mention fman on Reddit or Hacker News, very often a FOSS fundamentalist jumps in and says "this is shit because it's not open source". This happens so frequently that I even prepared a canned response for such cases.

The behaviour of these FOSS fundamentalists is not just aggressive. It's outright harmful for their own ecosystem. It's no surprise that the apps available on Linux are generally of a worse quality than those on Windows and Mac, if attempts to offer something new and better are immediately shot down.

I talked to some people on the thread who called themselves "fundamentalist". One of them had even bought an fman license. They argued that making the world embrace open source was a huge battle. And that we have to keep fighting.

But times have changed. The world is not just using, but perpetuating open source. Companies like Google, Facebook and others dedicate significant resources to it. It's like with democracy: We must ensure it keeps going, every day. But we no longer have to go around with torches killing people to fight for it.

And going around with torches is what the FOSS fundamentalists are doing. I don't like JavaScript. That doesn't mean I jump in to write "JavaScript is horrible!" in every forum I see it mentioned. And besides, it is in my interest for other people to work on it. Because that makes it a better option for me in the future.

That's my main gripe with this kind of bullying. It's fair if someone doesn't want to use a product. But why spend energy attacking the creator? Especially if that creator is not a powerful corporation but an independent developer like me, with literally zero chance of uprooting the ecosystem.

So, yes please let us work together to promote free software. I do this by maintaining several open source libraries. But let us also allow other options.

fman 1.4.4 and Windows Defender

Update

Microsoft have fixed the erroneous detection. If you still encounter problems, please follow these steps to clear the cache and obtain the latest malware definitions:

  1. Open a command prompt as Administrator and navigate to c:\Program Files\Windows Defender.
  2. Run MpCmdRun.exe -removedefinitions -dynamicsignatures.

Alternatively, the latest definitions are available for download here.

Unfortunately, Windows Defender thinks fman 1.4.4, which came out two days ago, is malware. Specifically, it claims fman is infected by Trojan:Win32/Tiggre!plock. The same happens for Microsoft Security Essentials on earlier versions of Windows.

Of course, fman is not a virus. I have given ample justification for this in an earlier blog post. The short summary is that fman is not an elaborate scheme to get malware onto your computer. It's a mission to create the world's best file manager.

Just to be safe I'm not inadvertently spreading viruses, I updated Microsoft Security Essentials to the latest version and ran a full check of my system. The only thing it "found" was fman itself:

I've submitted fman as a false positive to Microsoft. Hopefully, they will be able to simply update their virus definitions. In the meantime, to get fman working again, you will have to tell Windows Defender (/MS Security Essentials) that it's not a threat.

As for the "cause" of the problem, it seems to be that fman now uses a newer version of PyInstaller, the library that turns fman's source code into a standalone executable. Other developers are having the same problem. (For future reference: fman's PyInstaller version was updated from 3.3 to 3.4.)

I'm sorry if this affects you. It's very frustrating for me as well.

Compare directories in fman

fman 1.4.4 just came out. It adds a new command called Compare Directories. You can launch it as usual from the Command Palette:

  • Compare directories

When you do, it selects those files in the left pane which are not present on the right, and vice versa. It then shows a dialog with the results:

Compare directories in fman

An important point is that the current implementation only checks file names. Their contents, size or modified date are not compared. To make this clear, fman displays the following dialog if the directories are "equal":

Compare two equal directories in fman

Total Commander has a similar feature. Whenever I used it, I never understood exactly what it does. What does it compare? Why does it select the files it does? It's always been a mystery to me. I hope that the above two dialogs will avoid this ambiguity in fman.

fman is out on CentOS

fman 1.4.2 just came out. The main new feature is that it is now available on CentOS:

This had been requested by a user. It is the fourth Linux distribution supported by fman – after Ubuntu, Arch and Fedora.

Technically, CentOS is very similar to Fedora, so should have been easy to support. However, there were difficulties with its package management tools yum and rpm.

The first was that yum cannot follow double dots .. in repository paths. When you install fman on Linux, your package manager (apt, pacman, ...) first downloads a database file that contains the download URLs for all available versions. On Fedora, these URLs used to contain a relative path with double dots ... CentOS currently cannot handle such URLs. I believe the reason for this is that it still uses libcurl 7.29.0, and handling for .. was only added in version 7.32.0. To work around this limitation, fman's RPM repository now uses absolute URLs.

Code signing was the second problem: The standard on Linux is to use subkeys. These are cryptographic keys that are bound to a master key pair. Their advantage is that they can be revoked independently of their parent. Unfortunately, CentOS does not seem to support subkeys for code signing. When you tried to install fman, this made the code signature verification fail. The solution to this was to disable this check for the RPM repository. fman's installation files are transmitted over SSL anyways, and thus (reasonably) protected against tampering.

With these changes, which won't really affect you, you now get to enjoy fman on CentOS. Have fun!

fman 1.4.0: Full-screen mode

A user recently pointed out that the standard shortcut Cmd+Ctrl+F does not work to switch fman to full-screen mode on Mac. To fix this, fman 1.4.0 was just released. You can now use the above shortcut on Mac, or the Command Palette on the other OSs to switch fman to full-screen :-)

  • Toggle fullscreen

Create multiple recursive directories

fman 1.3.6 is out! It implements the tenth most requested feature: You can now create multiple recursive directories in the folder creation dialog (F7).

A simple, but useful feature. Enjoy :-)

fman is out on Fedora Linux!

After Ubuntu and Arch Linux, fman is now available on another Linux distribution: Fedora!

fman screenshot on Fedora Linux

As on the other distributions, fman's integration is completely seamless. You obtain it as a native .rpm package. It supports automatic updates through Fedora's built-in package manager. And all of fman's features are tested to work.

Users have asked for fman on Fedora since at least March 2017. It's great it's finally here. You can get it from the Download page. Enjoy!

fman and antivirus

As a desktop application, fman is often flagged as malware by antivirus tools such as Avast, Symantec, Avira, SentinelOne, AVG, and Cisco Sourcefire / AMP.

Being fman's author, I obviously claim that fman is not malware. I have zero interest in infecting your computer with viruses. My goal is to create the world's best file manager. When I'm approached by companies who want me to turn your computer into a botnet, I tell them to go fuck themselves:

Of course, you should not take my word for it. Read this blog to judge for yourself what my intentions are. If you are left with any doubt of my or fman's integrity, you should not install it.

To be sure I'm not infected myself and am thus spreading malware unintentionally, I used AVG to perform a "deep scan" of the machine that builds fman. The only thing it "found" was fman itself:

So either I'm lying, or AVG and other tools are simply wrong to classify fman as malware.

Antivirus tools have a strong incentive to be quick to mark fman (and other software) as viruses: It's their business. The more often they can throw a popup in your face that says that they just saved your (computer's) life, the more you will think "boy, this antivirus tool is really doing it's job. I better keep it."

Yet there have been many cases where antivirus tools left users more vulnerable. Google's Project Zero has repeatedly found security holes created by antivirus software (1, 2, 3). A former Mozilla developer even advises: "antivirus software vendors are terrible; don't buy antivirus software, and uninstall it if you already have it". He only excludes Microsoft's as trustworthy. Incidentally, this one has never flagged fman.

The reason why antivirus tools mark fman as malware is probably that they haven't encountered it very often yet. What you can do to help with this (and to get fman to run on your system) is to mark it as a false positive. Here are some links to the corresponding forms / how-tos:

I just did this (again). But it helps if you do it too.

Thanks for reading. And sorry for the trouble.
Michael

fman 1.3.2: Improved usability

The last release added the possibility of filtering files as you type. This makes it very easy to find just the file or folder you want in a directory with many contents. It was the most-requested feature. And even though it seems the number of first time users who complete the tutorial has gone down, the daily active users have gone up. It seems like I may just make my internal goal of doubling the number of daily active users year-over-year by December.

Anyways, the file filtering functionality still had room for improvement when it came to usability. Thanks to your feedback, it's now much better. It "feels" a lot faster as well. For the details, please see today's entry in the Changelog. Have fun!

Filter files as you type

fman 1.3.1 just came out. It implements three of the top 10 most-requested features!

The unifying theme is filtering files as you type. Previously, you could jump to a file in a directory by beginning to type its name. For instance, consider this home directory:

To jump to the Downloads folder, you previously started typing its name. This would place the cursor on it:

This worked reasonably well, but had several limitations:

  • You couldn't see what you had just typed to jump to the current file. This made it difficult to correct typos, for example.
  • It was not possible to jump to a file whose name contained (rather than started with) the text you just typed. A good example of this is when you want to see all .jpeg files in the current directory.
  • It was not easy to pick out a specific file when there are many with similar names in the current directory.

The new release of fman solves all of these problems. As you start typing, fman narrows down the files it displays to only those that match your query. What's more, it displays what you typed in a little search bar at the bottom:

By default, fman retains the files whose names start with what you typed. But you can also use the asterisk * as a placeholder to match more files. For example, you can type *.jpg to display all files with this extension:

A limitation of the current implementation is that it does not prevent you from typing patterns for which no matching files exist. In this case, the file list becomes empty:

To fix this, simply correct the pattern you typed or press Escape twice to display all files again. Have fun!

Love email

One of the really nice things about fman is that it's developing a following. More and more people know about fman, and are really friendly and supportive in discussions on the issue tracker, or with me personally.

Every once in a while, someone goes really out of their way to express their appreciation of fman. It happened when a user tipped me $50. Or when people show their support in public forums. And of course, every license sold gives me that warm fuzzy feeling, when someone I've most likely never met trusts and likes my product so much that they're willing to enter their credit card details to support it.

Last week, someone did just that – buy a license – but also followed up with a quick email:

To which I can only say, thanks man, your support means a lot. Love you too <3 ;-)

Three thousand hours

Being self-employed, I meticulously track the time I spend working. It's useful in many ways: First, it's interesting to see how much time a project takes. Second, it helps me stay sane and productive: If I've worked less than my goal of 40 hours in a week, then I need to do some more. On the other hand, if I have completed my quota, then I can allow myself to switch off.

Here is a screenshot of my Harvest time sheet since April 2012:

It's a little hard to read, but you can see that I've so far spent 3,050 hours working on fman. It's the second-largest project I've worked on so far. The first (titled "Implementation" in the screenshot) is a Polish IT startup I focused on from 2012 to 2014. The third ("Terminerinnerung") is my SMS reminder service for doctors in Austria, which I still draw passive income from.

By the end of this year, fman will be at the top of the above list. The race is on to see how much I can get done until then ;-)

fman 1.1.9 fixes many bugs

fman 1.1.9 just came out. It fixes quite a few important bugs. Check out the Changelog to see what's new.

Meanwhile, work is underway on the second-most requested feature: Filtering files as you type. This lets you very quickly hone in on the files you want to work with. Say you have a directory with the following folder/files:

  • apple/
  • banana.txt
  • bananajuice.txt

When you type p, only apple/ remains in the list of files and p is shown/highlighted. When you then press Escape, all files are visible again. When you then type banana, only banana.txt and bananajuice.txt are visible. Here is a very preliminary screenshot:

Implementing this feature will likely take a little. Reading this blog, you'll be among the first to find out when it's done :-)

fman 1.1.6 is 40% faster

fman 1.1.6 just came out and it's 40% faster when displaying 5,000 files :-) It also fixes a few bugs. Check out the Changelog for more details!

The release on Windows was held up by having to obtain a new code signing certificate. This is used to prove to your computer that fman's binaries come from a respectable source and have not been tampered with. I'll likely publish a blog post about this in the coming days. Stay tuned :-)

fman builds a following

There was a thread about Qt for Python on Hacker News last week. In case you don't know them: Python is an (awesome) programming language. Qt is a framework for displaying graphical user interfaces. fman combines these two technologies to implement its functionality.

Anyways, because fman is based on Qt and Python, it was natural I chimed in (read: spammed) the thread to mention fman and its build system. My comments were very well-received (not a given on Hacker News). But what was even cooler was that several people seemed to already know about – and like – fman:

"Fast af" and "I like it a lot" are definitely things I'm happy to hear :-}

Work is continuously being performed to further improve fman. The next release will make opening directories significantly faster. You will find out here once it's live. So stay tuned! :-)

fman 1.1.2: Progress feedback

After three weeks of hard work, fman 1.1.2 is finally live. Among other things, it implements the fourth most requested feature: Progress feedback for file operations.

fman progress dialog for copying a file

Up until now, there was no progress dialog for instance when you copied a file. That didn't just mean that it was hard to tell what was going on. It also meant that you couldn't cancel file operations once they were started. Pretty embarrassing.

Now, all of the major file operations – copying, moving, deleting files, packing and extracting archives etc. – have nice progress dialogs that give an indication what fman is working on. Further, they're cancelable so you can abort them if you change your mind. Really, it's what you expect from a serious file manager.

There were several other small improvements in this release. As usual, please consult the Changelog to see what else is new.

API changes

Implementing progress feedback required several additions and changes to the API. If you are a plugin developer and have written custom file systems, read on.

The first major change is that the functions touch, mkdir, copy, move, move_to_trash and delete no longer update fman's caches automatically. If you have implemented any of these functions in your custom FileSystem, please call notify_file_added, notify_file_changed and notify_file_removed to let fman know about changes you make.

A second change is that operations for custom file systems now display an "indefinite" progress dialog:

If you want to add more detail to this (and in particular show how many percent of the respective task such as copying has been completed), please take a look at prepare_copy, prepare_move, prepare_delete and prepare_trash.

Finally, you can also define arbitrary operations with progress feedback via fman's API. If you want to do this, please take a look at the Task class.

Core plugin on GitHub

One of fman's biggest strengths in comparison to other file managers is its plugin system. It enables anybody to customize and extend fman in very powerful ways.

To ensure that the plugin API is stable and expressive enough for real world use, fman itself implements all basic features in a plugin called Core. This plugin has been distributed as a part of fman for a long time, and plugin developers were encouraged to look at it for inspiration. The problem was, its sources were hidden deep in fman's installation directory, and so not exactly easy to peruse.

Several people requested that the source code of the Core plugin be made available online for easier browsing. Your wish is my command: The sources are now on GitHub. They make up a sizable 30% of fman's entire code base. Enjoy! :-)

An FTP plugin for fman

fman user Cristian Moncho Ivorra just published an FTP plugin for fman! It supports anything you'd want from an FTP client: down- and uploading of files, deleting them etc. Amazing!

The plugin uses fman's file system API. Anybody can use it to extend fman in very powerful ways. It required a lot of effort to implement, but Cristian's plugin is a testament that it was worth it. After he published the plugin, I got in touch and asked what he thinks of the API. Cristian said he really likes how it is structured and that he finds it clean, powerful and intuitive. I'll give this praise right back: Cristian's code is very well-written. I highly recommend to anybody who is interested to check it out.

If you would like to install the plugin, please see here for instructions. It is easily doable in less than 30 seconds.

In other news, I'm still working hard on implementing nice progress bars for file operations in fman. Stay tuned!

fman 1.1.1

fman 1.1.1 just came out. It fixes many bugs and adds a few small improvements. Check out the Changelog to see what's new!

Meanwhile, work has started on fman's third most-requested feature: progress feedback for file operations. At the moment, when you copy a file, you don't get a progress bar or a way to stop the process. This big shortcoming is about to change in a coming release. Here is a sneak preview of what the progress bar may look like:

Stay tuned!

fman's new context menu

fman 1.0.8 is out. It implements fman's most-requested feature: Context menu support!

fman's features are prioritised by the number of votes they receive on the issue tracker. You can see in this screenshot from last week that context menu support was nearly twice as popular as the next most-requested feature:

The implementation journey for this feature was very interesting. Users clearly wanted it. But as I started working on it, I realized: Did they vote for it because they want to rightclick? Or because they were missing a feature from their OS's native context menu? For example, many people on Windows use TortoiseSVN. Could it be people wanted the context menu just so they can use TortoiseSVN from within fman? Because there is already a user-contributed plugin for this.

Another important question was how the context menu should actually be implemented. On Windows, it's possible for applications to show the "native" context menu. This gives you exactly the same options as Explorer. But several fman users warned that this menu is bloated and frequently crashes other file managers. The reason for this is that invoking the native CM on Windows loads external DLLs into your app's process. I read on the blog of another file manager that users often complained it was crashing when in fact those crashes were caused by such external DLLs.

On Mac, it is simply not possible to display Finder's context menu in another app. That's why alternative file managers on Mac all have their own context menu implementation. Similarly on Linux.

So it was clear that fman needed its own context menu implementation on Mac and Linux. Because of the problems associated with the native context menu on Windows, I decided to use the same approach there as well. This has the disadvantage that you don't immediately get entries you might expect, such as TortoiseSVN, 7-Zip or Dropbox. But you avoid random crashes and a slow and bloated menu. And there's a way to get the "missing" entries back.

Following fman's focus on extensibility, the context menu is completely customizable. Everybody (including you!) can add commands to it. My hope is that over time, plugins will appear that give you all the entries you'd ever need. For more information on how you can customize the context menu, please see this page. I think it's pretty powerful.

The next big improvement will be better progress feedback for file operations. It's not the most-requested feature but really must be there in a file manager. Stay tuned!

Show hidden files in fman

fman doesn't show hidden files by default. If you do want to see them, press Ctrl+. (or Cmd+. if you are on Mac). This is also mentioned on the Shortcuts page, where you can find several other useful commands.

In general, the best way to discover fman's features is via the Command Palette. Press Ctrl+Shift+P (or Cmd+Shift+P on Mac) to launch it. It lets you search for commands very quickly. If you had wanted to show hidden files, you could for example have searched for hidden:

  • Toggle hidden files
    Ctrl+.

Note how fman shows the command as well as its shortcut. You can use Enter to launch it, or close the Command Palette and then use the shortcut. Hope that helps!

Dear Comrade

I sent you this post because you criticized my product for not being free. Maybe on Reddit, maybe on Hacker News, maybe somewhere else. It probably took you less than a minute to comment, on work that took me years or months to create, so I thought I'd spend the same amount of time and direct you here.

You probably have a job that you're getting paid for. If not, say when you're a student, virtually every adult you see on the street does. My living comes from creating new products and services. Is that so horrible?

We all like free stuff. But in a world where everything is free, we are the product. It's a world where big corporations have all the power because they are the only ones who can afford to offer "free" services. Is that in our interest?

I am not a big corporation. In fact, creating products is hard and I almost certainly make less money than you. By putting me down, you are not fighting the big evil. You are bashing a little guy who's trying to innovate. I have neither the power nor the desire to be a threat to you. The most I can achieve is find new ideas that others in the space can copy easily.

Maybe you also dislike the fact that my project is not open source, or not made available for free under the most permissive terms. As a software developer, my work would be impossible without free software. I know that. If I could open source my product, I would. But it's almost certain that I would then not be able to make a living from it. This in turn would mean that I couldn't devote myself to it full-time. I believe in the project and that is not an option for me.

So when you critique my product or offer alternatives, by all means do take into account that it's paid. But don't make it your only point. The world is too nuanced for that. I hope you will find things it does better than the alternatives. And whichever conclusion you come to, please let it exist. It's just another option and may help somebody out there.

Website for fman's build system

So far, 2,700 hours have gone into developing fman. A few hundred of these hours were spent on seemingly standard tasks such as creating installers for the various operating systems, or automatic updates. It's incredible that there is no single standard solution for this.

To address this problem, I began in 2018 to open source fman's build system. It puts those hundreds of hours at your fingertips within minutes. Until now, fbs was only hosted on GitHub. It has already amassed a respectable 1,500 stars:

To bring the project forward however, it needs its own website. I found some time in the last few days to create it. You can now find it at https://build-system.fman.io. Enjoy!

Open sourcing the build system benefits fman in several ways: First, I sell commercial licenses for fbs. The income from this helps support fman's development. Second, the more people use fbs, the more stable it – and thus fman – will become. As I said in a previous post: Win-win!

fman 1.0.5: File Properties on Windows

fman 1.0.5 was just released. In addition to a few other improvements, it now lets you open Windows Explorer's File Properties dialog with Alt+Enter:

Windows Explorer's File Properties dialog

There had already been a user-contributed plugin that lets you do this as well. However, the plugin could only show the dialog for a single file. fman's new implementation supports multiple files as well as drives and network folders.

The motivation to add this feature now was that it's a prerequisite for the upcoming implementation of context menus in fman. (Because fman is so keyboard-centric, it does not yet let you rightclick on files. But many users do want to do this. In fact, it's the most-requested feature at the moment.)

There were a few other small improvements and bug fixes in the new release. Please check the Changelog as usual.

New Open With command

fman 1.0.2 just came out. It contains a new Open with command. This has been the fifth most voted-on feature for a while. It's great it's finally here.

You launch the feature via the Command Palette as usual:

  • Open With...

The first time you do this, fman prompts you to browse for the application with which you want to open the currently selected file(s):

Screenshot of fman's very first version.

You can then give a name to the application you've chosen:

Screenshot of fman's very first version.

The next time you execute Open With..., that application is automatically suggested:

  • Sublime Text
  • Manage...

An extra entry Manage... at the bottom lets you configure the "favorite" applications you have stored this way.

fman remembers how often you use each app to open the various file extensions. It then suggests the apps you use for a file type most often first. For example: If you usually open .jpg files with Photoshop and sometimes with Gimp, then fman suggests the former first:

  • Photoshop
  • Gimp
  • Manage...

As usual, the implementation is geared for maximum efficiency with the keyboard. To execute Open With, you invoke the Command Palette and type ow. Because of the above ordering by frequency, the app you normally use to open the given files is then pre-selected. (If not, the dialog lets you very quickly select another app). Finally, all you have to do is press Enter.

fman turns two

Exactly two years ago today, the very first commit was made to fman's source code. Back then, it consisted of a cute four files:

The very first commit to fman's source code

(In case you are interested, the code is given below.)

Here's what fman looked like back then:

Screenshot of fman's very first version.

You couldn't do anything in this first private prototype: It wasn't event possible to open directories. Still, this basis would eventually evolve into what fman is today.

Since then, fman's source code has grown to 15,000 lines of code, most of it in Python. A total of 1624 commits added features like directory navigation, file operations, keyboard shortcuts, GoTo, drag and drop, a proper app icon, an extensible plugin system, Zip support, support for Network shares on Windows, performance improvements, etc. It is staggering how much complexity hides in such a seemingly simple tool.

Looking at how far fman has come, I am glad for the solid foundation it now stands on. Can't wait for when it turns 10!

Appendix: Source code of fman's first prototype

The following files contain the source code of fman's very first prototype:

fman 1.0: Ten times faster!

I'm extremely excited to announce that fman 1.0.0 is out. fman has a rolling release cycle so the number 1.0.0 in itself does not mean much more than (roughly) being the 100th public release. Still, I wanted to do something special to celebrate the occasion.

The main improvement is this: fman is now 10 times faster! Speed has been a pain point mentioned by power users for a while. It's still not perfect. But it's a lot better.

There were numerous other small improvements. As usual, I recommend you check out the Changelog to take a look. It contains screenshots to quickly let you see what's new. To update to the new version, see here.

The next steps are to add other still missing basic features: Context menu support is the most-requested improvement on fman's issue tracker. I've been surveying users in the past weeks to figure out a good implementation. Then, progress feedback for file operations. Stay tuned!

PyQt excepthook

This technical post is likely only of interest to PyQt developers.

Read post

Network shares on Windows

fman now supports network shares on Windows! To access them, press Alt+F1/F2. You get the usual drives:// file system, but it now has a Network... entry at the bottom:

Network... entry in fman's overview of driveson Windows

When you open it, you get a list of the other computers on your network:

Network share server on Windows

This in turn gives you a list of the shared folders on this computer:

Shared folders on a network computer in fman on Windows

... which in turn can be browsed as usual:

Files and folders in a shared network folder in fman on Windows

Battling with macOS

The past few days were overshadowed by headaches with macOS. First, fman's command for installing plugins started giving a very ugly error:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(
host='api.github.com', port=443): Max retries exceeded with url: /
(Caused by SSLError(SSLError(1, '[SSL: TLSV1_ALERT_PROTOCOL_VERSION]
tlsv1 alert protocol version (_ssl.c:720)'),))

This was caused by macOS using an outdated OpenSSL version. To fix this, fman's Python version was updated to 3.6. Unfortunately, this in turn lead to fman crashing on some Mac users' systems.

The crashes were likely caused by an incompatibility between Python 3.6 and PyInstaller, the framework which is used to turn fman's source code into a standalone application. PyInstaller added support for Python 3.6 only recently, and it appears there are still a few kinks.

So, the solution was to downgrade to Python 3.5 again. To still fix the original SSLError, fman's copy of Python had to be recompiled with the latest OpenSSL version. The result was release 0.9.2.

Except it didn't end there. Some users reported the crash on startup fixed, but others were still seeing it. Further investigations showed that it was because fman's copy of Python had now been compiled on macOS 10.13, which made it backwards-incompatible with (eg.) macOS 10.11.

So, finally, the solution was to compile fman's Python version on an older version of macOS. This is release 0.9.4, which just came out. All users who previously reported having trouble starting fman now say that it works. If you still encounter issues, please get in touch.

Appendix: Compiling Python with OpenSSL on macOS

If you found this page on Google, you may be interested in how to (re-)compile Python 3(.5) on macOS with the latest version of OpenSSL. The easiest way I found is via Homebrew and pyenv:

brew update
brew install openssl
brew install pyenv

Then, add the following lines to ~/.bashrc:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

Ensure the changes take immediate by executing source ~/.bashrc. Then compile Python with the new OpenSSL version:

PYTHON_CONFIGURE_OPTS="--enable-shared" CFLAGS="-I$(brew --prefix openssl)/include" LDFLAGS="-L$(brew --prefix openssl)/lib" pyenv install 3.5.4

To use pyenv with a virtual environment, you can then optionally also perform the following steps:

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

Then, add the following to .bashrc and source ~/.bashrc again:

eval "$(pyenv virtualenv-init -)"

This lets you finally create and activate a new virtual environment using our new Python with updated OpenSSL:

pyenv virtualenv 3.5.4 venv
pyenv activate venv

New Account section

When you buy fman, you can optionally choose to subscribe to updates. Virtually all people who buy fman do this. The first fman licenses were sold nearly a year ago. This means that the first update subscriptions are about to renew.

License holders can now log in to a new Account section at the bottom of the Support page. There, you can re-download your license keys and manage your subscription. As mentioned in the Year 2017 in review post, the goal is for at least one third of subscribers to renew. Fingers crossed!

That escalated quickly

If you recall from the Year in Review post two months ago, I have begun to open source fman's build system ("fbs"). The motivations were a) it's the right thing to do to help other developers. And b) it may help pay my bills until fman is sustainable on its own.

Yesterday, I open sourced those parts of fman's build that generate the installers on Windows and Mac. I thought this would be a good time to start charging for fbs. It's offered under the GPL, which makes it free for open source projects but lets me charge for commercial use.

On a whim, I submitted fbs to Hacker News. I thought it could be well-received because fbs makes PyQt a viable alternative to Electron, which many HN readers despise for its bad performance. (PyQt and Electron are frameworks for creating desktop applications.)

When fman launched, it stayed on the front page of HN for 13+ hours. Even though it was only in the ~25th spot, this lead to many thousands of visitors to this web site.

Within minutes of submitting, fbs went to the third spot on the front page, then the second and finally – the first! Way higher than anything else I've ever submitted.

fbs in the first spot of the front page on Hacker News

fbs stayed on the front page for ~15 hours. As a result, it quickly jumped from 69 stars on GitHub to well over 1,200 (and counting):

fbs' GitHub project page, with 1245 stars

A small dent in the glory was that after an hour or so, the story of SpaceX's historic launch of the Falcon Heavy broke. This immediately kicked fbs down to the second spot. It's of course stupid to find this frustrating but I wouldn't have minded if it had stayed in #1 a little longer ;-) But I must also admit that SpaceX's story deserved it much more.

As a result of the traffic, the first commercial license for fbs was sold, for EUR 79. It's not much, but a start that proves there is a market. Given that fbs saves its users hundreds of hours, I guess that's not so surprising. But you never know until it actually happens.

The cool thing is that fman and fbs feed off each other. fbs merely open sources code I already have. It doesn't drain a lot of resources from fman. But as other people start to use it, it will actually make fman more stable. Win-win!

fman's new file system API

After months of hard work, fman's file system API is finally available. It lets you add support for non-standard file systems such as Dropbox, SFTP, ... by means of plugins. This really sets fman apart from other file managers, where you are dependent on the respective vendor to offer new integrations.

A huge boon of the API is how little code it requires. fman's own implementation for handling local files is only 181 lines long. Basic SFTP support can be added in 75 lines. The new ProcessFS plugin is a file system for managing the programs currently running on your computer. It's a mere 84 lines of code.

Here's an example of a very simple custom file system:

from fman.fs import FileSystem

class Example(FileSystem):

	scheme = 'example://'

	def iterdir(self, path):
		return ['File.txt', 'Image.jpg']

When you create a plugin with these contents and navigate to example://, you get:

Note how the two "files" from the code snippet are shown. Of course, the files don't actually exist. But fman doesn't care: It simply displays what the code tells it to.

To make the example more interesting, let us introduce a directory structure:

class Example(FileSystem):

	scheme = 'example://'

	def iterdir(self, path):
		if path == '':
			return ['Directory', 'File.txt', 'Image.jpg']
		elif path == 'Directory':
			return ['File in directory.txt']

	def is_dir(self, path):
		return path == 'Directory'

When you reload your plugin with the built-in Reload plugins command, you then get the following:

We now have a directory that is also displayed as such. What's even better, you can open it to see:

Note how the location has changed to example://Directory and the file inside the directory is displayed.

So what happened behind the scenes? When you open a URL example://Directory, fman sees that it should be handled by the example:// file system. That's why we have scheme = 'example:// in the code above.

Next, fman calls our implementation of iterdir(path). The path it passes is everything after the example:// prefix; So 'Directory' in the example. Looking at the code, we see that it returns ['File in directory.txt'] in this case.

Finally, fman invokes is_dir(path) for each file in the directory. In the example, fman passes path = 'Directory/File in directory.txt'. Because this is not equal to 'Directory', our code returns False, and so fman treats it as a file and not a folder.

This completes the simple example. File systems can obviously do much more: You can for instance tell fman how your file system implements the Copy and Move commands. For more information, please refer to the API documentation. If you have any questions, get in touch! I would love to help you get started.

You currently need a separate command to navigate to example://. This will do:

from fman import DirectoryPaneCommand

class OpenExample(DirectoryPaneCommand):
	def __call__(self):
		self.pane.set_path('example://')

Copy this code into your plugin, then use the Command Palette to run Reload plugins and then Open example.

Open iCloud Drive in fman

A user recently asked how you can open iCloud Drive in fman. Here's how:

Type the following in a Terminal app:

sudo ln -s /Users/$USER/Library/Mobile\ Documents/com~apple~CloudDocs /Volumes/iCloud\ Drive

Once you have done that, you should see "iCloud Drives" in your /Volumes folder. To quickly get there, press Alt+F1 in fman.

fman 0.8.3

fman 0.8.3 was just released. Despite the innocent-looking version number, it was actually quite a big release. The reason is that many things "clicked into place".

A licensed user wanted to change the sort order with the keyboard. So, instead of say clicking on the Size column header, he wanted to be able to do this by keyboard. To implement this, fman 0.8.3 adds new API functions that let plugins change the sort order. But this opened the gate for another much-requested feature: That fman remembers the sort settings for each folder you visit. For example, you might want your Downloads folder to always be sorted by Modified time. Using the new API, this was trivial to implement. This feature has been in the top 10 of most-requested improvements for a while. It's great it's finally implemented.

There were several other notable improvements. My personal favorite is that the Command Palette now automatically suggests the command you last entered. For a list of all improvements, please see the Changelog.

An unexpected gift

One of the nice things that happened last week was an fman user writing in to say that 1) fman "is THE BEST SOFTWARE" (sic). And that 2) he would like to send me a $50 tip. He had already bought a license but wanted to further help support fman's development.

I'm financially stable and very secure, but this was an extremely nice gesture. It's always great to hear when people like fman, but this was another level. I happily accepted the offer. Thank you, Ben! 🙏

An inescapable while loop in Python

fman is programmed in Python. While hunting a bug today, I realised I've been making a mistake for the past 6 years. Consider the following code:

from time import sleep
while True:
    try:
        sleep(.1)
    except:
        pass

What do you think happens when you press Ctrl+C? I would have expected to get out of the infinite loop. But it doesn't work! You have to press Ctrl+Z to suspend the process.

The reason for this is that the empty except: catches everything, including the KeyboardInterrupt that is raised when you press Ctrl+C. Instead, what you'll most likely want is:

try:
    ...
except Exception:
    ...

This catches the exceptions you're normally interested in but leaves others like KeyboardInterrupt or SystemExit unharmed. No more except: for me!

fman is a file manager with a Python API. If you liked this post, you should check it out!

Year in Review 2017

Hi everyone, I'm Michael.

For the past 23 months, I've been developing a dual-pane file manager. You use it as an alternative to Explorer on Windows or Finder on Mac. It integrates innovative features from Sublime Text. Here's what it looks like on Ubuntu:

One year ago, fman was in closed alpha and had maybe 5 daily active users. My goals for 2017 were:

  • Make fman public and sell at least one license by March.
  • Increase the number of daily users to 50.
  • Sell 100 licenses by the end of the year.

Before we see how reality stacked up to aspirations, let me give you some background.

I started fman in February 2016. My previous businesses were generating some modest but stable passive income. At the same time, I couldn't grow them any further. So I looked for a new project.

After 20 years on Windows, I had switched to Mac in 2014. One thing I sorely missed from Windows was Total Commander, a dual-pane file manager. There were some clones for macOS, but none that really made you go wow. And also TC was beginning to show its age, especially when compared to modern tools like Sublime Text.

So I decided to create the file manager I felt was missing in this world. It would be a combination of Total Commander and Sublime Text: Beautiful, cross-platform, and fast – with a Python-based plugin API. Here is the first mockup that would later become fman:

fman screenshot Ubuntu

I started working on the idea. The first version for macOS came out in July 2016. Then, in August, the first Windows version was released. Linux (Ubuntu) followed in November. That was a little over a year ago.

Since then, there have been 58 new releases of fman. Most added basic features like the Command Palette, a proper app icon, a plugin manager, or Zip support. Many others fixed bugs or improved performance.

A lot of work was also required for the web site: To be able to sell licenses, a payment provider (Stripe) had to be integrated. PayPal was added later because many users asked for it. fman's issue tracker was moved to GitHub. The API documentation was significantly improved.

The biggest thing to happen to fman in 2017 was probably its launch. The day it left closed alpha, fman made the top 10 on Product Hunt and stayed on the front page of Hacker News for more than 13 hours. This resulted in a huge influx of new users:

Number of Google Analytics visitors

The first 100 licenses sold out in 48 hours, far exceeding my wildest hopes. The big learnings from the launch were that people don't like it when you artificially limit the number of licenses of a software product (in my case, I set the limit at 100 because I never thought I'd sell that many anyways). And that it's pretty stupid not to have a sign-up form for your newsletter on your home page on launch day.

By now, fman is also crushing the goal of having 50 daily active users: Around 130 people use fman on a given day. That's a 26-fold improvement over the handful of people from one year ago!

But it's not all rosy. The most painful experience this year was probably losing my MacBook. This set fman's development back by a few weeks because I had to order a new laptop. And there are other challenges.

The biggest problem fman is facing right now is retention. Every day, people download it for the first time. But the number of people who use fman on a given day stays roughly the same. If the new downloaders kept using fman, then the number of daily active users would steadily increase. That isn't the case.

Another problem is revenue. fman currently makes around $ 350 per month. I'm using the passive income from previous businesses (perhaps $ 2400 per month before tax) to fund its development. But it goes without saying that that can't go on forever.

What's really motivating in this situation are users constantly buying fman and saying how much they love it. Here's an example from just a few days ago:

My suspicion is that the retention problem is caused by two things: First, fman is not yet quite as mature as other file managers. Second, there is a learning curve before you reap its benefits (depending on whether you've used a dual-pane file manager before). It takes people some time to get used to fman before they ultimately become hooked.

Tangentials

On Windows, fman uses the same technology as Google Chrome for auto-updating. It was difficult to set up, so I wrote a blog post explaining how to do it. That makes it easier for others, but it's still a lot of work. So in the post I offer to help people for a fee:

A few people take me up on this. My favourite customer paid $ 1500 for little over a day's amount of setup work. Further, they now pay $ 249 every month for an update server I host for them. It takes very little time, helps pay the bills, and thus sustains fman.

Of the 2200 hours that have so far gone into developing fman, perhaps 500 were spent on problems only tangentially related to its mission. The update mechanism on Windows is one example. Other examples are creating installers for the various platforms, or merely turning fman's Python source code into a standalone application that runs on your system. It's amazing how much work is required just for shipping a desktop app.

To help with this, I've decided to open source the relevant parts of fman's build system. First, because it's the right thing to do: fman's stack (Python and PyQt) is very potent and I believe more people should be able to use it. But also, because it may lead to further opportunities down the line to pay the bills.

I had initially not planned to open source the code until (perhaps) later. But when I recently mentioned the idea on Hacker News, I received a lot of interest: A startup from the U.S. offered me a job. A German university said they wanted to use the project. Even a developer from my home town told me he needed it. The project's GitHub page already has 32 stars. There's a separate mailing list for it, in case you are interested.

Goals for 2018

  • Double fman's retention, that is, the percentage of people who come back within one week of first downloading it.
  • Double fman's revenue from new sales to $ 700 per month (= $ 8.4k in 2018).
  • fman comes with an optional subscription for updates. Virtually all people who buy fman sign up for the subscription as well. The first subscriptions are due to renew in March 2018. Entice at least 33% of people to renew.
  • Improve fman:
    • Finish the new API that lets users add support for their own file systems (Dropbox, (S)FTP, processes, ...).
    • Add visual progress feedback for file operations.
    • Implement a context menu.
    • Improve performance.
    • Other features from fman's issue tracker.
  • Complete the open sourcing of fman's build process.

Stats for 2017

  • Licenses sold: 377
  • Revenue: $ 5642
  • New releases: 53
  • Daily active users: 130 (weekday in December)
  • Number of plugins: 36
  • Development hours: 1300

Home and hotel

It's been exactly six months since I switched from macOS to (Ubuntu) Linux. I'm now developing fman on a Dell XPS 13:

It's hailed as one of the best Linux laptops. It's extremely light, has a small form factor, great battery life and supports Ubuntu very well. It's also much cheaper than a comparable MacBook Pro, so I could afford to get a larger SSD. That's useful for me because I previously had to resort to external drives a lot. Finally, the Terminal application on Ubuntu blows all other shells I've ever worked with out of the water.

There are a few issues. Some are to do with sound: The speakers are worse than on my previous MacBook Pro. Every time I plug in my headphones, there is some white noise and I have to run a command line tool alsamixer to get rid of it. Also, when I keep my headphones plugged in and restart the computer, Ubuntu outputs sound to the speakers instead of the headphones. The final annoyance is that Ubuntu sometimes makes windows 0 pixels wide and I have to search for them by their shadow only on my desktop.

The best way to describe the experience is with an analogy: macOS is like a hotel. Everything is polished, designed and cared for. But it's also sterile and you can't bring your own furniture or cook your own food. On Ubuntu / Linux, you need to do the dishes and take out the trash yourself. But it's yours. No one forces their agenda on you. It simply feels like home.

Next post: My app's Year in Review 2017

New API docs

Up until today, fman's API documentation consisted of a very short list of available functions without any examples or explanations. In the past two weeks, the docs were finally fleshed out. They're very comprehensive now and provide lots of examples. Check them out!

Zip support in fman

fman 0.7.0 was just released. It is the first culmination of two months of hard work!

The major new feature is Zip file support in fman. You can use the new Pack command to create a Zip archive of the selected files:

fman's Pack command to create Zip archives

The new command can be launched with Alt+F5 (or Cmd+F5 on Mac). Or (as always) via the Command Palette.

Once you have a .zip file, you can open it like any directory:

fman displaying the contents of a Zip file

Copying, cutting, deleting files and many other operations are supported just as if the .zip file were a normal directory.

This release features a completely new file system backend for fman. It will make it possible for everyone to add new file systems (Dropbox, (S)FTP, ...) via fman's plugin API. The original goal was to make Zip support and the new API available in one release. But too much time has already passed since the last release (by fman's standards, anyway). So it's better to make this useful addition available to you, and release a new version with the enhanced API later.

The new file system backend enables many other small improvements and bug fixes. For a detailed overview please see the Changelog.

Broken plugins

As you can see in the right side of the above screenshot, the location for "inside" the Zip file is zip://.... This hints at the new file system backend. Every file and folder in fman is now identified by a URL. Previously, files were located by their path, say C:\test.txt. This has now become file://C:/test.txt.

This change was necessary to make fman support other file systems. But it breaks some plugins which don't yet know how to handle URLs. If you use plugins, you may have to update or remove some of them. To remove a plugin, you can write Remove plugin into the Command Palette to select the plugin which you wish to uninstall:

  • Remove plugin

Motivation

More and more often, people take the time to email me that they really like fman:

Excellent product! Henning
I immediately jumped on getting the subscription for all your hard work. [...] I just love the product. I didn't think twice :) Santosh
Just wanted to say I appreciate the work you've put into fman. I think it's a really great product. I also appreciate the email updates. Cody
Great news, keep up the hard work Michael!
Nathaniel on the upcoming new file system implementation

fman is not yet financially viable. My girlfriend thinks I should work on something else. So do my marketing friends. I don't care. I deeply believe in fman's vision. Emails like the above tell me that I'm on the right tracks. Also, each license sold is a sign that fman is going in the right direction.

In a newsletter I sent out a few days ago, I explained that I'm still working hard on fman's new file system backend. It will for instance make it possible to implement ZIP support. I'm hoping for a first release in November. Once it is out, I will raise fman's prices to roughly 1.5x of what they are now. fman comes with an optional updates subscription. I also promised in the email to never raise its price for existing subscribers. So if you buy fman with upates now, you can eternally lock in the cheap price of $/€ 12 for updates when other people will be paying $/€ 17 or more. Such a good deal!

Updated Zen

Work is in full swing on the new file system implementation of fman. It will make it possible to implement ZIP file support, (S)FTP, etc. Best of all, it will allow you to add support for your own file systems via fman's scriptable plugin system. Until the new implementation is ready, I thought I'd update an item on the web site that has been on the back of my find for a while.

The Zen of fman is an opinionated list of principles that guide the file manager's design:

Looks matter.
Speed counts.
Extending must be easy.
Customisability is important.
But not at the expense of speed.
I/O is better asynchronous.
Updates should be transparent and continuous.
Development speed matters more than program size.

The last item

Development speed matters more than program size

holds true of fman, but has never quite been as "on-point" as the others. I've decided to replace it by:

Don't reinvent the wheel.

In a way, this principle encompasses the previous version. It says to use an existing solution if it exists. Such a solution usually includes more functionality than needed, thus unnecessarily increasing fman's program size. But at the same time, not having to create it from scratch saves a lot of development time.

(An argument could be made that static linking lets you have the best of both worlds by only including those parts of a library that are actually used. But fman is based on the Python programming language where that is less of an option.)

The benefit of the new principle is that it explains more decisions behind fman. For example, some other file managers have a built-in terminal, a built-in text editor, file viewer, music player, etc. Some users really like the "integrated feel" of such solutions. My gripe with them is that I could spend years programming a built-in terminal or a file viewer, and they would still never be as good as tools that have been on the market for many years. I think it's much more important to focus my efforts in those areas where fman is truly able to excel. Like scriptable file system support!

Since the last post, there have been five new releases of fman. As usual, you can check out the Changelog to see what's new.

fman 0.6.4

fman 0.6.4 is out. It fixes a few small bugs. For details, please see the Changelog.

The big project that's currently underway is to rewrite fman's backend for file handling from scratch. This will make it possible to add support for other file systems (ZIP files, FTP, etc. etc.). It will also enable me to fix some long-standing bugs in fman. It's a big task and will take a while. Stay tuned!

Live coding video of fman

fman 0.6.3 came out last week and I thought it would be fun to show you a video of how I release new versions. The video shows all steps of a release: Deciding which feature to implement, changing fman's source code and uploading the new version to fman's web site. Enjoy!

Third-best Windows Explorer replacement

MakeUseOf wrote an article about the best Windows Explorer alternatives. They chose fman as third-best! Thank you, MUO. Working hard to make it #1. A good example of this are the three new versions of fman released in the last week. For an overview of their improvements, please see the Changelog.

Dual pane file manager history

Do you remember Norton Commander?

It was one of the first dual-pane file managers – and probably the most influential one. John Socha created it in 1984, the year Apple famously launched the Macintosh.

John was 26 when he created NC. He had been commissioned to write a book about utility programs and needed an example. This "example" turned into a world-famous file manager. The reason it is called "Norton" is that John joined Peter Norton Computing and completed the first version there.

A fun fact about John is that he also invented screen savers. NC included one as well:

John works at Microsoft now. He even writes the odd blog post about jQuery.

Norton Commander set the tone for decades of file managers to come. One clone of NC that is still in use today is Midnight Commander:

Like most dual-pane file managers, it gets the shortcuts from Norton Commander: F5 for copying files, etc.

Midnight Commander was created in 1994 by Miguel de Icaza. Like John, Miguel made his mark on other areas of computing as well: He later co-founded GNOME, the now default desktop environment of Ubuntu Linux.

On Windows, a clone of NC that is still popular is FAR:

Does the name FAR remind you of a popular archive format? That's not a coincidence: Its creator Eugene Roshal also invented RAR and WinRAR.

Even before FAR, the first dual-pane file managers with a GUI appeared. In 1993, Christian Ghisler released what would later become Total Commander for Windows:

TC was originally called "Windows Commander". You can guess what happened: Mr. Ghisler received a friendly letter from Microsoft asking him to change the name.

Since then, there have been many iterations on the same theme. (Last I counted there were 98 dual-pane FMs in existence.) However, I would argue that the niche has not seen much innovation in the last 20 years.

Sublime Text has shown that it is possible to revolutionise even old niches like text editors. Wouldn't it be great if we could have the same surge of innovation for file managers?

fman is my attempt to answer this question. It's a dual-pane file manager that combines the best ideas from Total Commander and Sublime Text. If you enjoyed reading this article, then maybe you would like to check it out!

Don't just use Stripe

In the beginning, fman used Stripe as its sole payment processor. This made it possible to buy fman by credit card. But people repeatedly wanted to pay with PayPal as well, because they don't want to give their payment details to a random site.

PayPal was integrated into fman's Purchase page last month. Since then, more than half of sales were processed by PayPal – even though it isn't the default option! This means that the blood, sweat and tears that went into setting up PayPal paid off.

If you are selling to consumers, I recommend offering PayPal as a payment option. If you don't want to spend days wrestling with PayPal's horrible APIs, I've heard that Braintree and FastSpring let you accept PayPal as well and are easier to set up. Good luck!

Back on track

After losing my laptop last month, I'm happy to report that fman is back on track: Version 0.5.3 is out. This release fixes the broken Arch Linux package and brings a few usability improvements. For instance, there is a new command for deleting files immediately instead of moving them to the Trash:

Most of the improvements were a direct result of user feedback. For a detailed overview, please see the Changelog.

It took a while to set fman's development environment back up. Two reasons: First, Dell make it incredibly difficult to buy a laptop. Second, fman's main development used to be on macOS; Now it will be on Linux. My new laptop (a Dell XPS) is gorgeous though:

Thankfully, fman is cross-platform and looks great on Ubuntu ;)

To the next release!

Lost laptop

I took the train in Austria (my home country) on Friday. I had to change trains once. Once I had made myself comfortable on the second train, I wanted to open my laptop to resume working.

Except I no longer had my laptop on me.

I had carried it in my hand to change trains. It slowly dawned on me that I must have misplaced it somehow. Stress.

I spoke with the conductor of my current train. He was kind enough to call the conductor of the other train I'd been on. Unfortunately, he said that the laptop wasn't there.

So I got off at the next stop an hour later to make my way back to the station where I had changed trains. One train going in the right direction was just leaving. I ran to catch it but missed it by 30 seconds.

I took the next train back. On the way, I tried to recollect where I'd last had the laptop. I had gone to a shop to buy a drink, but couldn't remember whether I'd still had the laptop there.

The manager of the shop was very friendly. He looked at the footage from the security camera and was able to see that I hadn't had the laptop on me when I entered the shop. Since I had gone to the shop straight after getting off the first train, that most likely meant that I had simply left the laptop on the first train. The fact that its conductor couldn't find it means (I think) that someone simply saw the unattended laptop, a nice MacBook Pro worth $1,500, and took it.

Now, after the weekend I was able to call lost and found. They again said that nobody had turned the laptop in. By now I think the chances I'll ever see it again are pretty much 0.

The good thing is that I have backups of everything. I won't have lost any data. But the thought that someone else has my data now (my Chrome sessions etc.) is pretty horrifying. I have to change all my passwords etc.

I'm working on borrowed a Microsoft Surface Pro in the meantime (thanks, Mum). It's actually a pretty decent machine with a nice screen. But its 4 GB of RAM are way too little to operate virtual machines, which are required for developing fman across OSs. So I ordered a new machine.

I looked at getting another MacBook, but the prices are just ridiculous. So, since I'd always wanted to try Linux as my main OS anyways, I've now ordered a Dell XPS 13". It's hailed as one of the (if not the) best Linux laptops. It's quite cool actually, because the laptop I lost was my first Mac. One of the reasons I switched from Windows was that I wanted to see what other OSs are like. Now I have a chance to learn about the OS that's still missing from my collection: Linux.

I have not decided on a Linux distribution yet. The XPS 13 comes pre-installed with Ubuntu but I may be looking for something more minimalistic. We will see.

If you have a laptop, I highly recommend you encrypt its local disk. I never thought this necessary, but now I know it is. Obviously, you also want to have regular backups of everything.

For fman, this is more an annoyance than the end of the world. Thank god I have good backups. It will take a few days until I'm fully up to speed again. But I promise I'll be back with a vengeance!

(It's funny actually - Due to my Austrian accent my friend in the UK always wanted me to say the classic Schwarzenegger line "I'll be back". Well, there you have it.)

PayPal for SaaS: 99 problems

PayPal developer meeting

Say you have a SaaS business. You're happily using Stripe to charge customers. But some people (particularly consumers) keep asking you to let them pay with PayPal; Either because they don't have a credit card or because they don't want to trust you with their data. That's bad news. What took you hours to set up in Stripe will now take you days with PayPal. This is the story of how you'll be spending those days.

First, you'll go to PayPal's Developer site. It's titled "PayPal Developer Experience". You will eventually find that the choice of the word "experience" is surprisingly accurate.

The Developer page presents you with a few options. None of them are actually what you want – but there is no way for you to realise that now. "Express Checkout" sounds good. "Braintree Direct" supposedly lets you "start accepting payments with just a snippet of code". Sounds great too! But you don't know who or what Braintree is, so decide to go with the former.

Express Checkout

PayPal's Express Checkout site says:

Express Checkout is a solution for merchants who currently accept credit card payments online and would like to add PayPal as a payment option.

Describes our requirement perfectly! So you read a few docs and find out that it's basically like Stripe's Checkout. It opens a popup where your customers can authorize the payment:

Except that unlike Stripe, which lets you open the popup whenever it makes sense in your checkout process, PayPal legally requires you to place this beauty of a button (or one of its close variants) on your page:

So with Express Checkout, you can't use your own buttons. You must use the ones provided by PayPal.

"Okay, no big deal", you think and create a first prototype. The examples provided by PayPal are all for single (ie. non-recurring) payments. To keep it simple and get the prototype up and running quickly, you decide to follow the examples for now and worry about recurring payments later.

Everything's a little more cumbersome than in Stripe. For instance: Stripe gives you two API keys, one for testing and one for production. Depending on which key you use, Stripe knows if it's a live payment. PayPal on the other hand always requires you to supply both keys and then set a special variable that indicates which one you want to use:

paypal.Button.render({
    env: 'production', // Or 'sandbox'
    client: {
        sandbox:    '...',
        production: '...'
    },
...
});

This means that your test environment must know your production key and vice versa. I'm not huge on security but it doesn't sound great. And it's certainly more repetitive than it should be.

Another, maybe more serious security issue: PayPal suggests the following code for executing a payment:

<script>
  paypal.Button.render({
      ...
      onAuthorize: function(data, actions) {
          return actions.payment.execute().then(function(payment) {
              // The payment is complete!
              // You can now show a confirmation message to the customer
          });
      }
  }...);
</script>

Note that this all happens on the client. In other words, PayPal's onAuthorize callback makes you believe that the payment was successfully executed. But what if the customer simply executes the "success" JavaScript code manually? If you don't want to open yourself up to such "fake" purchases, your app must confirm each payment with PayPal's servers. The docs make no mention of that.

Anyways, you realise all that and after maybe two to three hours in total, your prototype happily processes payments in a test environment. Time to generalise it for recurring payments.

Except, it's not possible.

Express Checkout only supports one-time payments. It's not that PayPal can't do subscriptions or that the necessary calls would be that different from those for single payments. They're simply not implemented in the Express Checkout API. A few "experiences" the wiser, you're back to square one.

REST API

PayPal's REST API supports recurring payments. It too is more cumbersome to use than Stripe's. There are official Python bindings. That's nice. But they feel more like a computer-generated wrapper than a native implementation. Everything requires or returns dictionaries. For instance:

paypalrestsdk.configure({
    "mode": "live", # sandbox or live
    "client_id": "...",
    "client_secret": "..."
})

Why not simply:

paypalrestsdk.configure(
    mode="live",
    client_id="...",
    client_secret: "..."
})

Okay, no big deal. Similarly: Did you spot the little inconsistency? For Express Checkout above, we had to supply the env: 'production' parameter to indicate whether we are in a testing environment. Now, the parameter is 'mode': 'live' – same meaning but different names. It's little things like this that keep you busy in the days you're wrestling with PayPal.

There a few more gems to complete the story. If you've seen enough of the creativity of PayPal's developers, skip to the Summary.

Executing a single payment via PayPal requires a surprising number of steps:

  1. Create a Payment object. You have to pass a dictionary with lots of arcane values.
  2. Call payment.create(). This contacts PayPal's servers and sets an approval_url hidden deep in a dictionary/list of the payment object. You can't just access this variable. You have to iterate over the list to see if the approval_url is actually there.
  3. Redirect the customer to the approval URL.
  4. After the customer has approved the payment, PayPal redirects her to a return_url which you specified when creating the Payment object. It doesn't seem to be mentioned in the docs, but PayPal appends ?token=... to the URL to let you identify the payment.
  5. Retrieve the payment via the token and call payment.execute().

Stripe can do the above in two steps. Why so complicated, PayPal?

It's even worse for subscriptions. You can't just say "Charge this customer $10 per month". You have to create a Billing Plan, which is like a template for a subscription contract. Then you have to create a Billing Agreement which references the Plan and is like a signed copy of the contract. Now suppose you want to offer varying discounts. You can't just store the amount to be paid in the Billing Plan, because it will differ for each customer. So you have to store it in the Billing Agreement. But then, what's the point of having a Billing Plan? It's not like it lets you say "now change the subscription price of all existing customers". Because Billing Plans can't be changed once they're active.

Think we're done? There's more. Error handling! Ideally, you'd like one way – and only one way – of finding out whether an error occurred. At least in the official Python SDK, PayPal forces you to handle errors in two different ways:

try:
    agreement = BillingAgreement.execute(token)
except ConnectionError as e:
    # Handle connection error
if agreement.error:
    # Handle other errors.

Why, PayPal, why? Things like this take trial and error to figure out and are completely unnecessary.

Summary

It's no wonder that Stripe is so successful, given that PayPal takes an order of magnitude longer to set up. Where PayPal still has the edge is brand recognition and trust among consumers – deserved or not. If you are selling to consumers, it is likely that accepting PayPal will boost your sales. Otherwise, stay away from them. They're not deserving of your business.

One second faster on Mac!

fman 0.4.9 is out. It now starts one second faster on a 2014 MacBook Pro!

I wish I could say that this speed up was afforded by ingenuity and hard work. But no. It's more of a case of "be less stupid".

For lack of better options (or so I thought), I had developed a library to measure execution time in the Python programming language. I mentioned it in a thread on Hacker News. Another user pointed out that Python already has this functionality built-in. Playing around with it for two minutes unearthed a way to achieve the speedup. Nice!

To be fair, hardly any time has been spent on making fman faster so far. The main reason is that other things such features and bug fixes have been more important. There are certainly other low-hanging fruit for making fman faster. But all in due course! For now, enjoy the first stage of fman's improved performance :-)

Welcoming Andrew

Today, we're happy to announce that fman's team size has effectively doubled. Grand words for saying that the number of members grew from one to two 😄 Here we are talking on Skype, Andrew in the center and Michael in the top right:

Andrew initially found fman through a thread on Hacker News. Despite being one of hundreds of apps / products in that thread, fman immediately caught his eye. Seeing its potential, he got in touch. Several email and Skype conversations ensued, and today we officially start working together.

Andrew will focus on link building and marketing while Michael keeps developing the product. For you as an fman user, the increased team size means a more stable and faster growing product. So good news! :-)

"Get Info" on Mac

The "Get Info" dialog in Finder on Mac displays a file's properties:

Several people asked for this feature to be implemented in fman as well:

(By the way, this is a screenshot from fman's issue tracker. It now displays the number of votes for each issue. Everyone can vote on issues by leaving a 👍 on their description.)

The feature has just been released as part of fman 0.4.6: Simply press ⌘+I to open Finder's Get Info dialog for the selected files. This dialog is extremely powerful. The downside is that Finder needs to be brought to the front in order for you to see the window. It would be much nicer if this were not the case. But it's simply not possible. Some other file managers implement their own (less powerful) "Get Info" dialog for probably this reason. Maybe fman will do the same some day. Until then, you get a lot of power – at the hopefully not too large cost of an extra Cmd+Tab.

As always, any feedback you might have is highly appreciated. Just get in touch or share your thoughts / votes on the issue tracker :-)

Desktop app funnel optimization

The Metrics implementation introduced last month is providing the first insights. Of the people who download fman, only 50% actually install and start it. That sounds low, but seems to be in line with other desktop apps. Of the remaining 50%, only one fifth (10%) use fman more than once in the first week after download.

That makes it clear where work is needed: fman's onboarding needs to improve so more first-time users stick around.

Interestingly, this is not the conclusion you'd reach if you just listened to feedback from users. People ask for features, report bugs etc. But the vast majority of people never take the time to give feedback. They simply don't keep using fman.

That isn't to say that feedback from users isn't relevant. It is and has shaped fman as it is today tremendously. It's just that fman needs to get the basics right for sustained growth. Plus, improvements for first-time users benefit existing users as well.

Creating a novel product is a little like playing a computer game with various stages. fman has completed the MVP, traction, and initial sales levels. Now it's about growth. A good funnel is vital for this, and (I believe) more important than additional marketing right now. That will come at a later stage, in a level probably best called "scale".

If you are interested in fman's journey, follow me on Twitter. You may also want to check out fman, especially if you are a developer. It's a dual-pane file manager that lets you work with files much more efficiently than Finder on Mac or Explorer on Windows.

fman is out on Arch Linux

After many requests from users, fman is finally available on Arch Linux. Here's what it looks like on KDE:

The Arch implementation isn't just a shallow "here are the binaries" solution. Quite the opposite: fman fully integrates with pacman, Arch's package manager. This is especially important because Arch is a rolling-release distribution with a strong emphasis on continuous updates.

You can obtain fman from the Arch User Repository as follows:

git clone https://aur.archlinux.org/fman.git
cd fman
makepkg -si

A slightly faster alternative is to download the pre-built package and install it with:

pacman -U fman.pkg.tar.xz

To enable automatic updates for fman, you can use the following commands:

pacman-key --keyserver hkp://keyserver.ubuntu.com:80 -r 9CFAF7EB
pacman-key --lsign-key 9CFAF7EB
echo -e '\n[fman]\nServer = https://fman.io/updates/arch' \
  >> /etc/pacman.conf

A cool feature of the implementation is that it uses pacman's dependency mechanism for fetching (amongst others) the Qt library. If you are using Arch with KDE (and thus already have Qt), this means that no unnecessary libraries are installed.

Possibly an even greater advantage is that dependencies managed by pacman are guaranteed (or at least more likely) to work on your exact system. In particular, the new release fixes at least one bug that was caused by incompatibilities between fman's Qt version and the version present on recent KDE builds.

A pleasant surprise during the implementation was that fman had already been added to the Arch User Repository by an fman user, Dmitry Romanov. His listing was expanded for better integration into pacman. Further, it is now automatically updated whenever a new version of fman is released. Thank you for the original upload and for giving me write access to the package, Dmitry!

This was my first foray into the World of Arch Linux. Arch has a unique approach and it's been a very interesting experience. Nevertheless, I'm still new to it. If you feel I have made a mistake, please let me know.

Finally understanding Sublime Text's pricing

I've always wondered why Sublime Text is so expensive. Sure, it provides a lot of value. It's a fantastic piece of software. But for most individuals, 70$ is not nothing. Especially when you can cancel the sporadic "please buy me" dialog so easily.

That's the point! ST's real customers are not individuals like you and me. They're companies that don't care about 70$ and buy licenses in bulk. Think of banks. That's where the money lies.

I just got my ST license. But if I may put forward a suggestion to the Sublime team:

Have a sale: One day only. Licenses for $25 instead of $70.

That one sale will get individuals to buy and easily bring tens of thousands of dollars.

If you like Sublime Text, you may also be interested in fman. It's the first file manager that integrates ideas from Sublime Text.

How much money does fman make?

An interesting question, isn't it? ;-)

It may not be a good idea to write this post. The existing competition got wind of fman. Other people have started to create fman clones. This "negative attention" is the flip side of the interest fman is getting recently.

So why share sensitive numbers? This blog has always been very open. It shouldn't stop just because others are watching. Unless you are the competition, I think you are reading this because you want to follow fman's story. This post is for you.

This commitment to transparency is inspired by people like Pieter Levels. He's a young and very successful internet entrepreneur. In fact, he wrote about transparency just two weeks ago. He argues people appreciate it when you present yourself honestly, without creating an artificial "image" of yourself / your startup. He uses this video as an example:

It's a pretty good tune! And I bet you didn't expect to see a rap video on a file manager blog today ;-) Also very cool is that Pieter recently started using fman.

fman has sold 232 licenses so far. Some were sold in USD, others in EUR. At today's exchange rate, it would be $3199 before Stripe fees and taxes. I've so far spent 1382 hours working on fman. This puts my hourly wage (before fees and taxes) at a rumbling $2.31 per hour. 💪

If fman is to (sustainably) succeed, it needs to at least make the above x10 each year. Given that much of the sales happened during fman's time-limited launch, this will not be easy.

The motivation for the project is thus not money. (How would you feel if you earned $2.31 per hour?) It's my (almost fanatical) vision that there should be a better file manager.

You should support fman if you like it. It takes literally one minute. You get rid of the annoying nag screen and priority when it comes to feature requests: 23 of the 40 last changes were implemented for licensed users. Don't wait. Get a license now!

Why fman isn't open source

People sometimes ask why fman isn't open source. This post explains why.

fman aims to revolutionise the file manager niche like Sublime Text has disrupted text editors. This requires years of full-time development effort. I'm investing those years. But at some point, I need an income. The question is, can fman be open source and pay the bills? Here are some ideas:

Ask users to pay, even if fman is open source

I asked the author of a once very popular desktop app about this. He had open sourced his app a few years ago and told users that they still needed to pay. Revenue dropped by 90% over night. Now he gets a few code contributions here and there, but the majority of development is still performed by him. He can no longer afford to work on the project full-time.

Ask for donations

Very few creators are able to make a living from donations. This is likely not viable.

Fund development through Kickstarter

A few file manager projects tried this. Most failed to meet their funding targets. The few that did get funded never got very far.

Offer two editions: "Community" and "Pro"

The Community version could be open source. The problem is that "Pro" features in a file manager are not very cohesive. For example, users might be willing to pay for FTP and Dropbox support. But why force someone who only wants FTP to pay for Dropbox support? It doesn't make sense. Selling features individually is not an option either – see below.

Create a plugin "store"

Total Commander offers a plugin API. Even though there isn't a "store", there are a few commercial plugins (among thousands). Two of their developers told me that they weren't really making any money from their plugins. This may be because there isn't a proper market place. But it's too risky to base fman's sustainability entirely on this approach.

Offer subscription features

One such feature could be to sync your fman settings across machines. While nice, this feature alone would not create enough value to sustain fman.

Find a corporate sponsor

The sponsor would need to have an interest in the existence of an open source file manager. I don't know what that interest could be. But hey: If you are Microsoft and want to enter the niche, get in touch. ;-)


Because none of the above options are really viable, fman currently requires you to buy a license for regular use. You can evaluate it for free. It just greets you with a nag screen:

You can even see much of the source code: Most of fman's functionality is implemented in a plugin. The source code for this plugin is in your fman installation directory.

If you have other ideas of how fman could be monetised while making it open source, please let me know. I would love for fman to be open source. I just don't know how to do it sustainably.

Manage plugins inside fman

fman 0.3.9 is out. The main new feature is that you can now manage plugins inside fman!!!

To launch the new feature, open the Command Palette by pressing Ctrl+Shift+P (or ⌘-Shift-P on Mac). Enter "Install plugin":

  • Install plugin

fman will fetch all available plugins from GitHub and present them to you:

Press Enter and voilà! The plugin is downloaded and installed.

Similar commands were added for removing and listing the currently installed plugins. The latter ("List plugins") also lets you quickly jump to a plugin's directory.

Updated plugin directory structure

To accommodate the above feature, fman's plugin directory structure was slightly updated. It used to look as follows when you had a few plugins installed:

  • {data directory}
  • Plugins
    • OpeniTerm2
    • StatusBarExtended
    • ...
    • User

The User plugin was always loaded last. This let it overwrite the settings of all other plugins, and thus made it a good place to put your custom settings.

For the new feature, the question was: Where to put downloaded plugins? I didn't want to place them right next to (for instance) the User plugin because it would be too tempting to then go and edit the plugin files. This would cause problems when (in a later release) the plugin is updated: The modifications to its files would then be lost. The solution is a new directory structure:

  • {data directory}
  • Plugins
    • Third-party
      • OpeniTerm2
      • StatusBarExtended
      • ...
    • User
      • Settings

What used to be the User plugin is now the Settings plugin: This is again loaded last and thus the best place to put your settings files (eg. Key Bindings.json).

When you install a plugin via the above command, it is placed inside the Plugins/Third-party folder. You are not supposed to make changes to the contents of this folder.

Finally, if you want to develop your own plugin (and haven't put it on GitHub yet), you can place its directory in (say) Plugins/User/Your Plugin/.

When you update fman, your existing settings and plugins are automatically migrated to the new directory structure.

There were several other small improvements in this release. As usual, they are listed on the Changelog page. Enjoy!

Bug fixes and API improvements

fman 0.3.8 is out. It fixes several bugs that prevented fman from starting. As always, you can see a more detailed overview on the Changelog page :-)

The new version also improves fman's API: So far, custom commands had to extend DirectoryPaneCommand. As is explained in more detail on this page, a directory pane lists the contents of a directory:

A DirectoryPaneCommand lets you for example query which files are currently selected. This is for instance used by the Copy command (F5) to determine what to copy.

The slight problem was, not all custom commands actually need that much information. For example: The About command displays information about your copy of fman:

This command will never need to know which files are currently selected. What's more, only one "copy" of the command should reside in your computer's RAM. But DirectoryPaneCommands are always instantiated twice, once for each pane.

That's why ApplicationCommand was introduced. It's simply a more fitting abstraction for a certain kind of command. The upcoming feature that prompted this is a command that lets you install GitHub-hosted plugins from within fman. Here too, the command does not need to know what files are selected (and there should only be one "copy" of the command).

It will take a few more days to implement the new command. Stay tuned!

fman ❤️️ GitHub

So much has happened in the past three weeks. Six new versions of fman came out. 20 features and bug fixes were implemented. To let you see them, a Changelog page was added. With pretty pictures! Also, the Docs section was expanded to make it easier to configure fman. Suffice it to say, I've been waking up at 5am a lot.

As a startup CEO, I slept like a baby.
I woke up every 2 hours and cried.

Ben Horowitz

There is one thing that has come up numerous times since fman's inception: People want an issue tracker. Not just a public Trello board where you can vote on issues. A real issue tracker like GitHub's. Where you can submit bugs and request features, and maybe also talk about fman.

A few fman users in particular kept pestering me about this. (I'm looking at you, macosxguru 😉). It got to the point where I was afraid people were on the verge of starting their own issue tracker. This actually happened to Sublime Text, whose tracker is now run by the community.

So, from today onwards, fman's issue tracker will be hosted on GitHub. Use it to your heart's content to request features, file bugs and talk about fman. As on Trello, you can vote on features: Just give them a "thumbs-up" 👍 using the GitHub Reactions feature. The more votes an issue gets, the sooner it will be implemented. (I still have the previous number of votes from the Trello board, and will take them into account.)

The next release of fman will introduce another GitHub-related item: Making it possible to install plugins from GitHub, within fman. Stay tuned!

A third-party tutorial about fman

fman user Richard Guay has graciously written an extensive tutorial:

fman: The Extendable File Manager for Any System

It explains fman's most useful features and how you can write your own plugins. In the tutorial, Richard uses his own ProjectManager plugin as an example.

I must say at this point that Richard has been an absolute star in the fman community. He contributed many plugins (which you can find in the list of plugins) and provided invaluable feedback that guides fman in the right direction.

Thank you Richard! :-)

An apology to Linux users

In case you're here for the first time: fman is a file manager for power users. It launched last week. The launch exploded completely. fman made it into the top 10 on Product Hunt and was on the front page of Hacker News for 13 hours. 15,000 people saw it for the first time.

Despite the positive reception, several Linux users pointed out that fman had committed a complete no-go in the Linux world.

fman is young and many features you would consider basic are still missing. To let you receive these features as they come out, fman includes a mechanism for automatic updates. If you're interested in the details of this mechanism, please see this page.

On Linux, fman enables automatic updates by integrating with your system's package manager (eg. Synaptic/APT). That's good. But the no-go I committed was to also install a cron job that runs every day as root to check for updates to fman.

Linux users like to have complete control over their systems. They don't want any "shady" things to happen in the background. As a Windows and (recent) Mac user, this is what I failed to understand.

I just released version 0.3.1 of fman that removes the cron job on Linux and lets you update fman via Synaptic/APT at your own schedule. If you have version 0.3.0 of fman installed, remove it (including the cron job!) via sudo dpkg --purge fman. Then download and install the current version from the Download page. To verify that the cron job has been removed, see that /etc/cron.daily/fman does not exist.

fman's launch in review

Gosh. A lot happened in the last few days.

Maybe a little background first. fman, my file manager, has been in the works for slightly over a year. The first version came out seven months ago. Since then, fman has been in closed alpha, meaning that you had to leave your email on the home page to get access.

After last month's release, a few users asked "what's next?". On a whim, I replied "fman will leave closed alpha next month!". I had no idea what that would actually entail.

I've never really understood what it means to "launch". I mean, fman's web site has been online for a while. The new ("non-alpha") version wouldn't be radically different from previous releases (mainly because I like to release frequent, incremental updates). So what's the point?

One thing I knew was that I would have to start charging for fman at some point. A "launch" gave me a good excuse to say "fman was free to use while in closed alpha, but now I'd ask you to please get a license if you use it regularly." I charge for fman not to get rich (I don't think it's possible in that niche). But because I see it as the only way to sustain its vision.

In hindsight, I believe "launches" aren't really about products magically popping into existence out of thin air. Instead, I think they're mostly just marketing stunts.

On February 6 I announced that fman would leave closed alpha on March 1. That gave me 22 days to figure out a licensing scheme, code up a purchasing page, write a Licensing Agreement etc. Not a lot of time for all these tasks. But it forced me to focus on what's important and make sure I get something out the door.

I recently formed a mastermind group with a few friends who are also self-employed. The cool thing is, they're mostly marketers. They sell online courses like "how to stop smoking with hypnosis" or "how to win customers on Facebook". Totally not my alley (which is programming). But invaluable for me for learning about marketing.

Anyways, we meet up once every three months, discuss our businesses and set goals we want to reach by the next quarter. In our first meeting, I said I wanted to get to 200 closed alpha users. Big laughs all around. They said "dude, I can get you 1000 by tomorrow". So I said "okay! 250". This lead me to submit fman to BetaList, which actually did bring 1000 new closed alpha users.

The marketers highly recommended limiting the license sale in both time and quantity. It felt foreign to me at first. But, I did want people to make a decision. If you tell me "you can buy this now, or whenever" then it takes me forever. But if you say "hey, you have three days and it's the best deal you're ever going to get", then it's a no-brainer.

The reason why I wanted people to decide quickly is that I wanted to see "who's in". fman is a commercial project. As such, it needs to appeal to its paying users. Limiting the sale let me find out who these people are. I was later criticised for this (see below).

"Launch day" came, and my expectations weren't overly high. Leading up to the launch, I thought it would be really cool to get on Hacker News and Product Hunt. I strongly identify with the crowd on HN and had always dreamed about fman appearing there, especially because I feel that HN's target audience aligns very much with mine. But I didn't think I'd be able to make it to the front page. And sure enough – when I submitted fman to HN, it received some attention and encouraging feedback, but disappeared into oblivion pretty quickly.

Meanwhile, the "launch" to my existing users went well. From the closed alpha, I had a mailing list of a little over 1,200 people. I emailed them when the launch started. I sold 25 licenses in the first 12 hours, and another 25 or so in the 24 hours after that.

What was really interesting though was an email I had received in the night after the first launch day. It was from Daniel, a HN moderator. I had posted on HN with title "Launch HN: fman – file manager for programmers". He said the "Launch HN" prefix was reserved for YC startups. And! fman looked like a good post and he could put it in the second-chance pool. I hadn't known of this before. It artificially places a post on the front page for a few minutes. If people like it, it stays there. Otherwise, it falls off. Daniel asked when would be a good time for me so I can participate in the thread if comments appear.

I was previously interviewed about an older project of mine on Indie Hackers. Courtland from IH has a lot of experience with submitting stories to HN. He said at the time that Thursday and Sunday mornings around 11am PST are great, because there is little competition but still lots of traffic. As it was a Thursday, I told Daniel to make it 11am PST please – 8pm my local time.

Daniel didn't reply. So on Thursday late afternoon I went to Salsa class as usual with my girlfriend. (By the way: Especially if you're single, take a Salsa course. If you suck at dancing like me, practice beforehand. It will be appreciated ;) ) We got back at 7:30pm. Still no answer from Daniel so I sent him a quick email. He did reply this time and said fman would appear on the front page soon!

I didn't know what to expect. I thought fman would fall off after a few minutes. But it stayed there. Oh boy, did it stay there.

Encouraging comments started to pour in. My favourite one was:

The speed and efficiency of Norton Commander was amazing. Happy that people bring it into our century.

Andreas Klinger, CTO of Product Hunt

Traffic to fman.io surged. Within a few hours, the remaining 50 licenses were sold out.

That's when negative comments started to come in. People didn't understand why the number of licenses was limited. Several Linux users harshly criticised that fman installs a cron job that runs once a day and checks for updates. Both criticisms were warranted and I'm working on fixing them.

The biggest mistake

An influx of traffic like this is a huge opportunity. But how do you capture it? The answer is email. Let visitors subscribe to your newsletter. Many will gladly do it. I didn't have a sign-up form on the home page and thus missed the opportunity to reconnect with thousands of people who were keenly interested in fman. 😔

What's next

New licenses will be made available next week. I'll also get rid of the cron job on Linux. Then: Make paying users happy! :-)

Stats

  • 100 licenses sold (virtually all subscribed to updates)
  • 284 people on the waiting list
  • 13h+ on the front page of Hacker News
  • 183 points on Product Hunt (placing fman in the top 10 that day)
  • 3 hours of sleep the night fman was on HN
  • Up to 170 concurrent visitors
  • 14,500 visitors in total

Leaving closed alpha

Full-time work on fman started just over a year ago. Up until now, fman has been in closed alpha. This meant that you had to sign up to get access to it.

Today, fman is leaving closed alpha status :-) It has come a long way and is stable enough for general use. The download links (which used to be hidden from the public) are now available on the Download page.

Also starting today, fman will prompt you to please obtain a license:

Click the correct button to start fman as usual. The idea is to let you evaluate fman, but to remind you that for regular use a license is required.

The only chance to get the first licenses is from today until Friday (March 3).
Go to the (new) Purchase page to get yours. Licenses are ridiculously cheap right now. But only a limited number is available. Don't miss out! Because after Friday, it won't be possible (for a while) to get a license.

You may wonder why I'm not offering licenses after Friday. The reason is that I want to see "who's in". As a commercial project, fman needs to first and foremost appeal to its paying users. Limiting the license sale in both time and quantity lets me select for these awesome people.

In that spirit, March will be spent on making licensed users happy. So get a license and tell me what you want to see in fman ;-)

fman's new icon

fman has a new icon:

fman's development is very much driven by user feedback. There's a public list of requested features where you can vote on the improvements most important to you. Features are prioritised (roughly) according to the number of votes they receive.

fman's most requested feature for quite a while has been that it gets a proper app icon. Finally, in the new year 2017 I found time to look into this.

Because I absolutely, positively, most definitely suck at design (seriously), I decided to have the design created over at 99designs. In case you haven't heard of it before, 99designs lets you host a "design contest". You say what you need (eg. an icon) and how much you're willing to spend. Then designers come and submit design proposals. You have one week to ask for revisions. At the end, you pick a winner. The person whose design you picked gets the money, and you receive the rights to the design.

fman's contest didn't go exactly as planned. I thought I had this really cool idea: "fman" sounds a little like a superhero. So I advised the designers to come up with something along those lines. The first submissions weren't very good, but then there was one I really liked. It showed a confidently smiling "folder" with a face and a mask like a superhero. I thought it was a great way of conveying that fman was unique and superior to other file managers.

After a few more designs had been submitted, I held a Poll on 99designs. This feature gives you a shareable link under which others can vote (and leave feedback) on the designs submitted so far. Guess what? My supercool superhero unequivocally came last (with over 300 fman users voting!).

The design that came first in the poll had a slight problem: It featured the typical traffic lights buttons that are used on Mac to close/minimize/maximize a window. Several users suggested that it would be better if fman's icon were platform-independent (since fman is cross-platform as well).

Well, I forwarded this feedback to the designer and held another poll with three variants: The original and two platform-independent alternatives. Again, the original, "Mac-dependent" version clearly came first. I do agree that it's a nice design. And I don't think it's that big of a problem that it features Apple's traffic light buttons. So there we go :-)

One of the nice things about the icon is its simplicity. It's very clear, also at small sizes. Its colours and layout clearly resemble fman. I think it's rather memorable (or at least if you see it again, it's not difficult to remember that it stands for fman.) It may not be as artistic as my former preference. But I actually quite like it :-)

The icon was just released as part of fman't latest version 0.2.9. Enjoy! :-)

From 0 to 1000 users in a year

fman just got its 1000th closed alpha user!!11one. Time for a little recap.

(If you don't know fman: It's a cross-platform file manager that lets you work with files much more efficiently than Finder on Mac or Explorer on Windows.)

Full-time work on fman started in February 2016. I was on the Canary Islands at the time, making use of my location independence as a bootstrapping entrepreneur. Here's the view from the (awesome!) hostel I was staying at:

I was working from a nice little coworking space in Las Palmas, called CoworkingC:

My previous businesses were providing me with a modest but stable passive income and I was looking for my next project.

I had switched to Mac in 2014 after many years on Windows. One constant annoyance was that there was no good Mac alternative to Total Commander, the file manager I used to use on Windows. But also on Windows, TC was showing its age, especially when you compared it to more recent tools like Sublime Text or Atom.

That's why I decided to see if a modern, cross-platform file manager would be a viable next project. Before diving into any new project, I like to conduct thorough online research to see if there is already an existing solution – nothing is more wasteful than spending months implementing something, just to realise that it already exists. I found that there are already 94 file managers on the market:

Could I really make a dent in this space, given that my solution would be #95? I think so: Most existing solutions are for a single platform only. None of them incorporate the slick features and design of Atom or Sublime Text. And from personal experience I know that the existing tools for Mac in that space simply aren't very good.

After another month of research – what name to use (fman for "file manager", concise much like the product itself), which GUI technology to use etc. – the first commit was made:

It took another whopping three months to get this very first version to a state I was comfortable sharing: fman for OS X was released on July 18, 2016. It already looked pretty similar to what you see today:

Of course, it was still missing many essential features. But, the first user feedback started pouring in. So I created a public board on Trello to keep track of feature requests and let users vote on their favorites. The board has been a very valuable tool since then for deciding which features to focus on.

Not even a month later, fman came out on Windows. That a release for an entirely different operating system was possible so quickly was largely thanks to the fact that fman is based on the cross-platform GUI toolkit (Py)Qt.

As for Mac and later the Linux release, a large part of the effort for the Windows port went into implementing automatic updates. In my opinion, a modern app should be able to update itself automatically. And I mean automatically. I hate nothing more than apps prompting me "new updates available" when all I want to do is get some work done.

After several smaller releases, fman's first killer feature was implemented: GoTo on Steroids. It lets you jump to directories extremely quickly, without having to manually manage a list of favorites:

In the months that followed, it was great to see fman's user base expand. A user called GoTo on Steroids "literally the best thing since sliced bread". The first user-contributed plugins appeared (another feature that sets fman apart is its Python-based plugin API). fman was featured on BetaList. And a user submitted it to Product Hunt:

In November, fman was released for Linux, finally making it truly cross-platform. It looks quite gorgeous on Ubuntu:

And then there is today, the day fman reached 1000 users. It's been a very successful first year. But I'm still nowhere near my goal of total domination of the file manager niche. So stay tuned! Lots of good stuff is still to come :-)

(You can still sign up for fman's closed alpha by clicking on the "Request early access" button on the home page.)

Command Palette

fman 0.2.6 is out :-) The main new feature is the Command Palette:

It lets you quickly search through and run fman's commands. What's also useful is that it displays the shortcut next to each command. You can launch it in fman by pressing Ctrl+Shift+P (or Cmd+Shift+P on Mac).

The Command Palette perfectly complements several key UX decisions in fman. First, fman is very keyboard centric, which requires the user to remember a few shortcuts. The Command Palette makes it easy to learn/explore them. Second, as explained in the last post, fman doesn't have a menu. Instead, the Command Palette now exposes all features – and makes them easily discoverable. Finally, plugins can add items to the Command Palette, and thus extend fman's functionality.

Implementing the Command Palette now has strategic reasons as well. fman is currently in closed alpha, meaning that users need to give their email address to get access to it. The goal for this quarter is to make fman public. This will bring a swath of new users. Some of these users will not have used a dual-pane file manager before, and thus won't know the standard shortcuts F5 for copying etc. The aim is for there to be a mini tutorial the first time fman is started, saying "Hey, all you need to remember is Ctrl+Shift+P for opening the Command Palette".

Coming up next is the second-most requested feature from fman's public feature list:

That's right, fman will finally get a proper app icon! I will launch a design contest on 99designs and ask for your vote once the first submissions have come in. Stay tuned!

Drag and Drop

fman 0.2.4 was just released. The main feature of this new version is drag and drop. It's for instance useful for dragging file attachments into Gmail's web interface.

The previous two releases (0.2.2 and 0.2.3) fixed several bugs, but also added a tiny new feature: Pressing F1 in fman now opens the Keyboard Shortcuts page. This feature and support for drag and drop were added because they were comparatively simple, yet received several votes on the feature requests list.

There was another feature on the list, which after some consideration was scrapped for now: A Help menu inside fman. fman currently doesn't have a menu bar, so adding a Help menu would have required adding this bar. Here's what it could have looked like on Windows:

The menu bar would have taken up a lot of space. It would have changed fman's layout. It would have made fman less beautiful. What's more, menus are (in my opinion) a horrible way of organising features. How much time of your life have you spent browsing through app menus, searching for items that you knew should probably be there, but you didn't know where exactly? I get very impatient every time I have to do this.

So fman won't have any menus. Instead, it will offer a keyboard shortcut (Ctrl/Cmd+Shift+P) that lets you search through all available commands similarly to how GoTo on Steroids lets you search through directories. This way, you don't have to manually browse any menus. You just type what you want to do and fman will suggest the appropriate action, which you can then select with Enter. If there is a keyboard shortcut that is bound to that action, then it should also be displayed so you can know the shortcut for the next time. This will be the main feature of the next release.

This will likely be the last update of 2016. If you are celebrating Christmas, then have a very merry festive season and a Happy New Year. See you in 2017!

fman 0.2.1: The command line

After last week's release of fman for Linux, today's update brings a small but useful feature: You can now start fman from the command line.

The feature works on all operating systems, but requires updating the PATH on Mac and Windows. Please see the new documentation page for details.

fman on Linux is out

After an intense month of development, I'm finally able to fulfill a promise made many times on this blog: fman is out on Linux!

If you are a member of the closed alpha program, then you should have already received the download link via email. If not, then you can still sign up via the "Request early access" button on the home page.

Currently supported are 64-bit Linux distributions based on Ubuntu 12.04 and higher. If you want support for a different Linux version, please let me know.

The default key bindings are the same as on Windows. For an overview, please see here.

Similarly to the previous Windows and Mac releases, considerable effort went into implementing automatic updates. The Linux implementation uses Ubuntu's package manager. By default, fman checks once a day if a new version is available. If yes, it is automatically installed. To force an update check right now, you can also use the following command in a Terminal:

sudo update-fman

The next weeks are devoted to ticking off as many points from fman's feature requests list as possible. Issues will be prioritised by how many votes they have received and by how easy they are to implement (so two trivial 3-point issues will be given preference over one hard 6-point issue):

After that, the next big step will be to (finally) make fman public. Given the already very positive reception of fman, I am hoping that this will truly make it explode in popularity. However, there is quite some work to do before then so I estimate that fman will only become public in (or at the end of) Q1 2017.

As always, I would love to hear any feedback you might have. If there's anything you would like to see or change in fman, please just get in touch!

fman is catching on

The Linux release of fman will come out any day now. Until then, I wanted to share some of the press / feedback fman has been getting recently:

GoTo on Steroids, the main feature of the last release, is a great success. Here's what one user wrote about it:

The new GoTo feature is literally the best thing since sliced bread! I love it :)

a happy fman user

What was also great to see was that several more people have written their own plugins. User kek91 for instance has open sourced several of his plugins:

  • ShowKeyBindings lets you quickly see the currently active key bindings.
  • StatusBarExtended makes fman show more information in the status bar, such as the number of files in the current directory.
  • ShowFileProperties displays information (such as total size) for all currently selected files.
  • ListPlugins displays a list of installed fman plugins.

Awesome!!

Next, the vision is for fman to become the leading file manager worldwide. As such, it needs a proper web site. Here's what the home page used to look like:

In order to do fman's aspirations a little more justice, I fleshed out the home page. Here's a screenshot of what it looks like now. My favorite part is definitely the rocket.

The redesigned home page made it possible for fman to be featured on BetaList, a site that lets early adopters discover tomorrow's startups. fman was so popular among BetaList visitors that it even made it to the front page:

Being featured on BetaList brought fman from ~160 closed alpha users to nearly 500!

What was also cool was that a user submitted fman to Product Hunt:

I was a little worried that this early submission would prevent fman from having a proper launch on Product Hunt at a later stage. Thankfully, the Product Hunt team are so up to snuff that their community lead quickly said that it wouldn't be a problem.

And that's about it for now. The positive feedback is very encouraging and I hope there is still lots to come. Thank you for following along!

GoTo on Steroids

fman 0.1.7 is out. Without exaggeration, it is probably twice as useful as before.

The new killer feature is GoTo on Steroids. Press Ctrl/Cmd + P to get a dialog for quickly jumping to a directory. fman offers intelligent suggestions as you type, taking into account which folders you visit most often:

You can also directly enter the path to a directory. fman will suggest subdirectories as you type. Press Tab to auto-complete a suggestion and quickly jump to the next level of folders.

A limitation of the current implementation is that it only suggests directories you have already visited. Please don't be disappointed when you don't get very clever suggestions the first time you start the new version. It will get a lot more useful as fman learns which directories you visit most often.

After using GoTo on Steroids for only a few days, I would already find it hard to use fman without it. What's more, it's probably the first feature where fman truly outshines other file managers.

This is not all. Since the last blog post, there have also been several basic – and thus very useful! – improvements:

  • Toggle hidden files with Ctrl/Cmd + ..
  • Switch drives/volumes with Alt + F1.
  • Create new files with Shift + F4.
  • Open in other pane via Ctrl + Left/Right. This is useful in many situations, such as for instance when duplicating a file.
  • A slightly more beautiful UI.

Finally, the last blog post introduced fman's plugin system. It was great to see that several of you already wrote custom plugins. Being able to tailor fman to your needs via a vibrant plugin ecosystem will be another of its key strengths.

The plugin system has changed a little since the last release. But in return, fman now handles plugin/configuration errors much more gracefully:

Error in key bindings: Command 'foo' does not exist.

If you already have your own plugins and are now getting errors, please see the updated documentation. (In short, your .py files must now reside in a Python package, eg. My Plugin/​my_plugin/​__init__.py instead of My Plugin/​my_plugin.py. The API has also changed a little.)

As usual, the new version is distributed via fman's auto-update mechanism. On Windows, this means that the next time you start fman, it should already be at the latest version. On OS X, you need to start and close fman once, leaving it running for a few seconds.

Custom shortcuts and plugins

fman 0.0.6 was just released, and it's freaking awesome.

The new release adds support for custom key bindings, fman's most-requested feature. It is especially useful on OS X: Up until now, you had to use the function keys F5 etc. to perform common tasks such as copying files. The problem is that you normally need to press Fn to get these keys on a Mac. It is possible to change this behaviour in OS X's Keyboard Preferences (which I recommend):

Use all F1, F2, etc. keys as standard function keys

However, if you don't want to (or cannot) change this setting, then you can now configure fman with your own preferred keyboard shortcuts. Please refer to this page to see how.

But that is not all: Do you remember the post about fman's core values?

Looks matter.
Speed counts.
Extending must be easy.
Customisability is important.
But not at the expense of speed.
I/O is better asynchronous.
Updates should be transparent and continuous.
Development speed matters more than program size.

Of the above points, Extending must be easy has been fman's weakest. Well, no longer! The new release adds support for writing your own plugins. One thing that's really cool about the implementation is that fman's own commands are all implemented in a plugin. This means that third-party plugins have access to an extremely powerful API that will get even better with time. For more information about plugins, please see the (new) documentation.

There are still a few more improvements I would like to implement before beginning work on the Linux version of fman. Stay tuned!

fman 0.0.3

Today marks the first time a new version of fman is released to existing users transparently via the auto-update mechanism. The new version includes a few bug fixes and an implementation of the most-requested feature so far: Support for copy/cut/paste via the standard keyboard shortcuts. On Windows, these are Ctrl+C, Ctrl+X and Ctrl+V, respectively. On OS X, as in Finder, you copy via Cmd+C, paste via Cmd+V and paste-cut via Cmd+Alt+V. Of course, the implementation works so that you can copy from Finder/Explorer and paste into fman and vice versa.

To get the new version on OS X, restart fman twice, leaving it running for a few seconds each time while it downloads and applies a 260 KB update file. On Windows, it can take a few hours until you automatically get the new version. fman displays the version number in the status bar at the bottom of the screen. If it says 0.0.3, then you have the latest one.

The release of the new version took a little longer than hoped, mostly because the auto-update functionality still required some work. Following fman's I dare say democratic approach to development, you can see on the public feature requests list what the next feature will be:

Sort directories by name/date, not just files

Next up are this (and possibly a few other) features, before work begins on the Linux version of fman. Stay tuned!

fman on Windows is out

The closed alpha of fman is finally available on Windows!

fman closed alpha screenshot Windows

If you are a member of the closed alpha program, then you should have already received the download link via email. If not, then you can still sign up via the "Request early access" button on the home page.

Operation

fman lets you quickly navigate directories and manipulate files. It offers the following keyboard shortcuts:

  • Type a file's name to jump to it.
  • Enter: Open file/directory
  • Backspace: Go up a directory
  • Tab: Switch from left to right side (or vice versa)
  • F5: Copy to the other side
  • F6: Move to the other side
  • Shift + F6: Rename
  • Space: Select multiple files
  • F4: Edit (with a text editor)
  • F7: New directory
  • F8: Delete
  • F9: Open terminal in current directory
  • F10 (new): Open native file manager (Explorer/Finder)
  • F11: Copy path to clipboard

OS X closed alpha statistics

The closed alpha of fman was first released for OS X one month ago to about 80 users (not all of them on OS X). fman checks for updates every time it starts. The update server receives several such pings a day, so at least some users are already using fman regularly. Not bad for a bare bones alpha version!

Windows implementation journey

When the closed alpha was released on OS X last month, there was already a prototype of fman for Windows. Bringing this prototype to alpha stage required quite a bit of work. It started with some necessary improvements for high DPI displays. Next came codesigning and auto-updating. StartSSL Class 2 certificates are used for codesigning. Automatic updates use Google Omaha, the auto-update technology behind desktop apps such as Chrome. For a technical introduction to Omaha, please see this previous blog post.

Next steps

fman still lacks many basic features. The next few weeks are devoted to adding them. There is a public list of feature requests where you can vote for the ones you think are most important. You can also suggest new features or report bugs by getting in touch. Have fun with fman!

Codesigning and automatic updates for PyQt apps

This technical post is likely only of interest to PyQt developers.

Read post

fman is out on OS X!

The closed alpha of fman is finally available on the first platform: OS X. Here it is, in all its beauty:

If you have registered for the closed alpha, then you should have received an email with installation instructions. If you have not registered yet, then you can still join by clicking "Request early access" on the home page.

Features / Operation

fman is a dual pane file manager. It always shows the contents of two directories next to each other. Only one of the two sides is active at a time – in the above screenshot for example it's the left side. You navigate through the directory tree by pressing Backspace to go up, or by typing the first few characters of a file or directory followed by Enter to open it. By pressing Tab, you can switch from one side to the other.

The main benefit of dual pane file managers is speed. You usually operate them with the keyboard, which is extremely quick. The fact that you always see the contents of two directories makes it easy to copy or move files: You simply navigate to the file you want to copy on one side, then navigate to the directory you want to copy the file to on the other side and press a keyboard shortcut. You don't need to deal with multiple windows, or tediously click around in a directory structure with your mouse.

Here is a list of all currently implemented keyboard shortcuts:

  • Space: Select multiple files
  • F4: Edit (with a text editor)
  • F5: Copy
  • F6: Move
  • Shift + F6: Rename
  • F7: New directory
  • F8: Delete
  • F9: Open Terminal in current directory
  • F11: Copy path to clipboard

If you are a programmer and work with console commands a lot, then I believe you will find F9 and F11 especially useful. It is so much faster to navigate through directories with fman than with the cd / ls commands inside a terminal.

A final note for OS X: On MacBooks, the function keys F1-F12 can by default only be accessed if you press the Fn key at the same time. When you use fman a lot, you will likely find it a lot easier if you change this behaviour. The required option is under System Preferences / Keyboard / Use all F1, F2, etc. as standard function keys. Select this so you don't have to press Fn to get function key behaviour. You can then still get the keys' original features by pressing Fn. Finally, if you find that some of the function keys don't exhibit the behaviour described above but some window-related functionality, check if they are assigned to Mission Control features under System Preferences / Mission Control.

Automatic updates

This first release of fman is a minimum viable product (MVP). Its goal is to get something of value into your hands as quickly as possible. Many features are still missing and will be implemented in the coming months. There is an auto-update functionality so you can get these features, as well as bug fixes and performance improvements, without having to constantly reinstall fman. When you start fman, it checks in the background whether a new version is available. If yes, it downloads a small patch file (usually less than 200KB). The patch is then installed when you close fman. These tasks are only performed while fman is running. There is no "background service" that hogs your system resources. As explained in The Zen of a file manager, the entire process is carefully designed to "just work" without ever getting in your way.

Share your feedback

A big advantage of the lightweight auto-update mechanism is that it enables me to rapidly implement any suggestions you might have. I hope you will already find fman useful (I know I do). But it is intentionally basic so I can get your feedback and act on it. If you ever see anything in fman that you think should be improved, please just let me know! You can always find my details on the Contact page.

Outlook

The main next steps are to get fman into the hands of Windows and Linux users. Closed alpha members will receive an email address when this is done (did I mention that you can still sign up?). Other than that, the focus in the following weeks is on implementing immediate user requests and bug fixes. Thanks for following along, and see you soon!

Update July 20: There is now a public Trello board with a list of requested features.

Transparency

The release of fman's first closed alpha is taking longer than hoped, but that is not to say that there has been no progress. Since the last post, fman has successfully been ported to Windows and Linux from OS X. The only tasks that remain before the closed alpha can be released are to implement an auto-update functionality (so you can get bug fixes / improvements instantly) and to package fman for the various operating systems. The latter involves codesigning the distributables so your OS recognises them as safe and doesn't show warnings "This software is not trusted". Codesigning and auto-updating in conjunction are unfortunately a bit painful. But we'll get there!

In the meantime, there has been a small update to the web site. On the home page you can now see the latest surce code commits made to fman!

Latest commits
  • Update post-commit script to show latest commit on fman.io

    mherrmann committed on Jul 01, 2016

  • Fix a typo in Info.plist file.

    mherrmann committed on Jun 29, 2016

This gives you more insight into fman's development (and in particular, how actively it is being developed). What's more, it enables:

fman's Open Source Promise

Some users of Sublime Text have complained that if its creator ever stopped working on it, they would be stuck in an ecosystem that is no longer being maintained. fman makes the following promise to address this issue:

If no commit is made to fman in more than 6 months, then it will be open sourced under a BSD license.

When you obtain a license, this means that if development on fman ever stops, you will be free to extend and keep using it. If you also have a subscription for updates, then the promise means that you either get regular updates or can use fman for free. Finally, if you develop plugins for fman, then the promise guarantees that your work won't become obsolete. (In case I am unable to release the source code, my family knows how to do it.)

Let's hope that the next post will be about the release of fman's closed alpha!

fman's business strategy

The closed alpha of fman is slowly coming along. The current prototype runs on OS X and looks as in the screenshot on the home page. It supports basic keyboard commands (F4 for editing files, F5 for copying, F6 for moving, F7 for creating a directory, F8/DEL for deleting, F9 for opening a terminal). Porting it to Windows started this week. It already runs there, but isn't yet as visually appealing as on OS X. (If you want to sign up for the closed alpha, that's still possible on the home page.)

Until the closed alpha is ready, I thought I'd share fman's business strategy with you, and how I arrived at it.

First things first, fman is a commercial project. Its goal is to create the most awesome file manager in existence. The resources required to do this are paid for by people who buy fman. This ensures that you get software of the highest quality and lets me devote years of my life to developing it.

Can fman be open source while being a commercial project? There are a few ways it could be monetized:

  1. Tell users that they need to pay for fman, even though it is open source.
  2. Offer a plugin store similar to Apple's and Google's app stores. Allow plugin developers to publish paid apps through it. Take a cut of payments. Also develop and publish own paid apps.
  3. Offer a subscription service that augments the deskop app. For instance, a functionality that lets users log in inside fman with their email address to have their settings synced across devices.

Regarding 1., I spoke with the author of a very popular desktop app who open sourced it a few years ago, but told users that they still needed to pay for it. His revenue dropped 90% over night. He does get a few source code contributions, but the main development is still performed by him. He no longer makes a living off the project.

2. Total Commander on Windows offers a plugin API. Even though there isn't a "store", there are a few commercial plugins (among thousands). Two of their developers told me that they weren't really making any money from their plugins. This may be because there isn't a proper market place for plugins in Total Commander. But it's too risky to base fman's sustainability entirely on this approach.

3. A "sync across devices" feature, while nice, probably wouldn't create enough value to sustain fman. It's still a feature that (at least paying) users should have access to, though.

If you know of an ingenious other way to monetize fman while making it open source, please do get in touch. I would love to make fman open source, I just don't know how to do it sustainably.

License scheme

Update March 3, 2017: The licensing scheme was improved following feedback from fman's users. Please see the licensing page for details.

You can evaluate fman for free. However, for extended use a license must be purchased. Prices will initially be as follows:

Per year Forever
For personal use $/€ 10 $/€ 39
For professional use $/€ 25 $/€ 79

Updates are included for the respective time period. You can use a license on as many computers and operating systems as you like. Best of all, if you convince your employer to buy a professional license then you get a personal license for free. So if you're smart about it then you don't even have to pay for fman yourself ;-)

Two things Sublime Text has been criticised for are that it is closed source and has a low Bus factor: If the creator Jon Skinner is hit by a bus then all users are stuck in an ecosystem that is no longer maintained. Sublime Text has also been criticised for slow development with no releases for extended periods of time and lack of communication with the outside world about what is going on. I have two ideas how these issues can be addressed. You'll be able to read more about them in an upcoming post.

Picking technologies for a desktop app in 2016

Update, December 2017: The gist of this post is that I considered Electron and PyQt. I chose PyQt for its superior performance. Eighteen months and ~2000 development hours later, I'm happy with this choice. I created an open source library with the solutions I've had to come up with. It can save you months of development work!

When developing a new desktop application, the most important choices from a technological point of view are which programming language(s) and GUI framework to use. fman's combination needs to tick the following boxes:

  • Cross-platform (Windows, Mac, Linux)
  • Good performance
  • Support for custom styles
  • Simple for users to extend via plugins
  • Fast development

What's interesting is that the choices of programming language and GUI toolkit influence each other. For instance, if you pick Electron as the GUI toolkit (/platform) then you must use JavaScript.

Speaking of Electron, it's a very exciting field at the moment. For those of you who don't know it, it's a platform for developing desktop applications that use Chrome's rendering engine for their GUI. Electron-based apps basically launch a (trimmed-down) version of Chrome on start-up, and then use JavaScript/Node.js to do everything you couldn't normally do with a browser, like accessing files or other system resources. Their GUIs are writen in HTML / CSS, just as on a web page, with lots of JavaScript.

Electron is the foundation for Github's Atom text editor, and Microsoft's alternative Visual Studio Code. Both of these tools have gorgeous GUIs. The fact that Electron apps are based on web technologies which are very widely known among developers has huge advantages for their extensibility (or "hackability" as Github calls it). A good indicator of this is that Atom already has about the same number of plugins written for it by users as Sublime Text, even though it has only been around for 2 and not 9 years. (Granted, Github's community also plays a large role in this, but it's impressive nevertheless.)

The weak point of Electron is performance, in particular startup time. Electron apps essentially launch a browser on start-up. On my late 2014 machine, this takes more than a second. On my older machine from 2010, it's close to five(!) seconds. There are attempts by the Electron community to solve this, but none that would seem to bring startup time significantly below one second. A workaround would be to always leave fman running in the background, but enough applications already do this and fman has no right to hog your system's resources this way. So, while it would be great to be able to use Electron for all its advantages, fman's focus on speed does not allow it.

At the other end of the performance spectrum is writing a custom GUI toolkit in C/C++. This is the approach taken by Sublime Text. Its performance is amazing and one of the main reasons why many people haven't switched to Atom. A drawback of this approach is that developing in C/C++ takes a lot more time than in higher-level languages. And creating a new GUI toolkit is also not something to be taken on lightly, especially when you think of all the things you have to deal with (blinking carets, scrollbars, font rendering, ...).

So, it makes sense to use an existing GUI framework. fman's emphasis on a beautiful UI requires a lot of custom styles, which rules out native widgets and libraries like wx. The most prominent framework that remains is Qt, and this is what fman uses. Some people have warned that Qt apps typically don't feel truly native. But, it is possible to customize the look and feel far enough to overcome this and make the fact that it's not fully native transparent to the user.

In the short time since fman's development started, basing it on Qt has already yielded enormous benefits. The current state of fman is a prototype that looks as in the screenshot on the home page. It launches instantly even on my old machine and can be used to navigate, copy and move files and directories. Imagine how far you would have gotten in a month developing your own GUI framework in C++! I think I would still be stuck on the build system ;-)

This leaves us to pick a language. The official Qt bindings are written in C++. Unfortunately, C++ is a horribly unproductive language (at least for me). A popular alternative in recent years is Go. Go is "only" two to four times slower than C, but easier to use and offers perks like a very small memory footprint or the fact that it compiles to single, self-contained executables. A drawback of Go is that it could not (easily) be used for fman's plugin API since it is not an interpreted language (so plugin developers would have to recompile their code after each change). What's also a disadvantage of Go when it comes to managing files is that its Unicode support is apparently not very user-friendly. All in all, It appears that Go is (currently) better suited for server-side apps where performance and memory footprint are critical.

Enter Python. After 15 years of programming, Python is by far the most productive language I have encountered. The standard libraries are awesome. So many people use it that you can just Google for a problem and usually find a ready-made solution. A good example of this are the Qt bindings (PyQt), which were developed by a third party. Python is also interpreted, so when you develop a plugin for fman, you can simply change your code and see the effects immediately. Its Unicode support (as of version 3) is great which means that you don't have to worry about bits, bytes or encodings. Finally, Python is extremely easy to learn. Even if you haven't used it before you will be able to pick it up immediately. It has made me a much more productive programmer and I am confident it can do the same for you.

No choice is without trade-offs and so also Python has its drawbacks. The main one is that it is extremely slow in comparison with eg. C/C++. fman manages this by only using Python for the "business logic" / plugins and performing computationally expensive tasks such as rendering through Qt / C++. Still, the amount of time spent by fman in Python code is something to keep a close eye on.

When Apple launched the App Store, a friend of mine from college made £50,000 (the equivalent of $100,000 at the time) writing apps over the summer. fman will have a package manager for installing plugins and may also allow you to charge for the plugins you develop. Some people have said that they would prefer a compiled language in this case, since Python's interpreted nature would essentially give everyone who has a plugin access to its source code.

While it is true that it is possible to reconstruct the source code from a Python application with near 100% accuracy, it also needs to be said that compilation is not obfuscation. For example, most Java programs can be decompiled with near-perfect accuracy. The solution in both cases is to use an obfuscator. For Python, there is a good obfuscator by Bitboost, which produces code that is virtually impossible to deconstruct.

In summary, fman uses Python and Qt via the bindings provided by PyQt. To see what it looks like, click the button below.

In the next post, you can read about some of the business strategy behind fman.

Appendix: Rejected GUI frameworks

This post picks Qt because it is "the most prominent" GUI framework fulfilling fman's requirements. Some readers have asked why it was chosen over other alternatives. The striking argument remains that Qt is what most people seem to use, which has a lot of advantages eg. when it comes to documentation on the net or language bindings. If you need to pick a GUI framework, you may be interested in the following list of alternatives, and why none of them was picked over Qt:

JavaFX / Swing
Can only be run in a Java virtual machine, which takes too long to start up.
GTK+
Seems to be the second-most popular alternative to Qt. Supposedly it works best on Linux. Since most of fman's users are on Windows / OS X however, this would not be an advantage.
wxWidgets
Very limited support for custom styles.
Tk
Old and stable with support for custom styles, but much less popular than Qt.
Windows Forms
Not cross-platform.

The Zen of a file manager

When you run the statement import this in Python, you get an opinionated list of principles that guide the programming language's design. Much in the same spirit, here are the core values driving fman:

Looks matter.
Speed counts.
Extending must be easy.
Customisability is important.
But not at the expense of speed.
I/O is better asynchronous.
Updates should be transparent and continuous.
Development speed matters more than program size.

fman is fast, beautiful and extensible. It's also customisable, but you can't change it completely. The reason for this is that customisability costs performance. For example, the Atom text editor is very adaptable but suffers from severe performance issues.

The next point on the list – that I/O should never block the GUI – is obvious for a file manager. The item that follows is more interesting: Have you ever really needed to get something done and the app / OS interrupts you for some updates? You don't care. Manual updates are also tedious. fman addresses this by updating itself in the background similarly to Google Chrome. It does so without unnecessarily straining your system's resources or bandwidth.

Finally, program size – both on disk and in RAM – affects your workflow much less than some extra polish in the other areas mentioned above. Sublime Text for instance is very efficient on resources but has been criticised for its slow development. Part of the reason for this is likely that it is developed in C++ with a custom UI toolkit. All else being equal, fman therefore prefers ready made solutions, even if this increases its size.

The next post explains how these principles affect fman's technology stack. Stay tuned!

Update October 6, 2017: The last Zen item was replaced by a more powerful statement. See the new blog post for details.

Introducing fman

Do you know the feeling when you just can't get an idea out of your head? Especially when you're confronted with it every day?

When I switched to Mac after 20 years on Windows, the one thing I missed most was Total Commander. Every time I had to use Finder (or Explorer, for that matter) I felt so slow in my workflow. It probably doesn't matter much when you don't work with files a lot. But if you do, it becomes a real pain point.

Of course there are alternative file managers for other platforms. But none of them make you really go wow. And even Total Commander is showing its age when it comes to user interface or plugin system. In the age of Sublime Text and Atom, I think we want more than closed, single-platform software. We want speed, a beautiful interface and a vibrant plugin ecosystem that can be accessed right from within the application.

This project realizes the idea that there can be a better file manager. I am dedicating the next years of my life to bring you, dear visitor, the file manager you will hopefully not be able to live without.

Michael started fman in 2016, convinced that we deserve a better file manager. fman's launch in 2017 was a huge success. But despite full-time work, it only makes $500 per month. The goal is to fix this.