NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #722 most downloaded on npm
quote and parse shell commands
Last release 2 days ago
02 Oct 2026
Release timing varies
gaps range from 2 weeks to 2.1 years
Nearly every release is documented
notes for 34 of 34 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
34 releases · first in 2012
[New] parse: support here-documents (<<) `#31`
parse: support here-documents (<<) #31parse: support tab-stripping here-documents (<<-) dbfac37parse: support output process substitution (>() 2053315parse: support the case test-next terminator (;;&) 7d688b9parse: support the case fall-through terminator (;&) f27010eparse: support redirecting output despite noclobber (>|) b78d19cparse: support opening a file for reading and writing (<>) 21cc333parse: support redirecting stdout and stderr (&>) 6ad6cd2parse: support appending stdout and stderr (&>>) 90cde9c@ljharb/eslint-config 3a7b4aeOne column per quarter.
[Refactor] quote: drop a replace that can never match in the single-quote branch `#15`
quote: drop a replace that can never match in the single-quote branch #15parse: support bash ANSI-C quoting ($'...') #32quote: reject line terminators in tokens after a comment 6002b2eparse: preserve text after special shell parameters 81b08a5parse: an escaped backslash does not escape the character after it d708019quote: preserve ! in arguments that also contain ' ad39927parse: treat $_name as a variable name, not $_ followed by text 28f88cdquote: preserve empty glob patterns 35c9b97quote: escape ~ in glob patterns to prevent shell tilde-expansion 239d49c@ljharb/eslint-config, auto-changelog, eslint, evalmd b1e406eebfc3083429b0dcache-mode 36f2394eslint 6de9a41[New] parse: add opt-in splitUnquoted option for shell field-splitting of unquoted expansions `#1`
parse: add opt-in splitUnquoted option for shell field-splitting of unquoted expansions #1parse: match nested ${...} braces so nested parameter expansion is consumed as one substitution c0842c8parse: pin single-quote literalness and unmatched-quote handling a0d03e32116fa3quote: pin conservative escaping of =, @, ^, ,, :, ! (#11) 1c36f3fquote outputs POSIX quoting, not cmd.exe/PowerShell 100e96eparse's supported parameter-expansion subset e1c75cdparse: a backslash inside single quotes must not escape the closing quote 5d460a32de86f5quote: pin that a backslash with whitespace is not doubled in single quotes (#14) 190e236quote: use output verbatim; do not re-quote it (#11) 1b36468parse: fix swapped SINGLE_QUOTE/DOUBLE_QUOTE variable names 801af5c59bbf8b@arethetypeswrong/cli, evalmd a04d475@arethetypeswrong/ci, eslint d390f9aquote: the tilde test escapes every ~, not just a leading one (#9) 617d119[Dev Deps] update eslint `9aa9e8f`
dca6e21eslint 9aa9e8fparse: finalize tokens in linear time (GHSA-395f-4hp3-45gv) 7ff548875e8497@types/esrecurse 3fb739dnpm install on Windows to survive npm 2/3 staging-rename flake abe0163b4bafa2quote: escape leading ~ to prevent shell tilde-expansion 7a76c1aauto-changelog, tape 7184b44jackspeak is no longer in the graph 9ba368a[Fix] quote: validate object-token shapes `4378a6e`
[Fix] remove unnecessary backslash escaping in single quotes `#15`
#15[Fix] quote: preserve empty strings `#18`
quote: preserve empty strings #180fb9fd8819bd84@ljharb/eslint-config, auto-changelog, npmignore, tape fc56408fdeb0fd@ljharb/eslint-config, aud, tape b8a4a3b9eecafc4044e7faud with npm audit 8cfdbd8engines.node 843820e4c3b88djackspeak since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 80322ed[Fix] parse: preserve whitespace in comments `#6`
parse: hoist getVar to module level b42ac738f0c5c3parse: use slice over substr, cache some values fcb2e1aparse: a bit of cleanup 6780ec5parse: tweak the regex to not match nothing 227d474a66de94parse: avoid shadowing a function arg 1d58679[New] extract parse and quote to their own deep imports `553fdfc`
parse and quote to their own deep imports 553fdfcnyc coverage fd7ddcd<<<) 9802fb3parse: Add syntax support for duplicating input file descriptors 216b198@ljharb/eslint-config, aud, tape 85f8e31evalmd c5549fc62e9b49Add node_modules to .gitignore `#48`
#48aaa9d1f397cb62auto-changelog 497fca54763c366ee14377eb513467381b6funding in package.json 8641572npmignore to autogenerate an npmignore file 2e2007af97411etape 051f608safe-publish-latest 18cadf9aud in posttest dc1cc12<!-- auto-changelog-above -->
Fix a security issue where the regex for windows drive letters allowed some shell meta-characters to escape the quoting rules. (CVE-2021-42740)
Fix a regression introduced in 1.6.3. This reverts the Windows path quoting fix.
Fix $ being removed when not part of an environment variable name. (@Adman in #32)
Add support for parsing >> and >& redirection operators. (@forivall in #16)
Fix Windows path quoting problems. (@dy in #34)
Use native JSON and Array methods `#21`
Fix some more escaping for .quote() `ace52f4`
add comment parsing feature `b8b5c31`
b8b5c31add escape option to .parse `4d400e7`
4d400e7Fix quote() with special chars `811b5a0`
811b5a0Handle non-strings when quoting `d435827`
Rewrite parser as a character based scanner `c7ca9a2`
failing set test with an env cb `9fb2096`
tests for setting env vars `f44b039`
f44b03974d6686de9e0a57d5636b2b4e1b144177e3e189d9dd1beb6b9a4c11cd997384### Commits - pass objects through `f9c0514`
f9c0514hacky tokenizer is much simpler `7e91b18`
7e91b18d6d6416666395ff6f8bd6041c5da7a0cf7916139f5914a1a9failing test for special shell parameter env vars `728862a`
quote all ops objects `ac7be63`
document ops, op example `a6381e6`
a6381e6fbc6e5cd8177368c008b20331c7fe51fa90710bb24e3e9ac1f535987e6f9199cb94c105cf1bf217a40ed48b1eb93998b0fb009ef62adb37320a0147Return empty list when parsing an empty (or whitespace-only) string `1475717`
1475717externalize the regex declaration `37d6058`
37d605824106f51b21b0158914715757c42590534ac669d2eadae66f42b5f83efa4084e9537b9ed0c1c6a6782ae601b340cc0efba84679615448a0246e6cf417d1fda9d7b7275afd47b8dbb280fixed unescaped metachars and bump `5ce339f`
passing the parse test `69c0f85`
Your coding agent can read these notes before it upgrades. Set up the MCP server →