diff --git a/.changeset/itchy-rice-train.md b/.changeset/itchy-rice-train.md
new file mode 100644
index 0000000000000000000000000000000000000000..8d76af95c6f1056f65ee848642228b2b23cf3f61
--- /dev/null
+++ b/.changeset/itchy-rice-train.md
@@ -0,0 +1,6 @@
+---
+"llamaindex": patch
+"@llamaindex/env": patch
+---
+
+feat: improve `@llamaindex/env`
diff --git a/packages/core/jsr.json b/packages/core/jsr.json
index ecbc9cdabe389f7e4b38b1fd67aeafed076daf4f..b546ef8ad789c596a04eb52d57ba99ee60d1760b 100644
--- a/packages/core/jsr.json
+++ b/packages/core/jsr.json
@@ -3,6 +3,9 @@
   "version": "0.3.4",
   "exports": "./src/index.ts",
   "imports": {
-    "@llamaindex/env": "jsr:@llamaindex/env@0.0.6"
+    "@llamaindex/env": "jsr:@llamaindex/env@0.1.0"
+  },
+  "publish": {
+    "include": ["LICENSE", "README.md", "src/**/*.ts"]
   }
 }
diff --git a/packages/env/jsr.json b/packages/env/jsr.json
index 9b37fb6ba5c0860ab0c9a214c59f004d3668d11b..44a9a2a6fe5abed7d49bf73c4bf4323303ce41d1 100644
--- a/packages/env/jsr.json
+++ b/packages/env/jsr.json
@@ -4,5 +4,8 @@
   "exports": {
     ".": "./src/index.ts",
     "./type": "./src/type.ts"
+  },
+  "publish": {
+    "include": ["LICENSE", "README.md", "src/**/*.ts"]
   }
 }
diff --git a/packages/env/package.json b/packages/env/package.json
index c04d0fcc5ab45af62dbb4973caab724c63ba92e9..ff511391002d7ffc100f4f04b8f9dd627cd1c8a5 100644
--- a/packages/env/package.json
+++ b/packages/env/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@llamaindex/env",
-  "description": "environment wrapper",
+  "description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
   "version": "0.1.0",
   "type": "module",
   "types": "dist/type/index.d.ts",
@@ -74,5 +74,16 @@
     "@aws-crypto/sha256-js": "^5.2.0",
     "pathe": "^1.1.2",
     "readable-stream": "^4.5.2"
+  },
+  "peerDependenciesMeta": {
+    "@aws-crypto/sha256-js": {
+      "optional": true
+    },
+    "pathe": {
+      "optional": true
+    },
+    "readable-stream": {
+      "optional": true
+    }
   }
 }
diff --git a/packages/env/src/index.ts b/packages/env/src/index.ts
index 851d074a4d68fab416490c5872a36beeeb506efd..930b7f899736296b6960a2dcf8f561c463e6dc22 100644
--- a/packages/env/src/index.ts
+++ b/packages/env/src/index.ts
@@ -1,3 +1,16 @@
+/**
+ * This module is under Node.js environment.
+ * It provides a set of APIs to interact with the file system, streams, and other Node.js built-in modules.
+ *
+ * Use this under "node" condition,
+ *
+ * For example:
+ * ```shell
+ * node -e "const env = require('@llamaindex/env');"
+ * ```
+ *
+ * @module
+ */
 import { ok } from "node:assert";
 import { createHash, randomUUID } from "node:crypto";
 import fs from "node:fs/promises";
diff --git a/packages/env/src/index.workerd.ts b/packages/env/src/index.workerd.ts
index 008c1b930071cb92f03170180e7db3ab4ababc14..8ec0a106986941f1fcc3c2f227d66203a9e1bc01 100644
--- a/packages/env/src/index.workerd.ts
+++ b/packages/env/src/index.workerd.ts
@@ -1,3 +1,10 @@
+/**
+ * This module is under Cloudflare Workers environment.
+ *
+ * Most of Node.js APIs are not available in Cloudflare Workers environment.
+ *
+ * @module
+ */
 import { INTERNAL_ENV } from "./utils.js";
 
 export * from "./index.polyfill.js";
diff --git a/packages/env/src/utils.ts b/packages/env/src/utils.ts
index c47e9a40c5be5e76c49b8a0898ea4f9ddb72cbcc..ed05a83df63f86a5b769442c215a95dfab8d59eb 100644
--- a/packages/env/src/utils.ts
+++ b/packages/env/src/utils.ts
@@ -1,6 +1,30 @@
 // DO NOT EXPOSE THIS VARIABLE TO PUBLIC, IT IS USED INTERNALLY FOR CLOUDFLARE WORKER
 export const INTERNAL_ENV: Record<string, string> = {};
 
+/**
+ * Set environment variables before using llamaindex, because some LLM need to access API key before running.
+ *
+ * You have to set the environment variables in Cloudflare Worker environment,
+ * because it doesn't have any global environment variables.
+ *
+ * @example
+ * ```ts
+ * export default {
+ *   async fetch(
+ *     request: Request,
+ *     env: Env,
+ *     ctx: ExecutionContext,
+ *   ): Promise<Response> {
+ *     const { setEnvs } = await import("@llamaindex/env");
+ *     setEnvs(env);
+ *     // ...
+ *     return new Response("Hello, World!");
+ *   },
+ * };
+ * ```
+ *
+ * @param envs Environment variables
+ */
 export function setEnvs(envs: object): void {
   Object.assign(INTERNAL_ENV, envs);
 }
diff --git a/scripts/check-minor-version.js b/scripts/check-minor-version.js
index 8aadeb4daf926a61477790d619bd87583e3e8baa..e9af1eec763bd8f19d00a4ea92109dc2e1ffd678 100644
--- a/scripts/check-minor-version.js
+++ b/scripts/check-minor-version.js
@@ -26,7 +26,10 @@ if (minorVersion !== expectedMinorVersion) {
   process.exit(1);
 }
 
-const packages = ["core", "env"];
+const packages = ["env", "core"];
+const envPackageJson = JSON.parse(
+  fs.readFileSync("./packages/env/package.json", "utf8"),
+);
 for (const pkg of packages) {
   const packageJson = JSON.parse(
     fs.readFileSync(`./packages/${pkg}/package.json`, "utf8"),
@@ -36,6 +39,10 @@ for (const pkg of packages) {
   );
 
   jsrJson.version = packageJson.version;
+  if (pkg === "core") {
+    jsrJson.imports["@llamaindex/env"] =
+      `jsr:@llamaindex/env@${envPackageJson.version}`;
+  }
 
   fs.writeFileSync(
     `./packages/${pkg}/jsr.json`,