<< back

Marta 0.8.1

File manager

Category: Productivity
Price: Free
Popularity: Medium
Version String: 0.8.1
Release Date: 2021-08-04
Architecture: Intel & AppleSilicon(ARM)
Minimum OS: macOS 10.12
Vendor Name: Yan Zhulanow
Homepage: marta.yanex.org

Version History 0.8.1

Read the blog post:
Marta 0.8.1: Lots of updates!
Announcement: 0.8.1 is going to become the last version of Marta that supports macOS 10.12 (Sierra) and 10.13 (High Sierra). Please read this issue for more information.
• New features
◦ New Look Up implementation
▪ Complex queries #163
▪ Wildcard search #119
▪ Multiple substring search #349
◦ New preferences editor implementation
▪ Incomplete colorisation of color codes in Preferences editor #586
◦ "Open As…" action came back with the better implementation #727
◦ Save active pane and name under cursor on restart #710 #743
◦ Open a new tab on middle click #735
◦ Allow specifying default pane parameters #739
◦ Recognize .sublime-package extension as a ZIP file #714
◦ "Navigate to Original File": allow opening in the inactive tab #717
◦ Ctrl+Tab and Ctrl+Shift+Tab registered as hotkeys for switching tabs
• Bugfixes
◦ "Analyze disk usage"
▪ Consumes a lot of memory when executed on huge folders #747
▪ Doesn't work #709
◦ Quick Select: Marta crashes when filtering in "/" #745
◦ "Show directories on top" is always enabled on relaunch, regardless of saved state #734
◦ Right click should activate a context menu even if the pane is not focused #732
◦ CLI requires new macOS even though Marta itself works on 10.12 #729
◦ Quick look does not update on switching panes #721
◦ Key overlay has sharp corners #712
◦ Corners of the action bar don't match new window corners on Big Sur #701
◦ "Duplicate" on files with complex extensions (such as tar.gz) works incorrectly #687
◦ "Get package contents" don't work on a symlinked file #633
◦ Path completion isn't shown for paths starting with '../' or './' #390
◦ Search ignores content within //Library #318
◦ Allow vertical scrolling in breadcrumbs #768
◦ Copy/Move: delete existing files on replace instead of overwriting the content
◦ Fix Ctrl+Tab hotkey handling #184
◦ Fix control sizes in dialogs #783
◦ Command-line helper
▪ Open tabs in the active window (instead of the last opened one)
▪ Saved windows aren't restored when launched using the command-line helper
▪ Open panes launched using the command-line helper with default settings
• Other changes
◦ New Marta icon #505 #675
◦ New Marta domain (marta.sh)

Description:

File Manager for macOS.
Native. Extensible. Fast.

Why an API?
Before I started investing time in Marta, I tried a lot of macOS file managers. All of them were quite mature applications with lots of features. However, it doesn’t matter how much batteries are included – one day you realize the functionality you need the most is not there.

For some reason, macOS applications rarely have plugin APIs. Even system applications are made with a strong will against any external modifications. As a result, every time you need a feature, you have to ask the developer to implement it. If you are lucky enough, your request will be prioritized somehow and put into a long queue of tasks. God knows how much time it will take to satisfy your demand. A week? A month? A year? Glad if so.

As a software developer, I’d happily do the thing I need my myself – and share it with the whole world, as I believe that if I need something, probably there is someone else who needs the same. That’s why Marta has an open API. Everyone can write plugins for Marta and publish them under any conditions.


What’s wrong with Swift?
Starting from 0.1, Marta had a Swift API. It allowed not only to add new actions and context menu items, but also to monitor different kinds of events, and even to add new file system implementations. Moreover, as Swift is a native language, the performance was outstanding. However, I was not 100% happy with the result, as there were several drawbacks:

▪ Swift changes rapidly. Until Swift 5, there was no ABI backward compatibility, so all plugins had to be recompiled each time Marta switched to the next Swift compiler version.
▪ Library evolution support is still not here. As a Marta developer, I wanted to provide a stable and backward-compatible plugin API. Unfortunately, I couldn’t do it without enabling experimental features.
▪ Making Swift plugins required installing Xcode – a powerful but quite a massive piece of software. Not only had you to set up it, but you also needed to get used to the IDE to make something meaningful.
▪ You had to either distribute binary versions of plugins (built for some specific version of Marta) or share the XCode project.

While using Swift seemed natural at the time of 0.1, it became clear that it contradicts with Marta philosophy: everyone should be able to write a plugin in a couple of minutes. Also, sharing plugins should be easy – ideally, a simple plugin should consist of a single source file. I spent a lot of time exploring alternatives and finally chose Lua.


Lua API
Lua is an embeddable scripting programming language. Here is a list of things I like about it:

▪ Lua is simple and predictable. If you already know some procedural programming language, learning it will be easy. Its official site has a reference manual containing everything needed.
▪ Unlike alternatives, such as Python or Ruby, both interpreter and runtime library are incredibly lightweight.
▪ Lua is mature. Its development started in 1993, and the last major version, 5.3 came in 2015. That doesn’t mean the language is dead – the actual release (5.3.5) was published exactly a year ago.
▪ Lua is robust and battle-tested. It’s heavily used in the game industry as a scripting language.
▪ Lua has outstanding interoperability with C – and with any languages that expose C API and allow to link against C headers. For example, it’s possible to write a plugin in Swift or Kotlin/Native.
▪ There is no GIL. You can achieve true multi-threading with Lua, as long as threads don’t share any data directly.