Runtime environment
By default, Asciidoctor.js will try its best to automatically detect the runtime environment using Duck typing.
Configure the Runtime environment
| The following section covers an advanced topic. For most use cases, you don’t need to explicitly configure the runtime environment. | 
Now that you have been warned,
you can use the runtime configuration object when instantiating Asciidoctor.js
to explicitly define the runtime environment:
const asciidoctor = require('asciidoctor')({
  runtime: {
    platform: 'browser',
    engine: 'v8',
    framework: 'webextensions'
  }
})
The following values are recognized:
I/O module
The I/O module provides an implementation for reading files.
By default, Asciidoctor.js will determine the I/O module upon the runtime environment.
To explicitly define the I/O module,
you can specify the attribute runtime.ioModule when instantiating Asciidoctor.js:
const asciidoctor = require('asciidoctor')({
  runtime: {
    ioModule: 'xmlhttprequest'
  }
})
ioModule can be one of:
node- 
The implementation will use the
fsmodule. xmlhttprequest- 
The implementation will use the
XMLHttpRequestobject. graalvm- 
The implementation will use a bounded class named
IncludeResolver:context.getPolyglotBindings().putMember("IncludeResolver", new IncludeResolver()); spidermonkey- 
The implementation will use the
readfunction. phantomjs- 
The implementation will use the
fs.readfunction. 
Retrieve the runtime environment
Once Asciidoctor.js is instantiated, you can retrieve the runtime environment with the getRuntime function:
const asciidoctor = require('asciidoctor')()
console.log(asciidoctor.getRuntime())
// { ioModule: 'node', platform: 'node', engine: 'v8', framework: '' }
It can be useful to make sure that the runtime environment has been correctly determined.