You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by gi...@apache.org on 2024/04/16 10:41:14 UTC

(opendal) branch gh-pages updated: deploy: 655a487232fe8b1dc25cc0cb588fe54a75af77f5

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 93ca0a6f6b deploy: 655a487232fe8b1dc25cc0cb588fe54a75af77f5
93ca0a6f6b is described below

commit 93ca0a6f6bb67ecb82c38aea1ccc50c5d348a13e
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Tue Apr 16 10:41:08 2024 +0000

    deploy: 655a487232fe8b1dc25cc0cb588fe54a75af77f5
---
 404.html                                           |   4 +-
 assets/js/054cd2fb.41746411.js                     |   1 +
 assets/js/054cd2fb.5f757be3.js                     |   1 -
 assets/js/0605a481.e63f7eab.js                     |   1 -
 assets/js/0605a481.f1425296.js                     |   1 +
 assets/js/093f5f04.17076a2c.js                     |   1 +
 assets/js/093f5f04.e84d59a0.js                     |   1 -
 assets/js/09d8124e.1cfd736c.js                     |   1 +
 assets/js/09d8124e.7b6cbc23.js                     |   1 -
 assets/js/136e1c50.65b08520.js                     |   1 -
 assets/js/136e1c50.f2c98b74.js                     |   1 +
 assets/js/151cd40f.599825ff.js                     |   1 +
 assets/js/151cd40f.6cc9ac00.js                     |   1 -
 assets/js/170f36cb.46dd3402.js                     |   1 +
 assets/js/170f36cb.7533ea06.js                     |   1 -
 assets/js/1957547a.55354032.js                     |   1 -
 assets/js/1957547a.d3ac99f5.js                     |   1 +
 assets/js/1db64337.1fec227f.js                     |   1 -
 assets/js/1db64337.7783b5cf.js                     |   1 +
 assets/js/22d8fa67.b9242ad8.js                     |   1 +
 assets/js/22d8fa67.f6ba0024.js                     |   1 -
 assets/js/29b208a4.b3ad9252.js                     |   1 -
 assets/js/29b208a4.dbfca443.js                     |   1 +
 .../{2cbf1097.24ca90b4.js => 2cbf1097.48b60442.js} |   2 +-
 assets/js/3632610d.a0af9f4f.js                     |   1 -
 assets/js/3632610d.f9c6a434.js                     |   1 +
 assets/js/381c04e3.23568999.js                     |   1 -
 assets/js/381c04e3.749f6d24.js                     |   1 +
 .../{39a95de5.4013a3f7.js => 39a95de5.5f9ae29d.js} |   2 +-
 assets/js/42347498.a79c973c.js                     |   1 -
 assets/js/42347498.be7b3b76.js                     |   1 +
 assets/js/434bbc94.2ed9da10.js                     |   1 +
 assets/js/434bbc94.c4939c93.js                     |   1 -
 assets/js/4e2d8f56.84fadd52.js                     |   1 +
 assets/js/4e2d8f56.d422df4d.js                     |   1 -
 assets/js/500d55cb.373734cc.js                     |   1 -
 assets/js/500d55cb.e77e4839.js                     |   1 +
 assets/js/57a16c1d.951bc9ef.js                     |   1 +
 assets/js/57a16c1d.c0ec9a51.js                     |   1 -
 assets/js/592d1076.28c00b6f.js                     |   1 +
 assets/js/592d1076.9edd31e8.js                     |   1 -
 assets/js/621b831b.15a8c27f.js                     |   1 -
 assets/js/621b831b.4df3d43c.js                     |   1 +
 assets/js/65bf2b43.18a41009.js                     |   1 +
 assets/js/65bf2b43.ee00d030.js                     |   1 -
 assets/js/67ecc70e.62baa292.js                     |   1 -
 assets/js/67ecc70e.6c218548.js                     |   1 +
 assets/js/6a41242b.2ee9cb65.js                     |   1 -
 assets/js/6a41242b.d85b4663.js                     |   1 +
 assets/js/6dc695d1.33d71a12.js                     |   1 -
 assets/js/6dc695d1.9890df82.js                     |   1 +
 assets/js/6f4d3fa1.00ebd158.js                     |   1 +
 assets/js/6f4d3fa1.47c8a542.js                     |   1 -
 assets/js/7263c0b5.935a5c25.js                     |   1 -
 assets/js/7263c0b5.a8f02bb8.js                     |   1 +
 assets/js/8070e160.1af7da12.js                     |   1 +
 assets/js/8070e160.3b9e6ff3.js                     |   1 -
 .../{8cc9519e.e2b0099c.js => 8cc9519e.3d3bce30.js} |   2 +-
 .../{8f4159f2.17de6ebe.js => 8f4159f2.e6dd3561.js} |   2 +-
 assets/js/8fb00c63.44bcb441.js                     |   1 +
 assets/js/8fb00c63.8953fac1.js                     |   1 -
 assets/js/939f74f6.0f867a22.js                     |   1 -
 assets/js/939f74f6.ba230c9a.js                     |   1 +
 assets/js/a0405932.7a96b959.js                     |   1 -
 assets/js/a0405932.f7d9f912.js                     |   1 +
 assets/js/b114cefa.ba513297.js                     |   1 -
 assets/js/b114cefa.f395a92e.js                     |   1 +
 assets/js/b56f9725.0f244220.js                     |   1 +
 assets/js/b56f9725.4f3b6847.js                     |   1 -
 assets/js/bb5b2057.037ce413.js                     |   1 -
 assets/js/bb5b2057.26591ea7.js                     |   1 +
 assets/js/c0600a1b.1cda190d.js                     |   1 +
 assets/js/c0600a1b.df8c3e8d.js                     |   1 -
 assets/js/c46c6b55.1a6a0180.js                     |   1 +
 assets/js/c46c6b55.4e479c77.js                     |   1 -
 .../{c6ab695b.8ff93fc8.js => c6ab695b.b5cf1351.js} |   2 +-
 .../{cc62039a.c737aa10.js => cc62039a.eff623da.js} |   2 +-
 assets/js/d3c0d8d5.52ea9d61.js                     |   1 +
 assets/js/d3c0d8d5.e58d24d3.js                     |   1 -
 assets/js/ddccef4c.4690407f.js                     |   1 -
 assets/js/ddccef4c.5297651e.js                     |   1 +
 assets/js/e892cec6.0b3dceb2.js                     |   1 -
 assets/js/e892cec6.3266d975.js                     |   1 +
 assets/js/eec267e4.114a8287.js                     |   1 +
 assets/js/eec267e4.6821975c.js                     |   1 -
 assets/js/f1ca5a39.484de48d.js                     |   1 +
 assets/js/f1ca5a39.4ef90eff.js                     |   1 -
 assets/js/f9145722.0fdfc21e.js                     |   1 -
 assets/js/f9145722.15258430.js                     |   1 +
 assets/js/fde7cc64.1189df27.js                     |   1 -
 assets/js/fde7cc64.eece97c2.js                     |   1 +
 assets/js/{main.b6f624e6.js => main.72d29831.js}   |   4 +-
 ...js.LICENSE.txt => main.72d29831.js.LICENSE.txt} |   0
 ...e~main.54e4a30a.js => runtime~main.07cb7119.js} |   2 +-
 blog/apache-opendal-graduated/index.html           |   4 +-
 .../index.html                                     |   4 +-
 blog/archive/index.html                            |   4 +-
 blog/how-opendal-read-data/index.html              |   4 +-
 blog/index.html                                    |   4 +-
 blog/opendal-access-data-freely/index.html         |   4 +-
 blog/opendal-entered-apache-incubator/index.html   |   4 +-
 blog/owo-1/index.html                              |   4 +-
 blog/tags/announcement/index.html                  |   4 +-
 blog/tags/index.html                               |   4 +-
 blog/tags/internal/index.html                      |   4 +-
 blog/tags/owo/index.html                           |   4 +-
 community/category/committers/index.html           |   4 +-
 community/category/events/index.html               |   4 +-
 community/category/pmc-members/index.html          |   4 +-
 community/category/reference/index.html            |   4 +-
 community/committers/onboarding/index.html         |   4 +-
 .../reference/generate_release_note/index.html     |   4 +-
 .../committers/reference/setup_gpg/index.html      |   4 +-
 community/committers/release/index.html            |   4 +-
 .../request_for_adding_secrets/index.html          |   4 +-
 community/committers/verify/index.html             |   4 +-
 community/events/gsoc-proposal-guide/index.html    |   4 +-
 community/index.html                               |   4 +-
 community/maturity/index.html                      |   4 +-
 community/news/index.html                          |   4 +-
 .../pmc_members/nominate-committer/index.html      |   4 +-
 .../pmc_members/nominate-pmc-member/index.html     |   4 +-
 community/pmc_members/onboarding/index.html        |   4 +-
 community/pmc_members/podling-report/index.html    |   4 +-
 community/security/index.html                      |   4 +-
 docs/c/opendal_8h_source.html                      |   4 +-
 docs/category/integrations/index.html              |   4 +-
 docs/category/services/index.html                  |   4 +-
 docs/integrations/object_store_opendal/index.html  |   6 +-
 docs/lua/classes/opendal.metadata.html             |   2 +-
 docs/lua/classes/opendal.operator.html             |   2 +-
 docs/lua/index.html                                |   2 +-
 docs/nodejs/classes/BlockingLister.html            |   4 +-
 docs/nodejs/classes/BlockingReader.html            |   4 +-
 docs/nodejs/classes/BlockingWriter.html            |   8 +-
 docs/nodejs/classes/Capability.html                |  74 ++--
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/ExternalObject.html            |   4 +-
 docs/nodejs/classes/Layer.html                     |   2 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  66 ++--
 docs/nodejs/classes/Reader.html                    |   6 +-
 docs/nodejs/classes/RetryLayer.html                |  14 +-
 docs/nodejs/classes/Writer.html                    |   8 +-
 docs/nodejs/interfaces/ListOptions.html            |   4 +-
 docs/nodejs/interfaces/PresignedRequest.html       |   8 +-
 .../src/object_store_opendal/lib.rs.html           |  12 +-
 docs/overview/index.html                           |   6 +-
 docs/python/opendal.html                           | 440 ++++++++++-----------
 docs/python/search.js                              |   2 +-
 docs/quickstart/index.html                         |   6 +-
 docs/rust/opendal/all.html                         |   2 +-
 docs/rust/opendal/index.html                       |   6 +-
 docs/rust/opendal/sidebar-items.js                 |   2 +-
 docs/rust/opendal/struct.BlockingReader.html       |  11 +-
 ...cReader.html => struct.FuturesAsyncReader.html} |  14 +-
 ...cWriter.html => struct.FuturesAsyncWriter.html} |  10 +-
 docs/rust/opendal/struct.FuturesBytesStream.html   |   4 +-
 docs/rust/opendal/struct.Reader.html               |  12 +-
 docs/rust/opendal/struct.StdBytesIterator.html     |   6 +-
 ...ruct.StdIoReader.html => struct.StdReader.html} |  14 +-
 docs/rust/opendal/struct.Writer.html               |   4 +-
 .../into_std_read/struct.StdIoReader.html          |  11 -
 .../into_std_read/struct.StdReader.html            |  11 +
 ...cReader.html => struct.FuturesAsyncReader.html} |   6 +-
 ...cWriter.html => struct.FuturesAsyncWriter.html} |   6 +-
 docs/rust/search-index.js                          |   2 +-
 .../rust/src/opendal/types/blocking_reader.rs.html |  24 +-
 docs/rust/src/opendal/types/mod.rs.html            |   6 +-
 docs/rust/src/opendal/types/reader.rs.html         |  24 +-
 docs/rust/src/opendal/types/writer.rs.html         |  14 +-
 docs/rust/trait.impl/core/marker/trait.Freeze.js   |   2 +-
 docs/rust/trait.impl/core/marker/trait.Send.js     |   2 +-
 docs/rust/trait.impl/core/marker/trait.Sync.js     |   2 +-
 docs/rust/trait.impl/core/marker/trait.Unpin.js    |   2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |   2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |   2 +-
 .../futures_io/if_std/trait.AsyncBufRead.js        |   2 +-
 .../futures_io/if_std/trait.AsyncRead.js           |   2 +-
 .../futures_io/if_std/trait.AsyncSeek.js           |   2 +-
 .../futures_io/if_std/trait.AsyncWrite.js          |   2 +-
 docs/rust/trait.impl/std/io/trait.BufRead.js       |   2 +-
 docs/rust/trait.impl/std/io/trait.Read.js          |   2 +-
 docs/rust/trait.impl/std/io/trait.Seek.js          |   2 +-
 docs/services/atomicserver/index.html              |   6 +-
 docs/services/azblob/index.html                    |   6 +-
 docs/services/azdls/index.html                     |   6 +-
 docs/services/cacache/index.html                   |   6 +-
 docs/services/cos/index.html                       |   6 +-
 docs/services/d1/index.html                        |   6 +-
 docs/services/dashmap/index.html                   |   6 +-
 docs/services/dropbox/index.html                   |   6 +-
 docs/services/etcd/index.html                      |   6 +-
 docs/services/foundationdb/index.html              |   6 +-
 docs/services/fs/index.html                        |   6 +-
 docs/services/ftp/index.html                       |   6 +-
 docs/services/gcs/index.html                       |   6 +-
 docs/services/gdrive/index.html                    |   6 +-
 docs/services/ghac/index.html                      |   6 +-
 docs/services/gridfs/index.html                    |   6 +-
 docs/services/hdfs/index.html                      |   6 +-
 docs/services/http/index.html                      |   6 +-
 docs/services/huggingface/index.html               |   6 +-
 docs/services/ipfs/index.html                      |   6 +-
 docs/services/ipmfs/index.html                     |   6 +-
 docs/services/libsql/index.html                    |   6 +-
 docs/services/memcached/index.html                 |   6 +-
 docs/services/memory/index.html                    |   6 +-
 docs/services/moka/index.html                      |   6 +-
 docs/services/mongodb/index.html                   |   6 +-
 docs/services/mysql/index.html                     |   6 +-
 docs/services/obs/index.html                       |   6 +-
 docs/services/onedrive/index.html                  |   6 +-
 docs/services/oss/index.html                       |   6 +-
 docs/services/persy/index.html                     |   6 +-
 docs/services/postgresql/index.html                |   6 +-
 docs/services/redb/index.html                      |   6 +-
 docs/services/redis/index.html                     |   6 +-
 docs/services/rocksdb/index.html                   |   6 +-
 docs/services/s3/index.html                        |   6 +-
 docs/services/sftp/index.html                      |   6 +-
 docs/services/sled/index.html                      |   6 +-
 docs/services/sqlite/index.html                    |   6 +-
 docs/services/supabase/index.html                  |   6 +-
 docs/services/swift/index.html                     |   6 +-
 docs/services/tikv/index.html                      |   6 +-
 docs/services/vercel_artifacts/index.html          |   6 +-
 docs/services/webdav/index.html                    |   6 +-
 docs/services/webhdfs/index.html                   |   6 +-
 download/index.html                                |   4 +-
 index.html                                         |   4 +-
 lunr-index-1713257268196.json                      |   1 -
 lunr-index-1713264028214.json                      |   1 +
 lunr-index.json                                    |   2 +-
 search-doc-1713257268196.json                      |   1 -
 search-doc-1713264028214.json                      |   1 +
 search-doc.json                                    |   2 +-
 238 files changed, 720 insertions(+), 729 deletions(-)

diff --git a/404.html b/404.html
index 4903f616bb..9606452ceb 100644
--- a/404.html
+++ b/404.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Page Not Found | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tr [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/assets/js/054cd2fb.41746411.js b/assets/js/054cd2fb.41746411.js
new file mode 100644
index 0000000000..f349ca08cd
--- /dev/null
+++ b/assets/js/054cd2fb.41746411.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{5722:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",h1:"h1",h2:"h2",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(n.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/054cd2fb.5f757be3.js b/assets/js/054cd2fb.5f757be3.js
deleted file mode 100644
index 1f46b6aa60..0000000000
--- a/assets/js/054cd2fb.5f757be3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{5722:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",h1:"h1",h2:"h2",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(n.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/0605a481.e63f7eab.js b/assets/js/0605a481.e63f7eab.js
deleted file mode 100644
index 4a8fb7c386..0000000000
--- a/assets/js/0605a481.e63f7eab.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2113],{6834:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var n=r(1527),s=r(2175);function i(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,n.jsx [...]
\ No newline at end of file
diff --git a/assets/js/0605a481.f1425296.js b/assets/js/0605a481.f1425296.js
new file mode 100644
index 0000000000..6296374950
--- /dev/null
+++ b/assets/js/0605a481.f1425296.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2113],{6834:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var n=r(1527),s=r(2175);function i(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,n.jsx [...]
\ No newline at end of file
diff --git a/assets/js/093f5f04.17076a2c.js b/assets/js/093f5f04.17076a2c.js
new file mode 100644
index 0000000000..0bd1982666
--- /dev/null
+++ b/assets/js/093f5f04.17076a2c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{493:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(n.p,{chil [...]
\ No newline at end of file
diff --git a/assets/js/093f5f04.e84d59a0.js b/assets/js/093f5f04.e84d59a0.js
deleted file mode 100644
index 4100fdb6c6..0000000000
--- a/assets/js/093f5f04.e84d59a0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{493:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(n.p,{chil [...]
\ No newline at end of file
diff --git a/assets/js/09d8124e.1cfd736c.js b/assets/js/09d8124e.1cfd736c.js
new file mode 100644
index 0000000000..cdf852c195
--- /dev/null
+++ b/assets/js/09d8124e.1cfd736c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4543],{7192:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>p});var s=t(1527),r=t(2175);function a(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(n. [...]
\ No newline at end of file
diff --git a/assets/js/09d8124e.7b6cbc23.js b/assets/js/09d8124e.7b6cbc23.js
deleted file mode 100644
index 17de434b94..0000000000
--- a/assets/js/09d8124e.7b6cbc23.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4543],{7192:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>p});var s=t(1527),r=t(2175);function a(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(n. [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.65b08520.js b/assets/js/136e1c50.65b08520.js
deleted file mode 100644
index 477c2613eb..0000000000
--- a/assets/js/136e1c50.65b08520.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{1007:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.f2c98b74.js b/assets/js/136e1c50.f2c98b74.js
new file mode 100644
index 0000000000..42046d5e73
--- /dev/null
+++ b/assets/js/136e1c50.f2c98b74.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{1007:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/151cd40f.599825ff.js b/assets/js/151cd40f.599825ff.js
new file mode 100644
index 0000000000..a34214e65e
--- /dev/null
+++ b/assets/js/151cd40f.599825ff.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3919:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var r=t(1527),s=t(2175);function a(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,r [...]
\ No newline at end of file
diff --git a/assets/js/151cd40f.6cc9ac00.js b/assets/js/151cd40f.6cc9ac00.js
deleted file mode 100644
index ffefa94da9..0000000000
--- a/assets/js/151cd40f.6cc9ac00.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3919:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var r=t(1527),s=t(2175);function a(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,r [...]
\ No newline at end of file
diff --git a/assets/js/170f36cb.46dd3402.js b/assets/js/170f36cb.46dd3402.js
new file mode 100644
index 0000000000..750ca64357
--- /dev/null
+++ b/assets/js/170f36cb.46dd3402.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[527],{5766:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>l});var o=n(1527),s=n(2175);function r(e){const t={a:"a",h1:"h1",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"opendal-object_store-binding",children:"OpenDAL object_store Binding"}),"\n",(0,o.jsxs)(t.p,{children:["This crate int [...]
\ No newline at end of file
diff --git a/assets/js/170f36cb.7533ea06.js b/assets/js/170f36cb.7533ea06.js
deleted file mode 100644
index 2ccec8b270..0000000000
--- a/assets/js/170f36cb.7533ea06.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[527],{5766:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>c,metadata:()=>d,toc:()=>l});var o=n(1527),s=n(2175);function r(e){const t={a:"a",h1:"h1",p:"p",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"opendal-object_store-binding",children:"OpenDAL object_store Binding"}),"\n",(0,o.jsxs)(t.p,{children:["This crate int [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.55354032.js b/assets/js/1957547a.55354032.js
deleted file mode 100644
index c684ce9eaf..0000000000
--- a/assets/js/1957547a.55354032.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{5034:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.d3ac99f5.js b/assets/js/1957547a.d3ac99f5.js
new file mode 100644
index 0000000000..013d5b6787
--- /dev/null
+++ b/assets/js/1957547a.d3ac99f5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{5034:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.1fec227f.js b/assets/js/1db64337.1fec227f.js
deleted file mode 100644
index 191adc1c7e..0000000000
--- a/assets/js/1db64337.1fec227f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{7500:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=n(1527),t=n(2175);const i={sidebar_label:"About",sidebar_position:1},o="Welcome to Apache OpenDAL\u2122",a={id:"overview",title:"Welcome to Apache OpenDAL\u2122",description:"OpenDAL represents Open Data Access Layer. Our vision is to access data freely.",source:"@si [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.7783b5cf.js b/assets/js/1db64337.7783b5cf.js
new file mode 100644
index 0000000000..711a81e6d4
--- /dev/null
+++ b/assets/js/1db64337.7783b5cf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{7500:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var r=n(1527),t=n(2175);const i={sidebar_label:"About",sidebar_position:1},o="Welcome to Apache OpenDAL\u2122",a={id:"overview",title:"Welcome to Apache OpenDAL\u2122",description:"OpenDAL represents Open Data Access Layer. Our vision is to access data freely.",source:"@si [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.b9242ad8.js b/assets/js/22d8fa67.b9242ad8.js
new file mode 100644
index 0000000000..40aba012ae
--- /dev/null
+++ b/assets/js/22d8fa67.b9242ad8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{9109:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>m});var a=n(1527),s=n(2175);function r(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx)(t.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.f6ba0024.js b/assets/js/22d8fa67.f6ba0024.js
deleted file mode 100644
index 4a38d3ec23..0000000000
--- a/assets/js/22d8fa67.f6ba0024.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{9109:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>m});var s=n(1527),a=n(2175);function r(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/29b208a4.b3ad9252.js b/assets/js/29b208a4.b3ad9252.js
deleted file mode 100644
index ce78459eaf..0000000000
--- a/assets/js/29b208a4.b3ad9252.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{4740:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsxs)(t.ul,{c [...]
\ No newline at end of file
diff --git a/assets/js/29b208a4.dbfca443.js b/assets/js/29b208a4.dbfca443.js
new file mode 100644
index 0000000000..edf11f736e
--- /dev/null
+++ b/assets/js/29b208a4.dbfca443.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{4740:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsxs)(t.ul,{c [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.24ca90b4.js b/assets/js/2cbf1097.48b60442.js
similarity index 74%
rename from assets/js/2cbf1097.24ca90b4.js
rename to assets/js/2cbf1097.48b60442.js
index b13c29821e..a52bfbc490 100644
--- a/assets/js/2cbf1097.24ca90b4.js
+++ b/assets/js/2cbf1097.48b60442.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{9989:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>h,default:()=>j,frontMatter:()=>u,metadata:()=>p,toc:()=>x});var t=s(1527),r=s(2175);function i(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,t.jsx)(n. [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{9989:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>m,contentTitle:()=>h,default:()=>j,frontMatter:()=>u,metadata:()=>p,toc:()=>x});var t=s(1527),r=s(2175);function i(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,t.jsx)(n. [...]
\ No newline at end of file
diff --git a/assets/js/3632610d.a0af9f4f.js b/assets/js/3632610d.a0af9f4f.js
deleted file mode 100644
index 9f97292c11..0000000000
--- a/assets/js/3632610d.a0af9f4f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2963],{5013:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/3632610d.f9c6a434.js b/assets/js/3632610d.f9c6a434.js
new file mode 100644
index 0000000000..3199f2845f
--- /dev/null
+++ b/assets/js/3632610d.f9c6a434.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2963],{5013:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/381c04e3.23568999.js b/assets/js/381c04e3.23568999.js
deleted file mode 100644
index a653af5858..0000000000
--- a/assets/js/381c04e3.23568999.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1725],{7917:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/381c04e3.749f6d24.js b/assets/js/381c04e3.749f6d24.js
new file mode 100644
index 0000000000..be5eb477fa
--- /dev/null
+++ b/assets/js/381c04e3.749f6d24.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1725],{7917:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/39a95de5.4013a3f7.js b/assets/js/39a95de5.5f9ae29d.js
similarity index 53%
rename from assets/js/39a95de5.4013a3f7.js
rename to assets/js/39a95de5.5f9ae29d.js
index cf56cfcc1b..a316df6cd8 100644
--- a/assets/js/39a95de5.4013a3f7.js
+++ b/assets/js/39a95de5.5f9ae29d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5737],{1851:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>f,contentTitle:()=>h,default:()=>j,frontMatter:()=>u,metadata:()=>p,toc:()=>x});var s=t(1527),i=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5737],{1851:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>f,contentTitle:()=>h,default:()=>j,frontMatter:()=>u,metadata:()=>p,toc:()=>x});var s=t(1527),i=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/42347498.a79c973c.js b/assets/js/42347498.a79c973c.js
deleted file mode 100644
index 04e69f4dce..0000000000
--- a/assets/js/42347498.a79c973c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7254],{8202:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/42347498.be7b3b76.js b/assets/js/42347498.be7b3b76.js
new file mode 100644
index 0000000000..0ccd41af97
--- /dev/null
+++ b/assets/js/42347498.be7b3b76.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7254],{8202:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.2ed9da10.js b/assets/js/434bbc94.2ed9da10.js
new file mode 100644
index 0000000000..e0f0f50c3b
--- /dev/null
+++ b/assets/js/434bbc94.2ed9da10.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{6404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.c4939c93.js b/assets/js/434bbc94.c4939c93.js
deleted file mode 100644
index 3eaa5bbcb6..0000000000
--- a/assets/js/434bbc94.c4939c93.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{6404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/4e2d8f56.84fadd52.js b/assets/js/4e2d8f56.84fadd52.js
new file mode 100644
index 0000000000..0bbb794c61
--- /dev/null
+++ b/assets/js/4e2d8f56.84fadd52.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6752],{8723:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),l=n(2175);function r(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/4e2d8f56.d422df4d.js b/assets/js/4e2d8f56.d422df4d.js
deleted file mode 100644
index 254b977108..0000000000
--- a/assets/js/4e2d8f56.d422df4d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6752],{8723:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),l=n(2175);function r(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/500d55cb.373734cc.js b/assets/js/500d55cb.373734cc.js
deleted file mode 100644
index 838fb7b1de..0000000000
--- a/assets/js/500d55cb.373734cc.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7489],{6734:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/500d55cb.e77e4839.js b/assets/js/500d55cb.e77e4839.js
new file mode 100644
index 0000000000..1e0d804608
--- /dev/null
+++ b/assets/js/500d55cb.e77e4839.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7489],{6734:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.951bc9ef.js b/assets/js/57a16c1d.951bc9ef.js
new file mode 100644
index 0000000000..39a23c630a
--- /dev/null
+++ b/assets/js/57a16c1d.951bc9ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3016:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var r=n(1527),s=n(2175);function a(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,r.jsx)(t. [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.c0ec9a51.js b/assets/js/57a16c1d.c0ec9a51.js
deleted file mode 100644
index 4dcb395121..0000000000
--- a/assets/js/57a16c1d.c0ec9a51.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3016:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var r=n(1527),s=n(2175);function a(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,r.jsx)(t. [...]
\ No newline at end of file
diff --git a/assets/js/592d1076.28c00b6f.js b/assets/js/592d1076.28c00b6f.js
new file mode 100644
index 0000000000..347d09237e
--- /dev/null
+++ b/assets/js/592d1076.28c00b6f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{1760:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chil [...]
\ No newline at end of file
diff --git a/assets/js/592d1076.9edd31e8.js b/assets/js/592d1076.9edd31e8.js
deleted file mode 100644
index 7a2850b92c..0000000000
--- a/assets/js/592d1076.9edd31e8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{1760:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chil [...]
\ No newline at end of file
diff --git a/assets/js/621b831b.15a8c27f.js b/assets/js/621b831b.15a8c27f.js
deleted file mode 100644
index 81a97a3769..0000000000
--- a/assets/js/621b831b.15a8c27f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{6611:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=t(1527),a=t(2175);function r(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["As known as ",(0,s.jsx)(n.code,{children [...]
\ No newline at end of file
diff --git a/assets/js/621b831b.4df3d43c.js b/assets/js/621b831b.4df3d43c.js
new file mode 100644
index 0000000000..55eb3cd718
--- /dev/null
+++ b/assets/js/621b831b.4df3d43c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{6611:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>b,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=t(1527),a=t(2175);function r(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["As known as ",(0,s.jsx)(n.code,{children [...]
\ No newline at end of file
diff --git a/assets/js/65bf2b43.18a41009.js b/assets/js/65bf2b43.18a41009.js
new file mode 100644
index 0000000000..bfec568dde
--- /dev/null
+++ b/assets/js/65bf2b43.18a41009.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2115],{4504:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),l=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/65bf2b43.ee00d030.js b/assets/js/65bf2b43.ee00d030.js
deleted file mode 100644
index 91ad3319f9..0000000000
--- a/assets/js/65bf2b43.ee00d030.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2115],{4504:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),l=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/67ecc70e.62baa292.js b/assets/js/67ecc70e.62baa292.js
deleted file mode 100644
index 2ee0781ea0..0000000000
--- a/assets/js/67ecc70e.62baa292.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4434],{1912:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var a=n(1527),s=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx [...]
\ No newline at end of file
diff --git a/assets/js/67ecc70e.6c218548.js b/assets/js/67ecc70e.6c218548.js
new file mode 100644
index 0000000000..4499672601
--- /dev/null
+++ b/assets/js/67ecc70e.6c218548.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4434],{1912:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var a=n(1527),s=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx [...]
\ No newline at end of file
diff --git a/assets/js/6a41242b.2ee9cb65.js b/assets/js/6a41242b.2ee9cb65.js
deleted file mode 100644
index 2ad88a5587..0000000000
--- a/assets/js/6a41242b.2ee9cb65.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5571],{6575:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/6a41242b.d85b4663.js b/assets/js/6a41242b.d85b4663.js
new file mode 100644
index 0000000000..2dadea69de
--- /dev/null
+++ b/assets/js/6a41242b.d85b4663.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5571],{6575:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/6dc695d1.33d71a12.js b/assets/js/6dc695d1.33d71a12.js
deleted file mode 100644
index a47f7b89fd..0000000000
--- a/assets/js/6dc695d1.33d71a12.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5982],{3335:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var a=t(1527),s=t(2175);function i(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx [...]
\ No newline at end of file
diff --git a/assets/js/6dc695d1.9890df82.js b/assets/js/6dc695d1.9890df82.js
new file mode 100644
index 0000000000..ccfde4e69c
--- /dev/null
+++ b/assets/js/6dc695d1.9890df82.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5982],{3335:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var a=t(1527),s=t(2175);function i(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx [...]
\ No newline at end of file
diff --git a/assets/js/6f4d3fa1.00ebd158.js b/assets/js/6f4d3fa1.00ebd158.js
new file mode 100644
index 0000000000..6935440fd9
--- /dev/null
+++ b/assets/js/6f4d3fa1.00ebd158.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5885],{5854:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/6f4d3fa1.47c8a542.js b/assets/js/6f4d3fa1.47c8a542.js
deleted file mode 100644
index e561598e96..0000000000
--- a/assets/js/6f4d3fa1.47c8a542.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5885],{5854:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/7263c0b5.935a5c25.js b/assets/js/7263c0b5.935a5c25.js
deleted file mode 100644
index 0f2cd271ef..0000000000
--- a/assets/js/7263c0b5.935a5c25.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{2203:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var a=t(1527),s=t(2175);function r(e){const n={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx)(n.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/7263c0b5.a8f02bb8.js b/assets/js/7263c0b5.a8f02bb8.js
new file mode 100644
index 0000000000..3bf8689731
--- /dev/null
+++ b/assets/js/7263c0b5.a8f02bb8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{2203:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var a=t(1527),s=t(2175);function r(e){const n={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,a.jsx)(n.p,{chi [...]
\ No newline at end of file
diff --git a/assets/js/8070e160.1af7da12.js b/assets/js/8070e160.1af7da12.js
new file mode 100644
index 0000000000..9265ac2ff2
--- /dev/null
+++ b/assets/js/8070e160.1af7da12.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2651],{3866:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>r});var t=a(1527),i=a(2175);const l={title:"Quickstart",sidebar_position:3},o=void 0,d={id:"quickstart",title:"Quickstart",description:"Apache OpenDAL\u2122 can be easily integrated into different software with its Rust core and multilingual bindings.",source:"@site/docs/quick [...]
\ No newline at end of file
diff --git a/assets/js/8070e160.3b9e6ff3.js b/assets/js/8070e160.3b9e6ff3.js
deleted file mode 100644
index 0ed9ffa627..0000000000
--- a/assets/js/8070e160.3b9e6ff3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2651],{3866:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>d,toc:()=>r});var t=a(1527),i=a(2175);const l={title:"Quickstart",sidebar_position:3},o=void 0,d={id:"quickstart",title:"Quickstart",description:"Apache OpenDAL\u2122 can be easily integrated into different software with its Rust core and multilingual bindings.",source:"@site/docs/quick [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.e2b0099c.js b/assets/js/8cc9519e.3d3bce30.js
similarity index 64%
rename from assets/js/8cc9519e.e2b0099c.js
rename to assets/js/8cc9519e.3d3bce30.js
index 7c86cb49de..2fb027fb50 100644
--- a/assets/js/8cc9519e.e2b0099c.js
+++ b/assets/js/8cc9519e.3d3bce30.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{9755:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>d,toc:()=>p});var i=t(1527),n=t(2175);function c(e){const s={h2:"h2",input:"input",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,i.jsx)(s.p,{children:"This service can be use [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{9755:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var i=t(1527),n=t(2175);function c(e){const s={h2:"h2",input:"input",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,i.jsx)(s.p,{children:"This service can be use [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.17de6ebe.js b/assets/js/8f4159f2.e6dd3561.js
similarity index 70%
rename from assets/js/8f4159f2.17de6ebe.js
rename to assets/js/8f4159f2.e6dd3561.js
index 6bd935bb95..7e89b140a3 100644
--- a/assets/js/8f4159f2.17de6ebe.js
+++ b/assets/js/8f4159f2.e6dd3561.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{6282:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>r,toc:()=>p});var i=t(1527),n=t(2175);function c(e){const s={h2:"h2",input:"input",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,i.jsx)(s.p,{children:"This service can be use [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{6282:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>o,contentTitle:()=>d,default:()=>m,frontMatter:()=>l,metadata:()=>r,toc:()=>p});var i=t(1527),n=t(2175);function c(e){const s={h2:"h2",input:"input",li:"li",p:"p",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,i.jsx)(s.p,{children:"This service can be use [...]
\ No newline at end of file
diff --git a/assets/js/8fb00c63.44bcb441.js b/assets/js/8fb00c63.44bcb441.js
new file mode 100644
index 0000000000..c76e85b3ef
--- /dev/null
+++ b/assets/js/8fb00c63.44bcb441.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4600],{8608:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/8fb00c63.8953fac1.js b/assets/js/8fb00c63.8953fac1.js
deleted file mode 100644
index 8225c965cc..0000000000
--- a/assets/js/8fb00c63.8953fac1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4600],{8608:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/939f74f6.0f867a22.js b/assets/js/939f74f6.0f867a22.js
deleted file mode 100644
index f53dc7c1ff..0000000000
--- a/assets/js/939f74f6.0f867a22.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{7073:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>p});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/939f74f6.ba230c9a.js b/assets/js/939f74f6.ba230c9a.js
new file mode 100644
index 0000000000..a33d0c3108
--- /dev/null
+++ b/assets/js/939f74f6.ba230c9a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{7073:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>b,frontMatter:()=>o,metadata:()=>u,toc:()=>p});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.7a96b959.js b/assets/js/a0405932.7a96b959.js
deleted file mode 100644
index 2506274948..0000000000
--- a/assets/js/a0405932.7a96b959.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3033:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chil [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.f7d9f912.js b/assets/js/a0405932.f7d9f912.js
new file mode 100644
index 0000000000..acae0ebcf0
--- /dev/null
+++ b/assets/js/a0405932.f7d9f912.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3033:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx)(t.p,{chil [...]
\ No newline at end of file
diff --git a/assets/js/b114cefa.ba513297.js b/assets/js/b114cefa.ba513297.js
deleted file mode 100644
index 2d0c547f03..0000000000
--- a/assets/js/b114cefa.ba513297.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{9571:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var r=t(1527),s=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,r.jsx [...]
\ No newline at end of file
diff --git a/assets/js/b114cefa.f395a92e.js b/assets/js/b114cefa.f395a92e.js
new file mode 100644
index 0000000000..6456edda09
--- /dev/null
+++ b/assets/js/b114cefa.f395a92e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{9571:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var r=t(1527),s=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,r.jsx [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.0f244220.js b/assets/js/b56f9725.0f244220.js
new file mode 100644
index 0000000000..6b68fb0675
--- /dev/null
+++ b/assets/js/b56f9725.0f244220.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{4958:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx) [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.4f3b6847.js b/assets/js/b56f9725.4f3b6847.js
deleted file mode 100644
index 851f23944b..0000000000
--- a/assets/js/b56f9725.4f3b6847.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{4958:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),a=n(2175);function r(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx) [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.037ce413.js b/assets/js/bb5b2057.037ce413.js
deleted file mode 100644
index ecf3bd66b6..0000000000
--- a/assets/js/bb5b2057.037ce413.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{5279:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function i(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.26591ea7.js b/assets/js/bb5b2057.26591ea7.js
new file mode 100644
index 0000000000..fb82b88867
--- /dev/null
+++ b/assets/js/bb5b2057.26591ea7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{5279:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/c0600a1b.1cda190d.js b/assets/js/c0600a1b.1cda190d.js
new file mode 100644
index 0000000000..1e1f58419a
--- /dev/null
+++ b/assets/js/c0600a1b.1cda190d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8874],{5329:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/c0600a1b.df8c3e8d.js b/assets/js/c0600a1b.df8c3e8d.js
deleted file mode 100644
index 2621a654da..0000000000
--- a/assets/js/c0600a1b.df8c3e8d.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8874],{5329:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/c46c6b55.1a6a0180.js b/assets/js/c46c6b55.1a6a0180.js
new file mode 100644
index 0000000000..b5098d264d
--- /dev/null
+++ b/assets/js/c46c6b55.1a6a0180.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{7709:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/c46c6b55.4e479c77.js b/assets/js/c46c6b55.4e479c77.js
deleted file mode 100644
index 07a398f5ee..0000000000
--- a/assets/js/c46c6b55.4e479c77.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{7709:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=n(1527),r=n(2175);function a(e){const t={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.8ff93fc8.js b/assets/js/c6ab695b.b5cf1351.js
similarity index 50%
rename from assets/js/c6ab695b.8ff93fc8.js
rename to assets/js/c6ab695b.b5cf1351.js
index ad1d141bca..150b6027b3 100644
--- a/assets/js/c6ab695b.8ff93fc8.js
+++ b/assets/js/c6ab695b.b5cf1351.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{6614:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>b,frontMatter:()=>d,metadata:()=>u,toc:()=>p});var s=n(1527),i=n(2175);function r(e){const t={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"There two implementations of WebHDFS REST  [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{6614:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>b,frontMatter:()=>d,metadata:()=>u,toc:()=>p});var s=n(1527),i=n(2175);function r(e){const t={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"There two implementations of WebHDFS REST  [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.c737aa10.js b/assets/js/cc62039a.eff623da.js
similarity index 58%
rename from assets/js/cc62039a.c737aa10.js
rename to assets/js/cc62039a.eff623da.js
index 1d5bbcfa17..c1ffad36e4 100644
--- a/assets/js/cc62039a.c737aa10.js
+++ b/assets/js/cc62039a.eff623da.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{4217:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>h,toc:()=>p});var t=s(1527),r=s(2175);function i(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"A distributed file system that provides  [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{4217:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>h,toc:()=>p});var t=s(1527),r=s(2175);function i(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"A distributed file system that provides  [...]
\ No newline at end of file
diff --git a/assets/js/d3c0d8d5.52ea9d61.js b/assets/js/d3c0d8d5.52ea9d61.js
new file mode 100644
index 0000000000..71de3bf0e6
--- /dev/null
+++ b/assets/js/d3c0d8d5.52ea9d61.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3529:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/d3c0d8d5.e58d24d3.js b/assets/js/d3c0d8d5.e58d24d3.js
deleted file mode 100644
index 063f9b9113..0000000000
--- a/assets/js/d3c0d8d5.e58d24d3.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3529:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>m,frontMatter:()=>o,metadata:()=>d,toc:()=>h});var s=t(1527),a=t(2175);function r(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/ddccef4c.4690407f.js b/assets/js/ddccef4c.4690407f.js
deleted file mode 100644
index c8ea9fa0f8..0000000000
--- a/assets/js/ddccef4c.4690407f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{627:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>x,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx) [...]
\ No newline at end of file
diff --git a/assets/js/ddccef4c.5297651e.js b/assets/js/ddccef4c.5297651e.js
new file mode 100644
index 0000000000..08c713102f
--- /dev/null
+++ b/assets/js/ddccef4c.5297651e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{627:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>x,frontMatter:()=>o,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx) [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.0b3dceb2.js b/assets/js/e892cec6.0b3dceb2.js
deleted file mode 100644
index d1df8b96fa..0000000000
--- a/assets/js/e892cec6.0b3dceb2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{8627:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.3266d975.js b/assets/js/e892cec6.3266d975.js
new file mode 100644
index 0000000000..e3f26ad642
--- /dev/null
+++ b/assets/js/e892cec6.3266d975.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{8627:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>b,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0,s.jsx [...]
\ No newline at end of file
diff --git a/assets/js/eec267e4.114a8287.js b/assets/js/eec267e4.114a8287.js
new file mode 100644
index 0000000000..2e9a4eabdd
--- /dev/null
+++ b/assets/js/eec267e4.114a8287.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2217],{3453:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var s=t(1527),r=t(2175);function a(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["This service will visit the ",(0,s.jsx)( [...]
\ No newline at end of file
diff --git a/assets/js/eec267e4.6821975c.js b/assets/js/eec267e4.6821975c.js
deleted file mode 100644
index 279fccd409..0000000000
--- a/assets/js/eec267e4.6821975c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2217],{3453:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>p});var s=t(1527),r=t(2175);function a(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["This service will visit the ",(0,s.jsx)( [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.484de48d.js b/assets/js/f1ca5a39.484de48d.js
new file mode 100644
index 0000000000..f6a4a0d39c
--- /dev/null
+++ b/assets/js/f1ca5a39.484de48d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{6633:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0 [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.4ef90eff.js b/assets/js/f1ca5a39.4ef90eff.js
deleted file mode 100644
index f40aba0e30..0000000000
--- a/assets/js/f1ca5a39.4ef90eff.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{6633:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>h});var s=t(1527),r=t(2175);function a(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"capabilities",children:"Capabilities"}),"\n",(0 [...]
\ No newline at end of file
diff --git a/assets/js/f9145722.0fdfc21e.js b/assets/js/f9145722.0fdfc21e.js
deleted file mode 100644
index 2b3de5a0a3..0000000000
--- a/assets/js/f9145722.0fdfc21e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{9638:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var r=t(1527),s=t(2175);function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"capabilities",children:"Capabilities"})," [...]
\ No newline at end of file
diff --git a/assets/js/f9145722.15258430.js b/assets/js/f9145722.15258430.js
new file mode 100644
index 0000000000..6555d1b4fe
--- /dev/null
+++ b/assets/js/f9145722.15258430.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{9638:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>d,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var r=t(1527),s=t(2175);function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",input:"input",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"capabilities",children:"Capabilities"})," [...]
\ No newline at end of file
diff --git a/assets/js/fde7cc64.1189df27.js b/assets/js/fde7cc64.1189df27.js
deleted file mode 100644
index d18a010ba9..0000000000
--- a/assets/js/fde7cc64.1189df27.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{1625:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var a=t(1527),s=t(2175);function r(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"capabilities",children:"Capabil [...]
\ No newline at end of file
diff --git a/assets/js/fde7cc64.eece97c2.js b/assets/js/fde7cc64.eece97c2.js
new file mode 100644
index 0000000000..2b483f4f96
--- /dev/null
+++ b/assets/js/fde7cc64.eece97c2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{1625:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>u,default:()=>f,frontMatter:()=>c,metadata:()=>d,toc:()=>h});var a=t(1527),s=t(2175);function r(e){const n={a:"a",code:"code",del:"del",h2:"h2",h3:"h3",input:"input",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h2,{id:"capabilities",children:"Capabil [...]
\ No newline at end of file
diff --git a/assets/js/main.b6f624e6.js b/assets/js/main.72d29831.js
similarity index 98%
rename from assets/js/main.b6f624e6.js
rename to assets/js/main.72d29831.js
index 865a32cc44..a416412a38 100644
--- a/assets/js/main.b6f624e6.js
+++ b/assets/js/main.72d29831.js
@@ -1,2 +1,2 @@
-/*! For license information please see main.b6f624e6.js.LICENSE.txt */
-(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[179],{8852:(e,t,n)=>{var r={"./prism-groovy":1199,"./prism-java":955,"./prism-rust":457};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8852},7812:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(959);var r=n(9010),o=n.n(r),a=n(6887);const  [...]
\ No newline at end of file
+/*! For license information please see main.72d29831.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[179],{8852:(e,t,n)=>{var r={"./prism-groovy":1199,"./prism-java":955,"./prism-rust":457};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8852},7812:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(959);var r=n(9010),o=n.n(r),a=n(6887);const  [...]
\ No newline at end of file
diff --git a/assets/js/main.b6f624e6.js.LICENSE.txt b/assets/js/main.72d29831.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.b6f624e6.js.LICENSE.txt
rename to assets/js/main.72d29831.js.LICENSE.txt
diff --git a/assets/js/runtime~main.54e4a30a.js b/assets/js/runtime~main.07cb7119.js
similarity index 61%
rename from assets/js/runtime~main.54e4a30a.js
rename to assets/js/runtime~main.07cb7119.js
index 914a27ba42..aa153b5bb3 100644
--- a/assets/js/runtime~main.54e4a30a.js
+++ b/assets/js/runtime~main.07cb7119.js
@@ -1 +1 @@
-(()=>{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return d[e].call(a.exports,a,a.exports,r),a.exports}r.m=d,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],b=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&b||d>=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b<d&&(d=b));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}b=b||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
+(()=>{"use strict";var e,c,a,f,d,b={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(c,a,f,d)=>{if(!a){var b=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}d=d||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/apache-opendal-graduated/index.html b/blog/apache-opendal-graduated/index.html
index 8a2c47bfa7..fbea4f073f 100644
--- a/blog/apache-opendal-graduated/index.html
+++ b/blog/apache-opendal-graduated/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Apache OpenDAL™ is now Graduated | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/apache-opendal-graduated"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/apache-opendal-participates-in-gsoc-2024/index.html b/blog/apache-opendal-participates-in-gsoc-2024/index.html
index cf316226fb..ca42f7e778 100644
--- a/blog/apache-opendal-participates-in-gsoc-2024/index.html
+++ b/blog/apache-opendal-participates-in-gsoc-2024/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Apache OpenDAL™ participates in Google Summer of Code 2024 | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/apache-opendal-participates-in-gsoc-2024"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="e [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 131b7bf8bb..545754f1ab 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Archive | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index 90362fb60b..13e78426e2 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Apache OpenDAL™ Internal: Data Reading | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/how-opendal-read-data"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusauru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/index.html b/blog/index.html
index 2d9151165c..ab1086272e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Blog | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="o [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index 7f66ec5667..e7b607fcf2 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Apache OpenDAL™: Access Data Freely | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusau [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index f4b669e624..9761a1db3d 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/owo-1/index.html b/blog/owo-1/index.html
index 8d4dad92ab..da1d7fbf62 100644
--- a/blog/owo-1/index.html
+++ b/blog/owo-1/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">OwO #1: The v0.40 Release | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/owo-1"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><met [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 01defc650e..ddacad1d22 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">4 posts tagged with &quot;announcement&quot; | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 9c768c4d89..c5cfc591b0 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Tags | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" proper [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index 4a595035ba..433e7c4a1c 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">One post tagged with &quot;internal&quot; | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/internal"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lang [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/blog/tags/owo/index.html b/blog/tags/owo/index.html
index 7c79ab419a..0de44bbedc 100644
--- a/blog/tags/owo/index.html
+++ b/blog/tags/owo/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">One post tagged with &quot;owo&quot; | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/owo"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" cont [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/category/committers/index.html b/community/category/committers/index.html
index 94c9241ae6..359a0af385 100644
--- a/community/category/committers/index.html
+++ b/community/category/committers/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Committers | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/committers"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/category/events/index.html b/community/category/events/index.html
index 8ad6028857..c1211972df 100644
--- a/community/category/events/index.html
+++ b/community/category/events/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Events | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/events"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/category/pmc-members/index.html b/community/category/pmc-members/index.html
index 3da61b7750..697ba75a9d 100644
--- a/community/category/pmc-members/index.html
+++ b/community/category/pmc-members/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Committers | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/pmc-members"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"> [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/category/reference/index.html b/community/category/reference/index.html
index e3751ee74f..5e1a22f101 100644
--- a/community/category/reference/index.html
+++ b/community/category/reference/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Reference | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/reference"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/committers/onboarding/index.html b/community/committers/onboarding/index.html
index d82d3f7c9b..f1f5be53be 100644
--- a/community/committers/onboarding/index.html
+++ b/community/committers/onboarding/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Onboarding | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/onboarding"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/committers/reference/generate_release_note/index.html b/community/committers/reference/generate_release_note/index.html
index 46b342de78..4ee389e479 100644
--- a/community/committers/reference/generate_release_note/index.html
+++ b/community/committers/reference/generate_release_note/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Generate release note | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/reference/generate_release_note"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/committers/reference/setup_gpg/index.html b/community/committers/reference/setup_gpg/index.html
index 9e0dd5cef7..dcc44d496c 100644
--- a/community/committers/reference/setup_gpg/index.html
+++ b/community/committers/reference/setup_gpg/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Setup GPG key | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/reference/setup_gpg"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language"  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/committers/release/index.html b/community/committers/release/index.html
index e60048fd44..78a462238b 100644
--- a/community/committers/release/index.html
+++ b/community/committers/release/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Create a release | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/release"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/committers/request_for_adding_secrets/index.html b/community/committers/request_for_adding_secrets/index.html
index ed83748bf1..610a8dd262 100644
--- a/community/committers/request_for_adding_secrets/index.html
+++ b/community/committers/request_for_adding_secrets/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Request for adding secrets | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/request_for_adding_secrets"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/committers/verify/index.html b/community/committers/verify/index.html
index 0bf05d39fb..66c02c90cd 100644
--- a/community/committers/verify/index.html
+++ b/community/committers/verify/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Verify a release candidate | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/verify"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language"  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/events/gsoc-proposal-guide/index.html b/community/events/gsoc-proposal-guide/index.html
index fd5d14b0b2..6b04cbab85 100644
--- a/community/events/gsoc-proposal-guide/index.html
+++ b/community/events/gsoc-proposal-guide/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">GSoC Project Proposal Guidance | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/events/gsoc-proposal-guide"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsear [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/index.html b/community/index.html
index ab6d8f5ae2..a038eec9ca 100644
--- a/community/index.html
+++ b/community/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Community | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true"  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/maturity/index.html b/community/maturity/index.html
index 213820002d..ea48cf1154 100644
--- a/community/maturity/index.html
+++ b/community/maturity/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Maturity | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/maturity"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/news/index.html b/community/news/index.html
index fa87942a25..1f0fc4d7af 100644
--- a/community/news/index.html
+++ b/community/news/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">News | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/news"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/pmc_members/nominate-committer/index.html b/community/pmc_members/nominate-committer/index.html
index 3e7a4e394e..9e7c0dbfdf 100644
--- a/community/pmc_members/nominate-committer/index.html
+++ b/community/pmc_members/nominate-committer/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Nominate Committer | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/nominate-committer"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:langu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/pmc_members/nominate-pmc-member/index.html b/community/pmc_members/nominate-pmc-member/index.html
index b643b2dfad..8af6b7b718 100644
--- a/community/pmc_members/nominate-pmc-member/index.html
+++ b/community/pmc_members/nominate-pmc-member/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Nominate PMC Member | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/nominate-pmc-member"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lan [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/pmc_members/onboarding/index.html b/community/pmc_members/onboarding/index.html
index cbc8f64388..da724c99a0 100644
--- a/community/pmc_members/onboarding/index.html
+++ b/community/pmc_members/onboarding/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Onboarding | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/onboarding"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/pmc_members/podling-report/index.html b/community/pmc_members/podling-report/index.html
index b2b791d3ee..e3daccc092 100644
--- a/community/pmc_members/podling-report/index.html
+++ b/community/pmc_members/podling-report/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Podling Status Reports | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/podling-report"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:langu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/community/security/index.html b/community/security/index.html
index 672e22810e..dedfb947f4 100644
--- a/community/security/index.html
+++ b/community/security/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Security | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/security"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/c/opendal_8h_source.html b/docs/c/opendal_8h_source.html
index 5ebfd34ac8..071f1faed2 100644
--- a/docs/c/opendal_8h_source.html
+++ b/docs/c/opendal_8h_source.html
@@ -123,7 +123,7 @@ $(function() {
 <div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
 <div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>OperatorInfo OperatorInfo;</div>
 <div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160; </div>
-<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>StdIoReader StdIoReader;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>StdReader StdReader;</div>
 <div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
 <div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>opendal_bytes {</div>
 <div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <span class="keyword">const</span> uint8_t *data;</div>
@@ -171,7 +171,7 @@ $(function() {
 <div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;} opendal_result_read;</div>
 <div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160; </div>
 <div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>opendal_reader {</div>
-<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keyword">struct </span>StdIoReader *inner;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="keyword">struct </span>StdReader *inner;</div>
 <div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;} opendal_reader;</div>
 <div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160; </div>
 <div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>opendal_result_operator_reader {</div>
diff --git a/docs/category/integrations/index.html b/docs/category/integrations/index.html
index 0f7c3ea7a1..884b03c70a 100644
--- a/docs/category/integrations/index.html
+++ b/docs/category/integrations/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Integrations | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/integrations"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index cc4f443971..cc6910a813 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Services | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/services"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/integrations/object_store_opendal/index.html b/docs/integrations/object_store_opendal/index.html
index d36184cbd3..6092ae4410 100644
--- a/docs/integrations/object_store_opendal/index.html
+++ b/docs/integrations/object_store_opendal/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">object_store_opendal | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/integrations/object_store_opendal"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:langu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
 <!-- -->
 <!-- -->
 <h1>OpenDAL object_store Binding</h1>
-<p>This crate intends to build an <a href="https://crates.io/crates/object_store" target="_blank" rel="noopener noreferrer">object_store</a> binding.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/integrations/object_store_opendal.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width [...]
+<p>This crate intends to build an <a href="https://crates.io/crates/object_store" target="_blank" rel="noopener noreferrer">object_store</a> binding.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/integrations/object_store_opendal.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index bd90db9cbf..77975892ca 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2024-04-16 08:36:28 </i>
+<i style="float:right;">Last updated 2024-04-16 10:28:51 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/classes/opendal.operator.html b/docs/lua/classes/opendal.operator.html
index 17c7568d1e..c4dbca6abf 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2024-04-16 08:36:28 </i>
+<i style="float:right;">Last updated 2024-04-16 10:28:51 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index e3197aa7e5..edc52c9f50 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2024-04-16 08:36:28 </i>
+<i style="float:right;">Last updated 2024-04-16 10:28:51 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index f96516297a..f0f01e87a3 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingLister | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script>< [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L655">generated.d.ts:655</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L655">generated.d.ts:655</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingLister.html#next" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>next</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingReader.html b/docs/nodejs/classes/BlockingReader.html
index bed50f68e8..e3d971b2cd 100644
--- a/docs/nodejs/classes/BlockingReader.html
+++ b/docs/nodejs/classes/BlockingReader.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingReader | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script>< [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L546">generated.d.ts:546</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/index.d.ts#L23">index.d.ts:23</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L546">generated.d.ts:546</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/index.d.ts#L23">index.d.ts:23</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingReader.html#createReadStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Read<wbr/>Stream</span></a>
 <a href="BlockingReader.html#read" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>read</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Blo [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingWriter.html b/docs/nodejs/classes/BlockingWriter.html
index 823e4f1739..cba0f4d89c 100644
--- a/docs/nodejs/classes/BlockingWriter.html
+++ b/docs/nodejs/classes/BlockingWriter.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BlockingWriter | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script>< [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L567">generated.d.ts:567</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L567">generated.d.ts:567</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="BlockingWriter.html#close" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>close</span></a>
 <a href="BlockingWriter.html#createWriteStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Write<wbr/>Stream</span></a>
 <a href="BlockingWriter.html#write" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>write</span></a>
@@ -10,11 +10,11 @@ manner.</p>
 <p>Close this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writerSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span><br/><span class="hl-5">writer</span><span class="hl-1 [...]
 </code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L598">generated.d.ts:598</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createWriteStream" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Write<wbr/>Stream</sp [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L598">generated.d.ts:598</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createWriteStream" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Write<wbr/>Stream</sp [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>Write bytes into this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span> [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Capability.html b/docs/nodejs/classes/Capability.html
index 04a54a7505..c6a6cdf705 100644
--- a/docs/nodejs/classes/Capability.html
+++ b/docs/nodejs/classes/Capability.html
@@ -7,7 +7,7 @@ by current Operator.</p>
 <li>What&#39;s current Operator max supports batch operations count.</li>
 </ul>
 <p>Add fields of Capabilities with be public and can be accessed directly.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L56">generated.d.ts:56</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L56">generated.d.ts:56</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Capability.html#batch" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch</span></a>
 <a href="Capability.html#batchDelete" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch<wbr/>Delete</span></a>
 <a href="Capability.html#batchMaxOperations" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>batch<wbr/>Max<wbr/>Operations</span></a>
@@ -45,43 +45,43 @@ by current Operator.</p>
 <a href="Capability.html#writeWithContentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>write<wbr/>With<wbr/>Content<wbr/>Disposition</span></a>
 <a href="Capability.html#writeWithContentType" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>write<wbr/>With<wbr/>Content<wbr/>Type</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Cap [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L138">generated.d.ts:138</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchDelete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Delete</span><a href="#ba [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L140">generated.d.ts:140</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchMaxOperations" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Max<wbr/>Operation [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L142">generated.d.ts:142</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="blocking" class="t [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L144">generated.d.ts:144</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L118">generated.d.ts:118</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#create [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L114">generated.d.ts:114</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L116">generated.d.ts:116</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L122">generated.d.ts:122</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithLimit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Limit</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L124">generated.d.ts:124</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithRecursive" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Recursive< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L128">generated.d.ts:128</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithStartAfter" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Start<wbr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L126">generated.d.ts:126</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presign" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign</span><a href="#presign" aria-la [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L130">generated.d.ts:130</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#pr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L132">generated.d.ts:132</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#pr [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L134">generated.d.ts:134</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="# [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L136">generated.d.ts:136</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L64">generated.d.ts:64</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>Match< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L66">generated.d.ts:66</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>No [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L68">generated.d.ts:68</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideCacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>O [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L70">generated.d.ts:70</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L72">generated.d.ts:72</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>Ov [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L74">generated.d.ts:74</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label=" [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L120">generated.d.ts:120</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Perm [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L58">generated.d.ts:58</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>Match< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L60">generated.d.ts:60</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>No [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L62">generated.d.ts:62</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Per [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L76">generated.d.ts:76</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanAppend" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Append</span><a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L82">generated.d.ts:82</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanEmpty" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Empty</span><a h [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L80">generated.d.ts:80</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanMulti" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Multi</span><a h [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L78">generated.d.ts:78</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiAlignSize" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Multi<wbr/>Align<wb [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L138">generated.d.ts:138</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchDelete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Delete</span><a href="#ba [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L140">generated.d.ts:140</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="batchMaxOperations" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>batch<wbr/>Max<wbr/>Operation [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L142">generated.d.ts:142</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="blocking" class="t [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L144">generated.d.ts:144</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L118">generated.d.ts:118</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#create [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L114">generated.d.ts:114</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L116">generated.d.ts:116</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L122">generated.d.ts:122</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithLimit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Limit</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L124">generated.d.ts:124</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithRecursive" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Recursive< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L128">generated.d.ts:128</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="listWithStartAfter" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>list<wbr/>With<wbr/>Start<wbr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L126">generated.d.ts:126</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presign" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign</span><a href="#presign" aria-la [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L130">generated.d.ts:130</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#pr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L132">generated.d.ts:132</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#pr [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L134">generated.d.ts:134</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="# [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L136">generated.d.ts:136</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L64">generated.d.ts:64</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>Match< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L66">generated.d.ts:66</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>If<wbr/>No [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L68">generated.d.ts:68</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideCacheControl" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>O [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L70">generated.d.ts:70</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L72">generated.d.ts:72</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="readWithOverrideContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>read<wbr/>With<wbr/>Ov [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L74">generated.d.ts:74</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label=" [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L120">generated.d.ts:120</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Perm [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L58">generated.d.ts:58</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>Match< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L60">generated.d.ts:60</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="statWithIfNoneMatch" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>stat<wbr/>With<wbr/>If<wbr/>No [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L62">generated.d.ts:62</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Per [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L76">generated.d.ts:76</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanAppend" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Append</span><a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L82">generated.d.ts:82</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanEmpty" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Empty</span><a h [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L80">generated.d.ts:80</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeCanMulti" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Can<wbr/>Multi</span><a h [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L78">generated.d.ts:78</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiAlignSize" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>Multi<wbr/>Align<wb [...]
 <p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L106">generated.d.ts:106</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMaxSize" [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L106">generated.d.ts:106</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMaxSize" [...]
 <p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L94">generated.d.ts:94</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMinSize" c [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L94">generated.d.ts:94</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeMultiMinSize" c [...]
 <p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L100">generated.d.ts:100</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeTotalMaxSize" [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L100">generated.d.ts:100</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeTotalMaxSize" [...]
 <p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L112">generated.d.ts:112</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithCacheCont [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L88">generated.d.ts:88</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>C [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L86">generated.d.ts:86</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>Content< [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L84">generated.d.ts:84</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class= [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L112">generated.d.ts:112</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithCacheCont [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L88">generated.d.ts:88</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentDisposition" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>C [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L86">generated.d.ts:86</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="writeWithContentType" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>write<wbr/>With<wbr/>Content< [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L84">generated.d.ts:84</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class= [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index cec4ce4464..d6fc41b979 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Entry | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script as [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L515">generated.d.ts:515</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L515">generated.d.ts:515</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Entry.html#path" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>path</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ent [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L517">generated.d.ts:517</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L517">generated.d.ts:517</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/ExternalObject.html b/docs/nodejs/classes/ExternalObject.html
index dab8241c34..c34f1b7737 100644
--- a/docs/nodejs/classes/ExternalObject.html
+++ b/docs/nodejs/classes/ExternalObject.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ExternalObject | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script>< [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ExternalObject | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script>< [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Properties</h3><div class="tsd-index-list"><a href="ExternalObject.html#reflection-5" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span><em>Property</em></span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ext [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ext [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Layer.html b/docs/nodejs/classes/Layer.html
index 3f775f9944..4326eee117 100644
--- a/docs/nodejs/classes/Layer.html
+++ b/docs/nodejs/classes/Layer.html
@@ -1,3 +1,3 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Layer | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script as [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L659">generated.d.ts:659</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L659">generated.d.ts:659</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Lay [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 6dced7f86e..355ff2765f 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Lister | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script a [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L640">generated.d.ts:640</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L640">generated.d.ts:640</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Lister.html#next" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>next</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Lis [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>napi will make sure the function is safe, and we didn&#39;t do unsafe
 thing internally.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/65 [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index e8a2d50b25..b27f835dfe 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Metadata | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script [...]
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L520">generated.d.ts:520</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L520">generated.d.ts:520</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Metadata.html#contentDisposition" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Disposition</span></a>
 <a href="Metadata.html#contentLength" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Length</span></a>
 <a href="Metadata.html#contentMd5" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>content<wbr/>Md5</span></a>
@@ -9,12 +9,12 @@
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Metadata.html#isDirectory" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>is<wbr/>Directory</span></a>
 <a href="Metadata.html#isFile" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>is<wbr/>File</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Met [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L526">generated.d.ts:526</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentLength" cla [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L528">generated.d.ts:528</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentMd5" class= [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L530">generated.d.ts:530</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentType" class [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L532">generated.d.ts:532</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="etag" class="tsd-a [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L534">generated.d.ts:534</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="lastModified" clas [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L526">generated.d.ts:526</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentLength" cla [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L528">generated.d.ts:528</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentMd5" class= [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L530">generated.d.ts:530</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="contentType" class [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L532">generated.d.ts:532</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="etag" class="tsd-a [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L534">generated.d.ts:534</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="lastModified" clas [...]
 <p>We will output this time in RFC3339 format like <code>1996-12-19T16:39:57+08:00</code>.</p>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L540">generated.d.ts:540</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2 [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L522">generated.d.ts:522</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria [...]
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L524">generated.d.ts:524</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L540">generated.d.ts:540</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2 [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L522">generated.d.ts:522</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L524">generated.d.ts:524</a></li></ul></aside></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary clas [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index 194671f9a1..b046c84a44 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Operator | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Operator | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Operator.html#append" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>append</span></a>
 <a href="Operator.html#capability" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>capability</span></a>
 <a href="Operator.html#check" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>check</span></a>
@@ -31,45 +31,45 @@
 <a href="Operator.html#writer" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>writer</span></a>
 <a href="Operator.html#writerSync" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>writer<wbr/>Sync</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ope [...]
-</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L148">generated.d.ts:148</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2>Methods</h2><section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>append</span><a href="#append" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24 [...]
+</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L148">generated.d.ts:148</a></li></ul></aside></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2>Methods</h2><section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>append</span><a href="#append" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24 [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><ul>
 <li>It always appends content to the end of the file.</li>
 <li>It will create file if the path not exists.</li>
 </ul>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">append</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><sp [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="ts [...]
-</div><h4 class="tsd-returns-title">Returns <a href="Capability.html" class="tsd-signature-type tsd-kind-class">Capability</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L150">generated.d.ts:150</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>check</ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="ts [...]
+</div><h4 class="tsd-returns-title">Returns <a href="Capability.html" class="tsd-signature-type tsd-kind-class">Capability</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L150">generated.d.ts:150</a></li></ul></aside></li></ul></section><section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>check</ [...]
 <p>We will send a <code>list</code> request to path and return any errors we met.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">check</span><span class="hl-1">();</span>
 </code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L193">generated.d.ts:193</a></li></ul></aside></li></ul></section><section class [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L193">generated.d.ts:193</a></li></ul></aside></li></ul></section><section class [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">copy</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-s [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">copySync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">createDir</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typ [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">createDirSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generat [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generat [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>Delete not existing error won’t return errors.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">delete</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typ [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">deleteSync</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generat [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generat [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">isExist</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd- [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd- [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">isExistSync</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/gene [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">layer</span>: <a href="ExternalObject.html" class="tsd-signature-type tsd-kind-class">ExternalObject</a><span class="tsd-signature-symbol">&lt;</span><a href="Layer.html" class="tsd-signature-type tsd-kind-class">Layer</a><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Op [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/gene [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">layer</span>: <a href="ExternalObject.html" class="tsd-signature-type tsd-kind-class">ExternalObject</a><span class="tsd-signature-symbol">&lt;</span><a href="Layer.html" class="tsd-signature-type tsd-kind-class">Layer</a><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Op [...]
 <p>This function will return an array of entries.</p>
 <p>An error will be returned if given path doesn&#39;t end with <code>/</code>.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">list</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span><br/ [...]
@@ -77,7 +77,7 @@
 <a id="md:list-recursively" class="tsd-anchor"></a><h4><a href="#md:list-recursively">List recursively</a></h4><p>With <code>recursive</code> option, you can list recursively.</p>
 <pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">list</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">, { </span><span class="hl-5">recursive:</span><span class="hl-1"> </span><span class="hl-6">true [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
 <p>This function will return a array of entries.</p>
 <p>An error will be returned if given path doesn&#39;t end with <code>/</code>.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">listSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span><br/><span class="hl-4">for</span><span class="hl-1"> (</s [...]
@@ -85,45 +85,45 @@
 <a id="md:list-recursively" class="tsd-anchor"></a><h4><a href="#md:list-recursively">List recursively</a></h4><p>With <code>recursive</code> option, you can list recursively.</p>
 <pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">list</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">listSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">, { </span><span class="hl-5">recursive:</span><span class="hl-1"> </span><span class="hl-6">true</span><span class="hl-1"> });</span><br/><span class= [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="../interfaces/ListOptions.html" class="tsd-signature-type ts [...]
 <p>Unit of expires is seconds.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignRead</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0" [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../i [...]
 <p>Unit of expires is seconds.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignStat</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0" [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../i [...]
 <p>Unit of expires is seconds.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">req</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">presignWrite</span><span class="hl-1">(</span><span class="hl-5">path</span><span class="hl-1">, </span><span class="hl-0 [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../i [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">expires</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../i [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">buf</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">read</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd- [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd- [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">buf</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">readSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/gene [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/gene [...]
 <p>It could be used to read large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Reader.html" class="tsd-signature-type tsd-kind-class">Reader</a><span class="tsd-signature-symbol">&gt;</span></h4>< [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Reader.html" class="tsd-signature-type tsd-kind-class">Reader</a><span class="tsd-signature-symbol">&gt;</span></h4>< [...]
 <p>It could be used to read large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="BlockingReader.html" class="tsd-signature-type tsd-kind-class">BlockingReader</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="BlockingReader.html" class="tsd-signature-type tsd-kind-class">BlockingReader</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>If underlying services support delete in batch, we will use batch delete instead.</p>
 <a id="md:examples" class="tsd-anchor"></a><h3><a href="#md:examples">Examples</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">remove</span><span class="hl-1">([</span><span class="hl-2">&quot;abc&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;def&quot;</span><span class="hl-1">]);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">paths</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&g [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">paths</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&g [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>If underlying services support delete in batch, we will use batch delete instead.</p>
 <a id="md:examples" class="tsd-anchor"></a><h3><a href="#md:examples">Examples</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">removeAll</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/dir/&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typ [...]
 <p>It&#39;s similar to <code>mv</code> command.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">rename</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-s [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-s [...]
 <p>It&#39;s similar to <code>mv</code> command.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">renameSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-2">&quot;path/to/dest&quot;</span><span class="hl-1">);</span>
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">from</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">to</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd [...]
 <a id="md:notes" class="tsd-anchor"></a><h3><a href="#md:notes">Notes</a></h3><p>Use stat if you:</p>
 <ul>
 <li>Want detect the outside changes of path.</li>
@@ -132,17 +132,17 @@
 <p>You may want to use <code>metadata</code> if you are working with entries returned by <code>Lister</code>. It’s highly possible that metadata you want has already been cached.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">meta</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">stat</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span><br/><span c [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></ [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></ [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">meta</span><span class="hl-1"> = </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">statSync</span><span class="hl-1">(</span><span class="hl-2">&quot;test&quot;</span><span class="hl-1">);</span><br/><span class="hl-4">if</span><span class="hl-1"> (</span><span [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/bl [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/bl [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">write</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><spa [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="ts [...]
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writeSync</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">, </span><span class="hl-5">Buffer</span><span class="hl-1">.</span><span class="hl-0">from</span><span class="hl-1">(</span><span class="hl-2">&quot;hello world&quot;</span><span cla [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="ts [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="ts [...]
 <p>It could be used to write large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Writer.html" class="tsd-signature-type tsd-kind-class">Writer</a><span class="tsd-signature-symbol">&gt;</span></h4>< [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Writer.html" class="tsd-signature-type tsd-kind-class">Writer</a><span class="tsd-signature-symbol">&gt;</span></h4>< [...]
 <p>It could be used to write large file in a streaming way.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="BlockingWriter.html" class="tsd-signature-type tsd-kind-class">BlockingWriter</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">path</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="BlockingWriter.html" class="tsd-signature-type tsd-kind-class">BlockingWriter</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apach [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Reader.html b/docs/nodejs/classes/Reader.html
index 63a00efd4a..98ff74fd7c 100644
--- a/docs/nodejs/classes/Reader.html
+++ b/docs/nodejs/classes/Reader.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Reader | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script a [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L553">generated.d.ts:553</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L553">generated.d.ts:553</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Reader.html#createReadStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Read<wbr/>Stream</span></a>
 <a href="Reader.html#read" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>read</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Rea [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">ReadableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Readable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>Read bytes from this reader into given buffer.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">buf</span>: <span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">bigint</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-t [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">buf</span>: <span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">bigint</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-t [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/RetryLayer.html b/docs/nodejs/classes/RetryLayer.html
index 60d97d89ce..31db9e5fb9 100644
--- a/docs/nodejs/classes/RetryLayer.html
+++ b/docs/nodejs/classes/RetryLayer.html
@@ -6,27 +6,27 @@ returns true. If operation still failed, this layer will set error to
 <p><code>write</code> and <code>blocking_write</code> don&#39;t support retry so far, visit <a href="https://github.com/apache/opendal/issues/1223">this issue</a> for more details.</p>
 <a id="md:examples" class="tsd-anchor"></a><h1><a href="#md:examples">Examples</a></h1><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">op</span><span class="hl-1"> = </span><span class="hl-6">new</span><span class="hl-1"> </span><span class="hl-0">Operator</span><span class="hl-1">(</span><span class="hl-2">&quot;file&quot;</span><span class="hl-1">, { </span><span class="hl-5">root:</span><span class="hl-1"> </span><spa [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L685">generated.d.ts:685</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L685">generated.d.ts:685</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" ro [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="RetryLayer.html#factor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>factor</span></a>
 <a href="RetryLayer.html#jitter" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>jitter</span></a>
 <a href="RetryLayer.html#maxDelay" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>max<wbr/>Delay</span></a>
 <a href="RetryLayer.html#maxTimes" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>max<wbr/>Times</span></a>
 <a href="RetryLayer.html#minDelay" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-262144"></use></svg><span>min<wbr/>Delay</span></a>
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="RetryLayer.html#build" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>build</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ret [...]
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_Ret [...]
 <a id="md:panics" class="tsd-anchor"></a><h1><a href="#md:panics">Panics</a></h1><p>This function will panic if input factor smaller than <code>1.0</code>.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated. [...]
 <p>If jitter is enabled, ExponentialBackoff will add a random jitter in `[0, min_delay)
 to current delay.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated [...]
 <p>Delay will not increasing if current delay is larger than max_delay.</p>
 <a id="md:notes" class="tsd-anchor"></a><h1><a href="#md:notes">Notes</a></h1><ul>
 <li>The unit of max_delay is millisecond.</li>
 </ul>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated. [...]
 <p>Backoff will return <code>None</code> if max times is reaching.</p>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated. [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated. [...]
 <a id="md:notes" class="tsd-anchor"></a><h1><a href="#md:notes">Notes</a></h1><ul>
 <li>The unit of min_delay is millisecond.</li>
 </ul>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated. [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">v</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated. [...]
\ No newline at end of file
diff --git a/docs/nodejs/classes/Writer.html b/docs/nodejs/classes/Writer.html
index a6cacb28bf..b51724acea 100644
--- a/docs/nodejs/classes/Writer.html
+++ b/docs/nodejs/classes/Writer.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Writer | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script a [...]
 manner.</p>
-</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L604">generated.d.ts:604</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/index.d.ts#L37">index.d.ts:37</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
+</div><div class="tsd-comment tsd-typography"></div></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L604">generated.d.ts:604</a></li><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/index.d.ts#L37">index.d.ts:37</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content  [...]
 </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Writer.html#close" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>close</span></a>
 <a href="Writer.html#createWriteStream" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>create<wbr/>Write<wbr/>Stream</span></a>
 <a href="Writer.html#write" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-2048"></use></svg><span>write</span></a>
@@ -10,11 +10,11 @@ manner.</p>
 <p>Close this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span> [...]
 </code><button>Copy</button></pre>
-</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L634">generated.d.ts:634</a></li></ul></aside></li></ul></section><section class [...]
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
+</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L634">generated.d.ts:634</a></li></ul></aside></li></ul></section><section class [...]
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">options</span>: <span class="tsd-signature-type ">WritableOptions</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Writable</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href [...]
 <p>&amp;mut self in async napi methods should be marked as unsafe</p>
 </blockquote>
 <p>Write bytes into this writer.</p>
 <a id="md:example" class="tsd-anchor"></a><h3><a href="#md:example">Example</a></h3><pre><code class="language-javascript"><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">writer</span><span class="hl-1"> = </span><span class="hl-4">await</span><span class="hl-1"> </span><span class="hl-5">op</span><span class="hl-1">.</span><span class="hl-0">writer</span><span class="hl-1">(</span><span class="hl-2">&quot;path/to/file&quot;</span><span class="hl-1">);</span> [...]
 </code><button>Copy</button></pre>
-</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type [...]
\ No newline at end of file
+</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">content</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type ">Buffer</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/ListOptions.html b/docs/nodejs/interfaces/ListOptions.html
index ba89a97332..4c0116b8c9 100644
--- a/docs/nodejs/interfaces/ListOptions.html
+++ b/docs/nodejs/interfaces/ListOptions.html
@@ -1,3 +1,3 @@
-<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ListOptions | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><scr [...]
+<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ListOptions | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><scr [...]
 <a href="ListOptions.html#recursive" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>recursive?</span></a>
-</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="limit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>limit</span><a href="#limit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">li [...]
\ No newline at end of file
+</div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="limit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOptional">Optional</code> <span>limit</span><a href="#limit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">li [...]
\ No newline at end of file
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index c0a6c68301..25e30a7ee8 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -1,8 +1,8 @@
 <!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>PresignedRequest | Apache OpenDAL™ - v0.45.1+core.0.45.1</title><meta name="description" content="Documentation for Apache OpenDAL™"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script [...]
-</div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface </span><span class="tsd-kind-interface">PresignedRequest </span><span class="tsd-signature-symbol">{ </span><br/><span>    </span><a class="tsd-kind-property" href="PresignedRequest.html#headers">headers</a><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol">&lt;</span><span class=" [...]
+</div><div class="tsd-comment tsd-typography"></div></section><div class="tsd-signature"><span class="tsd-signature-keyword">interface </span><span class="tsd-kind-interface">PresignedRequest </span><span class="tsd-signature-symbol">{ </span><br/><span>    </span><a class="tsd-kind-property" href="PresignedRequest.html#headers">headers</a><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Record</span><span class="tsd-signature-symbol">&lt;</span><span class=" [...]
 <a href="PresignedRequest.html#method" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>method</span></a>
 <a href="PresignedRequest.html#url" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1024"></use></svg><span>url</span></a>
 </div></section></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Properties</h2><section class="tsd-panel tsd-member"><a id="headers" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>headers</span><a href="#headers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">headers</span><span class="tsd-signature-symbol">: [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L42">generated.d.ts:42</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L38">generated.d.ts:38</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><di [...]
-</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/5b1974b/bindings/nodejs/generated.d.ts#L40">generated.d.ts:40</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L42">generated.d.ts:42</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L38">generated.d.ts:38</a></li></ul></aside></section><section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3><di [...]
+</div><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/apache/opendal/blob/655a487/bindings/nodejs/generated.d.ts#L40">generated.d.ts:40</a></li></ul></aside></section></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="# [...]
\ No newline at end of file
diff --git a/docs/object-store-opendal/src/object_store_opendal/lib.rs.html b/docs/object-store-opendal/src/object_store_opendal/lib.rs.html
index 7796162ffd..b9a5ad7b7e 100644
--- a/docs/object-store-opendal/src/object_store_opendal/lib.rs.html
+++ b/docs/object-store-opendal/src/object_store_opendal/lib.rs.html
@@ -597,12 +597,12 @@
             .<span class="kw">await
             </span>.map_err(|err| format_object_store_error(err, location.as_ref()))<span class="question-mark">?</span>;
 
-        <span class="kw">let </span>stream = r
-            .into_futures_bytes_stream(<span class="number">0</span>..meta.size <span class="kw">as </span>u64)
-            .map_err(|err| object_store::Error::Generic {
-                store: <span class="string">"IoError"</span>,
-                source: Box::new(err),
-            });
+        <span class="kw">let </span>stream =
+            r.into_bytes_stream(<span class="number">0</span>..meta.size <span class="kw">as </span>u64)
+                .map_err(|err| object_store::Error::Generic {
+                    store: <span class="string">"IoError"</span>,
+                    source: Box::new(err),
+                });
 
         <span class="prelude-val">Ok</span>(GetResult {
             payload: GetResultPayload::Stream(Box::pin(stream)),
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 58b331fe25..92d65c84b2 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Welcome to Apache OpenDAL™ | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/overview"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -63,6 +63,6 @@
 <p>we DO NOT</p>
 <ul>
 <li>Add <code>Arc</code> for metadata: Users may only need to use metadata once and never clone it. For those who do want this feature, they can add <code>Arc</code> themselves.</li>
-</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/overview.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29. [...]
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/overview.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29. [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 3012bd3d0f..b6a1324c07 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -246,22 +246,22 @@
                     <a class="class" href="#Metadata">Metadata</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#Metadata.mode">mode</a>
+                                <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                                <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
                         </li>
                 </ul>
 
@@ -270,10 +270,10 @@
                     <a class="class" href="#PresignedRequest">PresignedRequest</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#PresignedRequest.method">method</a>
+                                <a class="variable" href="#PresignedRequest.url">url</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.url">url</a>
+                                <a class="variable" href="#PresignedRequest.method">method</a>
                         </li>
                         <li>
                                 <a class="variable" href="#PresignedRequest.headers">headers</a>
@@ -284,113 +284,113 @@
             <li>
                     <a class="class" href="#Capability">Capability</a>
                             <ul class="memberlist">
+                        <li>
+                                <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
+                        </li>
                         <li>
                                 <a class="variable" href="#Capability.stat">stat</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
+                                <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.delete">delete</a>
+                                <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
+                                <a class="variable" href="#Capability.write_can_append">write_can_append</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write">write</a>
+                                <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.blocking">blocking</a>
+                                <a class="variable" href="#Capability.batch">batch</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
+                                <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.create_dir">create_dir</a>
+                                <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_append">write_can_append</a>
+                                <a class="variable" href="#Capability.presign">presign</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
+                                <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
+                                <a class="variable" href="#Capability.rename">rename</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
+                                <a class="variable" href="#Capability.delete">delete</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
+                                <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_stat">presign_stat</a>
+                                <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
+                                <a class="variable" href="#Capability.presign_write">presign_write</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
+                                <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_read">presign_read</a>
+                                <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
+                                <a class="variable" href="#Capability.batch_delete">batch_delete</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_write">presign_write</a>
+                                <a class="variable" href="#Capability.read">read</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
+                                <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
+                                <a class="variable" href="#Capability.list_with_recursive">list_with_recursive</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.rename">rename</a>
+                                <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_recursive">list_with_recursive</a>
+                                <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
+                                <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Capability.list">list</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read">read</a>
+                                <a class="variable" href="#Capability.presign_read">presign_read</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch_delete">batch_delete</a>
+                                <a class="variable" href="#Capability.presign_stat">presign_stat</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
+                                <a class="variable" href="#Capability.blocking">blocking</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign">presign</a>
+                                <a class="variable" href="#Capability.create_dir">create_dir</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
+                                <a class="variable" href="#Capability.write">write</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
+                                <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
+                                <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Capability.copy">copy</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch">batch</a>
-                        </li>
-                        <li>
-                                <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
+                                <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
+                                <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
                         </li>
                 </ul>
 
@@ -1456,52 +1456,54 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="Metadata.mode" class="classattr">
+                            <div id="Metadata.etag" class="classattr">
                                 <div class="attr variable">
-            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">EntryMode</a></span>
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.mode"></a>
+    <a class="headerlink" href="#Metadata.etag"></a>
     
-            <div class="docstring"><p>mode represent this entry's mode.</p>
+            <div class="docstring"><p>ETag of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_disposition" class="classattr">
+                            <div id="Metadata.content_length" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_length</span><span class="annotation">: int</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_disposition"></a>
-    
+    <a class="headerlink" href="#Metadata.content_length"></a>
     
+            <div class="docstring"><p>Content length of this entry.</p>
+</div>
+
 
                             </div>
-                            <div id="Metadata.etag" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.etag"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>ETag of this entry.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
                             </div>
-                            <div id="Metadata.content_length" class="classattr">
+                            <div id="Metadata.mode" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_length</span><span class="annotation">: int</span>
+            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">EntryMode</a></span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_length"></a>
+    <a class="headerlink" href="#Metadata.mode"></a>
     
-            <div class="docstring"><p>Content length of this entry.</p>
+            <div class="docstring"><p>mode represent this entry's mode.</p>
 </div>
 
 
@@ -1519,17 +1521,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_disposition</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.content_disposition"></a>
+    
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
-</div>
-
 
                             </div>
                 </section>
@@ -1545,28 +1545,28 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="PresignedRequest.method" class="classattr">
+                            <div id="PresignedRequest.url" class="classattr">
                                 <div class="attr variable">
-            <span class="name">method</span><span class="annotation">: str</span>
+            <span class="name">url</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.method"></a>
+    <a class="headerlink" href="#PresignedRequest.url"></a>
     
-            <div class="docstring"><p>Return the HTTP method of this request.</p>
+            <div class="docstring"><p>Return the URL of this request.</p>
 </div>
 
 
                             </div>
-                            <div id="PresignedRequest.url" class="classattr">
+                            <div id="PresignedRequest.method" class="classattr">
                                 <div class="attr variable">
-            <span class="name">url</span><span class="annotation">: str</span>
+            <span class="name">method</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.url"></a>
+    <a class="headerlink" href="#PresignedRequest.method"></a>
     
-            <div class="docstring"><p>Return the URL of this request.</p>
+            <div class="docstring"><p>Return the HTTP method of this request.</p>
 </div>
 
 
@@ -1600,6 +1600,19 @@ by current Operator.</p>
 </div>
 
 
+                            <div id="Capability.write_with_content_type" class="classattr">
+                                <div class="attr variable">
+            <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
+
+        
+    </div>
+    <a class="headerlink" href="#Capability.write_with_content_type"></a>
+    
+            <div class="docstring"><p>If operator supports write with content type.</p>
+</div>
+
+
+                            </div>
                             <div id="Capability.stat" class="classattr">
                                 <div class="attr variable">
             <span class="name">stat</span><span class="annotation">: bool</span>
@@ -1613,307 +1626,307 @@ by current Operator.</p>
 
 
                             </div>
-                            <div id="Capability.write_multi_max_size" class="classattr">
+                            <div id="Capability.read_with_override_cache_control" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_max_size"></a>
+    <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
     
-            <div class="docstring"><p>write_multi_max_size is the max size that services support in write_multi.</p>
-
-<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
+            <div class="docstring"><p>if operator supports read with override cache control.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.delete" class="classattr">
+                            <div id="Capability.stat_with_if_none_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">delete</span><span class="annotation">: bool</span>
+            <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.delete"></a>
+    <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
     
-            <div class="docstring"><p>If operator supports delete.</p>
+            <div class="docstring"><p>If operator supports stat with if none match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.batch_max_operations" class="classattr">
+                            <div id="Capability.write_can_append" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch_max_operations</span><span class="annotation">: Optional[int]</span>
+            <span class="name">write_can_append</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch_max_operations"></a>
+    <a class="headerlink" href="#Capability.write_can_append"></a>
     
-            <div class="docstring"><p>The max operations that operator supports in batch.</p>
+            <div class="docstring"><p>If operator supports write by append.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write" class="classattr">
+                            <div id="Capability.write_multi_min_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write"></a>
+    <a class="headerlink" href="#Capability.write_multi_min_size"></a>
     
-            <div class="docstring"><p>If operator supports write.</p>
+            <div class="docstring"><p>write_multi_min_size is the min size that services support in write_multi.</p>
+
+<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.blocking" class="classattr">
+                            <div id="Capability.batch" class="classattr">
                                 <div class="attr variable">
-            <span class="name">blocking</span><span class="annotation">: bool</span>
+            <span class="name">batch</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.blocking"></a>
+    <a class="headerlink" href="#Capability.batch"></a>
     
-            <div class="docstring"><p>If operator supports blocking.</p>
+            <div class="docstring"><p>If operator supports batch.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_if_match" class="classattr">
+                            <div id="Capability.list_with_limit" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
+            <span class="name">list_with_limit</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_if_match"></a>
+    <a class="headerlink" href="#Capability.list_with_limit"></a>
     
-            <div class="docstring"><p>If operator supports read with if match.</p>
+            <div class="docstring"><p>If backend supports list with limit.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.create_dir" class="classattr">
+                            <div id="Capability.read_with_if_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">create_dir</span><span class="annotation">: bool</span>
+            <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.create_dir"></a>
+    <a class="headerlink" href="#Capability.read_with_if_match"></a>
     
-            <div class="docstring"><p>If operator supports create dir.</p>
+            <div class="docstring"><p>If operator supports read with if match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_can_append" class="classattr">
+                            <div id="Capability.presign" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_append</span><span class="annotation">: bool</span>
+            <span class="name">presign</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_append"></a>
+    <a class="headerlink" href="#Capability.presign"></a>
     
-            <div class="docstring"><p>If operator supports write by append.</p>
+            <div class="docstring"><p>If operator supports presign.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_if_none_match" class="classattr">
+                            <div id="Capability.write_with_content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
+            <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
+    <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
     
-            <div class="docstring"><p>If operator supports read with if none match.</p>
+            <div class="docstring"><p>If operator supports write with content disposition.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.list_with_start_after" class="classattr">
+                            <div id="Capability.rename" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
+            <span class="name">rename</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_start_after"></a>
+    <a class="headerlink" href="#Capability.rename"></a>
     
-            <div class="docstring"><p>If backend supports list with start after.</p>
+            <div class="docstring"><p>If operator supports rename.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_total_max_size" class="classattr">
+                            <div id="Capability.delete" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">delete</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_total_max_size"></a>
+    <a class="headerlink" href="#Capability.delete"></a>
     
-            <div class="docstring"><p>write_total_max_size is the max size that services support in write_total.</p>
-
-<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
+            <div class="docstring"><p>If operator supports delete.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_override_cache_control" class="classattr">
+                            <div id="Capability.stat_with_if_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
+            <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
+    <a class="headerlink" href="#Capability.stat_with_if_match"></a>
     
-            <div class="docstring"><p>if operator supports read with override cache control.</p>
+            <div class="docstring"><p>If operator supports stat with if match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign_stat" class="classattr">
+                            <div id="Capability.write_can_multi" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_stat</span><span class="annotation">: bool</span>
+            <span class="name">write_can_multi</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_stat"></a>
+    <a class="headerlink" href="#Capability.write_can_multi"></a>
     
-            <div class="docstring"><p>If operator supports presign stat.</p>
+            <div class="docstring"><p>If operator supports write can be called in multi times.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.stat_with_if_match" class="classattr">
+                            <div id="Capability.presign_write" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
+            <span class="name">presign_write</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat_with_if_match"></a>
+    <a class="headerlink" href="#Capability.presign_write"></a>
     
-            <div class="docstring"><p>If operator supports stat with if match.</p>
+            <div class="docstring"><p>If operator supports presign write.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_with_content_disposition" class="classattr">
+                            <div id="Capability.read_with_if_none_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
+            <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
+    <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
     
-            <div class="docstring"><p>If operator supports write with content disposition.</p>
+            <div class="docstring"><p>If operator supports read with if none match.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign_read" class="classattr">
+                            <div id="Capability.batch_max_operations" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_read</span><span class="annotation">: bool</span>
+            <span class="name">batch_max_operations</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_read"></a>
+    <a class="headerlink" href="#Capability.batch_max_operations"></a>
     
-            <div class="docstring"><p>If operator supports presign read.</p>
+            <div class="docstring"><p>The max operations that operator supports in batch.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_with_cache_control" class="classattr">
+                            <div id="Capability.batch_delete" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
+            <span class="name">batch_delete</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_cache_control"></a>
+    <a class="headerlink" href="#Capability.batch_delete"></a>
     
-            <div class="docstring"><p>If operator supports write with cache control.</p>
+            <div class="docstring"><p>If operator supports batch delete.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign_write" class="classattr">
+                            <div id="Capability.read" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_write</span><span class="annotation">: bool</span>
+            <span class="name">read</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_write"></a>
+    <a class="headerlink" href="#Capability.read"></a>
     
-            <div class="docstring"><p>If operator supports presign write.</p>
+            <div class="docstring"><p>If operator supports read.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_multi_min_size" class="classattr">
+                            <div id="Capability.write_total_max_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_min_size"></a>
+    <a class="headerlink" href="#Capability.write_total_max_size"></a>
     
-            <div class="docstring"><p>write_multi_min_size is the min size that services support in write_multi.</p>
+            <div class="docstring"><p>write_total_max_size is the max size that services support in write_total.</p>
 
-<p>For example, AWS S3 requires at least 5MiB in write_multi expect the last one.</p>
+<p>For example, Cloudflare D1 supports 1MB as max in write_total.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_can_empty" class="classattr">
+                            <div id="Capability.list_with_recursive" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_empty</span><span class="annotation">: bool</span>
+            <span class="name">list_with_recursive</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_empty"></a>
+    <a class="headerlink" href="#Capability.list_with_recursive"></a>
     
-            <div class="docstring"><p>If operator supports write with empty content.</p>
+            <div class="docstring"><p>If backend supports list without delimiter.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.rename" class="classattr">
+                            <div id="Capability.read_with_override_content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">rename</span><span class="annotation">: bool</span>
+            <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.rename"></a>
+    <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
     
-            <div class="docstring"><p>If operator supports rename.</p>
+            <div class="docstring"><p>if operator supports read with override content type.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.list_with_recursive" class="classattr">
+                            <div id="Capability.write_multi_align_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_recursive</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_recursive"></a>
+    <a class="headerlink" href="#Capability.write_multi_align_size"></a>
     
-            <div class="docstring"><p>If backend supports list without delimiter.</p>
+            <div class="docstring"><p>write_multi_align_size is the align size that services required in write_multi.</p>
+
+<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_can_multi" class="classattr">
+                            <div id="Capability.write_can_empty" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_multi</span><span class="annotation">: bool</span>
+            <span class="name">write_can_empty</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_multi"></a>
+    <a class="headerlink" href="#Capability.write_can_empty"></a>
     
-            <div class="docstring"><p>If operator supports write can be called in multi times.</p>
+            <div class="docstring"><p>If operator supports write with empty content.</p>
 </div>
 
 
@@ -1931,93 +1944,95 @@ by current Operator.</p>
 
 
                             </div>
-                            <div id="Capability.read" class="classattr">
+                            <div id="Capability.presign_read" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read</span><span class="annotation">: bool</span>
+            <span class="name">presign_read</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read"></a>
+    <a class="headerlink" href="#Capability.presign_read"></a>
     
-            <div class="docstring"><p>If operator supports read.</p>
+            <div class="docstring"><p>If operator supports presign read.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.batch_delete" class="classattr">
+                            <div id="Capability.presign_stat" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch_delete</span><span class="annotation">: bool</span>
+            <span class="name">presign_stat</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch_delete"></a>
+    <a class="headerlink" href="#Capability.presign_stat"></a>
     
-            <div class="docstring"><p>If operator supports batch delete.</p>
+            <div class="docstring"><p>If operator supports presign stat.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_override_content_type" class="classattr">
+                            <div id="Capability.blocking" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
+            <span class="name">blocking</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
+    <a class="headerlink" href="#Capability.blocking"></a>
     
-            <div class="docstring"><p>if operator supports read with override content type.</p>
+            <div class="docstring"><p>If operator supports blocking.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.presign" class="classattr">
+                            <div id="Capability.create_dir" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign</span><span class="annotation">: bool</span>
+            <span class="name">create_dir</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign"></a>
+    <a class="headerlink" href="#Capability.create_dir"></a>
     
-            <div class="docstring"><p>If operator supports presign.</p>
+            <div class="docstring"><p>If operator supports create dir.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.read_with_override_content_disposition" class="classattr">
+                            <div id="Capability.write" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
+            <span class="name">write</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
+    <a class="headerlink" href="#Capability.write"></a>
     
-            <div class="docstring"><p>if operator supports read with override content disposition.</p>
+            <div class="docstring"><p>If operator supports write.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_with_content_type" class="classattr">
+                            <div id="Capability.write_with_cache_control" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
+            <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_content_type"></a>
+    <a class="headerlink" href="#Capability.write_with_cache_control"></a>
     
-            <div class="docstring"><p>If operator supports write with content type.</p>
+            <div class="docstring"><p>If operator supports write with cache control.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.stat_with_if_none_match" class="classattr">
+                            <div id="Capability.write_multi_max_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
+    <a class="headerlink" href="#Capability.write_multi_max_size"></a>
     
-            <div class="docstring"><p>If operator supports stat with if none match.</p>
+            <div class="docstring"><p>write_multi_max_size is the max size that services support in write_multi.</p>
+
+<p>For example, AWS S3 supports 5GiB as max in write_multi.</p>
 </div>
 
 
@@ -2035,43 +2050,28 @@ by current Operator.</p>
 
 
                             </div>
-                            <div id="Capability.batch" class="classattr">
-                                <div class="attr variable">
-            <span class="name">batch</span><span class="annotation">: bool</span>
-
-        
-    </div>
-    <a class="headerlink" href="#Capability.batch"></a>
-    
-            <div class="docstring"><p>If operator supports batch.</p>
-</div>
-
-
-                            </div>
-                            <div id="Capability.list_with_limit" class="classattr">
+                            <div id="Capability.list_with_start_after" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_limit</span><span class="annotation">: bool</span>
+            <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_limit"></a>
+    <a class="headerlink" href="#Capability.list_with_start_after"></a>
     
-            <div class="docstring"><p>If backend supports list with limit.</p>
+            <div class="docstring"><p>If backend supports list with start after.</p>
 </div>
 
 
                             </div>
-                            <div id="Capability.write_multi_align_size" class="classattr">
+                            <div id="Capability.read_with_override_content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_align_size"></a>
+    <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
     
-            <div class="docstring"><p>write_multi_align_size is the align size that services required in write_multi.</p>
-
-<p>For example, Google GCS requires align size to 256KiB in write_multi.</p>
+            <div class="docstring"><p>if operator supports read with override content disposition.</p>
 </div>
 
 
diff --git a/docs/python/search.js b/docs/python/search.js
index ab0ab9e987..304aef2624 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
 window.pdocSearch = (function(){
 /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
-    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>Apache OpenDAL\u2122 Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\ [...]
+    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>Apache OpenDAL\u2122 Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\ [...]
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index 4653a50a8a..fd642ae684 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Quickstart | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/quickstart"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -53,6 +53,6 @@
 <div class="language-shell codeBlockContainer_MfrX theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent__QvJ"><pre tabindex="0" class="prism-code language-shell codeBlock_xMeh thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_lAHS"><span class="token-line" style="color:#393A34"><span class="token plain">npm install opendal</span><br></span></code></pre><div class="buttonGroup_fpPU"><button t [...]
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="demo-3">Demo<a href="#demo-3" class="hash-link" aria-label="Direct link to Demo" title="Direct link to Demo">​</a></h3>
 <p>Try it out:</p>
-<div class="language-javascript codeBlockContainer_MfrX theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent__QvJ"><pre tabindex="0" class="prism-code language-javascript codeBlock_xMeh thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_lAHS"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span>< [...]
+<div class="language-javascript codeBlockContainer_MfrX theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent__QvJ"><pre tabindex="0" class="prism-code language-javascript codeBlock_xMeh thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_lAHS"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span>< [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index f5899231f7..23837c95af 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1,2 +1,2 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
-    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
\ No newline at end of file
+    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/index.html b/docs/rust/opendal/index.html
index 5304d95f69..fe778533f7 100644
--- a/docs/rust/opendal/index.html
+++ b/docs/rust/opendal/index.html
@@ -95,9 +95,9 @@ and blocking <a href="struct.BlockingOperator.html" title="struct opendal::Block
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingOperator.html" title="struct opendal::BlockingOperator">BlockingOperator</a></div><div class="desc docblock-short">BlockingOperator is the entry for all public blocking APIs.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingReader.html" title="struct opendal::BlockingReader">BlockingReader</a></div><div class="desc docblock-short">BlockingReader is designed to read data from giv [...]
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.BlockingWriter.html" title="struct opendal::BlockingWriter">BlockingWriter</a></div><div class="desc docblock-short">BlockingWriter is designed to write data into given path in an blocking
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.Buffer.html" title="struct opendal::Buffer">Buffer</a></div><div class="desc docblock-short">Buffer is a wrapper of contiguous <code>Bytes</code> and non contiguous <code>[Bytes]</code>.</div></li><li><div class="item-name"><a class="struct" href="struct.Capability.html" title="struct opendal::Capability">Capability</a></div><div class="desc docblock-short">Capability is used to describe what operations are supported
-by current Operator.</div></li><li><div class="item-name"><a class="struct" href="struct.Entry.html" title="struct opendal::Entry">Entry</a></div><div class="desc docblock-short">Entry returned by <a href="struct.Lister.html" title="struct opendal::Lister"><code>Lister</code></a> or <a href="struct.BlockingLister.html" title="struct opendal::BlockingLister"><code>BlockingLister</code></a> to represent a path and it’s relative metadata.</div></li><li><div class="item-name"><a class="struc [...]
-for <a href="struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.FuturesIoAsyncWriter.html" title="struct opendal::FuturesIoAsyncWriter">FuturesIoAsyncWriter</a></div><div class="desc docblock-short">FuturesIoAsyncWriter is the adapter of [<code>AsyncWrite</code>] for <a href="struct.Writer.html" title="struct opendal::Writer"><code>Writer</code></a>.</div></li><li><div class="item-name"><a class= [...]
+by current Operator.</div></li><li><div class="item-name"><a class="struct" href="struct.Entry.html" title="struct opendal::Entry">Entry</a></div><div class="desc docblock-short">Entry returned by <a href="struct.Lister.html" title="struct opendal::Lister"><code>Lister</code></a> or <a href="struct.BlockingLister.html" title="struct opendal::BlockingLister"><code>BlockingLister</code></a> to represent a path and it’s relative metadata.</div></li><li><div class="item-name"><a class="struc [...]
+for <a href="struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a>.</div></li><li><div class="item-name"><a class="struct" href="struct.FuturesAsyncWriter.html" title="struct opendal::FuturesAsyncWriter">FuturesAsyncWriter</a></div><div class="desc docblock-short">FuturesIoAsyncWriter is the adapter of [<code>AsyncWrite</code>] for <a href="struct.Writer.html" title="struct opendal::Writer"><code>Writer</code></a>.</div></li><li><div class="item-name"><a class="struc [...]
 manner.</div></li><li><div class="item-name"><a class="struct" href="struct.Metadata.html" title="struct opendal::Metadata">Metadata</a></div><div class="desc docblock-short">Metadata carries all metadata associated with a path.</div></li><li><div class="item-name"><a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></div><div class="desc docblock-short">Operator is the entry for all public async APIs.</div></li><li><div class="item-name"><a class=" [...]
-manner.</div></li><li><div class="item-name"><a class="struct" href="struct.StdBytesIterator.html" title="struct opendal::StdBytesIterator">StdBytesIterator</a></div><div class="desc docblock-short">StdIterator is the adapter of <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> for <a href="struct.BlockingReader.html" title="struct opendal::BlockingReader"><code>Blocking [...]
+manner.</div></li><li><div class="item-name"><a class="struct" href="struct.StdBytesIterator.html" title="struct opendal::StdBytesIterator">StdBytesIterator</a></div><div class="desc docblock-short">StdIterator is the adapter of <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> for <a href="struct.BlockingReader.html" title="struct opendal::BlockingReader"><code>Blocking [...]
 manner.</div></li></ul><h2 id="enums" class="section-header"><a href="#enums">Enums</a></h2><ul class="item-table"><li><div class="item-name"><a class="enum" href="enum.EntryMode.html" title="enum opendal::EntryMode">EntryMode</a></div><div class="desc docblock-short">EntryMode represents the mode.</div></li><li><div class="item-name"><a class="enum" href="enum.ErrorKind.html" title="enum opendal::ErrorKind">ErrorKind</a></div><div class="desc docblock-short">ErrorKind is all kinds of Er [...]
 or queried.</div></li><li><div class="item-name"><a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a></div><div class="desc docblock-short">Services that OpenDAL supports</div></li></ul><h2 id="traits" class="section-header"><a href="#traits">Traits</a></h2><ul class="item-table"><li><div class="item-name"><a class="trait" href="trait.Builder.html" title="trait opendal::Builder">Builder</a></div><div class="desc docblock-short">Builder is used to set up a real  [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/sidebar-items.js b/docs/rust/opendal/sidebar-items.js
index 39d3f4f99c..e09ba2f052 100644
--- a/docs/rust/opendal/sidebar-items.js
+++ b/docs/rust/opendal/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["EntryMode","ErrorKind","Metakey","Scheme"],"mod":["docs","layers","operator_functions","operator_futures","raw","services"],"struct":["BlockingLister","BlockingOperator","BlockingReader","BlockingWriter","Buffer","Capability","Entry","Error","FuturesBytesStream","FuturesIoAsyncReader","FuturesIoAsyncWriter","Lister","Metadata","Operator","OperatorBuilder","OperatorInfo","Reader","StdBytesIterator","StdIoReader","Writer"],"trait":["Builder"],"type":["Result"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["EntryMode","ErrorKind","Metakey","Scheme"],"mod":["docs","layers","operator_functions","operator_futures","raw","services"],"struct":["BlockingLister","BlockingOperator","BlockingReader","BlockingWriter","Buffer","Capability","Entry","Error","FuturesAsyncReader","FuturesAsyncWriter","FuturesBytesStream","Lister","Metadata","Operator","OperatorBuilder","OperatorInfo","Reader","StdBytesIterator","StdReader","Writer"],"trait":["Builder"],"type":["Result"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.BlockingReader.html b/docs/rust/opendal/struct.BlockingReader.html
index 5fab8c370e..1f9b839bef 100644
--- a/docs/rust/opendal/struct.BlockingReader.html
+++ b/docs/rust/opendal/struct.BlockingReader.html
@@ -1,7 +1,7 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingReader is designed to read data from given path in an blocking manner."><title>BlockingReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font"  [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="BlockingReader is designed to read data from given path in an blocking manner."><title>BlockingReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font"  [...]
     <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 manner.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingReader" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#35-159">source</a><a href="#impl-BlockingReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingReader.html" [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BlockingReader" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#35-158">source</a><a href="#impl-BlockingReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.BlockingReader.html" [...]
 <p>This operation is zero-copy, which means it keeps the [<code>Bytes</code>] returned by underlying
 storage services without any extra copy or intensive memory allocations.</p>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
@@ -18,10 +18,9 @@ storage services without any extra copy or intensive memory allocations.</p>
 <ul>
 <li>Returning length smaller than range means we have reached the end of file.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_std_io_read" class="method"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#148-151">source</a><h4 class="code-header">pub fn <a href="#method.into_std_io_read" class="fn">into_std_io_read</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a class="primitive"  [...]
-[<code>futures::AsyncSeek</code>] and [<code>futures::AsyncBufRead</code>].</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_std_bytes_iterator" class="method"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#156-158">source</a><h4 class="code-header">pub fn <a href="#method.into_std_bytes_iterator" class="fn">into_std_bytes_iterator</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt; [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_std_read" class="method"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#148-151">source</a><h4 class="code-header">pub fn <a href="#method.into_std_read" class="fn">into_std_read</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a class="primitive" href="htt [...]
 [<code>futures::AsyncSeek</code>] and [<code>futures::AsyncBufRead</code>].</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_bytes_iterator" class="method"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#155-157">source</a><h4 class="code-header">pub fn <a href="#method.into_bytes_iterator" class="fn">into_bytes_iterator</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a class="pr [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-BlockingReader" class="impl"><a href="#impl-RefUnwindSafe-for-BlockingReader" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.htm [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
@@ -125,4 +124,4 @@ builds.</div></details></div></details><details class="toggle implementors-toggl
 [<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Within%3CG2%3E-for-G1" class="impl"><a href="#impl-Within%3CG2%3E-for-G1" class="anchor">§</a><h3 class="code-header">impl&lt;G1, G2&gt; Within&lt;G2&gt; for G1<div class="where">where
     G2: Contains&lt;G1&gt;,</div></h3></section></summary><div class="impl-items"><section id="method.is_within" class="method trait-impl"><a href="#method.is_within" class="anchor">§</a><h4 class="code-header">fn <a class="fn">is_within</a>(&amp;self, b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;G2</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></div></details>< [...]
     G2: Contains&lt;G1&gt;,</div></h3></section></summary><div class="impl-items"><section id="method.is_within-1" class="method trait-impl"><a href="#method.is_within-1" class="anchor">§</a><h4 class="code-header">fn <a class="fn">is_within</a>(&amp;self, b: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;G2</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.bool.html">bool</a></h4></section></div></detai [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section></div><script type="text/json" id="notable-traits-data">{"StdBytesIterator":"<h3>Notable traits for <code><a class=\"struct\" href=\"struct.StdBytesIterator.html\" title=\"struct opendal::StdBytesIterator\">StdBytesIterator</a></code></h3><pre><code><div class=\"where\">impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/ [...]
\ No newline at end of file
+    T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>,</div></h3></section></div><script type="text/json" id="notable-traits-data">{"StdBytesIterator":"<h3>Notable traits for <code><a class=\"struct\" href=\"struct.StdBytesIterator.html\" title=\"struct opendal::StdBytesIterator\">StdBytesIterator</a></code></h3><pre><code><div class=\"where\">impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/ [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.FuturesIoAsyncReader.html b/docs/rust/opendal/struct.FuturesAsyncReader.html
similarity index 90%
rename from docs/rust/opendal/struct.FuturesIoAsyncReader.html
rename to docs/rust/opendal/struct.FuturesAsyncReader.html
index 116d721145..a67b749bc0 100644
--- a/docs/rust/opendal/struct.FuturesIoAsyncReader.html
+++ b/docs/rust/opendal/struct.FuturesAsyncReader.html
@@ -1,14 +1,14 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FuturesAsyncReader is the adapter of `AsyncRead`, `AsyncBufRead` and `AsyncSeek` for `Reader`."><title>FuturesIoAsyncReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link re [...]
-    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FuturesAsyncReader is the adapter of `AsyncRead`, `AsyncBufRead` and `AsyncSeek` for `Reader`."><title>FuturesAsyncReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel= [...]
+    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 for <a href="struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a>.</p>
 <p>Users can use this adapter in cases where they need to use [<code>AsyncRead</code>] related trait.</p>
 <p>FuturesAsyncReader also implements <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin"><code>Unpin</code></a>, <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send"><code>Send</code></a> and <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync"><code>Sync</code></a></p>
-</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncBufRead-for-FuturesIoAsyncReader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#327-370">source</a><a href="#impl-AsyncBufRead-for-FuturesIoAsyncReader" class="anchor">§</a><h3 class="code-he [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncBufRead-for-FuturesAsyncReader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#326-369">source</a><a href="#impl-AsyncBufRead-for-FuturesAsyncReader" class="anchor">§</a><h3 class="code-header [...]
     self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;&amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to return the contents of the internal buffer, filli [...]
-from the inner reader if it is empty. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.consume" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#360-369">source</a><a href="#method.consume" class="anchor">§</a><h4 class="code-header">fn <a class="fn">consume</a>(self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt [...]
-so they should no longer be returned in calls to <a href="AsyncRead::poll_read"><code>poll_read</code></a>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncRead-for-FuturesIoAsyncReader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#372-384">source</a><a href="#impl-AsyncRead-for-FuturesIoAsyncReader" class="anchor">§</a><h3 class="code-header">impl AsyncRead for <a class="s [...]
+from the inner reader if it is empty. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.consume" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#359-368">source</a><a href="#method.consume" class="anchor">§</a><h4 class="code-header">fn <a class="fn">consume</a>(self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt [...]
+so they should no longer be returned in calls to <a href="AsyncRead::poll_read"><code>poll_read</code></a>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncRead-for-FuturesAsyncReader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#371-383">source</a><a href="#impl-AsyncRead-for-FuturesAsyncReader" class="anchor">§</a><h3 class="code-header">impl AsyncRead for <a class="struc [...]
     self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;mut [<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]
@@ -17,11 +17,11 @@ so they should no longer be returned in calls to <a href="AsyncRead::poll_read">
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     bufs: &amp;mut [<a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.IoSliceMut.html" title="struct std::io::IoSliceMut">IoSliceMut</a>&lt;'_&gt;]
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::erro [...]
-IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncSeek-for-FuturesIoAsyncReader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#386-417">source</a><a href="#impl-AsyncSeek-for-FuturesIoAsyncReader" class="anchor">§</a><h3 class="code-header">impl AsyncSeek for <a class="struct" href="struct.FuturesIoAsyncReader.html" title="struct opendal::FuturesIoAsyncReader">F [...]
+IO operations. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncSeek-for-FuturesAsyncReader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#385-416">source</a><a href="#impl-AsyncSeek-for-FuturesAsyncReader" class="anchor">§</a><h3 class="code-header">impl AsyncSeek for <a class="struct" href="struct.FuturesAsyncReader.html" title="struct opendal::FuturesAsyncReader">FuturesAs [...]
     self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     _: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     pos: <a class="enum" href="https://doc.rust-lang.org/nightly/std/io/enum.SeekFrom.html" title="enum std::io::SeekFrom">SeekFrom</a>
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to seek to an offset, in bytes, in a stream. <a>Read more [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="type" href="https://doc.rust-lang.org/nightly/std/io/error/type.Result.html" title="type std::io::error::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to seek to an offset, in bytes, in a stream. <a>Read more [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     R: AsyncBufRead + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fill_buf" class="method trait-impl"><a href="#method.fill_buf" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fill_buf</a>(&amp;mut self) -&gt; FillBuf&lt;'_, Self&gt;<div class="where">where
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</div></h4></section></summary><div class='docblock'>Creates a future which will wait for a non-empty buffer to be available from this I/O
diff --git a/docs/rust/opendal/struct.FuturesIoAsyncWriter.html b/docs/rust/opendal/struct.FuturesAsyncWriter.html
similarity index 88%
rename from docs/rust/opendal/struct.FuturesIoAsyncWriter.html
rename to docs/rust/opendal/struct.FuturesAsyncWriter.html
index a10c625d41..ed54df313c 100644
--- a/docs/rust/opendal/struct.FuturesIoAsyncWriter.html
+++ b/docs/rust/opendal/struct.FuturesAsyncWriter.html
@@ -1,11 +1,11 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FuturesIoAsyncWriter is the adapter of `AsyncWrite` for `Writer`."><title>FuturesIoAsyncWriter in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="f [...]
-    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FuturesIoAsyncWriter is the adapter of `AsyncWrite` for `Writer`."><title>FuturesAsyncWriter in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="fon [...]
+    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 <p>Users can use this adapter in cases where they need to use [<code>AsyncWrite</code>] related trait.</p>
 <p>FuturesIoAsyncWriter also implements <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin"><code>Unpin</code></a>, <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send"><code>Send</code></a> and <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync"><code>Sync</code></a></p>
 <h2 id="todo"><a href="#todo">TODO</a></h2>
 <p>We should insert checks if the input slice changed after future created.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FuturesIoAsyncWriter" class="impl"><a class="src rightside" href="../src/opendal/types/writer.rs.html#223-232">source</a><a href="#impl-FuturesIoAsyncWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.FuturesIoAsyncWr [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-FuturesIoAsyncWriter" class="impl"><a class="src rightside" href="../src/opendal/types/writer.rs.html#234-346">source</a><a href="#impl-AsyncWrite-for-FuturesIoAsyncWriter" class="anchor">§</a> [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-FuturesAsyncWriter" class="impl"><a class="src rightside" href="../src/opendal/types/writer.rs.html#223-232">source</a><a href="#impl-FuturesAsyncWriter" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.FuturesAsyncWriter.h [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-AsyncWrite-for-FuturesAsyncWriter" class="impl"><a class="src rightside" href="../src/opendal/types/writer.rs.html#234-346">source</a><a href="#impl-AsyncWrite-for-FuturesAsyncWriter" class="anchor">§</a><h3  [...]
     self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     buf: &amp;[<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a>]
@@ -15,7 +15,7 @@ their destination. <a>Read more</a></div></details><details class="toggle method
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;,
     bufs: &amp;[<a class="struct" href="https://doc.rust-lang.org/nightly/std/io/struct.IoSlice.html" title="struct std::io::IoSlice">IoSlice</a>&lt;'_&gt;]
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.usize.html">usize</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::erro [...]
-IO operations. <a>Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-FuturesIoAsyncWriter" class="impl"><a href="#impl-RefUnwindSafe-for-FuturesIoAsyncWriter" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/nightly/cor [...]
+IO operations. <a>Read more</a></div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-FuturesAsyncWriter" class="impl"><a href="#impl-RefUnwindSafe-for-FuturesAsyncWriter" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/pa [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     W: AsyncWrite + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.flush" class="method trait-impl"><a href="#method.flush" class="anchor">§</a><h4 class="code-header">fn <a class="fn">flush</a>(&amp;mut self) -&gt; Flush&lt;'_, Self&gt;<div class="where">where
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a>,</div></h4></section></summary><div class='docblock'>Creates a future which will entirely flush this <code>AsyncWrite</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.close" class="method trait-impl"><a href="#method.close" class="anchor">§</a><h4 class="code-header">fn <a class="fn">clo [...]
diff --git a/docs/rust/opendal/struct.FuturesBytesStream.html b/docs/rust/opendal/struct.FuturesBytesStream.html
index dd8ec94356..9ce002de32 100644
--- a/docs/rust/opendal/struct.FuturesBytesStream.html
+++ b/docs/rust/opendal/struct.FuturesBytesStream.html
@@ -1,8 +1,8 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="FuturesStream is the adapter of `Stream` for `Reader`."><title>FuturesBytesStream in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cr [...]
-    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
+    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 <p>Users can use this adapter in cases where they need to use [<code>Stream</code>] trait.</p>
 <p>FuturesStream also implements <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin"><code>Unpin</code></a>, <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send"><code>Send</code></a> and <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync"><code>Sync</code></a>.</p>
-</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Stream-for-FuturesBytesStream" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#475-512">source</a><a href="#impl-Stream-for-FuturesBytesStream" class="anchor">§</a><h3 class="code-header">impl Strea [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Stream-for-FuturesBytesStream" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#474-511">source</a><a href="#impl-Stream-for-FuturesBytesStream" class="anchor">§</a><h3 class="code-header">impl Strea [...]
     self: <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&amp;mut Self</a>&gt;,
     cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/nightly/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;<a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::Item&gt;&gt;</h4></section></summary><div class='docblock'>Attempt to pull out the next value of this stream, registering the
diff --git a/docs/rust/opendal/struct.Reader.html b/docs/rust/opendal/struct.Reader.html
index 181fa337c5..c6dc224bb8 100644
--- a/docs/rust/opendal/struct.Reader.html
+++ b/docs/rust/opendal/struct.Reader.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reader is designed to read data from given path in an asynchronous manner."><title>Reader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/w [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Reader is designed to read data from given path in an asynchronous manner."><title>Reader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/w [...]
     <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 manner.</p>
 <h2 id="usage"><a href="#usage">Usage</a></h2>
@@ -6,7 +6,7 @@ manner.</p>
 undefined behavior to use <code>Reader</code> in different ways.</p>
 <h3 id="direct"><a href="#direct">Direct</a></h3>
 <p><a href="struct.Reader.html" title="struct opendal::Reader"><code>Reader</code></a> provides public API including <a href="struct.Reader.html#method.read" title="method opendal::Reader::read"><code>Reader::read</code></a>, [<code>Reader:read_range</code>], and [<code>Reader::read_to_end</code>]. You can use those APIs directly without extra copy.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Reader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#47-187">source</a><a href="#impl-Reader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Reader.html" title="struct opendal::Reader">R [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Reader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#47-186">source</a><a href="#impl-Reader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Reader.html" title="struct opendal::Reader">R [...]
 <p>This operation is zero-copy, which means it keeps the [<code>Bytes</code>] returned by underlying
 storage services without any extra copy or intensive memory allocations.</p>
 <h5 id="notes"><a href="#notes">Notes</a></h5>
@@ -34,13 +34,9 @@ any extra copy.</p>
     &amp;self,
     range: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/ops/range/trait.RangeBounds.html" title="trait core::ops::range::RangeBounds">RangeBounds</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>&gt;
 ) -&gt; impl Stream&lt;Item = <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;<a class="struct" href="struct.Buffer.html" title="struct opendal::Buffer">Buffer</a>&gt;&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> + <a class="trait" href="raw/trait.MaybeSend.html" title="trait opendal::raw::MaybeSend">MaybeSend</a> + 'static</h4></section></summary><div class="doc [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_io_async_read" class="method"><a class="src rightside" href="../src/opendal/types/reader.rs.html#177-179">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_io_async_read" class="fn">into_futures_io_async_read</a>(
-    self,
-    range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u64.html">u64</a>&gt;
-) -&gt; <a class="struct" href="struct.FuturesIoAsyncReader.html" title="struct opendal::FuturesIoAsyncReader">FuturesIoAsyncReader</a></h4></section></summary><div class="docblock"><p>Convert reader into <a href="struct.FuturesIoAsyncReader.html" title="struct opendal::FuturesIoAsyncReader"><code>FuturesIoAsyncReader</code></a> which implements [<code>futures::AsyncRead</code>],
-[<code>futures::AsyncSeek</code>] and [<code>futures::AsyncBufRead</code>].</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_bytes_stream" class="method"><a class="src rightside" href="../src/opendal/types/reader.rs.html#184-186">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_bytes_stream" class="fn">into_futures_bytes_stream</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a  [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_async_read" class="method"><a class="src rightside" href="../src/opendal/types/reader.rs.html#177-179">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_async_read" class="fn">into_futures_async_read</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a class= [...]
 [<code>futures::AsyncSeek</code>] and [<code>futures::AsyncBufRead</code>].</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_bytes_stream" class="method"><a class="src rightside" href="../src/opendal/types/reader.rs.html#183-185">source</a><h4 class="code-header">pub fn <a href="#method.into_bytes_stream" class="fn">into_bytes_stream</a>(self, range: <a class="struct" href="https://doc.rust-lang.org/nightly/core/ops/range/struct.Range.html" title="struct core::ops::range::Range">Range</a>&lt;<a class="primitive" href=" [...]
 </div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Reader" class="impl"><a class="src rightside" href="../src/opendal/types/reader.rs.html#41">source</a><a href="#impl-Clone-for-Reader" class="anchor">§</a><h3 class="code-header">impl <a class="trai [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/docs/rust/opendal/struct.StdBytesIterator.html b/docs/rust/opendal/struct.StdBytesIterator.html
index 896444583e..09213d22fa 100644
--- a/docs/rust/opendal/struct.StdBytesIterator.html
+++ b/docs/rust/opendal/struct.StdBytesIterator.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="StdIterator is the adapter of `Iterator` for `BlockingReader`."><title>StdBytesIterator in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/wof [...]
-    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
+    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 <p>Users can use this adapter in cases where they need to use <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> trait.</p>
 <p>StdIterator also implements <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send"><code>Send</code></a> and <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync"><code>Sync</code></a>.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-StdBytesIterator" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#302-321">source</a><a href="#impl-StdBytesIterator" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StdBytesIterato [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Iterator-for-StdBytesIterator" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#323-342">source</a><a href="#impl-Iterator-for-StdBytesIterator" class="anchor">§</a><h3 [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-StdBytesIterator" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#301-320">source</a><a href="#impl-StdBytesIterator" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StdBytesIterato [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Iterator-for-StdBytesIterator" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#322-341">source</a><a href="#impl-Iterator-for-StdBytesIterator" class="anchor">§</a><h3 [...]
     &amp;mut self
 ) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;[Self::<a class="associatedtype" href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html#associatedtype.Item" title="type core::iter::traits::iterator::Iterator::Item">Item</a>; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.array.html">N</a>], <a class="struct" href="https://doc.rust-lang.o [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><span class="item-info"><div class="stab unstable"><span class="emoji">🔬</span><span>This is a nightly-only experimental API. (<code>iter_next_chunk</code>)</span></div></span><div class='docblock'>Advances the iterator and returns an array containing the next <code>N</code> values. <a href="https://doc.rust-lang.org/n [...]
diff --git a/docs/rust/opendal/struct.StdIoReader.html b/docs/rust/opendal/struct.StdReader.html
similarity index 85%
rename from docs/rust/opendal/struct.StdIoReader.html
rename to docs/rust/opendal/struct.StdReader.html
index 3b0900de2e..c6af9c923a 100644
--- a/docs/rust/opendal/struct.StdIoReader.html
+++ b/docs/rust/opendal/struct.StdReader.html
@@ -1,22 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="StdReader is the adapter of `Read`, `Seek` and `BufRead` for `BlockingReader`."><title>StdIoReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" typ [...]
-    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="StdReader is the adapter of `Read`, `Seek` and `BufRead` for `BlockingReader`."><title>StdReader in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type= [...]
+    <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 <p>Users can use this adapter in cases where they need to use <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read"><code>Read</code></a> or <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html" title="trait std::io::BufRead"><code>BufRead</code></a> trait.</p>
 <p>StdReader also implements <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send"><code>Send</code></a> and <a href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html" title="trait core::marker::Sync"><code>Sync</code></a>.</p>
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-StdIoReader" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#189-210">source</a><a href="#impl-StdIoReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StdIoReader.html" title=" [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BufRead-for-StdIoReader" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#212-236">source</a><a href="#impl-BufRead-for-StdIoReader" class="anchor">§</a><h3 class="code [...]
-from the inner reader if it is empty. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#tymethod.fill_buf">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.consume" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#232-235">source</a><a href="#method.consume" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRea [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-StdReader" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#188-209">source</a><a href="#impl-StdReader" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.StdReader.html" title="struct [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-BufRead-for-StdReader" class="impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#211-235">source</a><a href="#impl-BufRead-for-StdReader" class="anchor">§</a><h3 class="code-hea [...]
+from the inner reader if it is empty. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#tymethod.fill_buf">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.consume" class="method trait-impl"><a class="src rightside" href="../src/opendal/types/blocking_reader.rs.html#231-234">source</a><a href="#method.consume" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRea [...]
 so they should no longer be returned in calls to <code>read</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#tymethod.consume">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.has_data_left" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#2257">source</a><a href="#method.has_data_left" class="anchor">§</a><h4 class="code-header">fn <a href="htt [...]
 them to the provided <code>String</code> buffer. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#method.read_line">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.split" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#2484-2486">source</a></span><a href="#method. [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Returns an iterator over the contents of this reader split on the byte
 <code>byte</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#method.split">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.lines" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#2521-2523">source</a></span><a href="#method.lines" class="anchor">§</a><h4 cla [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Returns an iterator over the lines of this reader. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#method.lines">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-StdIoReader" class="impl"><a class [...]
+    Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Returns an iterator over the lines of this reader. <a href="https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html#method.lines">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Read-for-StdReader" class="impl"><a class=" [...]
 how many bytes were read. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#tymethod.read">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_vectored" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.36.0">1.36.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#755">source</a></span><a href="#method.read_vectored" class="anc [...]
 implementation. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.is_read_vectored">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.read_to_end" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/nightly/src/std/io/mod.rs.html#819">source</a></span><a href="#method.read_to_end" class="anchor">§ [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates a “by reference” adaptor for this instance of <code>Read</code>. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.by_ref">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.bytes" class="method trait-impl"><span clas [...]
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Transforms this <code>Read</code> instance to an <a href="https://doc.rust-lang.org/nightly/core/iter/traits/iterator/trait.Iterator.html" title="trait core::iter::traits::iterator::Iterator"><code>Iterator</code></a> over its bytes. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.htm [...]
     R: <a class="trait" href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html" title="trait std::io::Read">Read</a>,
     Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an adapter which will chain this stream with another. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.chain">Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.take" class="method trait-impl"><span class="rightside" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an adapter which will read at most <code>limit</code> bytes from it. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.take">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Seek-for-StdIoReader" [...]
+    Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class='docblock'>Creates an adapter which will read at most <code>limit</code> bytes from it. <a href="https://doc.rust-lang.org/nightly/std/io/trait.Read.html#method.take">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Seek-for-StdReader" c [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
diff --git a/docs/rust/opendal/struct.Writer.html b/docs/rust/opendal/struct.Writer.html
index 09ef0e25ae..a84c8daf5b 100644
--- a/docs/rust/opendal/struct.Writer.html
+++ b/docs/rust/opendal/struct.Writer.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Writer is designed to write data into given path in an asynchronous manner."><title>Writer in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/ [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Writer is designed to write data into given path in an asynchronous manner."><title>Writer in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/ [...]
     <main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><div id="sidebar-button" tabindex="-1"><a href="../opendal/all.html" title="show sidebar"></a></div><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../help.html" title="help">?</a></div><div id="se [...]
 manner.</p>
 <h3 id="notes"><a href="#notes">Notes</a></h3>
@@ -63,7 +63,7 @@ aborted, otherwise an unexpected error could be returned.</p>
 <h6 id="notes-3"><a href="#notes-3">Notes</a></h6>
 <p>Close should only be called when the writer is not closed or
 aborted, otherwise an unexpected error could be returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_io_async_write" class="method"><a class="src rightside" href="../src/opendal/types/writer.rs.html#180-182">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_io_async_write" class="fn">into_futures_io_async_write</a>(self) -&gt; <a class="struct" href="struct.FuturesIoAsyncWriter.html" title="struct opendal::FuturesIoAsyncWriter">FuturesIoAsyncWriter</a></h4></section> [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.into_futures_async_write" class="method"><a class="src rightside" href="../src/opendal/types/writer.rs.html#180-182">source</a><h4 class="code-header">pub fn <a href="#method.into_futures_async_write" class="fn">into_futures_async_write</a>(self) -&gt; <a class="struct" href="struct.FuturesAsyncWriter.html" title="struct opendal::FuturesAsyncWriter">FuturesAsyncWriter</a></h4></section></summary><div  [...]
 </div></details></div></details></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-Writer" class="impl"><a href="#impl-RefUnwindSafe-for-Writer" class="anchor">§</a><h3 class="code-header">impl !<a class="trait" href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait  [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#141">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
diff --git a/docs/rust/opendal/types/blocking_reader/into_std_read/struct.StdIoReader.html b/docs/rust/opendal/types/blocking_reader/into_std_read/struct.StdIoReader.html
deleted file mode 100644
index 29c51cd74d..0000000000
--- a/docs/rust/opendal/types/blocking_reader/into_std_read/struct.StdIoReader.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../../opendal/struct.StdIoReader.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../../opendal/struct.StdIoReader.html">../../../../opendal/struct.StdIoReader.html</a>...</p>
-    <script>location.replace("../../../../opendal/struct.StdIoReader.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/types/blocking_reader/into_std_read/struct.StdReader.html b/docs/rust/opendal/types/blocking_reader/into_std_read/struct.StdReader.html
new file mode 100644
index 0000000000..3e89910fae
--- /dev/null
+++ b/docs/rust/opendal/types/blocking_reader/into_std_read/struct.StdReader.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../../../opendal/struct.StdReader.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../../../opendal/struct.StdReader.html">../../../../opendal/struct.StdReader.html</a>...</p>
+    <script>location.replace("../../../../opendal/struct.StdReader.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/types/reader/into_futures_async_read/struct.FuturesIoAsyncReader.html b/docs/rust/opendal/types/reader/into_futures_async_read/struct.FuturesAsyncReader.html
similarity index 59%
rename from docs/rust/opendal/types/reader/into_futures_async_read/struct.FuturesIoAsyncReader.html
rename to docs/rust/opendal/types/reader/into_futures_async_read/struct.FuturesAsyncReader.html
index c9453d474c..fcc56723ad 100644
--- a/docs/rust/opendal/types/reader/into_futures_async_read/struct.FuturesIoAsyncReader.html
+++ b/docs/rust/opendal/types/reader/into_futures_async_read/struct.FuturesAsyncReader.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta http-equiv="refresh" content="0;URL=../../../../opendal/struct.FuturesIoAsyncReader.html">
+    <meta http-equiv="refresh" content="0;URL=../../../../opendal/struct.FuturesAsyncReader.html">
     <title>Redirection</title>
 </head>
 <body>
-    <p>Redirecting to <a href="../../../../opendal/struct.FuturesIoAsyncReader.html">../../../../opendal/struct.FuturesIoAsyncReader.html</a>...</p>
-    <script>location.replace("../../../../opendal/struct.FuturesIoAsyncReader.html" + location.search + location.hash);</script>
+    <p>Redirecting to <a href="../../../../opendal/struct.FuturesAsyncReader.html">../../../../opendal/struct.FuturesAsyncReader.html</a>...</p>
+    <script>location.replace("../../../../opendal/struct.FuturesAsyncReader.html" + location.search + location.hash);</script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/opendal/types/writer/into_futures_async_write/struct.FuturesIoAsyncWriter.html b/docs/rust/opendal/types/writer/into_futures_async_write/struct.FuturesAsyncWriter.html
similarity index 59%
rename from docs/rust/opendal/types/writer/into_futures_async_write/struct.FuturesIoAsyncWriter.html
rename to docs/rust/opendal/types/writer/into_futures_async_write/struct.FuturesAsyncWriter.html
index 0951c0a8e9..02f0bcaf6b 100644
--- a/docs/rust/opendal/types/writer/into_futures_async_write/struct.FuturesIoAsyncWriter.html
+++ b/docs/rust/opendal/types/writer/into_futures_async_write/struct.FuturesAsyncWriter.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta http-equiv="refresh" content="0;URL=../../../../opendal/struct.FuturesIoAsyncWriter.html">
+    <meta http-equiv="refresh" content="0;URL=../../../../opendal/struct.FuturesAsyncWriter.html">
     <title>Redirection</title>
 </head>
 <body>
-    <p>Redirecting to <a href="../../../../opendal/struct.FuturesIoAsyncWriter.html">../../../../opendal/struct.FuturesIoAsyncWriter.html</a>...</p>
-    <script>location.replace("../../../../opendal/struct.FuturesIoAsyncWriter.html" + location.search + location.hash);</script>
+    <p>Redirecting to <a href="../../../../opendal/struct.FuturesAsyncWriter.html">../../../../opendal/struct.FuturesAsyncWriter.html</a>...</p>
+    <script>location.replace("../../../../opendal/struct.FuturesAsyncWriter.html" + location.search + location.hash);</script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index 428a1b416d..48b030db8b 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = new Map(JSON.parse('[\
-["opendal",{"doc":"Apache OpenDAL™ is a data access layer that allows users …","t":"RPPPPPPPFFFFFKPPFPPPPPPPPPPPPPPPPPPPFGPFGPPPPPPFFFPPPPPPPPPPPPPPPPPPFPPFGPPPPPPPPPPFFFPPPPPPFPPIPPTGPPPPFFPPPPPPPPPPPPPFPNNNOOONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNONNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNN [...]
+["opendal",{"doc":"Apache OpenDAL™ is a data access layer that allows users …","t":"RPPPPPPPFFFFFKPPFPPPPPPPPPPPPPPPPPPPFGPFGPPPPPPFFFPPPPPPPPPPPPPPPPPPFPPFGPPPPPPPPPPFFFPPPPPPFPPIPPTGPPPPFFPPPPPPPPPPPPPFPNNNOOONNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNONNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNN [...]
 ]'));
 if (typeof exports !== 'undefined') exports.searchIndex = searchIndex;
 else if (window.initSearch) window.initSearch(searchIndex);
diff --git a/docs/rust/src/opendal/types/blocking_reader.rs.html b/docs/rust/src/opendal/types/blocking_reader.rs.html
index 1403d6c805..054a8d4bc5 100644
--- a/docs/rust/src/opendal/types/blocking_reader.rs.html
+++ b/docs/rust/src/opendal/types/blocking_reader.rs.html
@@ -342,7 +342,6 @@
 <a href="#340" id="340">340</a>
 <a href="#341" id="341">341</a>
 <a href="#342" id="342">342</a>
-<a href="#343" id="343">343</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -487,18 +486,17 @@
         }
     }
 
-    <span class="doccomment">/// Convert reader into [`FuturesIoAsyncReader`] which implements [`futures::AsyncRead`],
+    <span class="doccomment">/// Convert reader into [`StdReader`] which implements [`futures::AsyncRead`],
     /// [`futures::AsyncSeek`] and [`futures::AsyncBufRead`].
     </span><span class="attr">#[inline]
-    </span><span class="kw">pub fn </span>into_std_io_read(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; StdIoReader {
+    </span><span class="kw">pub fn </span>into_std_read(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; StdReader {
         <span class="comment">// TODO: the capacity should be decided by services.
-        </span>StdIoReader::new(<span class="self">self</span>.inner, range)
+        </span>StdReader::new(<span class="self">self</span>.inner, range)
     }
 
-    <span class="doccomment">/// Convert reader into [`FuturesBytesStream`] which implements [`futures::Stream`],
-    /// [`futures::AsyncSeek`] and [`futures::AsyncBufRead`].
+    <span class="doccomment">/// Convert reader into [`StdBytesIterator`] which implements [`Iterator`].
     </span><span class="attr">#[inline]
-    </span><span class="kw">pub fn </span>into_std_bytes_iterator(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; StdBytesIterator {
+    </span><span class="kw">pub fn </span>into_bytes_iterator(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; StdBytesIterator {
         StdBytesIterator::new(<span class="self">self</span>.inner, range)
     }
 }
@@ -521,7 +519,7 @@
     /// Users can use this adapter in cases where they need to use [`Read`] or [`BufRead`] trait.
     ///
     /// StdReader also implements [`Send`] and [`Sync`].
-    </span><span class="kw">pub struct </span>StdIoReader {
+    </span><span class="kw">pub struct </span>StdReader {
         inner: oio::BlockingReader,
         offset: u64,
         size: u64,
@@ -531,11 +529,11 @@
         buf: Buffer,
     }
 
-    <span class="kw">impl </span>StdIoReader {
+    <span class="kw">impl </span>StdReader {
         <span class="doccomment">/// NOTE: don't allow users to create StdReader directly.
         </span><span class="attr">#[inline]
         </span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>new(r: oio::BlockingReader, range: Range&lt;u64&gt;) -&gt; <span class="self">Self </span>{
-            StdIoReader {
+            StdReader {
                 inner: r,
                 offset: range.start,
                 size: range.end - range.start,
@@ -554,7 +552,7 @@
         </span>}
     }
 
-    <span class="kw">impl </span>BufRead <span class="kw">for </span>StdIoReader {
+    <span class="kw">impl </span>BufRead <span class="kw">for </span>StdReader {
         <span class="kw">fn </span>fill_buf(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; io::Result&lt;<span class="kw-2">&amp;</span>[u8]&gt; {
             <span class="kw">if </span><span class="self">self</span>.buf.has_remaining() {
                 <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="self">self</span>.buf.chunk());
@@ -580,7 +578,7 @@
         }
     }
 
-    <span class="kw">impl </span>Read <span class="kw">for </span>StdIoReader {
+    <span class="kw">impl </span>Read <span class="kw">for </span>StdReader {
         <span class="attr">#[inline]
         </span><span class="kw">fn </span>read(<span class="kw-2">&amp;mut </span><span class="self">self</span>, buf: <span class="kw-2">&amp;mut </span>[u8]) -&gt; io::Result&lt;usize&gt; {
             <span class="kw">let </span>bs = <span class="self">self</span>.fill_buf()<span class="question-mark">?</span>;
@@ -591,7 +589,7 @@
         }
     }
 
-    <span class="kw">impl </span>Seek <span class="kw">for </span>StdIoReader {
+    <span class="kw">impl </span>Seek <span class="kw">for </span>StdReader {
         <span class="attr">#[inline]
         </span><span class="kw">fn </span>seek(<span class="kw-2">&amp;mut </span><span class="self">self</span>, pos: SeekFrom) -&gt; io::Result&lt;u64&gt; {
             <span class="kw">let </span>new_pos = <span class="kw">match </span>pos {
diff --git a/docs/rust/src/opendal/types/mod.rs.html b/docs/rust/src/opendal/types/mod.rs.html
index d1bc8fe9cd..482379c390 100644
--- a/docs/rust/src/opendal/types/mod.rs.html
+++ b/docs/rust/src/opendal/types/mod.rs.html
@@ -101,17 +101,17 @@
 <span class="kw">pub use </span>metadata::Metakey;
 
 <span class="kw">mod </span>reader;
-<span class="kw">pub use </span>reader::into_futures_async_read::FuturesIoAsyncReader;
+<span class="kw">pub use </span>reader::into_futures_async_read::FuturesAsyncReader;
 <span class="kw">pub use </span>reader::into_futures_stream::FuturesBytesStream;
 <span class="kw">pub use </span>reader::Reader;
 
 <span class="kw">mod </span>blocking_reader;
 <span class="kw">pub use </span>blocking_reader::into_std_iterator::StdBytesIterator;
-<span class="kw">pub use </span>blocking_reader::into_std_read::StdIoReader;
+<span class="kw">pub use </span>blocking_reader::into_std_read::StdReader;
 <span class="kw">pub use </span>blocking_reader::BlockingReader;
 
 <span class="kw">mod </span>writer;
-<span class="kw">pub use </span>writer::into_futures_async_write::FuturesIoAsyncWriter;
+<span class="kw">pub use </span>writer::into_futures_async_write::FuturesAsyncWriter;
 <span class="kw">pub use </span>writer::BlockingWriter;
 <span class="kw">pub use </span>writer::Writer;
 
diff --git a/docs/rust/src/opendal/types/reader.rs.html b/docs/rust/src/opendal/types/reader.rs.html
index 9e24241863..c6557d4edb 100644
--- a/docs/rust/src/opendal/types/reader.rs.html
+++ b/docs/rust/src/opendal/types/reader.rs.html
@@ -663,7 +663,6 @@
 <a href="#661" id="661">661</a>
 <a href="#662" id="662">662</a>
 <a href="#663" id="663">663</a>
-<a href="#664" id="664">664</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -837,17 +836,16 @@
         stream::iter(futs).buffered(<span class="self">self</span>.options.concurrent())
     }
 
-    <span class="doccomment">/// Convert reader into [`FuturesIoAsyncReader`] which implements [`futures::AsyncRead`],
+    <span class="doccomment">/// Convert reader into [`FuturesAsyncReader`] which implements [`futures::AsyncRead`],
     /// [`futures::AsyncSeek`] and [`futures::AsyncBufRead`].
     </span><span class="attr">#[inline]
-    </span><span class="kw">pub fn </span>into_futures_io_async_read(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; FuturesIoAsyncReader {
-        FuturesIoAsyncReader::new(<span class="self">self</span>.inner, <span class="self">self</span>.options.chunk(), range)
+    </span><span class="kw">pub fn </span>into_futures_async_read(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; FuturesAsyncReader {
+        FuturesAsyncReader::new(<span class="self">self</span>.inner, <span class="self">self</span>.options.chunk(), range)
     }
 
-    <span class="doccomment">/// Convert reader into [`FuturesBytesStream`] which implements [`futures::Stream`],
-    /// [`futures::AsyncSeek`] and [`futures::AsyncBufRead`].
+    <span class="doccomment">/// Convert reader into [`FuturesBytesStream`] which implements [`futures::Stream`].
     </span><span class="attr">#[inline]
-    </span><span class="kw">pub fn </span>into_futures_bytes_stream(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; FuturesBytesStream {
+    </span><span class="kw">pub fn </span>into_bytes_stream(<span class="self">self</span>, range: Range&lt;u64&gt;) -&gt; FuturesBytesStream {
         FuturesBytesStream::new(<span class="self">self</span>.inner, <span class="self">self</span>.options.chunk(), range)
     }
 }
@@ -954,7 +952,7 @@
     /// Users can use this adapter in cases where they need to use [`AsyncRead`] related trait.
     ///
     /// FuturesAsyncReader also implements [`Unpin`], [`Send`] and [`Sync`]
-    </span><span class="kw">pub struct </span>FuturesIoAsyncReader {
+    </span><span class="kw">pub struct </span>FuturesAsyncReader {
         state: State,
         offset: u64,
         size: u64,
@@ -974,11 +972,11 @@
     /// FuturesReader only exposes `&amp;mut self` to the outside world, so it's safe to be `Sync`.
     </span><span class="kw">unsafe impl </span>Sync <span class="kw">for </span>State {}
 
-    <span class="kw">impl </span>FuturesIoAsyncReader {
+    <span class="kw">impl </span>FuturesAsyncReader {
         <span class="doccomment">/// NOTE: don't allow users to create FuturesAsyncReader directly.
         </span><span class="attr">#[inline]
         </span><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>new(r: oio::Reader, chunk: <span class="prelude-ty">Option</span>&lt;usize&gt;, range: Range&lt;u64&gt;) -&gt; <span class="self">Self </span>{
-            FuturesIoAsyncReader {
+            FuturesAsyncReader {
                 state: State::Idle(<span class="prelude-val">Some</span>(r)),
                 offset: range.start,
                 size: range.end - range.start,
@@ -990,7 +988,7 @@
         }
     }
 
-    <span class="kw">impl </span>AsyncBufRead <span class="kw">for </span>FuturesIoAsyncReader {
+    <span class="kw">impl </span>AsyncBufRead <span class="kw">for </span>FuturesAsyncReader {
         <span class="kw">fn </span>poll_fill_buf(<span class="self">self</span>: Pin&lt;<span class="kw-2">&amp;mut </span><span class="self">Self</span>&gt;, cx: <span class="kw-2">&amp;mut </span>Context&lt;<span class="lifetime">'_</span>&gt;) -&gt; Poll&lt;io::Result&lt;<span class="kw-2">&amp;</span>[u8]&gt;&gt; {
             <span class="kw">let </span>this = <span class="self">self</span>.get_mut();
             <span class="kw">loop </span>{
@@ -1035,7 +1033,7 @@
         }
     }
 
-    <span class="kw">impl </span>AsyncRead <span class="kw">for </span>FuturesIoAsyncReader {
+    <span class="kw">impl </span>AsyncRead <span class="kw">for </span>FuturesAsyncReader {
         <span class="kw">fn </span>poll_read(
             <span class="kw-2">mut </span><span class="self">self</span>: Pin&lt;<span class="kw-2">&amp;mut </span><span class="self">Self</span>&gt;,
             cx: <span class="kw-2">&amp;mut </span>Context&lt;<span class="lifetime">'_</span>&gt;,
@@ -1049,7 +1047,7 @@
         }
     }
 
-    <span class="kw">impl </span>AsyncSeek <span class="kw">for </span>FuturesIoAsyncReader {
+    <span class="kw">impl </span>AsyncSeek <span class="kw">for </span>FuturesAsyncReader {
         <span class="kw">fn </span>poll_seek(
             <span class="kw-2">mut </span><span class="self">self</span>: Pin&lt;<span class="kw-2">&amp;mut </span><span class="self">Self</span>&gt;,
             <span class="kw">_</span>: <span class="kw-2">&amp;mut </span>Context&lt;<span class="lifetime">'_</span>&gt;,
diff --git a/docs/rust/src/opendal/types/writer.rs.html b/docs/rust/src/opendal/types/writer.rs.html
index 06b7ae9c25..dbf88c473a 100644
--- a/docs/rust/src/opendal/types/writer.rs.html
+++ b/docs/rust/src/opendal/types/writer.rs.html
@@ -631,9 +631,9 @@
         <span class="self">self</span>.inner.close().<span class="kw">await
     </span>}
 
-    <span class="doccomment">/// Convert writer into [`FuturesIoAsyncWriter`] which implements [`futures::AsyncWrite`],
-    </span><span class="kw">pub fn </span>into_futures_io_async_write(<span class="self">self</span>) -&gt; FuturesIoAsyncWriter {
-        FuturesIoAsyncWriter::new(<span class="self">self</span>.inner)
+    <span class="doccomment">/// Convert writer into [`FuturesAsyncWriter`] which implements [`futures::AsyncWrite`],
+    </span><span class="kw">pub fn </span>into_futures_async_write(<span class="self">self</span>) -&gt; FuturesAsyncWriter {
+        FuturesAsyncWriter::new(<span class="self">self</span>.inner)
     }
 }
 
@@ -659,7 +659,7 @@
     /// # TODO
     ///
     /// We should insert checks if the input slice changed after future created.
-    </span><span class="kw">pub struct </span>FuturesIoAsyncWriter {
+    </span><span class="kw">pub struct </span>FuturesAsyncWriter {
         state: State,
         buf: oio::FlexBuf,
     }
@@ -675,18 +675,18 @@
     /// FuturesReader only exposes `&amp;mut self` to the outside world, so it's safe to be `Sync`.
     </span><span class="kw">unsafe impl </span>Sync <span class="kw">for </span>State {}
 
-    <span class="kw">impl </span>FuturesIoAsyncWriter {
+    <span class="kw">impl </span>FuturesAsyncWriter {
         <span class="doccomment">/// NOTE: don't allow users to create FuturesIoAsyncWriter directly.
         </span><span class="attr">#[inline]
         </span><span class="kw">pub fn </span>new(r: oio::Writer) -&gt; <span class="self">Self </span>{
-            FuturesIoAsyncWriter {
+            FuturesAsyncWriter {
                 state: State::Idle(<span class="prelude-val">Some</span>(r)),
                 buf: oio::FlexBuf::new(<span class="number">256 </span>* <span class="number">1024</span>),
             }
         }
     }
 
-    <span class="kw">impl </span>AsyncWrite <span class="kw">for </span>FuturesIoAsyncWriter {
+    <span class="kw">impl </span>AsyncWrite <span class="kw">for </span>FuturesAsyncWriter {
         <span class="kw">fn </span>poll_write(
             <span class="self">self</span>: Pin&lt;<span class="kw-2">&amp;mut </span><span class="self">Self</span>&gt;,
             cx: <span class="kw-2">&amp;mut </span>Context&lt;<span class="lifetime">'_</span>&gt;,
diff --git a/docs/rust/trait.impl/core/marker/trait.Freeze.js b/docs/rust/trait.impl/core/marker/trait.Freeze.js
index 49c8604110..73cd33783a 100644
--- a/docs/rust/trait.impl/core/marker/trait.Freeze.js
+++ b/docs/rust/trait.impl/core/marker/trait.Freeze.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl !Freeze for <a class=\"struct\" href=\"opendal/struct.Buffer.html\" title=\"struct opendal::Buffer\">Buffer</a>",1,["opendal::types::buffer::Buffer"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Fre [...]
+"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl !Freeze for <a class=\"struct\" href=\"opendal/struct.Buffer.html\" title=\"struct opendal::Buffer\">Buffer</a>",1,["opendal::types::buffer::Buffer"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Fre [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Send.js b/docs/rust/trait.impl/core/marker/trait.Send.js
index 29e6a0f890..818eb91419 100644
--- a/docs/rust/trait.impl/core/marker/trait.Send.js
+++ b/docs/rust/trait.impl/core/marker/trait.Send.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Buffer [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Buffer [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Sync.js b/docs/rust/trait.impl/core/marker/trait.Sync.js
index bf79589c27..e0287da20a 100644
--- a/docs/rust/trait.impl/core/marker/trait.Sync.js
+++ b/docs/rust/trait.impl/core/marker/trait.Sync.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Buffer [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Buffer [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/marker/trait.Unpin.js b/docs/rust/trait.impl/core/marker/trait.Unpin.js
index d9e8042a52..7b8286084f 100644
--- a/docs/rust/trait.impl/core/marker/trait.Unpin.js
+++ b/docs/rust/trait.impl/core/marker/trait.Unpin.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct. [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct. [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 11a01077d1..0cf18af21c 100644
--- a/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic: [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
index 6b4e78c8dc..cefb1fe5eb 100644
--- a/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncBufRead.js b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncBufRead.js
index 3dfa667cb9..48278e83e8 100644
--- a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncBufRead.js
+++ b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncBufRead.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncBufRead for <a class=\"struct\" href=\"opendal/struct.FuturesIoAsyncReader.html\" title=\"struct opendal::FuturesIoAsyncReader\">FuturesIoAsyncReader</a>"]]
+"opendal":[["impl AsyncBufRead for <a class=\"struct\" href=\"opendal/struct.FuturesAsyncReader.html\" title=\"struct opendal::FuturesAsyncReader\">FuturesAsyncReader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncRead.js b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncRead.js
index 0632724214..39de20f15c 100644
--- a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncRead.js
+++ b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncRead.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncRead for <a class=\"struct\" href=\"opendal/struct.FuturesIoAsyncReader.html\" title=\"struct opendal::FuturesIoAsyncReader\">FuturesIoAsyncReader</a>"]]
+"opendal":[["impl AsyncRead for <a class=\"struct\" href=\"opendal/struct.FuturesAsyncReader.html\" title=\"struct opendal::FuturesAsyncReader\">FuturesAsyncReader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncSeek.js b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncSeek.js
index 7ba932645b..d51229477f 100644
--- a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncSeek.js
+++ b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncSeek.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncSeek for <a class=\"struct\" href=\"opendal/struct.FuturesIoAsyncReader.html\" title=\"struct opendal::FuturesIoAsyncReader\">FuturesIoAsyncReader</a>"]]
+"opendal":[["impl AsyncSeek for <a class=\"struct\" href=\"opendal/struct.FuturesAsyncReader.html\" title=\"struct opendal::FuturesAsyncReader\">FuturesAsyncReader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncWrite.js b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncWrite.js
index 2d23b660d5..cda42a32b4 100644
--- a/docs/rust/trait.impl/futures_io/if_std/trait.AsyncWrite.js
+++ b/docs/rust/trait.impl/futures_io/if_std/trait.AsyncWrite.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.FuturesIoAsyncWriter.html\" title=\"struct opendal::FuturesIoAsyncWriter\">FuturesIoAsyncWriter</a>"]]
+"opendal":[["impl AsyncWrite for <a class=\"struct\" href=\"opendal/struct.FuturesAsyncWriter.html\" title=\"struct opendal::FuturesAsyncWriter\">FuturesAsyncWriter</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/std/io/trait.BufRead.js b/docs/rust/trait.impl/std/io/trait.BufRead.js
index d760477640..68876176e0 100644
--- a/docs/rust/trait.impl/std/io/trait.BufRead.js
+++ b/docs/rust/trait.impl/std/io/trait.BufRead.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html\" title=\"trait std::io::BufRead\">BufRead</a> for <a class=\"struct\" href=\"opendal/struct.StdIoReader.html\" title=\"struct opendal::StdIoReader\">StdIoReader</a>"]]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.BufRead.html\" title=\"trait std::io::BufRead\">BufRead</a> for <a class=\"struct\" href=\"opendal/struct.StdReader.html\" title=\"struct opendal::StdReader\">StdReader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/std/io/trait.Read.js b/docs/rust/trait.impl/std/io/trait.Read.js
index c75a02d826..7db247095a 100644
--- a/docs/rust/trait.impl/std/io/trait.Read.js
+++ b/docs/rust/trait.impl/std/io/trait.Read.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"opendal/struct.StdIoReader.html\" title=\"struct opendal::StdIoReader\">StdIoReader</a>"]]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Read.html\" title=\"trait std::io::Read\">Read</a> for <a class=\"struct\" href=\"opendal/struct.StdReader.html\" title=\"struct opendal::StdReader\">StdReader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/trait.impl/std/io/trait.Seek.js b/docs/rust/trait.impl/std/io/trait.Seek.js
index d40bda7d08..b7ecc384ba 100644
--- a/docs/rust/trait.impl/std/io/trait.Seek.js
+++ b/docs/rust/trait.impl/std/io/trait.Seek.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Seek.html\" title=\"trait std::io::Seek\">Seek</a> for <a class=\"struct\" href=\"opendal/struct.StdIoReader.html\" title=\"struct opendal::StdIoReader\">StdIoReader</a>"]]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/std/io/trait.Seek.html\" title=\"trait std::io::Seek\">Seek</a> for <a class=\"struct\" href=\"opendal/struct.StdReader.html\" title=\"struct opendal::StdReader\">StdReader</a>"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/services/atomicserver/index.html b/docs/services/atomicserver/index.html
index bd24695f1a..3e6bd9f1a5 100644
--- a/docs/services/atomicserver/index.html
+++ b/docs/services/atomicserver/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">AtomicServer | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/atomicserver"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azblob/index.html b/docs/services/azblob/index.html
index 59b2856347..b9e8815c81 100644
--- a/docs/services/azblob/index.html
+++ b/docs/services/azblob/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Azblob | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azblob"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -46,6 +46,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azdls/index.html b/docs/services/azdls/index.html
index 999a940859..a88a1a0e4b 100644
--- a/docs/services/azdls/index.html
+++ b/docs/services/azdls/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Azdls | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azdls"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -45,6 +45,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cacache/index.html b/docs/services/cacache/index.html
index 5d9dfff957..bf940a579d 100644
--- a/docs/services/cacache/index.html
+++ b/docs/services/cacache/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Cacache | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cacache"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -37,6 +37,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cos/index.html b/docs/services/cos/index.html
index aa5d5c8c1a..b884d1d0a9 100644
--- a/docs/services/cos/index.html
+++ b/docs/services/cos/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">COS | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cos"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/d1/index.html b/docs/services/d1/index.html
index 77953f3e7d..080356d6ac 100644
--- a/docs/services/d1/index.html
+++ b/docs/services/d1/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">D1 | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/d1"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -42,6 +42,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dashmap/index.html b/docs/services/dashmap/index.html
index 14c3ce985f..1dec3832b4 100644
--- a/docs/services/dashmap/index.html
+++ b/docs/services/dashmap/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">DashMap | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dashmap"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -26,6 +26,6 @@
 <li class="task-list-item"><input type="checkbox" disabled="" checked=""> scan</li>
 <li class="task-list-item"><input type="checkbox" disabled=""> presign</li>
 <li class="task-list-item"><input type="checkbox" disabled=""> blocking</li>
-</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/dashmap.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1 [...]
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/dashmap.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1 [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dropbox/index.html b/docs/services/dropbox/index.html
index bc95f22bed..ab1ae4ede9 100644
--- a/docs/services/dropbox/index.html
+++ b/docs/services/dropbox/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Dropbox | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dropbox"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -55,6 +55,6 @@ for more information.</p>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/etcd/index.html b/docs/services/etcd/index.html
index aed84b2b33..bebe833f8c 100644
--- a/docs/services/etcd/index.html
+++ b/docs/services/etcd/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Etcd | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/etcd"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -43,6 +43,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/foundationdb/index.html b/docs/services/foundationdb/index.html
index 753bc9702f..fb53ca622c 100644
--- a/docs/services/foundationdb/index.html
+++ b/docs/services/foundationdb/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">FoundationDB | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/foundationdb"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -39,6 +39,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/fs/index.html b/docs/services/fs/index.html
index 6e4bd4aedd..29572469f3 100644
--- a/docs/services/fs/index.html
+++ b/docs/services/fs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Fs | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/fs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -39,6 +39,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ftp/index.html b/docs/services/ftp/index.html
index 5e147f706b..c39226b173 100644
--- a/docs/services/ftp/index.html
+++ b/docs/services/ftp/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">FTP | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ftp"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -40,6 +40,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gcs/index.html b/docs/services/gcs/index.html
index 93e9263bf3..251a1c5880 100644
--- a/docs/services/gcs/index.html
+++ b/docs/services/gcs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Gcs | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gcs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -43,6 +43,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gdrive/index.html b/docs/services/gdrive/index.html
index cb6459ba0a..22d9bef4c2 100644
--- a/docs/services/gdrive/index.html
+++ b/docs/services/gdrive/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Gdrive | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gdrive"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -56,6 +56,6 @@ for more information.</p>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ghac/index.html b/docs/services/ghac/index.html
index 298c3ad121..20711011df 100644
--- a/docs/services/ghac/index.html
+++ b/docs/services/ghac/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">GHAC | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ghac"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -55,6 +55,6 @@ be automatically evicted at any time.</p>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gridfs/index.html b/docs/services/gridfs/index.html
index 99a6a36f73..71db91fc16 100644
--- a/docs/services/gridfs/index.html
+++ b/docs/services/gridfs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Gridfs | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gridfs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -40,6 +40,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/hdfs/index.html b/docs/services/hdfs/index.html
index 03364a9050..d550b21d2f 100644
--- a/docs/services/hdfs/index.html
+++ b/docs/services/hdfs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">HDFS | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/hdfs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -91,6 +91,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/http/index.html b/docs/services/http/index.html
index 3270fd392e..5585c8d381 100644
--- a/docs/services/http/index.html
+++ b/docs/services/http/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">HTTP | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/http"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@ HTTP Server like nginx, caddy.</p>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/huggingface/index.html b/docs/services/huggingface/index.html
index 5495726f09..91ca3d3d6c 100644
--- a/docs/services/huggingface/index.html
+++ b/docs/services/huggingface/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Hugging Face | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/huggingface"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -44,6 +44,6 @@ Currently, we only support the <code>model</code> and <code>dataset</code> types
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipfs/index.html b/docs/services/ipfs/index.html
index 2011f5c6c9..33c10bb153 100644
--- a/docs/services/ipfs/index.html
+++ b/docs/services/ipfs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">IPFS | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipfs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -38,6 +38,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipmfs/index.html b/docs/services/ipmfs/index.html
index d2dfe75acb..188bfd8d8c 100644
--- a/docs/services/ipmfs/index.html
+++ b/docs/services/ipmfs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">IPMFS | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipmfs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -26,6 +26,6 @@
 <li class="task-list-item"><input type="checkbox" disabled=""> scan</li>
 <li class="task-list-item"><input type="checkbox" disabled=""> presign</li>
 <li class="task-list-item"><input type="checkbox" disabled=""> blocking</li>
-</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/ipmfs.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2 [...]
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/ipmfs.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2 [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/libsql/index.html b/docs/services/libsql/index.html
index a7e6bb8e30..acdaa767dc 100644
--- a/docs/services/libsql/index.html
+++ b/docs/services/libsql/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">LibSQL | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/libsql"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memcached/index.html b/docs/services/memcached/index.html
index 80a6762f5f..994f7649f5 100644
--- a/docs/services/memcached/index.html
+++ b/docs/services/memcached/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Memcached | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memcached"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta da [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memory/index.html b/docs/services/memory/index.html
index 97feaf9482..c5e1b4014d 100644
--- a/docs/services/memory/index.html
+++ b/docs/services/memory/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Memory | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memory"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -32,6 +32,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/moka/index.html b/docs/services/moka/index.html
index 4d8653542a..7a728b80ae 100644
--- a/docs/services/moka/index.html
+++ b/docs/services/moka/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Moka | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/moka"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/mongodb/index.html b/docs/services/mongodb/index.html
index 6245bfe231..1f54094381 100644
--- a/docs/services/mongodb/index.html
+++ b/docs/services/mongodb/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">MongoDB | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/mongodb"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/mysql/index.html b/docs/services/mysql/index.html
index 1d9e096adf..4a0da11018 100644
--- a/docs/services/mysql/index.html
+++ b/docs/services/mysql/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">MySQL | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/mysql"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -40,6 +40,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/obs/index.html b/docs/services/obs/index.html
index ea58d6dac7..e12b609347 100644
--- a/docs/services/obs/index.html
+++ b/docs/services/obs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Obs | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/obs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/onedrive/index.html b/docs/services/onedrive/index.html
index 9eac3c92dc..b3fc14077d 100644
--- a/docs/services/onedrive/index.html
+++ b/docs/services/onedrive/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">OneDrive | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/onedrive"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -37,6 +37,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/oss/index.html b/docs/services/oss/index.html
index 3ba37b1fb2..86048807f5 100644
--- a/docs/services/oss/index.html
+++ b/docs/services/oss/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">OSS | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/oss"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -46,6 +46,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/persy/index.html b/docs/services/persy/index.html
index f081c5250e..4aa87745ef 100644
--- a/docs/services/persy/index.html
+++ b/docs/services/persy/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Persy | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/persy"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -39,6 +39,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/postgresql/index.html b/docs/services/postgresql/index.html
index 81edb78f11..edcae7ab1f 100644
--- a/docs/services/postgresql/index.html
+++ b/docs/services/postgresql/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">PostgreSQL | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/postgresql"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -40,6 +40,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redb/index.html b/docs/services/redb/index.html
index dc201b0183..81c5de4c7c 100644
--- a/docs/services/redb/index.html
+++ b/docs/services/redb/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Redb | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redb"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -37,6 +37,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redis/index.html b/docs/services/redis/index.html
index 1ea56f7b78..99ba670a9e 100644
--- a/docs/services/redis/index.html
+++ b/docs/services/redis/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Redis | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redis"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -42,6 +42,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/rocksdb/index.html b/docs/services/rocksdb/index.html
index f5c9ba4022..eda4ac50da 100644
--- a/docs/services/rocksdb/index.html
+++ b/docs/services/rocksdb/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">RocksDB | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/rocksdb"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -49,6 +49,6 @@ may be outdated and incompatible.</p>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/s3/index.html b/docs/services/s3/index.html
index aac2fe6c30..781fab3689 100644
--- a/docs/services/s3/index.html
+++ b/docs/services/s3/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">S3 | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/s3"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -190,6 +190,6 @@
 </ul>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="ceph-rados-gateway">Ceph Rados Gateway<a href="#ceph-rados-gateway" class="hash-link" aria-label="Direct link to Ceph Rados Gateway" title="Direct link to Ceph Rados Gateway">​</a></h3>
 <p>Ceph supports a RESTful API that is compatible with the basic data access model of the Amazon S3 API.</p>
-<p>For more information, refer: <a href="https://docs.ceph.com/en/latest/radosgw/s3/" target="_blank" rel="noopener noreferrer">https://docs.ceph.com/en/latest/radosgw/s3/</a></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/s3.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" w [...]
+<p>For more information, refer: <a href="https://docs.ceph.com/en/latest/radosgw/s3/" target="_blank" rel="noopener noreferrer">https://docs.ceph.com/en/latest/radosgw/s3/</a></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/s3.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" w [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sftp/index.html b/docs/services/sftp/index.html
index 266035a9a3..2150c99d01 100644
--- a/docs/services/sftp/index.html
+++ b/docs/services/sftp/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">SFTP | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sftp"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -46,6 +46,6 @@ lots of files, you should pay attention to close the file after using it.</p></d
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sled/index.html b/docs/services/sled/index.html
index 59f32263fa..195bb4c4db 100644
--- a/docs/services/sled/index.html
+++ b/docs/services/sled/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Sled | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sled"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -37,6 +37,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sqlite/index.html b/docs/services/sqlite/index.html
index 47aacdaea6..fc50d3977d 100644
--- a/docs/services/sqlite/index.html
+++ b/docs/services/sqlite/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Sqlite | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sqlite"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -38,6 +38,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/supabase/index.html b/docs/services/supabase/index.html
index b99b0914c2..3064921ae3 100644
--- a/docs/services/supabase/index.html
+++ b/docs/services/supabase/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Supabase | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/supabase"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -42,6 +42,6 @@ can access all resources. Note that if you want to read public resources, do not
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/swift/index.html b/docs/services/swift/index.html
index 28c950b68d..6b0b70914a 100644
--- a/docs/services/swift/index.html
+++ b/docs/services/swift/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Swift | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/swift"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -78,6 +78,6 @@
 <ul>
 <li><a href="https://docs.ceph.com/en/latest/radosgw/swift/#api" target="_blank" rel="noopener noreferrer">Ceph Rados Gateway Swift API</a>.</li>
 <li><a href="https://docs.ceph.com/en/latest/radosgw/swift/auth/" target="_blank" rel="noopener noreferrer">Ceph Rados Gateway Swift Authentication</a>.</li>
-</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/swift.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2 [...]
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/services/swift.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__AOS" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2 [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/tikv/index.html b/docs/services/tikv/index.html
index 7131de9e38..45dcfa243f 100644
--- a/docs/services/tikv/index.html
+++ b/docs/services/tikv/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">TiKV | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/tikv"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/vercel_artifacts/index.html b/docs/services/vercel_artifacts/index.html
index db9ec2b1e6..97bc26c8e2 100644
--- a/docs/services/vercel_artifacts/index.html
+++ b/docs/services/vercel_artifacts/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Vercel Artifacts | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/vercel_artifacts"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -37,6 +37,6 @@
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webdav/index.html b/docs/services/webdav/index.html
index 7672af9da3..8392b3e610 100644
--- a/docs/services/webdav/index.html
+++ b/docs/services/webdav/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">WebDAV | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webdav"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -41,6 +41,6 @@ Users can use <code>webdav</code> to connect those services.</p>
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webhdfs/index.html b/docs/services/webhdfs/index.html
index bf63eabad1..794b1e94d0 100644
--- a/docs/services/webhdfs/index.html
+++ b/docs/services/webhdfs/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">WebHDFS | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webhdfs"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
@@ -61,6 +61,6 @@ This issue, identified as <a href="https://issues.apache.org/jira/browse/HDFS-66
 <h3 class="anchor anchorWithStickyNavbar_VwHQ" id="via-config">Via Config<a href="#via-config" class="hash-link" aria-label="Direct link to Via Config" title="Direct link to Via Config">​</a></h3>
 <!-- -->
 <!-- -->
-<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
+<div class="tabs-container tabList_zxWd"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_TcdJ tabs__item--active">Rust</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Node.js</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_TcdJ">Python</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_CbVR"><div class="lang [...]
 </body>
 </html>
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index 27551a29e0..f4b0676c7a 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Apache OpenDAL™ Downloads | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/download"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/index.html b/index.html
index adba677607..7a7bfaebfa 100644
--- a/index.html
+++ b/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v3.1.1">
 <title data-rh="true">Apache OpenDAL™</title><meta data-rh="true" property="og:title" content="Apache OpenDAL™"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusauru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.b669fb25.css">
-<script src="/assets/js/runtime~main.54e4a30a.js" defer="defer"></script>
-<script src="/assets/js/main.b6f624e6.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.07cb7119.js" defer="defer"></script>
+<script src="/assets/js/main.72d29831.js" defer="defer"></script>
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/lunr-index-1713257268196.json b/lunr-index-1713257268196.json
deleted file mode 100644
index d4642a1062..0000000000
--- a/lunr-index-1713257268196.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,219.962,1,123.309,2,407.059,3,381.55,4,442.024,5,260.062,6,442.024]],["content/0",[0,2.579,1,2.879,2,8.646,3,8.104,4,8.27,5,4.865,6,9.388,7,2.641,8,2.839,9,3.668,10,1.202,11,3.342,12,4.613,13,4.773,14,7.528,15,9.884,16,2.967,17,3.668,18,5.182,19,3.668,20,2.839,21,2.1,22,0.534,23,1.45,24,2.031,25,3.668,26,3.342,27,5.182,28,7.913,29,2.839,30,3.128,31,1.705,32,5.661,33,3.128,34,3.492,35,3.439,36,3.342,3 [...]
\ No newline at end of file
diff --git a/lunr-index-1713264028214.json b/lunr-index-1713264028214.json
new file mode 100644
index 0000000000..afc4f24cbb
--- /dev/null
+++ b/lunr-index-1713264028214.json
@@ -0,0 +1 @@
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,219.962,1,123.309,2,407.059,3,381.55,4,442.024,5,260.062,6,442.024]],["content/0",[0,2.579,1,2.879,2,8.646,3,8.104,4,8.27,5,4.865,6,9.388,7,2.641,8,2.839,9,3.668,10,1.202,11,3.342,12,4.613,13,4.773,14,7.528,15,9.884,16,2.967,17,3.668,18,5.182,19,3.668,20,2.839,21,2.1,22,0.534,23,1.45,24,2.031,25,3.668,26,3.342,27,5.182,28,7.913,29,2.839,30,3.128,31,1.705,32,5.661,33,3.128,34,3.492,35,3.439,36,3.342,3 [...]
\ No newline at end of file
diff --git a/lunr-index.json b/lunr-index.json
index d4642a1062..afc4f24cbb 100644
--- a/lunr-index.json
+++ b/lunr-index.json
@@ -1 +1 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,219.962,1,123.309,2,407.059,3,381.55,4,442.024,5,260.062,6,442.024]],["content/0",[0,2.579,1,2.879,2,8.646,3,8.104,4,8.27,5,4.865,6,9.388,7,2.641,8,2.839,9,3.668,10,1.202,11,3.342,12,4.613,13,4.773,14,7.528,15,9.884,16,2.967,17,3.668,18,5.182,19,3.668,20,2.839,21,2.1,22,0.534,23,1.45,24,2.031,25,3.668,26,3.342,27,5.182,28,7.913,29,2.839,30,3.128,31,1.705,32,5.661,33,3.128,34,3.492,35,3.439,36,3.342,3 [...]
\ No newline at end of file
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,219.962,1,123.309,2,407.059,3,381.55,4,442.024,5,260.062,6,442.024]],["content/0",[0,2.579,1,2.879,2,8.646,3,8.104,4,8.27,5,4.865,6,9.388,7,2.641,8,2.839,9,3.668,10,1.202,11,3.342,12,4.613,13,4.773,14,7.528,15,9.884,16,2.967,17,3.668,18,5.182,19,3.668,20,2.839,21,2.1,22,0.534,23,1.45,24,2.031,25,3.668,26,3.342,27,5.182,28,7.913,29,2.839,30,3.128,31,1.705,32,5.661,33,3.128,34,3.492,35,3.439,36,3.342,3 [...]
\ No newline at end of file
diff --git a/search-doc-1713257268196.json b/search-doc-1713257268196.json
deleted file mode 100644
index 78fc84ae3c..0000000000
--- a/search-doc-1713257268196.json
+++ /dev/null
@@ -1 +0,0 @@
-{"searchDocs":[{"title":"Apache OpenDAL™ participates in Google Summer of Code 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-gsoc-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Google Summer of Code (GSoC) 2024. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful info [...]
\ No newline at end of file
diff --git a/search-doc-1713264028214.json b/search-doc-1713264028214.json
new file mode 100644
index 0000000000..9e26e678d9
--- /dev/null
+++ b/search-doc-1713264028214.json
@@ -0,0 +1 @@
+{"searchDocs":[{"title":"Apache OpenDAL™ participates in Google Summer of Code 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-gsoc-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Google Summer of Code (GSoC) 2024. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful info [...]
\ No newline at end of file
diff --git a/search-doc.json b/search-doc.json
index 78fc84ae3c..9e26e678d9 100644
--- a/search-doc.json
+++ b/search-doc.json
@@ -1 +1 @@
-{"searchDocs":[{"title":"Apache OpenDAL™ participates in Google Summer of Code 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-gsoc-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Google Summer of Code (GSoC) 2024. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful info [...]
\ No newline at end of file
+{"searchDocs":[{"title":"Apache OpenDAL™ participates in Google Summer of Code 2024","type":0,"sectionRef":"#","url":"/blog/apache-opendal-participates-in-gsoc-2024","content":"Hello, everyone! We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in Google Summer of Code (GSoC) 2024. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful info [...]
\ No newline at end of file