🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

unbash

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

unbash

Fast 0-deps bash parser written in TypeScript

Source
npmnpm
Version
2.2.0
Version published
Weekly downloads
9.1M
2.41%
Maintainers
1
Weekly downloads
 
Created
Source

unbash

Fast 0-deps bash parser written in TypeScript

Install

npm install unbash

Usage

import { parse } from "unbash";

const ast = parse('if [ -f "$1" ]; then cat "$1"; fi');

Result:

{
  type: "Script",
  commands: [{
    type: "If",
    clause: { type: "Command", name: { text: "[" }, ... },
    then: { type: "Command", name: { text: "cat" }, ... }
  }]
}

Print

Basic opinionated printer, does not preserve whitespace or comments (except shebang):

import { parse } from "unbash";
import { print } from "unbash/print";

const ast = parse('if [ -f "$1" ]; then cat "$1"; fi');
const script = print(ast);

Result:

if [ -f "$1" ]; then
  cat "$1"
fi

unbash vs tree-sitter-bash

tree-sitter-bash is an excellent choice if you need:

  • Incremental parsing
  • CST output preserving all tokens and punctuation
  • Granular error recovery that wraps errors in ERROR nodes and continues parsing

unbash might be a good fit if you prefer:

  • AST output
  • A zero-dependency package that runs in any JS environment
  • A typed TypeScript API
  • Built-in parsing for command/process substitutions, coproc, Bash 5.3 ${ cmd; }, [[ ]], (( )), and extglob
  • Tolerant parsing that never throws and collects parse errors

unbash vs sh-syntax

sh-syntax is a WASM wrapper around the robust mvdan/sh Go parser. It is highly recommended if you need:

  • Support for multiple shell dialects (bash, POSIX sh, mksh, Bats)
  • Built-in formatting and pretty-printing (print)

unbash might be a good fit if you prefer:

  • A zero-dependency, synchronous API
  • A detailed AST with structured word parts, parameter expansions, arithmetic expressions, and test expressions

unbash vs bash-parser

bash-parser (last publish: 2017) and its fork @ericcornelissen/bash-parser (community dependency maintenance fork ❤️ now archived) might be interesting if you need:

  • A POSIX-only mode that rejects bash-specific syntax

unbash might be a good fit if you prefer:

  • A zero-dependency architecture
  • A typed TypeScript API (ESM-only)
  • Tolerant parsing that never throws and collects parse errors
  • Structured AST nodes for parameter expansions, arithmetic expressions, and [[ ]] test expressions
  • Support for many additional syntax features (like herestrings, C-style for loops, select, process substitution, etc. etc.)

Benchmarks

Relative performance comparison (on Apple M1 Pro/32GB), unbash is x times faster:

Parsershortadvancedmediumlarge
tree-sitter-bash (native)13x9x4x5x
tree-sitter-bash (WASM)16x12x8x8x
sh-syntax2136x1537x8x4x
bash-parser256xN/AN/AN/A
@ericcornelissen/bash-parser267xN/AN/AN/A

Run the benchmarks using Node.js v22:

pnpm install
node bench/all.ts

Size

unbash is 53K minified, 13KB gzipped.

Playgrounds

License

ISC

Keywords

ast

FAQs

Package last updated on 01 Mar 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts