A code rewrite tool for structural search and replace that supports ~every language.
2,673
stars
516
commits
OCaml
primary language
Jun 8, 2026
updated

A short example below shows how comby simplifies matching and rewriting compared to regex approaches like sed.

brew install combybash <(curl -sL get-comby.netlify.app)
Other Linux distributions: The PCRE library is dynamically linked in the Ubuntu binary. For other distributions like Arch Linux, a fixup is needed: sudo ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3. On Fedora, use sudo ln -s /usr/lib64/libpcre.so /usr/lib64/libpcre.so.3. Alternatively, consider building from source.
bash <(curl -sL get.comby.dev)docker pull comby/combyRunning with docker on stdin:
docker run -a stdin -a stdout -a stderr -i comby/comby '(:[emoji] hi)' 'bye :[emoji]' lisp -stdin <<< '(👋 hi)'
Sometimes, yes. But often, small changes and refactorings are complicated by nested expressions, comments, or strings. Consider the following C-like snippet. Say the challenge is to rewrite the two if conditions to the value 1. Can you write a regular expression that matches the contents of the two if condition expressions, and only those two? Feel free to share your pattern with @rvtond on Twitter.
if (fgets(line, 128, file_pointer) == Null) // 1) if (...) returns 0
return 0;
...
if (scanf("%d) %d", &x, &y) == 2) // 2) if (scanf("%d) %d", &x, &y) == 2) returns 0
return 0;
To match these with comby, all you need to write is if (:[condition]), and specify one flag that this language is C-like. The replacement is if (1). See the live example.
Install opam. TL;DR do sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
Run this if you don't have an OCaml 5 switch installed (it bootstraps the OCaml compiler):
opam init
opam switch create 5.1.0 5.1.0
Run eval $(opam env)
Install OS dependencies:
Linux: sudo apt-get install autoconf libpcre3-dev pkg-config zlib1g-dev m4 libgmp-dev libev4 libsqlite3-dev
Mac: brew install pkg-config gmp pcre libev
Then install the library dependencies:
git clone https://github.com/comby-tools/comby
cd comby
opam install . --deps-only
make
make test
comby on your PATH by runningmake install
OCaml
84.3%
Shell
11.6%
C
1.7%
Standard ML
1.4%
A code rewrite tool for structural search and replace that supports ~every language.
2,673
stars
516
commits
OCaml
primary language
Jun 8, 2026
updated

A short example below shows how comby simplifies matching and rewriting compared to regex approaches like sed.

brew install combybash <(curl -sL get-comby.netlify.app)
Other Linux distributions: The PCRE library is dynamically linked in the Ubuntu binary. For other distributions like Arch Linux, a fixup is needed: sudo ln -s /usr/lib/libpcre.so /usr/lib/libpcre.so.3. On Fedora, use sudo ln -s /usr/lib64/libpcre.so /usr/lib64/libpcre.so.3. Alternatively, consider building from source.
bash <(curl -sL get.comby.dev)docker pull comby/combyRunning with docker on stdin:
docker run -a stdin -a stdout -a stderr -i comby/comby '(:[emoji] hi)' 'bye :[emoji]' lisp -stdin <<< '(👋 hi)'
Sometimes, yes. But often, small changes and refactorings are complicated by nested expressions, comments, or strings. Consider the following C-like snippet. Say the challenge is to rewrite the two if conditions to the value 1. Can you write a regular expression that matches the contents of the two if condition expressions, and only those two? Feel free to share your pattern with @rvtond on Twitter.
if (fgets(line, 128, file_pointer) == Null) // 1) if (...) returns 0
return 0;
...
if (scanf("%d) %d", &x, &y) == 2) // 2) if (scanf("%d) %d", &x, &y) == 2) returns 0
return 0;
To match these with comby, all you need to write is if (:[condition]), and specify one flag that this language is C-like. The replacement is if (1). See the live example.
Install opam. TL;DR do sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
Run this if you don't have an OCaml 5 switch installed (it bootstraps the OCaml compiler):
opam init
opam switch create 5.1.0 5.1.0
Run eval $(opam env)
Install OS dependencies:
Linux: sudo apt-get install autoconf libpcre3-dev pkg-config zlib1g-dev m4 libgmp-dev libev4 libsqlite3-dev
Mac: brew install pkg-config gmp pcre libev
Then install the library dependencies:
git clone https://github.com/comby-tools/comby
cd comby
opam install . --deps-only
make
make test
comby on your PATH by runningmake install
OCaml
84.3%
Shell
11.6%
C
1.7%
Standard ML
1.4%