Skip to content

gabrielcarloto/flow-launcher-helper

Repository files navigation

Flow Launcher Helper

A simple library to help build plugins for Flow Launcher with Javascript or Typescript

Installation

npm install flow-launcher-helper

Usage

I recommend you read the Flow docs before writing your plugin. This example is based on their example.

import { Flow } from 'flow-launcher-helper';

const { on, showResult, run } = new Flow();

on('query', (params) => {
  showResult({
    title: 'Hello World',
    subtitle: `Showing your query parameters: ${params}. Click to open Flow's website`,
    method: 'do_something_for_query',
    params: ['https://github.com/Flow-Launcher/Flow.Launcher'],
    iconPath: 'Images\\app.png',
  });
});

on('do_something_for_query', () => {
  const url = params;
  open(url);
});

run();

Flow

Parameters

  • defaultIconPathstring (optional): the default icon path that will be sent to Flow, so you don't need to specify everytime in the showResult function.

Methods

  • methodstring: current method.
  • requestParams - FlowParameters: array of parameters sent from Flow.
  • settingsobject: plugin settings.
  • on(params: T extends FlowParameters) => void: receives a method (string) and a callback function that will be executed when the method matches the current method.
  • showResult(...results: JSONRPCResponse<TMethods>[]) => void: receives an array of results, where you specify the title, subtitle, method, params and icon path, and logs the data to be displayed in Flow.
  • runfunction: runs the current method. You should call this function at the end of your script, or after all the on functions have been called.
  • paramsstring: current parameters.
    • Note: it is no longer recommended to get the params from this method, as it returns only the first parameter as a string.
Typescript

If you're writing a plugin in Typescript, you can add types to method and settings.

Example
type Methods = 'my_method' | 'my_other_method'

interface Settings {
  username: string;
  api_token: string;
}

const { method, settings } = new Flow<Methods, Settings>()

console.log(method === 'my_method') // ✅ true
console.log(method === 'another_method') // ❌ false
console.log(settings.username) // ✅
console.log(settings.name) // ❌ Property 'name' does not exist on type 'Settings'