---
title: "About the Go-to-JS bridge | Grafana k6 documentation"
description: "Technical details about how JavaScript works in the sobek engine."
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# About the Go-to-JS bridge

All k6 and xk6 binaries have an embedded JavaScript engine, [sobek](https://github.com/grafana/sobek), which your test scripts run on.

You will deepen your conceptual knowledge of how your k6 extension works if you understand the *bridge* between Go internals and the JavaScript runtime.

## Go-to-JavaScript bridge features

The bridge has a few features we should highlight:

- Go method names are converted from *Pascal* to *Camel* case when accessed in JS. For example, `IsGreater` becomes `isGreater`.
- Go field names convert from *Pascal* to *Snake* case. For example, the struct field `ComparisonResult string` becomes `comparison_result` in JS.
- Field names may be explicit using `js` struct tags. For example, declaring the field as ComparisonResult string \`js:“result”\` or hiding from JS using \`js:"-"\`.

## Type conversion and native constructors

The JavaScript runtime transparently converts Go types like `int64` to their JS equivalent. For complex types where this is impossible, your script might fail with a `TypeError`, requiring you to explicitly convert your object to a [`sobek.Object`](https://pkg.go.dev/github.com/grafana/sobek#Object) or [`sobek.Value`](https://pkg.go.dev/github.com/grafana/sobek#Value).

Go ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```go
func (*Compare) XComparator(call sobek.ConstructorCall, rt *sobek.Runtime) *sobek.Object {
	return rt.ToValue(&Compare{}).ToObject(rt)
}
```

The preceding snippet also demonstrates the *native constructors* feature from sobek, where methods can become JS constructors. Methods with this signature can create `Comparator` instances in JS with `new compare.Comparator()`. While this is more idiomatic to JS, it still has the benefit of receiving the `sobek.Runtime`.
