#cli-tool #typing #effect #command #write #terminal #execute

bin+lib swordfish-rs

Cli tool for typing effect in Termainl for screencasts

14 releases (5 breaking)

0.6.0 Sep 17, 2022
0.5.2 Sep 17, 2022
0.4.0 Sep 11, 2022
0.3.2 Sep 11, 2022
0.1.1 Sep 9, 2022

#1817 in Command line utilities

39 downloads per month

Custom license

251 lines


Typing effect cli tool for screencasts and demos

Crates.io Crates.io

  1. 💬 Describe what you are doing
  2. ⚡️ Run any terminal command and get their outputs to screen
  3. 🤖 Reproducible steps - iterate on the screenplay file till perfection
  4. 😎 Mimics real person behavior with realtime typing into terminal

Swordfish hack scene


Example screenplay.yaml file:

- !clear
# - !turbo {by: 3}
- !write {msec: 0, color: green, text:  "$ "}
- !write {msec: 20, text:    "i am going to list this dir"}
- !wait {msec: 1000}
- !erase {msec: 20, by_chars: xxxxxxxxxxxxxxxxxxxxxxxxxxx }
- !wait {msec: 1000}
- !write {msec: 20, text: ls}
- !wait {msec: 1000}
- !execute {line: ls -la}
- !wait {msec: 3000}
- !write {msec: 1000, color: green, text:  "$ "}
- !write {msec: 20, text: "bye, press any key..."}
- !pause

Running swordfish screenplay.yaml:


Quick start


cargo install swordfish-rs

Requires Rust on your machine, get it from https://rustup.rs


Create a screenplay file and run swordfish:

swordfish path/to/file.yaml


The following commands are available, written with ! before the command name, for example !clear.


Clear screen command.


Erase characters to the left.

Argument Type Description
amount (optional) String the amount of backspaces
by_chars (optional) String the amount of backspace is determined by the length of the provided text
msec Integer delay between individual backspaces in millisecs

Use either amount or by_chars or both.


Execute shell commands or other applications and show their output.

Argument Type Description
line String command line to execute, respects quoted arguments

The output is presented, while the executed command itself will not show.


Simulate user's ENTER.


Pause before next command and wait for user input (any key...)


Prompt specify a constant text that is shown after every execute and cis not affected by erase.

Argument Type Description
text String the prompt text
color (optional) String text's color: black, red, green, yellow, blue, magenta, cyan, white or a brighter variant, for example bright_red


Speed everything, useful when iterating over the screenplay.

Argument Type Description
by Integer Speed everything by this factor


Pauses execution for the specified time, then contrinues.

Argument Type Description
msec Integer delay before next command in millisecs


Write text to the terminal.

Argument Type Description
text String the text to type in the terminal, each character will be entered one by one with some delay
msec Integer delay between typed chars in millisecs
color (optional) String text's color: black, red, green, yellow, blue, magenta, cyan, white or a brighter variant, for example bright_red


~181K SLoC