GitHunt

logo
Gost-DOM
A headless browser for Go

The Go-to solution for a TDD workflow.

As a developer
In order to work effeciently with code
I want a fast feedback loop for all of my code.

Gost-DOM is a development tool to help building web applications in Go by
providing a blazingly fast, completely reliable, feedback loop.

By simulating a browser envinronment in the test itself, including JavaScript
execution1, Gost-DOM allows you to write an automated test suite, and run
them so fast enough that they become a useful feedback tool while implementing
behaviour
.

Gost-DOM is the headless browser that provides sub-second feedback with 100%
predictable code execution.

To learn more, read Why Gost-DOM?

Why not use ...

The typical solution relies on browser automation (e.g., playwright). These have a
significant overhead controlling a remote browser. In addition, developers
often struggle with erratic tests due to unpredictable code execution.

As a result, these types of tests are typically written after the fact, when
the system already works.

These tests didn't provide any value as a feedback tool during development.

Not a replacement

Gost-DOM allows verification of individual pieces of behaviour during
development
, but it's not a full browser, e.g., you cannot export screen shots.

In addition, there are sensible tests to write after features were developed,
e.g., test a complete web-shop order flow from login to check-out. Using a real
browser for these types of tests would be sensible; and verifying in all
browsers you support.

Other Benefits of Gost-DOM

Gost-DOM has a few additional benefits over browser automation:

  • Tests run in parallel due to complete isolation2
  • No erratic behaviour; 100% predictable UI reactions.
  • Blazingly fast.3 No out-of-process calls, not even thread boundaries for web
    API calls as web application code runs in the test thread.4
  • Dependencies can be replaced in tests.
  • Write tests at a higher level of abstraction, expressing the expected
    behaviour of a system, decoupled from implementation details.

Gost-DOM still uses HTTP request and responses for verification, testing the
entire stack, including how middlewares affect the behaviour, verifying, and
supporting refactoring of e.g., authentication logic.

Getting started

Also, check out the Shaman module which provides capabilities of querying the
DOM at a higher level of abstraction, e.g., find an element with a specific
label / accessibility name, allowing tests to be more expressive

Note

This is 0.x version still, and breaking API changes do occur, but will be
announced before release in the Gost-DOM discussions (do say Hi! 👋)

Looking for sponsors

This project is the spare time project for a single developer making good
progress because of too much spare time; but that will not last.

If I could find enough sponsors, it could mean the difference between continued
development, or death 😢

For companies wanting to sponsor, I can send formal invoices too. More
information on the project's Sponsor page

Attribution / 3rd party included code.

Some web APIs are implemented by embedding
polyfills
from other open-source
JavaScript libraries.

In addition, to verify compatibility with 3rd party JavaScript libraries, the
test code in repository contains compiled versions of:

  • HTMX distributed under the Zero-Clause BSD license.
  • Datastar distributed under the MIT license.

Star History

Star History Chart


Footnotes

  1. Gost-DOM can use V8 - the same JavaScript engine that powers Chrome; but a
    native Go alternative also exists. ↩

  2. Complete isolation depends on your code, e.g., if you don't replace
    database dependencies, tests are not isolated. ↩

  3. Cliché, I know! But it is! ↩

  4. This depends on how you configure Gost-DOM. ↩

gost-dom/browser | GitHunt