Send feedback

Getting Started

Welcome to the Serenade docs! Here, you'll find an overview of everything Serenade can do, along with examples. First, let's get Serenade installed on your device.

Download

First, download and install Serenade. Serenade supports macOS, Windows, and Linux—platform-specific installation instructions can be found on the download page.

Setup

After installing Serenade, you'll be prompted to activate the app via an email link. If that link doesn't work, you can use the code provided on the activation page to activate manually.

The Serenade application will help you install the extension from the Chrome Web Store.

You can use Serenade with your laptop microphone, though we recommend using a headset for the best accuracy. You can verify that a headset is being used by clicking , and then Settings.

Environment

Serenade floats above all your other windows, so you can keep it side-by-side with your editor. You can toggle Serenade by clicking the Listening switch or pressing Alt+Space. Then, as you speak, you'll see a list of transcripts in the Serenade window.

Sometimes, Serenade isn't sure what you said, so you'll see a few different options. The first one will be used automatically, but to use a different option (and undo the first one), just say the number you want to use instead. For instance, to use the second option, just say two. If none of the options are right, you can just say undo.

Concepts

Throughout the documentation, you'll see blocks that look like this:

Syntax

add [<type>] (function | method) <identifier>

Examples

voice
add method fly
before
class Bird:
    pass
after
class Bird:
    def fly(self):
        pass

Each block shows the syntax for the voice command followed by several examples. To change the programming language used in the examples, use the language switcher in the navigation bar.

  • Text in <angle brackets> is free-form text, like the name of a function or variable.
  • Text separated by pipes, like (foo | bar), represents a list of choices (i.e., an or).
  • Text in [square brackets] is optional.

Tab Management

You can use Serenade to manage your browser tabs.

Create a new tab

new tab

Close the current tab

close tab

Switch to the next or previous tab

(next | previous) tab

Switch to a specific tab

tab (one | two | three ...)

Switch to a specific tab

(first | second | ...) tab

Adding Text

After focusing an input, you can use the commands described in this section to add text to it.

Raw Text

The type command inserts text at the current cursor position, without much formatting done for you. It's the simplest way to add text, and it can be useful if you want to manually specify formatting, spacing, etc.

Syntax

type [above | below] <text>

Examples

voice
type hello
result
hello
type camel case hello world
helloWorld
voice
type above hello
before
world
after
hello
world
type below world
hello
hello
world

The dictate command inserts text, but doesn't convert coding symbols to their equivalents. This can be useful for writing comments or docs, rather than code.

Syntax

dictate <text>

Examples

voice
dictate a plus b greater than not c
result
a plus b greater than not c

Finally, system command inserts text wherever your cursor has focus. For instance, if you're using VS Code and open a "Find" dialog, system will type into that find dialog rather than the main text editor.

Syntax

system <text>

Examples

voice
system hello world
result
hello world

Symbols & Formatting

You'll often want to specify text formatting and add symbols to your code. In this section, we'll see how to do that with voice.

Text Formatting

By default, text will be lowercase, and words will be separated by spaces. To format text using camel case, underscores, etc., you can prefix any text with a style:

    Syntax

    [capital | camel case | pascal case | all caps | underscores | lowercase] <text>

    Examples

    insert sing song
    sing song
    insert capital sing song
    Sing song
    insert camel case sing song
    singSong
    insert pascal sing song
    SingSong
    insert all caps sing song
    SING_SONG
    insert underscores sing song
    sing_song
    add camel case my balance equals all caps starting balance plus one
    myBalance = STARTING_BALANCE + 1
    add argument pascal case some class
    create()
    create(SomeClass)

You can also style existing text by describing a style, followed by a selector to change:

Syntax

(capitalize | camel case | pascal case | all caps | underscores) <selector>

Examples

capitalize foo
foo
Foo
camel case next two words
sing song
singSong

Single Symbols

You can include symbols when speaking text in any insert, add, change, etc. command.

Syntax

<symbol>

Examples

insert foo dot bar
foo.bar
add if x plus y mod 2 is equal to 0
if x + y % 2 == 0:
    pass

Enclosure Symbols

Enclosure symbols can be used to wrap text. You can also dictate opening and closing enclosure symbols separately.

Syntax

[open | close | left | right] <enclosure symbols>

Examples

add f of n minus one
f(n - 1)
add in parens x plus y
(x + y)
insert double underscores main
__main__
add foo equals quotes bar
foo = 'bar'
type left brace five right brace
{5}

You can also surround a selection with enclosure symbols, or any symbol or text if you'd like

Syntax

surround <selector> with <symbols>

Examples

surround x plus y with parens
x + y
(x + y)
surround bar with quotes
foo = bar
foo = 'bar'
surround bar with asterisk
bar
*bar*

Escaping Symbols

If you need to use the literal text representation of a symbol (e.g., the word dash rather than the - character, you can escape it in a few ways:

Syntax

(escape | the word) <symbol>

Examples

type plus
+
type escape plus
plus
type equals
=
type the word equals
equals

System

Serenade can control applications even without a native plugin, from starting apps to pressing keys.

App Control

You can use Serenade to launch apps, switch windows, and close apps.

Launch an application

launch <text>

Examples

launch atom
launch slack

Bring an application to the foreground

focus <text>

Examples

focus chrome
focus code

Close an application

close <text>

Examples

close terminal
close music

On macOS, switching among windows of the current app

switch window

Pause Serenade

(pause | stop listening)

Sending Keystrokes

Serenade can also send keystrokes to any active application, even without a plugin.

Press a keyboard shortcut

press <key>

Examples

press enter
press command k

Type a string

type <text>

Examples

type g mail dot com
gmail.com

Manipulate tabs

(new | close | next | previous) tab

Trigger an undo

undo

Trigger a redo

redo

Run a command in a terminal

run

Tips and Tricks

  • Instead of worrying about spacing while writing code, use style file once your code is in a reasonable state, and Serenade will automatically format the entire file.
  • Long type or add commands can be less accurate than shorter commands. If you're seeing low accuracy, try breaking up longer commands into smaller, separate commands.
  • The type and add commands are similar, but have distinct use cases—add works best for writing new lines of code, including larger constructs like functions or classes, while type works best for inserting or appending text to an existing line.
  • Use copy/cut, paste, and go to liberally in order to more quickly move code around.
  • Make sure your system's microphone volume is set to the right level. We've found that around 80%, to make sure the input isn't too loud or too quiet, works best, but try moving it around if Serenade's results aren't accurate.
  • When using Serenade, try to speak conversationally, as though you were pair programming with someone seated next to you. Over-enunciating words can actually make Serenade less accurate!
  • If Serenade doesn't know a word, like numpy, you can spell it in a command, as with add import n u m p y.

FAQ