diff --git a/package.json b/package.json
index fc38dff71cad9d9d59dc6df220ad775c38c2bdcc..abc5babcca489acce72d0cb5a698cd67e626b320 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,8 @@
     "name": "xxdk-wasm",
     "version": "0.3.9",
     "description": "WebAssembly bindings for xxDK.",
-    "module": "src/index.ts",
+    "main": "dist/bundle.js",
+    "module": "dist/bundle.js",
     "directories": {
         "test": "test",
         "src": "src"
diff --git a/src/index.ts b/src/index.ts
index ca4fac4900d68ae75de4c1870153d75e619a2af6..b4b7079fde05a53b4a629744cefc9c4d27c90e79 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -4,15 +4,21 @@ declare global {
   interface Window extends XXDKUtils {}
 }
 
-import '../wasm_exec';
 // @ts-ignore
-import makeWasm from '../xxdk.wasm';
+// import makeWasm from '../xxdk.wasm';
 
 export const loadUtils = () => new Promise<XXDKUtils>(async (res) => {
-  const go = new (window as any).Go();
-  const result = await makeWasm(go.importObject);
-
-  go.run(result.instance);
+    const Go = require('../wasm_exec');
+    const go = new Go();
+    let mod, inst;
+    WebAssembly.instantiateStreaming(fetch("../xxdk.wasm"), go.importObject).then(async (result) => {
+        mod = result.module;
+        inst = result.instance;
+        await go.run(inst);
+        inst = await WebAssembly.instantiate(mod, go.importObject); // reset instance
+    }).catch((err) => {
+        console.error(err);
+    });
 
   const {
     Base64ToUint8Array,
diff --git a/webpack.config.js b/webpack.config.js
index 2278cc26f8c3ac50af43a061ce4dd57f2a78dd51..88f4e3ca68477deb109839ee565fd87233b0b298 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -11,6 +11,7 @@ module.exports = {
             name: 'xxdk-wasm',
             type: 'umd',
         },
+        publicPath: '',
     },
     module: {
         rules: [