Skip to main content
Version: 0.1.0

Injection Methods

The relayer can be injected into any web page using three methods.

1. Script tag (own dApp)

If you control the page, add the script tag before any other scripts:

<script src="/dist/relayer.iife.js"></script>

2. Tampermonkey userscript

Install Tampermonkey, then create a new script with the relayer bundle inlined directly:

// ==UserScript==
// @name TezosX Relayer Injector
// @namespace tezosx-relayer
// @version 0.3
// @match *://*/*
// @run-at document-start
// @grant none
// ==/UserScript==

(function () {
// ── Paste the full content of dist/relayer.iife.js here ──

console.log('[TezosX] Relayer injected ✓');
})();
Inline only — do not use GM_xmlhttpRequest

Loading the bundle asynchronously via GM_xmlhttpRequest causes the relayer to arrive after dApps have already dispatched eip6963:requestProvider. The provider is never registered and the wallet doesn't appear in the connect modal.

Inlining the bundle guarantees the provider is registered synchronously at document-start, before any dApp code runs.

Why timing matters

Async (broken for EIP-6963):
page loads → dApp requests EIP-6963 providers → [network delay] → relayer arrives too late ✗

Inline (correct):
page loads → relayer already in script → EIP-6963 announced → dApp receives provider ✓

Setup

  1. Install Tampermonkey from the Chrome Web Store
  2. Go to chrome://extensions → Tampermonkey → DetailsSite accessOn all sites
  3. Build the relayer: npm run build
  4. Create a new script, paste the template above, and replace the comment with the full content of dist/relayer.iife.js
  5. Reload the target page — check the console for [TezosX] Relayer injected ✓

After each rebuild, re-copy dist/relayer.iife.js into the userscript and save.

3. Chrome Extension (roadmap)

A proper MV3 extension will be the production delivery method. Extensions can inject into any page using chrome.scripting.executeScript({ world: 'MAIN' }), which bypasses Content Security Policy restrictions — something userscripts cannot do.

MethodCSP bypassEIP-6963 timingProduction-ready
Script tag✅ Synchronous✅ (own dApp)
Tampermonkey (inline)✅ Synchronous🧪 Testing only
Chrome Extension✅ Synchronous✅ Roadmap