#cli #code #snippets

bin+lib the-way

A code snippets manager for your terminal

35 unstable releases

0.19.2 Mar 12, 2023
0.18.0 Aug 24, 2022
0.17.1 Jun 9, 2022
0.16.1 Feb 21, 2022
0.6.1 Jul 23, 2020

#225 in Command line utilities

Download history 2/week @ 2022-12-08 33/week @ 2022-12-15 4/week @ 2022-12-22 4/week @ 2022-12-29 7/week @ 2023-01-05 54/week @ 2023-01-12 34/week @ 2023-01-19 19/week @ 2023-01-26 90/week @ 2023-02-02 186/week @ 2023-02-09 180/week @ 2023-02-16 11/week @ 2023-02-23 25/week @ 2023-03-02 50/week @ 2023-03-09 7/week @ 2023-03-16 17/week @ 2023-03-23

102 downloads per month

MIT license

2.5K SLoC

Crates.io Build Status GitHub release dependency status GitHub license

"Buy Me A Coffee"

The Way

A code snippets manager for your terminal.

Record and retrieve snippets you use every day, or once in a blue moon, without having to spin up a browser. Just call the-way new to add a snippet with a description, a language, and some tags attached.

the-way search fuzzy searches your snippets library (with optional filters on language and tags) and lets you

  • edit a snippet with Shift-Right
  • delete a snippet with Shift-Left
  • copy a particular snippet to your clipboard (with Enter), so you can paste it into whatever editor or IDE you're working with.

See it in action with some self-referential examples (click to open in asciinema):


Table of Contents



xclip on Linux and pbcopy on OSX (see here for more options)


See the releases

  • OSX - allow the-way via System Preferences (necessary in Catalina at least)
  • Linux - chmod +x the-way
  • Currently doesn't work on Windows (waiting on this issue)
  • Can work on Windows Subsystem for Linux by changing the copy command as described here

With brew

brew tap out-of-cheese-error/the-way && brew install the-way

With cargo

cargo install the-way

With yay

yay -S the-way-git

On Android

Needs Termux, Termux:API and pkg install termux-api

Clone the repository, run cargo build --release, and use target/release/the-way


Some upgrades need a database migration (mentioned in the release notes):

  • Before upgrade
the-way export > snippets.json
the-way clear
  • After upgrade
the-way import snippets.json


A code snippets manager for your terminal

Usage: the-way [OPTIONS] <COMMAND>

  new       Add a new code snippet
  cmd       Add a new shell snippet
  search    Fuzzy search to find a snippet and copy, edit or delete it
  sync      Sync snippets to a Gist
  list      Lists (optionally filtered) snippets
  import    Imports code snippets from JSON
  export    Saves (optionally filtered) snippets to JSON
  clear     Clears all data
  complete  Generate shell completions
  themes    Manage syntax highlighting themes
  config    Manage the-way data locations
  edit      Change snippet
  del       Delete snippet
  cp        Copy snippet to clipboard
  view      View snippet

  -c, --colorize  Force colorization even when not in TTY mode
  -p, --plain     Turn off colorization
  -h, --help      Print help information (use `--help` for more detail)
  -V, --version   Print version information


Main features

  • Add code and shell snippets
  • Interactive fuzzy or exact search with edit, delete and copy to clipboard functionality
  • Filter by tag, date, language and/or regex pattern
  • Import / export via JSON
  • Import from Gist (with the-way import -g <gist_url>)
  • Sync to gist
  • Syntax highlighting

Shell commands

the-way cmd (inspired by pet) makes it easier to save single-line bash/shell snippets with variables that can be filled in whenever the snippet is needed.

Add the following function according to your shell of choice. Every time you spend ages hand-crafting the perfect command: run it, close all the stackoverflow tabs, and run cmdsave to save it to the-way. You can then use cmdsearch to search these shell snippets and have the selected one already pasted into the terminal, ready to run.


function cmdsave() {
  PREV=$(echo `history | tail -n2 | head -n1` | sed 's/[0-9]* //')
  sh -c "the-way cmd `printf %q "$PREV"`"

function cmdsearch() {
  BUFFER=$(the-way search --stdout --languages="sh")
  bind '"\e[0n": "'"$BUFFER"'"'; printf '\e[5n'


function cmdsave() {
  PREV=$(fc -lrn | head -n 1)
  sh -c "the-way cmd `printf %q "$PREV"`"

function cmdsearch() {
  BUFFER=$(the-way search --stdout --languages="sh")
  print -z $BUFFER


function cmdsave
  set line (echo $history[1])
  the-way cmd $line

function cmdsearch
  commandline (the-way search --languages=sh --stdout)

You'll usually want different parameters each time you need a shell command: save variables in a shell snippet as <param> or <param=default_value> and every time you select it you can interactively fill them in (or keep the defaults). Parameters can appear more than once, just use the same name and write in the default the first time it's used.

Here's another self-referential example that saves a shell command to add new language syntaxes:


(todo: Use cmdsearch instead of search)

Sync to Gist

the-way sync date syncs snippets to a Gist, each named snippet_<index>.<extension>, with an index.md file linking each snippet's description and tags. Local updates and deletions are uploaded to the Gist and Gist updates are downloaded.

the-way sync local uploads all local changes, additions, and deletions to the Gist. This is useful after upgrading to a new version of the-way if the Gist format has changed, or something gets messed up in the Gist.

the-way sync gist downloads all Gist changes, additions, and deletions to the local database. This is useful to sync snippets across computers, as it uses the Gist as the source of truth.


This functionality needs a GitHub access token with the "gist" scope. Either enter this token on running sync for the first time or set it to the environment variable $THE_WAY_GITHUB_TOKEN.

You can also import snippets from a Gist created by the-way using the-way import -w <gist_url>.

Shell completions

the-way complete zsh > .oh-my-zsh/completions/_the-way
exec zsh

Syntax highlighting

The Way maps languages to their extensions and uses this to

  1. Enable syntax highlighting in $EDITOR (if the editor supports it),
  2. Upload snippets to Gist with the correct extension,
  3. Add a small colored language indicator (GitHub-flavored)
  4. Syntax highlight code in the terminal

The last point can be customized via the-way themes.

Use the-way themes set to see available themes and enable a theme.

Default themes:

Solarized (dark)
Solarized (light)

Use the-way themes add <theme.tmTheme> to add a new theme to your themes folder. Theme files need to be in Sublime's .tmTheme format. Searching GitHub for .tmTheme pulls up some examples.

Use the-way themes language <language.sublime-syntax> to add highlight support for a new language (many languages are supported by default). Syntax files need to be in Sublime's sublime-syntax format. Zola has a nice collection of such files.

Here's how it looks before and after adding Kotlin.sublime-syntax:

  • Before:


  • After:


To get syntax highlighting for code blocks in markdown files, download and add the patched Markdown.sublime-syntax file in this repository, taken from bat (the default syntax file doesn't do this anymore)


The default config TOML file is located in

  • Linux: /home/<username>/.config/the-way
  • Mac: /Users/<username>/Library/Preferences/rs.the-way

This file contains locations of data directories, which are automatically created and set according to XDG and Standard Directories guidelines. Change this by creating a config file with the-way config default > config.toml and then setting the environment variable $THE_WAY_CONFIG to point to this file.

Copy command

By default xclip is used on Linux, pbcopy on OSX and termux-clipboard-set on Android. You can override the default command by setting the copy_cmd field in the configuration file. For example to use xsel as a copy command, set the copy_cmd field as follows:

copy_cmd = 'xsel -ib'

Why "The Way"?

The name is a reference to the Way of Mrs.Cosmopilite, kōans for every situation.


~561K SLoC