Extensions

Extensions that ask first.

Each one is WebAssembly run by crc's own interpreter. It says what it may read and change, crc shows you before you install it, and holds it to that after. No files, no network, no other programs.

Declared

A manifest lists what the extension may touch. Anything it did not ask for is not even linked in.

Sandboxed

It runs off the main thread with a time and memory budget, and gets only the text you give it.

Signed

Official extensions are built from source in CI and signed; crc checks the signature and every checksum.

Official

3 extensions, 17 commands.

In crc: Extensions › Extensions… (⌘⇧X), pick one, Install. The signed registry opens with its first published release; until then these install from a folder.

Change Case

crc.change-case · 0.1.0

Change the case of the selection or document: upper, lower, title, snake_case, kebab-case, camelCase, PascalCase and CONSTANT_CASE.

Upper CaseLower CaseTitle Casesnake_casekebab-casecamelCasePascalCaseCONSTANT_CASE
May
  • Read the selected text
  • Replace the selected text
  • Read the whole document
  • Replace the whole document

Encode and Decode

crc.encode · 0.1.0

Base64, URL and HTML encoding of the selection or document, both ways.

Base64 EncodeBase64 DecodeURL EncodeURL DecodeHTML EscapeHTML Unescape
May
  • Read the selected text
  • Replace the selected text
  • Read the whole document
  • Replace the whole document

Sort Lines

crc.sort-lines · 0.1.0

Sort the selected lines, or the whole document, and remove duplicates.

Sort LinesSort Lines DescendingRemove Duplicate Lines
May
  • Read the selected text
  • Replace the selected text
  • Read the whole document
  • Replace the whole document
Make one

A Rust function from text to text.

The scaffold asks for the name, description, icon and commands, and writes an extension that builds and installs as it is. Everything in crc-extensions is MIT or Apache 2.0, so yours can use any licence.

The full guide →
# in a clone of crc-extensions
python3 scripts/new-extension.py
cargo build --release \
  --target wasm32-unknown-unknown
# then in crc: Install from Folder…

Why WebAssembly, why crc's own interpreter, and how signing works: the extensions design →