This is just a quick post to talk about what I think are some very important considerations when it comes to adding extensibility to Monarch
So firstly, we need to think about the concept of extensions themselves, I’m going to start by assuming everyone reading this agrees that having extensions is vital (and personally I believe Monarch stands zero chance without an impressive ecosystem of them). When it comes to extensions, I think there are two key factors that turn them from a nice-to-have, to a major driving force behind an app’s success (like Raycast). Those are: quantity, for it to be an impactful feature there should be a significant amount available to users; and secondly, power, extensions should have a high ceiling to what they are capable of, in order to provide maximum usefulness.
I’ll start by exploring quantity. While as a developer this may seem a little tough to control, you can’t force people to develop extensions for your app, but there are ways to incentivize it:
Accessibility — developing extensions should be a very accessible process. This means good documentation, and an easy way to share them (like via an extensions repo/site). This way, when someone thinks “oh I wish an extension existed to do blank”, there will be minimal friction in creating the extension, and thus a much higher likelihood of it being created and published.
Also accessibility — this time in terms of languages. If we want as many developers as possible making extensions, we need to offer accessible ways for all those developers to create them. I personally think there are three languages that should be supported: Python, JavaScript (or TS), and shell. Python and JS are obvious, they’re easily two of the most widespread and versatile languages, each one opens Monarch up to a huge pool of developers, and I think supporting both of them would be a great feature. As for “shell”, by that I mean, for simple extensions, it should be possible to simply write a Bash function. Shell scripting is very well known and fairly bare-bones, in my opinion, that makes it perfect for creating simple extensions. As for why I said Bash instead of Zsh, that’s just because it’s more of a standard, and it would lead to easier Windows support later down the line if needed (users would just need to install Git Bash, or it could even be embedded into Monarch, Zsh support is worse on Windows). Lastly, I feel I should mention that while I briefly thought about the idea of some kind of extra-simple extensions like the existing superlink system, I think those shouldn’t count as traditional extensions or be shareable, as they would likely be way too numerous.
And the second point, power. This one is honestly much simpler. I’m not sure what level of extension support Monarch could offer in terms of interfacing with the app itself, of course the user could just type in a custom command and then fill in arguments, but there might be room to innovate a bit with some cooler stuff. Perhaps extensions could offer custom actions to perform when an app/file is searched, or even allow for the creation of custom “modes” in Monarch (that would be pretty awesome actually), or even stuff like custom sort orders in the search. But I think that the three programming languages I mentioned above should be more than enough to be able to make some extremely powerful extensions.
Anyway, these were just some thoughts I had. I really do want to see Monarch succeed, but competing with Raycast is going to be an extremely difficult uphill journey. I just hope you can make the right decisions in development so that it can become a reality. That’s all, have a good day.
Please authenticate to join the conversation.
Suggested
💡 Feature Requests
10 months ago

Sidar
Get notified by email when there are changes.
Suggested
💡 Feature Requests
10 months ago

Sidar
Get notified by email when there are changes.