{
  "$type": "site.standard.document",
  "canonicalUrl": "https://devtools.fm/episode/38",
  "content": {
    "$type": "at.markpub.markdown",
    "extensions": [
      "YAML"
    ],
    "flavor": "gfm",
    "frontMatter": [
      {
        "description": "Thomas Paul Mann, Raycast founder, reveals how they built the ultimate Mac command palette with custom React renderers and powerful plugins.",
        "publishDate": "2022-09-01",
        "tags": [
          "technology",
          "coding",
          "programming",
          "raycast",
          "swift",
          "mac",
          "apple",
          "command palette",
          "spotlight",
          "productivity"
        ],
        "title": "Thomas Paul Mann - Raycast"
      }
    ],
    "renderingRules": "remark-gfm",
    "text": {
      "$type": "at.markpub.text",
      "markdown": "<div style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; margin-bottom: 1.5rem;\">\n  <iframe\n    src=\"https://www.youtube.com/embed/sND7y7Hhey4\"\n    title=\"YouTube video player\"\n    allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n    allowfullscreen\n    style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;\"\n  ></iframe>\n</div>\n\nJoin us this week with Thomas Paul Mann, one of the founders of Raycast, a new command palette for Mac.\nWe talk about the history of Raycast, how it came to be, and what the future holds for the app.\nThe app is powered by a powerful plugin system that use a custom react renderer.\nIf you haven't checked it out yet, you should definitely give it a try!\n\n[Join our patreon for the full episode](https://www.patreon.com/devtoolsfm).\n\n[Thomas' Twitter](https://twitter.com/thomaspaulmann)\n[GitHub](https://github.com/thomaspaulmann)\n[raycast Twitter](https://twitter.com/raycastapp)\n[raycast](https://www.raycast.com/)\n\n### Tooltips\n\n#### Andrew\n\n- https://pnpm.io/\n- https://motion.dev\n\n#### Justin\n\n- https://github.com/esamattis/react-zorm\n- https://github.com/PipedreamHQ/pipedream\n\n#### Thomas\n\nMy tooltips: I recently re-discovered newsletters for me. Here are three that I read every week:\n\n1. [Console Newsletter - The best tools for developers](https://console.dev/)\n2. [Pointer - A Reading Club For Software Developers](https://www.pointer.io/)\n3. [Refind - Get smarter every day](https://refind.com/)\n\nFor tools, I rely heavily on Raycast. Few of my most used extensions:\n\n- [Visual Studio Recent Projects](https://www.raycast.com/thomas/visual-studio-code)\n- [GIF Search](https://www.raycast.com/josephschmitt/gif-search)\n- [Google Translate](https://www.raycast.com/gebeto/translate)\n\n## Sections\n\n- [00:02:24] Building Raycast\n- [00:06:16] Extension API\n- [00:15:23] Perfecting UX\n- [00:17:38] Hacking Features\n- [00:22:54] Community Creativity\n- [00:26:45] Building for Teams\n- [00:32:44] Fostering Community\n- [00:39:23] Evolving Computer Interaction\n\n## Transcript\n\n**Thomas:** I think now is I think there was a little bit of a trend of like startups and companies and projects pushing the boundaries to benefit by speed. To make things faster. And this is on all different levels. My belief and my hope is like that we are getting more down to this, like concentrating on really for professionals in a way.\n\n**Andrew:** hello welcome to the dev tools FM podcast. This is a podcast about developer tools and the people who make them I'm Andrew, and this is my co-host Justin.\n\n**Justin:** Hey everyone. We're really excited to be joined today by Thomas Paul man. Thomas is the CEO and co-founder of Raycast. Raycast is a tool for Mac. You can kind of think of it like the, the spotlight except supercharged and Thomas I'll give you an opportunity to do a better elevator pitch than that.\n\nBut before we get into that would you like to tell our audience a little bit more about yourself?\n\n**Thomas:** Sure. Yeah. I mean, first of all, thanks for having me listening to dev tools dot FM quite regularly, so really pumped to be here. And yeah, a little bit about myself. I'm a developer by heart turn into a founder and CEO lately and running Raycast yeah, you, you describe Raycast how we describe it often, which people were like familiar with the Mac ecosystem and we describe it often as a, as a spotlight on steroids.\n\nSo we cover all the basics, like launching applications and searching files and all the local bits. But yeah, we put the layer on top of that and making it possible to extend raycast in any way you. So we have a store where you can search what other people have built. So there are extensions, for example, to connect, to GitHub, to check your open pull requests or create pull requests and stay on top of your issues.\n\nYou can check other tools like linear and Figma or also have more fun things like searching your gifts that you maybe wanna leave in the pull request review. And this is like the exciting bit I think about for developers in general, which I'm really happy to talk about in, in this session as well is we have an API which basically allows you to build whatever you really want and make it very easy to extend Raycast to the way you want to have it.\n\nBut also keeping it consistent with all the other extensions on the user behaviors we have. So it keeps being like a, what we often describe it as a general productivity tool for developers, but also we have designers and other people who basically just work on a computer and make them more efficient.\n\n#### [00:02:24] Building Raycast\n\n**Andrew:** So, why did you build it? Like, there is spotlight that's something that comes with every computer and then there's Alfred, which probably before Raycast almost everybody had installed. So why build Raycast?\n\n**Thomas:** Yeah, definitely. I mean the, the honest truths are basically me and my cofounder, the got frustrated with, with software and how it is to use and don't get me wrong. I mean, software became quite incredible and quite good over the years, but a trend that we saw, it became more of a clicky thing. So you have to mouse, click everything and navigate around.\n\nAnd we as developers, like, like keyboard shortcuts to be faster to do those kind of stuff. And we felt like we were missing out on, on the new apps a little bit. And, and that was what inspired Raycast like really thinking about what we as developers know, how can we bring that to the next level? And allow people in a way to use their existing apps also more efficient.\n\nRight? So, I mean, we all rely on apps every day to do our work and you can't really replace them, but we thought about what is it, if we put a new layer on top of that to make it more efficient, to use with, with the paradigms we know, right? Like in your IDE, you have in vs code, you have a command palette and then you search for stuff and you execute that.\n\nAnd in Raycast is very similar. It's just global. So you open it globally and you can launch an app as an easy task, but nowadays you can do full workflows. For example I using a lot to create issues and linear and assign into my teammates or staying on top of my linear issues as well, just being like more flexible.\n\nAnd this was really like the, the culprit of like what we felt. There isn't like a tool which really works for professionals who wanna basically shave off this microseconds of every workflow. So this is what, what inspired really us to build, build Raycast in the first place. And then, yeah, we started that two and a half years now ago and, and keep going with that.\n\nAnd I think there is still a lot to, to explore, but this is really like where we felt there is a need for a tool like that and also a modern take on it. Right. So if we look at Raycast, we wanted to have a beautiful tool. I mean, both co-founders are developers, but we are very keen about design because I mean, I use my Mac too many hours a day and the, the least that I can enjoy there is having like nice pixels in front of me.\n\nRight. So we wanted to make it a pretty tool a very functional tool and, and speeding up workflows for, for us and everybody else as well.\n\n**Andrew:** The way it's a layer on top of just everything is, is so cool. Like the first feature that I, I really liked was the reminders integration. It's just like having this global command palette where you can, like, not really task switch is, is really powerful.\n\n**Thomas:** yeah, yeah. This, this is a great example. Um, I, a lot of the times when I think my workflows before Raycast it was, I had a lot of context switching, right? Even for little things like, Hey, remind me about that later. You need to open usually a new app, do that and losing the context. And, and that's really annoying if you're in the flow state of programming or, or other things you just wanna concentrate on.\n\nSo, this is like, I think where the global mechanism really shines. It's like, no matter where you are on your Mac, in which app you just press our global hot key and then you right into Raycast and can do all of the things. And yeah, the reminders one is, is one of our earliest extensions.\n\nAnd with a lot of those things. This came actually out of feedback. I remind I remember the reminders one was just one of our first users and he said, Hey, I'm, I'm a heavy reminders user. And it would be just great to have an extension with it. And well, we just build it. And first I think we had just creating reminders because this was kind of like the workflow you usually wanna do.\n\nBut then later we just evolved in that you also can see your reminders, change them and basically have your own yeah. Fully, fully reminders that are backed by upper reminders. So they're synchronized and everything.\n\n#### [00:06:16] Extension API\n\n**Justin:** So, how do you just, I guess maybe from a technical perspective, just outta my own curiosity, how do you sort of give people the ability to generate their own extensions and also have this like really fast really performant and very like native experience. Like just like you have to provide like a little OB JSON object or something that like gives you the shape of what information will come back or like, what does that sort of look like?\n\nThe process of developing an extension?\n\n**Thomas:** As with a lot of the stuff, when you work on something, it evolves. So the first and foremost thing we wanted to start was making Raycast really fast. This was like a core promise, right? If you try to make something faster than others, you kind of need to double down on that.\n\nSo that means we want have the best tech tech that supports that, and also being very close to the native things, right? Like things that end for ask with reminders, they're like deeply integrated in the apple ecosystem. So we wanted to support that as well and wanted to make Raycast, feel like a native app that is just like part of the system.\n\nAnd it's just this, this add-on you get, and then you have the superpowers to do more so early on, we decided to build a native application. So the entire application is written in swift which is basically as close as you can get to the apple platform. And that allows us to integrate with native frameworks that apple has, for example, to access reminders.\n\nBut it also comes with as a great deal of speed, right? So we, we have everything to make it faster. And it also comes with this native feeling like in the UI. So the UI feels and looks like apple because it's built on their primitives. And what you see in Ray cause is actually. We funny enough, don't use that much of the core components that ever gives us because we feel like they sometimes a little bit dated and funny enough, also not that keyboard accessible.\n\nSo we build it pretty much everything our itself on top of that and have our own UI components that adding up there.\n\nAnd initially we build it all the extensions natively. So everything was built in swift. We shipped that, we worked with our users, what they want, they asked us for something and then we built it.\n\nAnd as I mentioned, a lot of those things came out of our own needs. So we used linear as issue trackers. So at some point I decided, Hey, I wanna use that in Raycast. So I built a few commands and extensions for that. then we made it public people used it. But you can only go so far with it, right?\n\nSo we know there are too many tools. We can't build all the stuff ourself and early on, we, we already had a plan to make it a kind of a platform where people can build their own stuff and share it with others and really end to end. So that other people can explore it, who might not be a developer, but still can use it.\n\nI wanted to make it a first class experience. So then the, the journey began to build an API and our API is, is quite special because it's not a web API, right. You don't make a network request to do something. So it's, it's an API that works on your desktop. So it's a more like of a framework in a way that people can use.\n\nAnd if you distill it even more down, I think the closest is like a component system. So what we provide you is a component system with our lists and forms and other UI components that make up Raycast. So they use native features. But the extensions are written in react. So we went down the rabbit hole of building our own react renderer.\n\nSo for the ones who don't know, so react is pretty flexible in a way. So you can. Have to whole react, run time. And one use case react dom that everybody of us knows for the websites and then react native to render something on iOS and Android, but it can spit out whatever you want. So you can spit out text.\n\nAnd I think there is a renderer for terminal to build react apps that make terminal apps. And we decided like we wanna do that for Raycast. And this was a little bit of a journey like you don't end up there immediately. Right? So first we built something which was more Justin what you described.\n\nYou have a JSON thing and you give it to the app and we render a list, but then you become quickly seeing the bottlenecks of that. So what is, if you wanna make an update to it? What if, if you have a following screen depending on it, what if, if you wanna do something like an optimistic update or some caching and all of that becomes very prickly and you're ending up building your own UI framework.\n\nAnd we went back and it's like, said, well, there is a UI framework that basically everybody knows, or at least a lot of people can learn about, which is react. So then we basically build our own react renderer, which then communicates with the app and essentially renders native components. So in a nutshell, it's a little bit like a lightweight react native, very tailored to our use case, not such generic to allow people to build something consistent, but super flexible due to that you can use react and it runs a node. So you can pull in whatever NPM package you want and it usually just works.\n\n**Justin:** That's awesome. That's really awesome.\n\n**Andrew:** yeah, the DX for that is SU super cool. Like just seeing react code is like, is, is mind blowing that it's, it's so awesome that react is so flexible in that way. To where it's like this universal UI language. And it doesn't really matter where you're rendering that UI.\n\n**Thomas:** Yeah, this is, this is what makes it so cool. And I think there is um, from Dan this cool block post reacting it as a UI run time. If you read this blog, post just changes how you think about it, right then just like this is yeah. Literally like UI runtime and what you do with it is up to you which was really helpful for us.\n\nAnd yeah, this is the thing which we enjoyed the most. Like we wanted to, one of our early goals was to build a create developer experience, like really something that people admire and love. And it turns out is really hard to do that yourself without relying on the existing ecosystem. Right. Um, And I mean, maybe people can pull it off to make something better and the existing stuff, but there is like something that is not too under value is like familiarity.\n\nIf you know something and you can do that again, that's the best developer experience you can get because you know, it, you don't need to learn something new you're productive from day one, you know, your utilities that you pull in and all of the benefits that come with it was one thing that we were seeing like as a huge opportunity, like trust using what people use.\n\nAnd well, if people don't use react, there's like a billion pages teaching it to you. Right. So you can basically work with the, with the community together instead of like trying to really reinvent the wheel.\n\n**Justin:** Yeah, that's awesome. That's, that's such a clever use of react renderer. I was just like clicking through the API examples and yeah, it's just, it's just really fascinating how seamless it is. So if you're reaching down and you're like trying to do something with the system, maybe you're like, I'm trying to come up with an arbitrary example trying to control some other program on your Mac.\n\nDo you provide interfaces for all of those sorts of things directly from your API? Or is that something that you just like, Hey, use the native APIs for whatever this is? Cause, I mean, I'm assuming it's running JavaScript core. Maybe you have some access to lower level things through that.\n\n**Thomas:** Yeah. So yeah, so we don't run JavaScript core. We actually run node JS which was another crucial decision.\n\nSo we started also with JavaScript core and basically to make the run time very isolated and building up the features we need. But then is, is similar, right? So there is an existing ecosystem out there and we had this offer phase of the API.\n\nAnd a lot of people say like, Hey, I just want to use this NPM package of why can I not use it? Right. And so you're running all in this friction, which is really hard to explain, and you can write pages of documentation, why it is like that. But, well, a developer doesn't really have time. Right. And you just wanna build something and don't want bother with all the rest.\n\nSo we basically switched then from the early version of JavaScript Core to node JS to bring in also the whole NPM ecosystem. And it still has a few limitations. So you can't have dependencies that rely on react Dom because we don't have any HTML or CSS involved, but you can have everything else that you can think of node.\n\nSo things like node faction, stuff like that works out of the box. And that's pretty cool. And then for the native APIs, what we do is we exposing them to the run time with Raycast. So you have for example, APIs to copy something to the clipboard or to paste something where your current cursor is.\n\nSo having this deep integrations, which comes then out of the box with the Raycast API that you can use. And then often also this extensions trust make heavy use of existing NPM libraries to connect to third party services talking to APIs with Octokit to GitHub and those kind of stuff, which is like all the benefits you're getting when you're building on top of an existing ecosystem.\n\nAnd how you can control on the Mac. Different applications is often via apple script. At least this works pretty nicely on an native apps, but also a bunch of other reps support that. So it helps you for example, on Spotify to skip to the next track and play pause and those kind of things, which is super handy.\n\nAnd this is then basically just done by running apple script in, in a shell environment, essentially.\n\n**Justin:** It's really cool.\n\n#### [00:15:23] Perfecting UX\n\n**Andrew:** So Raycast is like this kind of like global like command K menu. Do you have any plans to like, make it context aware? Like, it'd be cool if I was like in my terminal and I hit Raycast, I got like maybe a different set of options than if I were in app.\n\n**Thomas:** Yeah. Good question. Um, This is certainly something which we had initially thought of and, and haven't fully went down with it because we first wanted to nail a little bit of the API and exposing that and, and keeping it lightweight. But contextual awareness, I think is you tried. I think there are certain things which fit into this kind of stuff.\n\nLike the app you use at the moment, the, the time of your work, even maybe the services that are running somehow and making predictions. I mean, it's all about with those kind of things to make it useful and predictable because in Raycast the people develop a lot of muscle memory, right? So I use almost blind now, Raycast I know if I open Raycast and type two letters, I get exactly this result because of our ranking.\n\nAnd so you need to balance that with like context awareness, which oftentimes if it isn't implemented well, becomes very unreliable because you lose trust. It's like this, this um, yeah, you need to build trust with it almost right. You, you wanna have good recommendations and if they're hitting good that's well, but if they're two or three off, you feel like you're losing trust with it.\n\nAt least I have this experience with things like GitHub co-pilot I think is a good one. Right? So at the beginning it's like, oh wow, this functions really well. But then when you really code quickly and then realize, well, this is not what I want. It becomes a little bit of less trustworthy in a way. So you wanna find a good balance.\n\nAnd so this is something which we probably wanna explore. It pops up in our community from time to time. And I think the nice thing there is like, you can make things even faster, right? And then this is what is in our mind always what's the, the next stage. How can we make it faster that you need less interactions to get where you wanna be?\n\nSo this is certainly something interesting, and we don't have concrete plans on that in a way, but it's something very often not aware, things like that. Getting explored internally. We have like a concept where every Friday we hack on something and then people pick up certain stuff and experimenting with it.\n\nAnd then one thing leads to another and then there might be projects coming out of that.\n\n#### [00:17:38] Hacking Features\n\n**Justin:** Yeah, I did see your, your hack day listed on your, your team's page. That's that's pretty cool. Uh, So what sort of inspired taking that on like, where'd that come from?\n\n**Thomas:** Yeah. So I think all the way going back, like I've worked up to three years at Facebook and I have this culture of hack hackathons, right. So I think in London, I had it every quarter hacking on something. Me and my co-founder worked there at the same team and really took this opportunity always to hack on something that we feel good about.\n\nOftentimes funny enough, it were tools that we wanted to build for ourself just to make us more productive. So you can see a, a theme here. And then like in Raycast when we started that a lot of the early features just came out. Um, The team when they had their own news case and wanted to build that.\n\nI think the first one was clipboard history. I just hacked that because I wanted to have a clipboard history in the tool. It felt so natural. And then script commands, which is another way to extend Raycast came out of a hackathon with the decide project radar. So which we came out of a hackathon, which is a page where you can highlight code blocks and generate an image that you can share then on Twitter we did a ton of other things and usually this was always problems for ourself when we solved them.\n\nSo it felt quite natural. Like we were kind of doing it and we really liked what came out of it, but it didn't really have the proper format. And then we wanted to formalize that. And so we put it in what we call Ray day, which is basically now every Friday. So every Friday in the morning we post it's like who hacks on what?\n\nAnd then people come up with their ideas and it's entirely up to them what they wanna spend the day on. So it can be addressing feedback. Fixing bugs can go pretty wild on like doing proof of concept on something building features whatever they wanna do. And so we keep this and there are a few things that came out of that be, which became really big.\n\nOne of the things that I always like tell us the, the calendar that we have. So we have this integration in Raycast, which you your upcoming meeting. And then with one click, you can join zoom. This was the feature that we early on, put it in because well, when the, when the world went remote was very often that you needed a jump and a zoom meeting and was very annoying finding the zoom link.\n\nSo we, and this, Andrew comes back to being contextual aware. When you have a zoom meeting coming up, you just open Raycast and you build at some point it's muscle memory, just pressing return because, you know, there is something where you can join a zoom meeting. And then you're jumping in the video conference call.\n\nAnd then during a Ray day one person said, Hey, it would be cool to show the upcoming meeting and the menu bar just like, as a reminder of like, Hey, you have five minutes left, wrap your thing up, go into the meeting. So, sorry, bill a that and then basically shipped it. And then people really loved that.\n\nIt was like just the little hack he did. And people really loved that on Twitter. And then, so the following Ray day is he just improved it and added more and more functionality. And recently we shipped also then an API to basically put whatever you want in the menu bar. So it came all out of like this, this hackathon things and piling up. Just by like doing something that one person liked.\n\nAnd then we realized, Hey, this is actually something which is really cool. And so now we integrated in our platform that for example, you can see you unread messages or notifications of in the menu bar and other things to just integrating that for us as to explore this as well.\n\n**Andrew:** Yeah, that that feature is super cool that like you, you think Raycast is just a, like the command pallete spotlight thing, and then you have these menu bar items. That's awesome. Like it, it lowers the bar, the bar to entry to make an app that lives in your menu bar by like, like exponentially. Like, I would have no clue how to start doing that on my own, but building a Ray cast extension with react, like that's, that comes natural to me as a front end developer.\n\nAre there any other, like parts of the Mac that like you think Ray cast extensions could eventually extend to?\n\n**Thomas:** Yeah. I mean, general, we have way too many ideas what to do with Raycast. it's one of our problems where it evolves just further and further. But yeah, I think like there are, the Mac is interesting, right? So. I think there are like a lot of productivity tools who used to make in a creative way.\n\nI think menu bars is one of those, right? What people put in the menu, bars, not sure if that was predicted, but it certainly is really interesting what they have there from system information to other things. So it felt to us this is something which is really cool to get in there. And then there are like other pieces there, which we might want to explore, like basically bringing more dashboard, like information to people.\n\nIt's just something which, I mean, one thing is like you search something and opening and interacting with something. But oftentimes, and I think there's just where menu bar applications are so trendy is like, you just don't need to do something. You just have the information immediately. Right. So you're cutting away all the rest.\n\nAnd this is great for like staying on top of it, but it's also great for seeing information that you regularly check. And this is, I think something which we wanna double down in the future a little bit, like bringing more of this experience to the Mac and finding a good place for that to integrate there.\n\nAnd being basically close to the native stuff.\n\n#### [00:22:54] Community Creativity\n\n**Justin:** That's really cool. So given that Raycast is such a, an extensible platform, what are some of the favorite things that you've seen the community build with it?\n\n**Thomas:** Yeah, that's a, that's a good question. There's obviously a ton of stuff by now. What picked up really well? Just, just top of mind. I think one thing which I certainly can't live without anymore is like just a GIF search. It's just great, like searching Giffy and 10 and all the others with like a global keyboard hot.\n\nSo I. Option G and then I just have a grid in front of me with all the GIFs and it remembers my reason, ones and my favorites, so I can just copy them and pasting them in slack or wherever I am. I am at the moment which is great. So this one is huge and show the community member also does a great shop.\n\nWhenever I think there is a new API release, an hour later is a pull request to basically update his extension. By the way, all of the extensions are open source, so everybody can contribute there and, and make their own stuff and getting inspired by others. I think one of the most funniest one is like, and this is ways see, like how people can stretch a system, like with all of this APIs and you're putting something out and tooling in general.\n\nI think like you're putting something out that people can build something with it. And you don't really have a idea what they're gonna build, and this is the fun and the interesting bit, which is, I always love that about this. Kind of tooling is why I'm so passionate about it. You put something out that people can use to build their own stuff.\n\nAnd well, it turns out somebody integrated snake in Raycast, so you can go to the store and add a snake extension. And while it's probably border line of being productive, but it's just like tells you a little bit, like how much you can bend the system. And he renders the snake play field in other game field in, in like markdown.\n\nAnd this is again like something which like, wow, you need to be quite creative to do those kind of stuff. Right. But this is like, what is, what is exceptional working with developers. And so our API is, is constrained because we give you this component system where you can't break out, but you would be surprised on like what people come up with to work around that.\n\nAnd I think the snake one just like is really fun one to see, like somebody got really creative there and, and, and build something that nobody from us expected which is pretty, pretty cool to see.\n\n**Andrew:** Yeah, the common theme on our podcast of constraints, breed, creativity, and this, this snake extension is very creative. It's also fun. Like I was going through the story yesterday and you can see people take like your ideas and go, oh, I'm gonna make a better version of that. Like, like with the Spotify.\n\nOne you made like a Spotify controls one and then a community me community member comes along and makes one that's like way better and has like menu bar integration and all that. So, yeah. Fun to\n\n**Thomas:** Yeah. Yeah. It's like this remix character, right? So people getting inpired by something, sometimes they're picking it up, bring into a different service which is also the coolest thing about open source. So people see there and sometimes contribute or come up with ideas, adding this and that and basically helping evolve the whole platform and ecosystem, which is really exciting.\n\n**Justin:** There's really a, a, a category of tooling that I love a lot. And I think breeds a lot of loyalty. So we've talked about several tools in this space since we've been, we've been doing podcasts. So I think back to like obsidian so obsidian is note taking tool, mostly open source. The plugin ecosystem is really rich and generates a lot of loyalty. And then, you know, true of so many other tools in this category.\n\nSomething that can be a challenge in these categories is like building loyalties easier when people can edit it, but then like trying to find a Mo a way to monetize the tool can be a challenge. So just looking through your site, I know that y'all have started approaching like a teams feature and like doing some organizational productivity, utilities and stuff.\n\n#### [00:26:45] Building for Teams\n\n**Justin:** Can you think, can you talk a little bit more about, like, what your idea, or how do you approach monetization when you have such like an open, editable, collaborative tool? Like, how do you layer monetization on top of that? Without it being constricting to that original loyal base?\n\n**Thomas:** Yeah, definitely. So is a, is a good question. So I think the, the, the theme you're describing, I feel like is like a personal tool, right? I think personal tools are capable to generate loyalty because it's much more than something you do use because you may be told to use it. It's your own choice. And oftentimes it gets attached to you very closely, like with obsidian you're putting in your notes.\n\nSo it's at some point half of your life is probably in there, right? So you're really personal attached with something like Raycast we see a great loyalty. it's like at the center of your actions. So people really go basically through Raycast. So a day that it becomes unavoidable to, to use it and becomes basically ubiquitous for them and are really closely attached to those kind of stuff.\n\nAnd yeah, so our plan for modernation shifting into that is like Raycast for teams. So while we think about productivity as a very personal problem in a way, so if I have a problem for, for me and I can solve that for myself in a creative way that fits me and might not fit everybody else.\n\nRight? So this is just everybody else has a different stack and requirements and styles. But if you think about a team it's different in a team, you have the same setup, you use the same tools. You have the same things you work on. So in a team, it becomes more of like a collaborative problem where if one person solves this problem for himself, there's a really high chance that other people can benefit of that as well.\n\nAnd, and this is what we wanna make Raycast into. So really like a collaborative tool for teams to make themselves more productive and leveraging basically what we build, like the flexibility and and the create foundation to build on top of that and making they, they work for like building internal tooling much, much faster and bringing it much closer to them so they can solve their own problems.\n\nRight. I think there's a lot of tooling out there where you can solve problems and it makes it easier to build certain things for others. But there isn't that much, which you really like yourself using a lot and making that for your own team. And this is where we want to go down with, with Raycast for teams being really this, this tool, the teams fall in love with because they see, Hey, it's so easy to extend it and tailor it to our setup and building those things and integrating with, with the platform.\n\nAnd then what's interesting is it also benefits everybody that is a, is a new join in a company or in a team, cuz if you have a great foundation with a lot of like extensions and a lot of tooling that they can just come in and hopefully by this moment they have used Raycast already. So they're familiar with the concept.\n\nThey're just with one click become member of the organization have just more functionality and don't need to learn anything new. And I think that is, that is also a great advantage. Just like this, this ramp up cost goes lower, onboard becomes easier. They're familiar with it coming back to the familiarity.\n\nAnd they hopefully can extend it themself and basically having this flywheel of people collaborating on their own productivity. And I mean, productivity is huge, right? So everybody want developers being more productive and saving time and all of this kind of stuff. Right. So I think there's a really good chance that this becomes a huge thing.\n\nAnd this is what we want to go after.\n\n**Justin:** Yeah, it, this is just a it's, it's a really interesting approach. I mean, because, so we've talked to the fig team, we've talked to the warp team and talking to you now and y'all are all taking this sort of approach. It's like, you start with building a tool for the individual user. It's like, make their life like better, like give them a tool that they want to use every day, because it's like delightful and like helps 'em be more productive or whatever solves this problem.\n\nAnd then for the monetization twist, it's like now, how do we scale this out to a team? How do we like make this useful in a broader context? And it's, I don't know. It's kind of a cool, it's kind of a cool, just to see this trend develop as like more and more dev tools companies like are becoming more established.\n\n**Thomas:** Yeah, definitely. I think what I like about his trend, it becomes much more focused on the user and closer to the user. Basically coming all the way back to the beginning, right. Where I said like, Hey, why, how did I come up with Raycast basically we got frustrated with other apps because we felt like as pro users, we didn't get a lot that we wanted to have.\n\nSo I think with also with fig and wrap at warp sorry, they're doing like a great job of like also doubling down on this pro users. Right. So bringing in the next innovation terminal and this is particular for pro users, right. And making there a few bets of like making this more accessible as well.\n\nAnd then, yeah, layering on top than the shareability and the team features, which I'm really excited about if like getting more of, yeah. Closer to the user of the software and then working with them oftentimes together to bring it into teams. Right. Like the true bottoms up motion of like getting it to people first, and then they will help you getting it into the organization.\n\nAnd this comes back to the loyalty. If like, if you have a lot of people in the co in the companies using the tool. They will figure out how they're using it internally and help you pushing that through and become basically a voice in helping you to also accelerate in the organizations, which is really cool.\n\nAnd it's like, it's funny. Like I treat sometimes teams and organizations is, is a community in itself, right? So we are working with a community together to work on Ray cars and making it more accessible and like reaching it wider network. But I mean, a company is a community, right? A community is something that has a shared interest and a company has a shared interest on, on making money in one or the other way.\n\nAnd it's like, like-minded people often, right? And so if one person uses it there, it makes a ton of sense that probably other people will adopt it as well because it's, it's this community character that then can, can spark.\n\n#### [00:32:44] Fostering Community\n\n**Andrew:** So Raycast is based a lot on plugins. When and how did you describe to grow that community? Like how have you done it?\n\n**Thomas:** Yeah. Good. Good question. So, mean, early on, we kind of knew this has to be a platform there's just too much stuff out there that you need to integrate with. And there are, there are tools I never heard of. Right. So I'm so surprised what, what extensions we get. So it was kind of like a no brainer to make it a platform, but then there was like little bit, almost like a chicken problem.\n\nRight? Like you wanna make a platform that is used by a lot, but then you don't really have like a lot of people using it. So you kind of need push through. And what we, what we really liked working at Facebook was we worked on a project called spark AR and this was like augment reality. So they build it.\n\nWhat I oftentimes describe a Photoshop for augment reality. So something that people can build it, and then you can build an augment reality effect and you publish it. And others can use an Instagram and so on and so forth, but really what resonated with me was this massive focus on community and give them the tool and making it creative.\n\nAnd then this was really what pushing it off where people got so creative and it cut a pull that this whole thing though, early on, we also saw like, Hey, we wanna make this a really collaborative environment. It's not like trust earth billing. This tool is much more it's like, people know best what fits their productivity and makes them more productive.\n\nSo, think when we launched Raycast, I can't remember fully, but either way, a little bit before that, or afterwards that. And when we made it publicly available, we created the community and it's like, kind of this embarrassing moments. It's like this, we have it in slack. So it's a slack workspace where you show on.\n\nAnd I remember the first thing was like, we were five people team members back then. And then the other five people were just friends of us hanging out there. So it was just 10 people. And it's like, ah, yeah, this is like a little bit embarrassing thing, but then like it really quickly cruise. So now this is probably one and a half years later with like 6,000 people in this slack channel and they're just coming in there.\n\nSo, and I think. It is this kind of proof that people are very interested enough, like seeing how other people work, what they can learn with it, how they can collaborate with others to make maybe others better. There's a lot of like helping initially there was a ton and still there's a ton of feedback for us like how we can make Raycast better. They helping us debugging stuff which is like create when you work with developers, they know the frustration. If you have a bug which you can't wrap your head around, so they send you all the logs and so on and so forth.\n\nSo this really has evolved into something which I would have not expected, but is now like so crucial to the entire team and the company, how we run it. So all of us are in the community. I just answered a few questions right before I jumped on the call with you. It's just like this part of work where there are people that you communicating for now two years and one of our active community members comes next week to London.\n\nSo I'm gonna meet up with them. And it's just like this whole thing, which is like so much more than just a software that you build, which is really, really interesting when you have this human connection and figuring basically out with a thousand other people, what and how to build it. And then we had a launch week and surprising them with so things and giving back.\n\nBut yeah, community is, is a little bit of magical thing. Like I couldn't tell you exactly like this is the way how we pull it off. But I think it's, it's this combination of starting early where just like scrapy and people feel really bought in. And, and then being part of it. Right? So to this point, I answer a ton of messages. All team members are in there. We basically trust the message away. So if you wanna know something, but Raycast trust message me there on slack. And I think this brings this loyalty and also a little bit of a family vibe and like you in this together mode which is really cool. And this helped us then shaping a bunch of projects that are harder.\n\nLike we used community to shape the API, which helped us to figure out that react is the way to go for us because they gave us feedback on it. This helped us to build new features and getting early feedback. This helped us to shape what Raycast for teams is now. So it's really like this, this, yeah organic mode that you're in, where you have like more people around yourself that can amplify your voice essentially. c\n\n**Andrew:** Community is a powerful thing. This podcast I'd say is a shining example of it. Me and Justin met through open source by him submitting pull requests to one of the projects I worked on. So like this, this whole thing wouldn't be happening without community.\n\nWe like even have one of our podcast guests got hired by another one of our podcast guests because of the podcast. So it it's, it is cool to be a part of those things.\n\n**Thomas:** yeah, definitely. I mean, this is, this is the fun thing with communities, right? You can't really predict what happens. But I'm certainly sure it's most of the times positive, and there might be some outliers where negative things happen, but the positive stuff outweighed everything else so much, which is so good about.\n\n**Justin:** I do feel like there's a certain quality to creative communities. So when you build a tool like Raycast where people are excited about it, they're they have all these ideas they're inspired. They want to come together and like make something. There's a certain energy and quality to those communities that I just, I love.\n\nAnd in particular, this is, so this is one of the things that really got me involved in, in obsidian in the early days is because their community, their plugin community is just so engaged. They really enjoy doing it like, you know, and they work on all cool crazy things. And I think that broadly, you know, it's definitely if you're building a creative tool, that's out there to empower people and, and people are excited about you should definitely make sure they have a space to, to meet and talk and collaborate and work on stuff cuz it's it's a great way to make progress and, and building out, like you said, product direction and understanding some of like just underlying desires and getting all this extra cool stuff out in the world.\n\n**Thomas:** Yeah, a hundred percent. I mean, we went through this Raycast through Y combinator, the accelerator, and one of this slogan is like talk to your users. Which is funny because I feel like I'm talking nonstop to our users because they're just sitting in the same slack that I use. So it's, it's, it's basically a little bit of a cheat as well.\n\nRight. So you're surrounding yourself entirely with that. Which is great. So a lot of our roadmap is just when you ask, like in the room, like, what should we do? People observe different things because they work on different angles and they're basically sends it to different inputs. And if things repeating itself, I dunno, 10 times the same feature request, somebody will notice it and then say, Hey, we should do that and putting on the roadmap. Right? So it's, it's a great way to like staying really connected to that and, and figuring out what is really important without losing the touch to, to your users as well.\n\n#### [00:39:23] Evolving Computer Interaction\n\n**Justin:** Yeah, that's awesome. So we, we usually ask everyone who comes on some forward looking question sometimes it's about the future of the web. Sometimes it's about the future of computing. But I think Raycast is a really interesting example here. So, the way that we interact with computers is, is slowly starting to change.\n\nIf you could just like envision some other way of operating with a computer, like we know what would that future look like to you?\n\n**Scarlett 2i2 USB-1:** Wanna hear Thomas's answer? Well, the rest of the interview, as well as a bunch of bonus content is only available to our Patreon subscribers.\n\nFor just $5 a month you get access to full length ad free episodes, be able to vote on future guests and you get to join us in our discouraged C. There we'll be hosting an exclusive Q and a with Thomas to answer all your burning questions.\n\nWanna be even more involved. Join one of our higher tiers and become part of episode planning and help shape the episodes as they come out. We hope you join us. Be sure to like, and follow the podcast. Thanks for listening."
    }
  },
  "description": "Thomas Paul Mann, Raycast founder, reveals how they built the ultimate Mac command palette with custom React renderers and powerful plugins.",
  "path": "/episode/38",
  "publishedAt": "2022-09-01T00:00:00.000Z",
  "site": "at://did:plc:tnliqml7jfchh6dltyi2senj/site.standard.publication/3mnv7bnfeyg2h",
  "tags": "technology, coding, programming, raycast, swift, mac, apple, command palette, spotlight, productivity",
  "textContent": "{/ TAB: SHOW NOTES /}\n\nJoin us this week with Thomas Paul Mann, one of the founders of Raycast, a new command palette for Mac.\nWe talk about the history of Raycast, how it came to be, and what the future holds for the app.\nThe app is powered by a powerful plugin system that use a custom react renderer.\nIf you haven't checked it out yet, you should definitely give it a try!\n\nJoin our patreon for the full episode.\n\nThomas' Twitter\nGitHub\nraycast Twitter\nraycast\n\n{/ LINKS /}\n\nTooltips\n\nAndrew\n\n- https://pnpm.io/\n- https://motion.dev\n\nJustin\n\n- https://github.com/esamattis/react-zorm\n- https://github.com/PipedreamHQ/pipedream\n\nThomas\n\nMy tooltips: I recently re-discovered newsletters for me. Here are three that I read every week:\n\n1. Console Newsletter - The best tools for developers\n2. Pointer - A Reading Club For Software Developers\n3. Refind - Get smarter every day\n\nFor tools, I rely heavily on Raycast. Few of my most used extensions:\n\n- Visual Studio Recent Projects\n- GIF Search\n- Google Translate\n\n{/ Paste show notes /}\n\n{/ TAB: SECTIONS /}\n\n[00:02:24] Building Raycast\n[00:06:16] Extension API\n[00:15:23] Perfecting UX\n[00:17:38] Hacking Features\n[00:22:54] Community Creativity\n[00:26:45] Building for Teams\n[00:32:44] Fostering Community\n[00:39:23] Evolving Computer Interaction\n\n{/ TAB: TRANSCRIPT /}\n\nThomas: I think now is I think there was a little bit of a trend of like startups and companies and projects pushing the boundaries to benefit by speed. To make things faster. And this is on all different levels. My belief and my hope is like that we are getting more down to this, like concentrating on really for professionals in a way.\n\nAndrew: hello welcome to the dev tools FM podcast. This is a podcast about developer tools and the people who make them I'm Andrew, and this is my co-host Justin.\n\nJustin: Hey everyone. We're really excited to be joined today by Thomas Paul man. Thomas is the CEO and co-founder of Raycast. Raycast is a tool for Mac. You can kind of think of it like the, the spotlight except supercharged and Thomas I'll give you an opportunity to do a better elevator pitch than that.\n\nBut before we get into that would you like to tell our audience a little bit more about yourself?\n\nThomas: Sure. Yeah. I mean, first of all, thanks for having me listening to dev tools dot FM quite regularly, so really pumped to be here. And yeah, a little bit about myself. I'm a developer by heart turn into a founder and CEO lately and running Raycast yeah, you, you describe Raycast how we describe it often, which people were like familiar with the Mac ecosystem and we describe it often as a, as a spotlight on steroids.\n\nSo we cover all the basics, like launching applications and searching files and all the local bits. But yeah, we put the layer on top of that and making it possible to extend raycast in any way you. So we have a store where you can search what other people have built. So there are extensions, for example, to connect, to GitHub, to check your open pull requests or create pull requests and stay on top of your issues.\n\nYou can check other tools like linear and Figma or also have more fun things like searching your gifts that you maybe wanna leave in the pull request review. And this is like the exciting bit I think about for developers in general, which I'm really happy to talk about in, in this session as well is we have an API which basically allows you to build whatever you really want and make it very easy to extend Raycast to the way you want to have it.\n\nBut also keeping it consistent with all the other extensions on the user behaviors we have. So it keeps being like a, what we often describe it as a general productivity tool for developers, but also we have designers and other people who basically just work on a computer and make them more efficient.\n\n[00:02:24] Building Raycast\n\nAndrew: So, why did you build it? Like, there is spotlight that's something that comes with every computer and then there's Alfred, which probably before Raycast almost everybody had installed. So why build Raycast?\n\nThomas: Yeah, definitely. I mean the, the honest truths are basically me and my cofounder, the got frustrated with, with software and how it is to use and don't get me wrong. I mean, software became quite incredible and quite good over the years, but a trend that we saw, it became more of a clicky thing. So you have to mouse, click everything and navigate around.\n\nAnd we as developers, like, like keyboard shortcuts to be faster to do those kind of stuff. And we felt like we were missing out on, on the new apps a little bit. And, and that was what inspired Raycast like really thinking about what we as developers know, how can we bring that to the next level? And allow people in a way to use their existing apps also more efficient.\n\nRight? So, I mean, we all rely on apps every day to do our work and you can't really replace them, but we thought about what is it, if we put a new layer on top of that to make it more efficient, to use with, with the paradigms we know, right? Like in your IDE, you have in vs code, you have a command palette and then you search for stuff and you execute that.\n\nAnd in Raycast is very similar. It's just global. So you open it globally and you can launch an app as an easy task, but nowadays you can do full workflows. For example I using a lot to create issues and linear and assign into my teammates or staying on top of my linear issues as well, just being like more flexible.\n\nAnd this was really like the, the culprit of like what we felt. There isn't like a tool which really works for professionals who wanna basically shave off this microseconds of every workflow. So this is what, what inspired really us to build, build Raycast in the first place. And then, yeah, we started that two and a half years now ago and, and keep going with that.\n\nAnd I think there is still a lot to, to explore, but this is really like where we felt there is a need for a tool like that and also a modern take on it. Right. So if we look at Raycast, we wanted to have a beautiful tool. I mean, both co-founders are developers, but we are very keen about design because I mean, I use my Mac too many hours a day and the, the least that I can enjoy there is having like nice pixels in front of me.\n\nRight. So we wanted to make it a pretty tool a very functional tool and, and speeding up workflows for, for us and everybody else as well.\n\nAndrew: The way it's a layer on top of just everything is, is so cool. Like the first feature that I, I really liked was the reminders integration. It's just like having this global command palette where you can, like, not really task switch is, is really powerful.\n\nThomas: yeah, yeah. This, this is a great example. Um, I, a lot of the times when I think my workflows before Raycast it was, I had a lot of context switching, right? Even for little things like, Hey, remind me about that later. You need to open usually a new app, do that and losing the context. And, and that's really annoying if you're in the flow state of programming or, or other things you just wanna concentrate on.\n\nSo, this is like, I think where the global mechanism really shines. It's like, no matter where you are on your Mac, in which app you just press our global hot key and then you right into Raycast and can do all of the things. And yeah, the reminders one is, is one of our earliest extensions.\n\nAnd with a lot of those things. This came actually out of feedback. I remind I remember the reminders one was just one of our first users and he said, Hey, I'm, I'm a heavy reminders user. And it would be just great to have an extension with it. And well, we just build it. And first I think we had just creating reminders because this was kind of like the workflow you usually wanna do.\n\nBut then later we just evolved in that you also can see your reminders, change them and basically have your own yeah. Fully, fully reminders that are backed by upper reminders. So they're synchronized and everything.\n\n[00:06:16] Extension API\n\nJustin: So, how do you just, I guess maybe from a technical perspective, just outta my own curiosity, how do you sort of give people the ability to generate their own extensions and also have this like really fast really performant and very like native experience. Like just like you have to provide like a little OB JSON object or something that like gives you the shape of what information will come back or like, what does that sort of look like?\n\nThe process of developing an extension?\n\nThomas: As with a lot of the stuff, when you work on something, it evolves. So the first and foremost thing we wanted to start was making Raycast really fast. This was like a core promise, right? If you try to make something faster than others, you kind of need to double down on that.\n\nSo that means we want have the best tech tech that supports that, and also being very close to the native things, right? Like things that end for ask with reminders, they're like deeply integrated in the apple ecosystem. So we wanted to support that as well and wanted to make Raycast, feel like a native app that is just like part of the system.\n\nAnd it's just this, this add-on you get, and then you have the superpowers to do more so early on, we decided to build a native application. So the entire application is written in swift which is basically as close as you can get to the apple platform. And that allows us to integrate with native frameworks that apple has, for example, to access reminders.\n\nBut it also comes with as a great deal of speed, right? So we, we have everything to make it faster. And it also comes with this native feeling like in the UI. So the UI feels and looks like apple because it's built on their primitives. And what you see in Ray cause is actually. We funny enough, don't use that much of the core components that ever gives us because we feel like they sometimes a little bit dated and funny enough, also not that keyboard accessible.\n\nSo we build it pretty much everything our itself on top of that and have our own UI components that adding up there.\n\nAnd initially we build it all the extensions natively. So everything was built in swift. We shipped that, we worked with our users, what they want, they asked us for something and then we built it.\n\nAnd as I mentioned, a lot of those things came out of our own needs. So we used linear as issue trackers. So at some point I decided, Hey, I wanna use that in Raycast. So I built a few commands and extensions for that. then we made it public people used it. But you can only go so far with it, right?\n\nSo we know there are too many tools. We can't build all the stuff ourself and early on, we, we already had a plan to make it a kind of a platform where people can build their own stuff and share it with others and really end to end. So that other people can explore it, who might not be a developer, but still can use it.\n\nI wanted to make it a first class experience. So then the, the journey began to build an API and our API is, is quite special because it's not a web API, right. You don't make a network request to do something. So it's, it's an API that works on your desktop. So it's a more like of a framework in a way that people can use.\n\nAnd if you distill it even more down, I think the closest is like a component system. So what we provide you is a component system with our lists and forms and other UI components that make up Raycast. So they use native features. But the extensions are written in react. So we went down the rabbit hole of building our own react renderer.\n\nSo for the ones who don't know, so react is pretty flexible in a way. So you can. Have to whole react, run time. And one use case react dom that everybody of us knows for the websites and then react native to render something on iOS and Android, but it can spit out whatever you want. So you can spit out text.\n\nAnd I think there is a renderer for terminal to build react apps that make terminal apps. And we decided like we wanna do that for Raycast. And this was a little bit of a journey like you don't end up there immediately. Right? So first we built something which was more Justin what you described.\n\nYou have a JSON thing and you give it to the app and we render a list, but then you become quickly seeing the bottlenecks of that. So what is, if you wanna make an update to it? What if, if you have a following screen depending on it, what if, if you wanna do something like an optimistic update or some caching and all of that becomes very prickly and you're ending up building your own UI framework.\n\nAnd we went back and it's like, said, well, there is a UI framework that basically everybody knows, or at least a lot of people can learn about, which is react. So then we basically build our own react renderer, which then communicates with the app and essentially renders native components. So in a nutshell, it's a little bit like a lightweight react native, very tailored to our use case, not such generic to allow people to build something consistent, but super flexible due to that you can use react and it runs a node. So you can pull in whatever NPM package you want and it usually just works.\n\nJustin: That's awesome. That's really awesome.\n\nAndrew: yeah, the DX for that is SU super cool. Like just seeing react code is like, is, is mind blowing that it's, it's so awesome that react is so flexible in that way. To where it's like this universal UI language. And it doesn't really matter where you're rendering that UI.\n\nThomas: Yeah, this is, this is what makes it so cool. And I think there is um, from Dan this cool block post reacting it as a UI run time. If you read this blog, post just changes how you think about it, right then just like this is yeah. Literally like UI runtime and what you do with it is up to you which was really helpful for us.\n\nAnd yeah, this is the thing which we enjoyed the most. Like we wanted to, one of our early goals was to build a create developer experience, like really something that people admire and love. And it turns out is really hard to do that yourself without relying on the existing ecosystem. Right. Um, And I mean, maybe people can pull it off to make something better and the existing stuff, but there is like something that is not too under value is like familiarity.\n\nIf you know something and you can do that again, that's the best developer experience you can get because you know, it, you don't need to learn something new you're productive from day one, you know, your utilities that you pull in and all of the benefits that come with it was one thing that we were seeing like as a huge opportunity, like trust using what people use.\n\nAnd well, if people don't use react, there's like a billion pages teaching it to you. Right. So you can basically work with the, with the community together instead of like trying to really reinvent the wheel.\n\nJustin: Yeah, that's awesome. That's, that's such a clever use of react renderer. I was just like clicking through the API examples and yeah, it's just, it's just really fascinating how seamless it is. So if you're reaching down and you're like trying to do something with the system, maybe you're like, I'm trying to come up with an arbitrary example trying to control some other program on your Mac.\n\nDo you provide interfaces for all of those sorts of things directly from your API? Or is that something that you just like, Hey, use the native APIs for whatever this is? Cause, I mean, I'm assuming it's running JavaScript core. Maybe you have some access to lower level things through that.\n\nThomas: Yeah. So yeah, so we don't run JavaScript core. We actually run node JS which was another crucial decision.\n\nSo we started also with JavaScript core and basically to make the run time very isolated and building up the features we need. But then is, is similar, right? So there is an existing ecosystem out there and we had this offer phase of the API.\n\nAnd a lot of people say like, Hey, I just want to use this NPM package of why can I not use it? Right. And so you're running all in this friction, which is really hard to explain, and you can write pages of documentation, why it is like that. But, well, a developer doesn't really have time. Right. And you just wanna build something and don't want bother with all the rest.\n\nSo we basically switched then from the early version of JavaScript Core to node JS to bring in also the whole NPM ecosystem. And it still has a few limitations. So you can't have dependencies that rely on react Dom because we don't have any HTML or CSS involved, but you can have everything else that you can think of node.\n\nSo things like node faction, stuff like that works out of the box. And that's pretty cool. And then for the native APIs, what we do is we exposing them to the run time with Raycast. So you have for example, APIs to copy something to the clipboard or to paste something where your current cursor is.\n\nSo having this deep integrations, which comes then out of the box with the Raycast API that you can use. And then often also this extensions trust make heavy use of existing NPM libraries to connect to third party services talking to APIs with Octokit to GitHub and those kind of stuff, which is like all the benefits you're getting when you're building on top of an existing ecosystem.\n\nAnd how you can control on the Mac. Different applications is often via apple script. At least this works pretty nicely on an native apps, but also a bunch of other reps support that. So it helps you for example, on Spotify to skip to the next track and play pause and those kind of things, which is super handy.\n\nAnd this is then basically just done by running apple script in, in a shell environment, essentially.\n\nJustin: It's really cool.\n\n[00:15:23] Perfecting UX\n\nAndrew: So Raycast is like this kind of like global like command K menu. Do you have any plans to like, make it context aware? Like, it'd be cool if I was like in my terminal and I hit Raycast, I got like maybe a different set of options than if I were in app.\n\nThomas: Yeah. Good question. Um, This is certainly something which we had initially thought of and, and haven't fully went down with it because we first wanted to nail a little bit of the API and exposing that and, and keeping it lightweight. But contextual awareness, I think is you tried. I think there are certain things which fit into this kind of stuff.\n\nLike the app you use at the moment, the, the time of your work, even maybe the services that are running somehow and making predictions. I mean, it's all about with those kind of things to make it useful and predictable because in Raycast the people develop a lot of muscle memory, right? So I use almost blind now, Raycast I know if I open Raycast and type two letters, I get exactly this result because of our ranking.\n\nAnd so you need to balance that with like context awareness, which oftentimes if it isn't implemented well, becomes very unreliable because you lose trust. It's like this, this um, yeah, you need to build trust with it almost right. You, you wanna have good recommendations and if they're hitting good that's well, but if they're two or three off, you feel like you're losing trust with it.\n\nAt least I have this experience with things like GitHub co-pilot I think is a good one. Right? So at the beginning it's like, oh wow, this functions really well. But then when you really code quickly and then realize, well, this is not what I want. It becomes a little bit of less trustworthy in a way. So you wanna find a good balance.\n\nAnd so this is something which we probably wanna explore. It pops up in our community from time to time. And I think the nice thing there is like, you can make things even faster, right? And then this is what is in our mind always what's the, the next stage. How can we make it faster that you need less interactions to get where you wanna be?\n\nSo this is certainly something interesting, and we don't have concrete plans on that in a way, but it's something very often not aware, things like that. Getting explored internally. We have like a concept where every Friday we hack on something and then people pick up certain stuff and experimenting with it.\n\nAnd then one thing leads to another and then there might be projects coming out of that.\n\n[00:17:38] Hacking Features\n\nJustin: Yeah, I did see your, your hack day listed on your, your team's page. That's that's pretty cool. Uh, So what sort of inspired taking that on like, where'd that come from?\n\nThomas: Yeah. So I think all the way going back, like I've worked up to three years at Facebook and I have this culture of hack hackathons, right. So I think in London, I had it every quarter hacking on something. Me and my co-founder worked there at the same team and really took this opportunity always to hack on something that we feel good about.\n\nOftentimes funny enough, it were tools that we wanted to build for ourself just to make us more productive. So you can see a, a theme here. And then like in Raycast when we started that a lot of the early features just came out. Um, The team when they had their own news case and wanted to build that.\n\nI think the first one was clipboard history. I just hacked that because I wanted to have a clipboard history in the tool. It felt so natural. And then script commands, which is another way to extend Raycast came out of a hackathon with the decide project radar. So which we came out of a hackathon, which is a page where you can highlight code blocks and generate an image that you can share then on Twitter we did a ton of other things and usually this was always problems for ourself when we solved them.\n\nSo it felt quite natural. Like we were kind of doing it and we really liked what came out of it, but it didn't really have the proper format. And then we wanted to formalize that. And so we put it in what we call Ray day, which is basically now every Friday. So every Friday in the morning we post it's like who hacks on what?\n\nAnd then people come up with their ideas and it's entirely up to them what they wanna spend the day on. So it can be addressing feedback. Fixing bugs can go pretty wild on like doing proof of concept on something building features whatever they wanna do. And so we keep this and there are a few things that came out of that be, which became really big.\n\nOne of the things that I always like tell us the, the calendar that we have. So we have this integration in Raycast, which you your upcoming meeting. And then with one click, you can join zoom. This was the feature that we early on, put it in because well, when the, when the world went remote was very often that you needed a jump and a zoom meeting and was very annoying finding the zoom link.\n\nSo we, and this, Andrew comes back to being contextual aware. When you have a zoom meeting coming up, you just open Raycast and you build at some point it's muscle memory, just pressing return because, you know, there is something where you can join a zoom meeting. And then you're jumping in the video conference call.\n\nAnd then during a Ray day one person said, Hey, it would be cool to show the upcoming meeting and the menu bar just like, as a reminder of like, Hey, you have five minutes left, wrap your thing up, go into the meeting. So, sorry, bill a that and then basically shipped it. And then people really loved that.\n\nIt was like just the little hack he did. And people really loved that on Twitter. And then, so the following Ray day is he just improved it and added more and more functionality. And recently we shipped also then an API to basically put whatever you want in the menu bar. So it came all out of like this, this hackathon things and piling up. Just by like doing something that one person liked.\n\nAnd then we realized, Hey, this is actually something which is really cool. And so now we integrated in our platform that for example, you can see you unread messages or notifications of in the menu bar and other things to just integrating that for us as to explore this as well.\n\nAndrew: Yeah, that that feature is super cool that like you, you think Raycast is just a, like the command pallete spotlight thing, and then you have these menu bar items. That's awesome. Like it, it lowers the bar, the bar to entry to make an app that lives in your menu bar by like, like exponentially. Like, I would have no clue how to start doing that on my own, but building a Ray cast extension with react, like that's, that comes natural to me as a front end developer.\n\nAre there any other, like parts of the Mac that like you think Ray cast extensions could eventually extend to?\n\nThomas: Yeah. I mean, general, we have way too many ideas what to do with Raycast. it's one of our problems where it evolves just further and further. But yeah, I think like there are, the Mac is interesting, right? So. I think there are like a lot of productivity tools who used to make in a creative way.\n\nI think menu bars is one of those, right? What people put in the menu, bars, not sure if that was predicted, but it certainly is really interesting what they have there from system information to other things. So it felt to us this is something which is really cool to get in there. And then there are like other pieces there, which we might want to explore, like basically bringing more dashboard, like information to people.\n\nIt's just something which, I mean, one thing is like you search something and opening and interacting with something. But oftentimes, and I think there's just where menu bar applications are so trendy is like, you just don't need to do something. You just have the information immediately. Right. So you're cutting away all the rest.\n\nAnd this is great for like staying on top of it, but it's also great for seeing information that you regularly check. And this is, I think something which we wanna double down in the future a little bit, like bringing more of this experience to the Mac and finding a good place for that to integrate there.\n\nAnd being basically close to the native stuff.\n\n[00:22:54] Community Creativity\n\nJustin: That's really cool. So given that Raycast is such a, an extensible platform, what are some of the favorite things that you've seen the community build with it?\n\nThomas: Yeah, that's a, that's a good question. There's obviously a ton of stuff by now. What picked up really well? Just, just top of mind. I think one thing which I certainly can't live without anymore is like just a GIF search. It's just great, like searching Giffy and 10 and all the others with like a global keyboard hot.\n\nSo I. Option G and then I just have a grid in front of me with all the GIFs and it remembers my reason, ones and my favorites, so I can just copy them and pasting them in slack or wherever I am. I am at the moment which is great. So this one is huge and show the community member also does a great shop.\n\nWhenever I think there is a new API release, an hour later is a pull request to basically update his extension. By the way, all of the extensions are open source, so everybody can contribute there and, and make their own stuff and getting inspired by others. I think one of the most funniest one is like, and this is ways see, like how people can stretch a system, like with all of this APIs and you're putting something out and tooling in general.\n\nI think like you're putting something out that people can build something with it. And you don't really have a idea what they're gonna build, and this is the fun and the interesting bit, which is, I always love that about this. Kind of tooling is why I'm so passionate about it. You put something out that people can use to build their own stuff.\n\nAnd well, it turns out somebody integrated snake in Raycast, so you can go to the store and add a snake extension. And while it's probably border line of being productive, but it's just like tells you a little bit, like how much you can bend the system. And he renders the snake play field in other game field in, in like markdown.\n\nAnd this is again like something which like, wow, you need to be quite creative to do those kind of stuff. Right. But this is like, what is, what is exceptional working with developers. And so our API is, is constrained because we give you this component system where you can't break out, but you would be surprised on like what people come up with to work around that.\n\nAnd I think the snake one just like is really fun one to see, like somebody got really creative there and, and, and build something that nobody from us expected which is pretty, pretty cool to see.\n\nAndrew: Yeah, the common theme on our podcast of constraints, breed, creativity, and this, this snake extension is very creative. It's also fun. Like I was going through the story yesterday and you can see people take like your ideas and go, oh, I'm gonna make a better version of that. Like, like with the Spotify.\n\nOne you made like a Spotify controls one and then a community me community member comes along and makes one that's like way better and has like menu bar integration and all that. So, yeah. Fun to\n\nThomas: Yeah. Yeah. It's like this remix character, right? So people getting inpired by something, sometimes they're picking it up, bring into a different service which is also the coolest thing about open source. So people see there and sometimes contribute or come up with ideas, adding this and that and basically helping evolve the whole platform and ecosystem, which is really exciting.\n\nJustin: There's really a, a, a category of tooling that I love a lot. And I think breeds a lot of loyalty. So we've talked about several tools in this space since we've been, we've been doing podcasts. So I think back to like obsidian so obsidian is note taking tool, mostly open source. The plugin ecosystem is really rich and generates a lot of loyalty. And then, you know, true of so many other tools in this category.\n\nSomething that can be a challenge in these categories is like building loyalties easier when people can edit it, but then like trying to find a Mo a way to monetize the tool can be a challenge. So just looking through your site, I know that y'all have started approaching like a teams feature and like doing some organizational productivity, utilities and stuff.\n\n[00:26:45] Building for Teams\n\nJustin: Can you think, can you talk a little bit more about, like, what your idea, or how do you approach monetization when you have such like an open, editable, collaborative tool? Like, how do you layer monetization on top of that? Without it being constricting to that original loyal base?\n\nThomas: Yeah, definitely. So is a, is a good question. So I think the, the, the theme you're describing, I feel like is like a personal tool, right? I think personal tools are capable to generate loyalty because it's much more than something you do use because you may be told to use it. It's your own choice. And oftentimes it gets attached to you very closely, like with obsidian you're putting in your notes.\n\nSo it's at some point half of your life is probably in there, right? So you're really personal attached with something like Raycast we see a great loyalty. it's like at the center of your actions. So people really go basically through Raycast. So a day that it becomes unavoidable to, to use it and becomes basically ubiquitous for them and are really closely attached to those kind of stuff.\n\nAnd yeah, so our plan for modernation shifting into that is like Raycast for teams. So while we think about productivity as a very personal problem in a way, so if I have a problem for, for me and I can solve that for myself in a creative way that fits me and might not fit everybody else.\n\nRight? So this is just everybody else has a different stack and requirements and styles. But if you think about a team it's different in a team, you have the same setup, you use the same tools. You have the same things you work on. So in a team, it becomes more of like a collaborative problem where if one person solves this problem for himself, there's a really high chance that other people can benefit of that as well.\n\nAnd, and this is what we wanna make Raycast into. So really like a collaborative tool for teams to make themselves more productive and leveraging basically what we build, like the flexibility and and the create foundation to build on top of that and making they, they work for like building internal tooling much, much faster and bringing it much closer to them so they can solve their own problems.\n\nRight. I think there's a lot of tooling out there where you can solve problems and it makes it easier to build certain things for others. But there isn't that much, which you really like yourself using a lot and making that for your own team. And this is where we want to go down with, with Raycast for teams being really this, this tool, the teams fall in love with because they see, Hey, it's so easy to extend it and tailor it to our setup and building those things and integrating with, with the platform.\n\nAnd then what's interesting is it also benefits everybody that is a, is a new join in a company or in a team, cuz if you have a great foundation with a lot of like extensions and a lot of tooling that they can just come in and hopefully by this moment they have used Raycast already. So they're familiar with the concept.\n\nThey're just with one click become member of the organization have just more functionality and don't need to learn anything new. And I think that is, that is also a great advantage. Just like this, this ramp up cost goes lower, onboard becomes easier. They're familiar with it coming back to the familiarity.\n\nAnd they hopefully can extend it themself and basically having this flywheel of people collaborating on their own productivity. And I mean, productivity is huge, right? So everybody want developers being more productive and saving time and all of this kind of stuff. Right. So I think there's a really good chance that this becomes a huge thing.\n\nAnd this is what we want to go after.\n\nJustin: Yeah, it, this is just a it's, it's a really interesting approach. I mean, because, so we've talked to the fig team, we've talked to the warp team and talking to you now and y'all are all taking this sort of approach. It's like, you start with building a tool for the individual user. It's like, make their life like better, like give them a tool that they want to use every day, because it's like delightful and like helps 'em be more productive or whatever solves this problem.\n\nAnd then for the monetization twist, it's like now, how do we scale this out to a team? How do we like make this useful in a broader context? And it's, I don't know. It's kind of a cool, it's kind of a cool, just to see this trend develop as like more and more dev tools companies like are becoming more established.\n\nThomas: Yeah, definitely. I think what I like about his trend, it becomes much more focused on the user and closer to the user. Basically coming all the way back to the beginning, right. Where I said like, Hey, why, how did I come up with Raycast basically we got frustrated with other apps because we felt like as pro users, we didn't get a lot that we wanted to have.\n\nSo I think with also with fig and wrap at warp sorry, they're doing like a great job of like also doubling down on this pro users. Right. So bringing in the next innovation terminal and this is particular for pro users, right. And making there a few bets of like making this more accessible as well.\n\nAnd then, yeah, layering on top than the shareability and the team features, which I'm really excited about if like getting more of, yeah. Closer to the user of the software and then working with them oftentimes together to bring it into teams. Right. Like the true bottoms up motion of like getting it to people first, and then they will help you getting it into the organization.\n\nAnd this comes back to the loyalty. If like, if you have a lot of people in the co in the companies using the tool. They will figure out how they're using it internally and help you pushing that through and become basically a voice in helping you to also accelerate in the organizations, which is really cool.\n\nAnd it's like, it's funny. Like I treat sometimes teams and organizations is, is a community in itself, right? So we are working with a community together to work on Ray cars and making it more accessible and like reaching it wider network. But I mean, a company is a community, right? A community is something that has a shared interest and a company has a shared interest on, on making money in one or the other way.\n\nAnd it's like, like-minded people often, right? And so if one person uses it there, it makes a ton of sense that probably other people will adopt it as well because it's, it's this community character that then can, can spark.\n\n[00:32:44] Fostering Community\n\nAndrew: So Raycast is based a lot on plugins. When and how did you describe to grow that community? Like how have you done it?\n\nThomas: Yeah. Good. Good question. So, mean, early on, we kind of knew this has to be a platform there's just too much stuff out there that you need to integrate with. And there are, there are tools I never heard of. Right. So I'm so surprised what, what extensions we get. So it was kind of like a no brainer to make it a platform, but then there was like little bit, almost like a chicken problem.\n\nRight? Like you wanna make a platform that is used by a lot, but then you don't really have like a lot of people using it. So you kind of need push through. And what we, what we really liked working at Facebook was we worked on a project called spark AR and this was like augment reality. So they build it.\n\nWhat I oftentimes describe a Photoshop for augment reality. So something that people can build it, and then you can build an augment reality effect and you publish it. And others can use an Instagram and so on and so forth, but really what resonated with me was this massive focus on community and give them the tool and making it creative.\n\nAnd then this was really what pushing it off where people got so creative and it cut a pull that this whole thing though, early on, we also saw like, Hey, we wanna make this a really collaborative environment. It's not like trust earth billing. This tool is much more it's like, people know best what fits their productivity and makes them more productive.\n\nSo, think when we launched Raycast, I can't remember fully, but either way, a little bit before that, or afterwards that. And when we made it publicly available, we created the community and it's like, kind of this embarrassing moments. It's like this, we have it in slack. So it's a slack workspace where you show on.\n\nAnd I remember the first thing was like, we were five people team members back then. And then the other five people were just friends of us hanging out there. So it was just 10 people. And it's like, ah, yeah, this is like a little bit embarrassing thing, but then like it really quickly cruise. So now this is probably one and a half years later with like 6,000 people in this slack channel and they're just coming in there.\n\nSo, and I think. It is this kind of proof that people are very interested enough, like seeing how other people work, what they can learn with it, how they can collaborate with others to make maybe others better. There's a lot of like helping initially there was a ton and still there's a ton of feedback for us like how we can make Raycast better. They helping us debugging stuff which is like create when you work with developers, they know the frustration. If you have a bug which you can't wrap your head around, so they send you all the logs and so on and so forth.\n\nSo this really has evolved into something which I would have not expected, but is now like so crucial to the entire team and the company, how we run it. So all of us are in the community. I just answered a few questions right before I jumped on the call with you. It's just like this part of work where there are people that you communicating for now two years and one of our active community members comes next week to London.\n\nSo I'm gonna meet up with them. And it's just like this whole thing, which is like so much more than just a software that you build, which is really, really interesting when you have this human connection and figuring basically out with a thousand other people, what and how to build it. And then we had a launch week and surprising them with so things and giving back.\n\nBut yeah, community is, is a little bit of magical thing. Like I couldn't tell you exactly like this is the way how we pull it off. But I think it's, it's this combination of starting early where just like scrapy and people feel really bought in. And, and then being part of it. Right? So to this point, I answer a ton of messages. All team members are in there. We basically trust the message away. So if you wanna know something, but Raycast trust message me there on slack. And I think this brings this loyalty and also a little bit of a family vibe and like you in this together mode which is really cool. And this helped us then shaping a bunch of projects that are harder.\n\nLike we used community to shape the API, which helped us to figure out that react is the way to go for us because they gave us feedback on it. This helped us to build new features and getting early feedback. This helped us to shape what Raycast for teams is now. So it's really like this, this, yeah organic mode that you're in, where you have like more people around yourself that can amplify your voice essentially. c\n\nAndrew: Community is a powerful thing. This podcast I'd say is a shining example of it. Me and Justin met through open source by him submitting pull requests to one of the projects I worked on. So like this, this whole thing wouldn't be happening without community.\n\nWe like even have one of our podcast guests got hired by another one of our podcast guests because of the podcast. So it it's, it is cool to be a part of those things.\n\nThomas: yeah, definitely. I mean, this is, this is the fun thing with communities, right? You can't really predict what happens. But I'm certainly sure it's most of the times positive, and there might be some outliers where negative things happen, but the positive stuff outweighed everything else so much, which is so good about.\n\nJustin: I do feel like there's a certain quality to creative communities. So when you build a tool like Raycast where people are excited about it, they're they have all these ideas they're inspired. They want to come together and like make something. There's a certain energy and quality to those communities that I just, I love.\n\nAnd in particular, this is, so this is one of the things that really got me involved in, in obsidian in the early days is because their community, their plugin community is just so engaged. They really enjoy doing it like, you know, and they work on all cool crazy things. And I think that broadly, you know, it's definitely if you're building a creative tool, that's out there to empower people and, and people are excited about you should definitely make sure they have a space to, to meet and talk and collaborate and work on stuff cuz it's it's a great way to make progress and, and building out, like you said, product direction and understanding some of like just underlying desires and getting all this extra cool stuff out in the world.\n\nThomas: Yeah, a hundred percent. I mean, we went through this Raycast through Y combinator, the accelerator, and one of this slogan is like talk to your users. Which is funny because I feel like I'm talking nonstop to our users because they're just sitting in the same slack that I use. So it's, it's, it's basically a little bit of a cheat as well.\n\nRight. So you're surrounding yourself entirely with that. Which is great. So a lot of our roadmap is just when you ask, like in the room, like, what should we do? People observe different things because they work on different angles and they're basically sends it to different inputs. And if things repeating itself, I dunno, 10 times the same feature request, somebody will notice it and then say, Hey, we should do that and putting on the roadmap. Right? So it's, it's a great way to like staying really connected to that and, and figuring out what is really important without losing the touch to, to your users as well.\n\n[00:39:23] Evolving Computer Interaction\n\nJustin: Yeah, that's awesome. So we, we usually ask everyone who comes on some forward looking question sometimes it's about the future of the web. Sometimes it's about the future of computing. But I think Raycast is a really interesting example here. So, the way that we interact with computers is, is slowly starting to change.\n\nIf you could just like envision some other way of operating with a computer, like we know what would that future look like to you?\n\nScarlett 2i2 USB-1: Wanna hear Thomas's answer? Well, the rest of the interview, as well as a bunch of bonus content is only available to our Patreon subscribers.\n\nFor just $5 a month you get access to full length ad free episodes, be able to vote on future guests and you get to join us in our discouraged C. There we'll be hosting an exclusive Q and a with Thomas to answer all your burning questions.\n\nWanna be even more involved. Join one of our higher tiers and become part of episode planning and help shape the episodes as they come out. We hope you join us. Be sure to like, and follow the podcast. Thanks for listening.",
  "title": "Thomas Paul Mann - Raycast"
}