Show HN: Kando – A cross-platform pie menu for your desktop

kando.menu

37 points by schneegans a day ago

Kando is a cross-platform open source pie menu which I am currently developing! It offers an unconventional, fast, highly efficient, and fun way of interacting with your computer! You can use it to launch applications, simulate keyboard shortcuts, open files, and much more. Let me know what you think about it!

TripleChecker 20 hours ago

Looks cool! I was surprised to see it using Electron. Does it use the Canvas API or HTML/DOM for the UI elements?

There were also a few typos on the homepage and other pages that you might want to review: https://triplechecker.com/s/166843/kando.menu

  • schneegans 13 hours ago

    Thanks for the typo pointers! It uses DOM elements. This makes it really easy to develop themes with CSS. I also did some experiments with alternatives to Electron, but found that the advantages of Electron clearly outweigh the disadvantages in this case. Here is some background information: https://github.com/orgs/kando-menu/discussions/58

    • retrochameleon 23 minutes ago

      Thank you for addressing the Electron discussion thoroughly on Github. I am always very disappointed to see an application I am interested in using Electron. It is often enough of an issue for me to immediately write it off as something I will never use. I hope to see more Tauri instead, but you also addressed some minor issues about that option.

      I'll have to play around with this application.

woolion 9 hours ago

It looks a bit like the Krita right-click palette menu, which is made with a similar idea that you want to be fast while only access to a tablet stylus. I've seen that it has controller support, which is great; it's a cheap 'shortcut enabling' device that is readily available to most people.

It would be a bit easier to have a video on the homepage that is a whirlwind tour of the program rather than the latest changelog. Although I have a motivation to find it useful (using a stylus restricts keyboard use), I've already set up a Tartarus with Input remapper to act as custom shortcuts etc, and it seems complicated to find how it would simplify or improve my existing setup.

emacsen 20 hours ago

I remember in the late 90s when there were so many alternative interfaces for PCs. It was a great time for exploration on what could be done.

Kando is very pretty, and it can be fun to use an interface like this, but in terms of practicality, text inputs are better.

For example, on my desktop, there's an icon on my taskbar for Firefox, but most of the time, I get my screen to the search bar and type "F" and my system knows I probably want Firefox. Done.

There's a game I play, Astroneer, and it uses a pie interface. I often wish I could just type in what I want. It'd be faster.

I want to love this, but I can type on a keyboard so much faster, and use up so much less cognitive energy doing so than switching my hand to the mouse, pulling up a menu, reading the symbols (even if I have their location memorized) and pulling my wrist/arm in the right direction.

  • schneegans 13 hours ago

    If you have both hands at your keyboard, that's 100% true. However, it really works well with workflows which rely on mouse, stylus, touch, or controller input.

    Especially when used for "creative" or "artistic" tasks (e.g. painting, video editing, 3D modelling, etc.) pie menus can really have a benefit because you have your hand at the stylus or at the mouse most of the time anyways.

  • hju22_-3 20 hours ago

    I agree, but I also really like the pie menus. Personally, I'd like the ability to simply write to match, but otherwise working as demonstrated. E.g. like the Windows search works when you've hidden the search bar. I'd prefer both, in other words.

    • snapplebobapple 18 hours ago

      Rofi has that search to match but iant a pie menu

  • dingnuts 20 hours ago

    ideally you have a button on your mouse to summon this, and use it when you are already using your mouse, and summon a different interface for typing from your keyboard, when your hands are there

astrosloth 10 hours ago

I am running RPi OS with GNOME 43.9 and was wondering if you have a release build for Arm (Pi 5)?

oulipo 20 hours ago

Really cool!

On osX BetterTouchTool can also do radial menus!

Would there be a way to import/export a menu configuration from your tool as a .json?

  • schneegans 13 hours ago

    Thanks! All menus are actually stored in a JSON file. The format is documented here: https://kando.menu/config-files/

    So maybe it could be converted to different formats...

    • oulipo 10 hours ago

      yes, I was thinking more of having a kind of "dotfile" approach to all my configs for automation on macOs, as there are so many different overlapping apps like BTT, KeyboardMaestro, skhd, Kando, Alfred, etc

      I'd love to have a `.automation` folder in my home where I can add descriptions of all my menus, keyboard shortcuts, scripts, Shortcut App scripts, BTT config, etc, and each time I modify them it updates in the app

      It would be nice to have a kind of overview of all my automations

      Also I'd like it that each file is some kind of "executable markdown" container which can contain textual description, images, etc, and the scripts/configs themselves, and the bindings

      Something like this

          --
          name: emoji-picker
          author: xxx
          description: Various emoji-related bindings
          version: 1.0
          url: xxx
          license: ...
          --
          
          ```@deps
          ts: mdex>=1.0,<2.0
          ```
          
          ```@deps test
          // deps only for testing, etc
          ```
          
          ```@include
          // can seamlessly include other .mdex, libs, code, repos, etc
          ```
          
          # Open emoji picker
          
          The Raycast emoji finder is clean and easy to use, so I'll use it instead of the system picker
          
          ```@code ts openPicker
          const openPicker = async (prompt: string = "") => {
              api.url.open(`raycast://extensions/emoji?prompt={prompt}`);
          }
          ```
          
          ```@test
          // define some code to run tests and ensure everything works
          ```
          
          ## Trigger on `fn` key
          
          ```@binding key
          trigger: @on(platform == "darwin") key=[fn]
          action: code openPicker @(openPicker();)
          # equivalently, action: api open("raycast://...")
          ```
          
          ## When called as a CLI, allow to pass an optional prompt to the emoji picker
          This installs an `emoji` cli, which parses with an optional prompt
          ```@binding cli
          name: emoji
          args: [prompt=""]
          action: code openPicker @(openPicker(prompt);)
          ```
          
          ## Add custom bindings through extensions
          ```@binding ext:alfred
          keyword: emoji [query=""]
          action: code openPicker @(openPicker(query);)
          ```
          
          ## Every hour, refresh the emojis
          ```@binding cron
          every: 1h
          action: code openPicker @(refreshEmojiData();)
          ```
          
          ## Create an UI
          ```@binding ui
          name: emoji-ui
          layout: ...
          html: ...
          css: ...
          ```
          
          ## Usage:
          
          ```sh
          mdex list emoji
          mdex info emoji-picker
          mdex install @user/emoji-picker
          mdex install emoji-picker.mdex # install or refresh script, install deps, setup key-bindings
          mdex test emoji-picker.mdex
          emoji "clown" # cli
          mdex uninstall emoji-picker
          # or trigger the `fn` shortcut
          mdex logs emoji-picker
          ```