npm install @wasm-fmt/shfmtnpx jsr add @fmt/shfmtimport { format } from "@wasm-fmt/shfmt";
const source = `#!/bin/bash
echo "hello world"
`;
const formatted = format(source);
console.log(formatted);With options:
const formatted = format(source, "script.sh", {
indent: 2,
binaryNextLine: true,
switchCaseIndent: false,
spaceRedirects: true,
funcNextLine: false,
minify: false,
singleLine: false,
simplify: true,
});For web environments, you need to initialize WASM module manually:
import init, { format } from "@wasm-fmt/shfmt/web";
await init();
const source = `#!/bin/bash
echo "hello world"
`;
const formatted = format(source);
console.log(formatted);import init, { format } from "@wasm-fmt/shfmt/vite";
await init();
// ...Or use the ./bundler entry with vite-plugin-wasm
import { format } from "@wasm-fmt/shfmt/bundler";.- Auto-detects environment (Node.js uses node, Webpack uses bundler, default is ESM)./node- Node.js environment (no init required)./esm- ESM environments like Deno (no init required)./bundler- Bundlers like Webpack (no init required)./web- Web browsers (requires manual init)./vite- Vite bundler (requires manual init)
# 1. install Go https://go.dev/doc/install
# 2. install TinyGo https://tinygo.org/getting-started/install/
# 3. clone this repo
git clone https://github.com/wasm-fmt/shfmt.git
# 4. install dependencies inside the repo
npm
# 5. build
npm run build
# 6. test
npm run test:nodeThanks to:
- The shfmt project created by Daniel Martí