Cross-platform Text Expander written in Rust.

Visit the Documentation.

Features

  • Works on Windows, macOS and Linux
  • Works with almost any program
  • Works with Emojis 😄
  • Works with Images
  • Includes a powerful Search Bar 🔎
  • Date expansion support
  • Custom scripts support
  • Shell commands support
  • App-specific configurations
  • Support Forms
  • Expandable with packages
  • Built-in package manager for espanso hub
  • File based configuration
  • Support Regex triggers
  • Experimental Wayland support

Static Matches

Single-line Expansions

- trigger: "hello"
  replace: "world"

Multi-line Expansions

- trigger: "hello"
  replace: "line1\nline2"

Dynamic Matches

Using Variables

- trigger: "now"
  replace: "It's {{mytime}}"
  vars:
    - name: mytime
      type: date
      params:
        format: "%H:%M"

Preconfigured Choices

- name: output
    type: choice
    params:
      values:
        - "Every moment is a fresh beginning."
        - "Everything you can imagine is real."
        - "Whatever you do, do it well."

Run CLI Command

- name: getip
  type: shell
  params:
    cmd: "curl ifconfig.me"
    shell: cmd

Global Variables

Declarations

global_vars:
  - name: "global1"
    type: "shell"
    params:
      cmd: "echo global var"
  - name: "greet"
    type: "echo"
    params:
      echo: "Hey"

Usage

- trigger: ":hello"
    replace: "{{greet}} Jon"

Word Triggers

Autocorrect Typos

- trigger: "ther"
    replace: "there"
    word: true

Case Propagation

- trigger: "alh"
    replace: "although"
    propagate_case: true
    word: true
  • If you write alh, the match will be expanded to although.
  • If you write Alh, the match will be expanded to Although.
  • If you write ALH, the match will be expanded to ALTHOUGH.

Cursor Hints

Insert $|$ where you want the cursor to be positioned. Limited to one cursor hint.

- trigger: ":div"
    replace: "<div>$|$</div>"

Match Disambiguation

Takes all matches with the same trigger and displays a dialog to let you choose.

- trigger: ":quote"
    replace: "Every moment is a fresh beginning."
- trigger: ":quote"
    replace: "Everything you can imagine is real."
- trigger: ":quote"
    replace: "Whatever you do, do it well."