Skip to content
Branch: master
Find file History
mvdan make gofumpt happy
Just a stricter gofmt; see
Latest commit 74d04d3 Mar 31, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE _js: ensure the LICENSE file is included Feb 1, 2019 _js: fix links to the gopherjs fork Nov 5, 2018
go.mod _js: update GopherJS to a version for Go 1.12 Mar 10, 2019
go.sum syntax: get rid of StmtList Mar 12, 2019
main.go make gofumpt happy Mar 31, 2019
package.json _js: ensure the LICENSE file is included Feb 1, 2019


This package is a JavaScript version of a shell package written in Go, available at

It is transpiled from Go to JS using a GopherJS fork, available at

Sample usage

const sh = require('mvdan-sh')
const syntax = sh.syntax

var parser = syntax.NewParser()
var printer = syntax.NewPrinter()

var src = "echo 'foo'"
var f = parser.Parse(src, "")

// print out the syntax tree

// replace all single quoted string values
syntax.Walk(f, function(node) {
        if (syntax.NodeType(node) == "SglQuoted") {
                node.Value = "bar"
        return true

// print the code back out
console.log(printer.Print(f)) // echo 'bar'

You can find more samples in testmain.js.

Available APIs

The APIs listed below are wrapped to be usable in JavaScript. Follow the links to read their documentation.

Constructor options like syntax.KeepComments are also available.

The original io.Reader parameters can take a string or a stream.Readable object. io.Writer parameters are replaced by string returns.

The nodes you will find in the syntax tree are all equivalent to the nodes you will see on the Go API. To get the type of a node, use syntax.NodeType as the example above shows. Some of the most common node types include:

The five above will show up in your syntax tree if you parse a echo foo command, which you can see if you use syntax.DebugPrint to inspect the syntax tree.


You will need:

Then, simply run ./build. The result will be index.js, which isn't minified. At the time of writing, index.js weighs 1.7MiB in plaintext, and 220KiB when minified and gzipped.

You can’t perform that action at this time.