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 2023/03/18 06:01:08 UTC

[incubator-opendal] branch gh-pages updated: deploy: 0ac2b78a04a40459eed85f29ffbb03cdcdfcb79f

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/incubator-opendal.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 6ded507f deploy: 0ac2b78a04a40459eed85f29ffbb03cdcdfcb79f
6ded507f is described below

commit 6ded507f207761db6c0282b24c6badb704fb745c
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Sat Mar 18 06:01:04 2023 +0000

    deploy: 0ac2b78a04a40459eed85f29ffbb03cdcdfcb79f
---
 404.html                                           |  10 +-
 assets/js/1db64337.43c7b068.js                     |   1 +
 assets/js/1db64337.bdd44223.js                     |   1 -
 assets/js/{main.f797543f.js => main.d23512d8.js}   |   4 +-
 ...js.LICENSE.txt => main.d23512d8.js.LICENSE.txt} |   0
 assets/js/runtime~main.45b5dc2d.js                 |   1 -
 assets/js/runtime~main.6e4dd269.js                 |   1 +
 blog/archive/index.html                            |  10 +-
 blog/index.html                                    |  10 +-
 blog/opendal-entered-apache-incubator/index.html   |  10 +-
 blog/tags/announcement/index.html                  |  10 +-
 blog/tags/index.html                               |  10 +-
 docs/nodejs/classes/BlockingLister.html            |   4 +-
 docs/nodejs/classes/Entry.html                     |   4 +-
 docs/nodejs/classes/Lister.html                    |   4 +-
 docs/nodejs/classes/Metadata.html                  |  18 +-
 docs/nodejs/classes/Operator.html                  |  32 +-
 docs/overview/index.html                           |  10 +-
 docs/python/index.html                             |   7 +
 docs/python/opendal.html                           | 935 +++++++++++++++++++++
 docs/python/search.js                              |  46 +
 index.html                                         |  10 +-
 22 files changed, 1063 insertions(+), 75 deletions(-)

diff --git a/404.html b/404.html
index f9c3ffe9..331d1b90 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><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.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/1db64337.43c7b068.js b/assets/js/1db64337.43c7b068.js
new file mode 100644
index 00000000..f6ecc320
--- /dev/null
+++ b/assets/js/1db64337.43c7b068.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[372],{6777:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>n,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>v});var o=i(7462),r=(i(7294),i(3905));const s={sidebar_position:1,title:"Overview"},a=void 0,d={unversionedId:"overview",id:"overview",title:"Overview",description:"",source:"@site/docs/overview.md",sourceDirName:".",slug:"/overview",permalink:"/docs/overview",draft:!1,editUrl: [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.bdd44223.js b/assets/js/1db64337.bdd44223.js
deleted file mode 100644
index 919c379c..00000000
--- a/assets/js/1db64337.bdd44223.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[372],{6777:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>n,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>d,toc:()=>v});var o=i(7462),r=(i(7294),i(3905));const a={sidebar_position:1,title:"Overview"},s=void 0,d={unversionedId:"overview",id:"overview",title:"Overview",description:"",source:"@site/docs/overview.md",sourceDirName:".",slug:"/overview",permalink:"/docs/overview",draft:!1,editUrl: [...]
\ No newline at end of file
diff --git a/assets/js/main.f797543f.js b/assets/js/main.d23512d8.js
similarity index 98%
rename from assets/js/main.f797543f.js
rename to assets/js/main.d23512d8.js
index 511bce83..1d722161 100644
--- a/assets/js/main.f797543f.js
+++ b/assets/js/main.d23512d8.js
@@ -1,2 +1,2 @@
-/*! For license information please see main.f797543f.js.LICENSE.txt */
-(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(592),n.e(13)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],17896441:[()=>Promise.all([n.e(532),n.e(592),n.e(918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963 [...]
\ No newline at end of file
+/*! For license information please see main.d23512d8.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(592),n.e(13)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],17896441:[()=>Promise.all([n.e(532),n.e(592),n.e(918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963 [...]
\ No newline at end of file
diff --git a/assets/js/main.f797543f.js.LICENSE.txt b/assets/js/main.d23512d8.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.f797543f.js.LICENSE.txt
rename to assets/js/main.d23512d8.js.LICENSE.txt
diff --git a/assets/js/runtime~main.45b5dc2d.js b/assets/js/runtime~main.45b5dc2d.js
deleted file mode 100644
index 792be76b..00000000
--- a/assets/js/runtime~main.45b5dc2d.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,t,r,o,a,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={exports:{}};return n[e].call(r.exports,r,r.exports,f),r.exports}f.m=n,e=[],f.O=(t,r,o,a)=>{if(!r){var n=1/0;for(b=0;b<e.length;b++){r=e[b][0],o=e[b][1],a=e[b][2];for(var c=!0,i=0;i<r.length;i++)(!1&a||n>=a)&&Object.keys(f.O).every((e=>f.O[e](r[i])))?r.splice(i--,1):(c=!1,a<n&&(n=a));if(c){e.splice(b--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var b=e.length;b>0&&e[b-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.6e4dd269.js b/assets/js/runtime~main.6e4dd269.js
new file mode 100644
index 00000000..aea8e6d9
--- /dev/null
+++ b/assets/js/runtime~main.6e4dd269.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,t,r,o,a,n={},f={};function c(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={exports:{}};return n[e].call(r.exports,r,r.exports,c),r.exports}c.m=n,e=[],c.O=(t,r,o,a)=>{if(!r){var n=1/0;for(b=0;b<e.length;b++){r=e[b][0],o=e[b][1],a=e[b][2];for(var f=!0,i=0;i<r.length;i++)(!1&a||n>=a)&&Object.keys(c.O).every((e=>c.O[e](r[i])))?r.splice(i--,1):(f=!1,a<n&&(n=a));if(f){e.splice(b--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var b=e.length;b>0&&e[b-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 064edbee..7f79ac55 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><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.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 0fd4704d..723ca5f5 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><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.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index cd635d16..b77c8862 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 3a6c87d2..9f5d56b5 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">One post 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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 81924517..2759a6c4 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><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.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index 566acc2c..291bf350 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">BlockingLister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L100">index.d.ts:100</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L100">index.d.ts:100</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">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type" data-tsd-kind="Class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L101">index.d.ts:101</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L101">index.d.ts:101</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index 5bc6c78c..f02106d6 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Entry</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L68">index.d.ts:68</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L68">index.d.ts:68</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">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L69">index.d.ts:69</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L69">index.d.ts:69</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 4bd66c22..d4adf3e0 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Lister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L89">index.d.ts:89</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L89">index.d.ts:89</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">
@@ -61,7 +61,7 @@ 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" data-tsd-kind="Class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L98">index.d.ts:98</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L98">index.d.ts:98</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index fbaf1f01..a34df434 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Metadata</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L71">index.d.ts:71</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L71">index.d.ts:71</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">
@@ -63,7 +63,7 @@
 </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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L77">index.d.ts:77</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -73,7 +73,7 @@
 </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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L79">index.d.ts:79</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L79">index.d.ts:79</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -83,7 +83,7 @@
 </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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L81">index.d.ts:81</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L81">index.d.ts:81</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -93,7 +93,7 @@
 </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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L83">index.d.ts:83</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L83">index.d.ts:83</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -103,7 +103,7 @@
 </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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L85">index.d.ts:85</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L85">index.d.ts:85</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-accessor tsd-parent-kind-class"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-accessor tsd-parent-kind-class">
@@ -113,7 +113,7 @@
 </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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L87">index.d.ts:87</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 tsd-kind-method tsd-parent-kind-class"><a id="isDirectory" class="tsd-anchor"></a>
@@ -125,7 +125,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L73">index.d.ts:73</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L73">index.d.ts:73</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -135,7 +135,7 @@
 </div>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L75">index.d.ts:75</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L75">index.d.ts:75</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index cf339ddd..6e69951f 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Operator</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L25">index.d.ts:25</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">
@@ -63,7 +63,7 @@
 <h5><code class="tsd-tag ts-flagOptional">Optional</code> options: <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">Record</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="Operator.html" class="tsd-signature-type" data-tsd-kind="Class">Operator</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L26">index.d.ts:26</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L26">index.d.ts:26</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 tsd-kind-method tsd-parent-kind-class"><a id="createDir" class="tsd-anchor"></a>
@@ -80,7 +80,7 @@
 <h5>path: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L32">index.d.ts:32</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -95,7 +95,7 @@
 <h5>path: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L34">index.d.ts:34</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -110,7 +110,7 @@
 <h5>path: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L48">index.d.ts:48</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L48">index.d.ts:48</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -125,7 +125,7 @@
 <h5>path: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L50">index.d.ts:50</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L50">index.d.ts:50</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -142,7 +142,7 @@
 <h5>path: <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="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L58">index.d.ts:58</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L58">index.d.ts:58</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -159,7 +159,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L66">index.d.ts:66</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -174,7 +174,7 @@
 <h5>path: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L40">index.d.ts:40</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L40">index.d.ts:40</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -189,7 +189,7 @@
 <h5>path: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L42">index.d.ts:42</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L42">index.d.ts:42</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -204,7 +204,7 @@
 <h5>path: <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="Lister.html" class="tsd-signature-type" data-tsd-kind="Class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L44">index.d.ts:44</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L44">index.d.ts:44</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -219,7 +219,7 @@
 <h5>path: <span class="tsd-signature-type">string</span></h5></li></ul></div>
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type" data-tsd-kind="Class">BlockingLister</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L46">index.d.ts:46</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L46">index.d.ts:46</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -234,7 +234,7 @@
 <h5>path: <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" data-tsd-kind="Class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L28">index.d.ts:28</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L28">index.d.ts:28</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -249,7 +249,7 @@
 <h5>path: <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" data-tsd-kind="Class">Metadata</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L30">index.d.ts:30</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L30">index.d.ts:30</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -266,7 +266,7 @@
 <h5>content: <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">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L36">index.d.ts:36</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L36">index.d.ts:36</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
 <ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class">
@@ -283,7 +283,7 @@
 <h5>content: <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><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/d45a9c8/bindings/nodejs/index.d.ts#L38">index.d.ts:38</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0ac2b78/bindings/nodejs/index.d.ts#L38">index.d.ts:38</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-4 col-menu menu-sticky-wrap menu-highlight">
 <div class="tsd-navigation settings">
 <details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 0026d3db..0dee78d6 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.1">
 <title data-rh="true">Overview | 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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><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.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="roun [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/index.html b/docs/python/index.html
new file mode 100644
index 00000000..cfde7a9f
--- /dev/null
+++ b/docs/python/index.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="refresh" content="0; url=./opendal.html"/>
+</head>
+</html>
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
new file mode 100644
index 00000000..8bc4f484
--- /dev/null
+++ b/docs/python/opendal.html
@@ -0,0 +1,935 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="generator" content="pdoc 13.0.0"/>
+    <title>opendal API documentation</title>
+
+    <style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-appl [...]
+    <style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#ffffcc}.pdoc-code{background:#f8f8f8;}.pdoc-code .c{color:#3D7B7B; font-style:italic}.pdoc-code .err{border:1px solid #FF0000}.pdoc-code .k{color:#008000; font-weight:bold}.pdoc-code .o{color:#666666}.pdoc-code .ch{color:#3D7B7B; font-style:italic}.pdoc-code .cm{color:#3D7B7B; font-style:italic}.pd [...]
+    <style>/*! theme.css */:root{--pdoc-background:#fff;}.pdoc{--text:#212529;--muted:#6c757d;--link:#3660a5;--link-hover:#1659c5;--code:#f8f8f8;--active:#fff598;--accent:#eee;--accent2:#c1c1c1;--nav-hover:rgba(255, 255, 255, 0.5);--name:#0066BB;--def:#008800;--annotation:#007020;}</style>
+    <style>/*! layout.css */html, body{width:100%;height:100%;}html, main{scroll-behavior:smooth;}body{background-color:var(--pdoc-background);}@media (max-width:769px){#navtoggle{cursor:pointer;position:absolute;width:50px;height:40px;top:1rem;right:1rem;border-color:var(--text);color:var(--text);display:flex;opacity:0.8;z-index:999;}#navtoggle:hover{opacity:1;}#togglestate + div{display:none;}#togglestate:checked + div{display:inherit;}main, header{padding:2rem 3vw;}header + main{margi [...]
+    <style>/*! content.css */.pdoc{color:var(--text);box-sizing:border-box;line-height:1.5;background:none;}.pdoc .pdoc-button{cursor:pointer;display:inline-block;border:solid black 1px;border-radius:2px;font-size:.75rem;padding:calc(0.5em - 1px) 1em;transition:100ms all;}.pdoc .pdoc-alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:1rem center;margin-bottom:1rem;}.pdoc .pdoc-alert > *:last-c [...]
+    <style>/*! custom.css */</style></head>
+<body>
+    <nav class="pdoc">
+        <label id="navtoggle" for="togglestate" class="pdoc-button"><svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke-linecap='round' stroke="currentColor" stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg></label>
+        <input id="togglestate" type="checkbox" aria-hidden="true" tabindex="-1">
+        <div>
+
+
+        <h2>Contents</h2>
+        <ul>
+  <li><a href="#installation">Installation</a></li>
+  <li><a href="#usage">Usage</a></li>
+</ul>
+
+
+
+        <h2>API Documentation</h2>
+            <ul class="memberlist">
+            <li>
+                    <a class="class" href="#Operator">Operator</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="function" href="#Operator.__init__">Operator</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.read">read</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.open_reader">open_reader</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.write">write</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.stat">stat</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.create_dir">create_dir</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.delete">delete</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.list">list</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Operator.scan">scan</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#Reader">Reader</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="function" href="#Reader.read">read</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Reader.write">write</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Reader.seek">seek</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#Reader.tell">tell</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#AsyncOperator">AsyncOperator</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="function" href="#AsyncOperator.__init__">AsyncOperator</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.read">read</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.open_reader">open_reader</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.write">write</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.stat">stat</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.create_dir">create_dir</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.delete">delete</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.list">list</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncOperator.scan">scan</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#AsyncReader">AsyncReader</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="function" href="#AsyncReader.read">read</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncReader.write">write</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncReader.seek">seek</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#AsyncReader.tell">tell</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#Entry">Entry</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="variable" href="#Entry.path">path</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#EntryMode">EntryMode</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="function" href="#EntryMode.is_file">is_file</a>
+                        </li>
+                        <li>
+                                <a class="function" href="#EntryMode.is_dir">is_dir</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#Metadata">Metadata</a>
+                            <ul class="memberlist">
+                        <li>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                        </li>
+                        <li>
+                                <a class="variable" href="#Metadata.content_type">content_type</a>
+                        </li>
+                        <li>
+                                <a class="variable" href="#Metadata.mode">mode</a>
+                        </li>
+                        <li>
+                                <a class="variable" href="#Metadata.content_length">content_length</a>
+                        </li>
+                        <li>
+                                <a class="variable" href="#Metadata.etag">etag</a>
+                        </li>
+                </ul>
+
+            </li>
+            <li>
+                    <a class="class" href="#Error">Error</a>
+                            <ul class="memberlist">
+                </ul>
+
+            </li>
+    </ul>
+
+
+
+        <a class="attribution" title="pdoc: Python API documentation generator" href="https://pdoc.dev" target="_blank">
+            built with <span class="visually-hidden">pdoc</span><img
+                alt="pdoc logo"
+                src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.3 [...]
+        </a>
+</div>
+    </nav>
+    <main class="pdoc">
+            <section class="module-info">
+                    <h1 class="modulename">
+opendal    </h1>
+
+                        <div class="docstring"><p>OpenDAL Python binding</p>
+
+<h2 id="installation">Installation</h2>
+
+<div class="pdoc-code codehilite">
+<pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span>opendal
+</code></pre>
+</div>
+
+<h2 id="usage">Usage</h2>
+
+<div class="pdoc-code codehilite">
+<pre><span></span><code><span class="kn">import</span> <span class="nn">opendal</span>
+
+<span class="n">op</span> <span class="o">=</span> <span class="n"><a href="#Operator">opendal.Operator</a></span><span class="p">(</span><span class="s2">&quot;fs&quot;</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="s2">&quot;/tmp&quot;</span><span class="p">)</span>
+<span class="n">op</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;test.txt&quot;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;Hello World&quot;</span><span class="p">)</span>
+<span class="nb">print</span><span class="p">(</span><span class="n">op</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s2">&quot;test.txt&quot;</span><span class="p">))</span>
+<span class="nb">print</span><span class="p">(</span><span class="n">op</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="s2">&quot;test.txt&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">content_length</span><span class="p">)</span>
+</code></pre>
+</div>
+
+<p>Or using the async API:</p>
+
+<div class="pdoc-code codehilite">
+<pre><span></span><code><span class="kn">import</span> <span class="nn">asyncio</span>
+
+<span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
+<span class="n">op</span> <span class="o">=</span> <span class="n"><a href="#AsyncOperator">opendal.AsyncOperator</a></span><span class="p">(</span><span class="s2">&quot;fs&quot;</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="s2">&quot;/tmp&quot;</span><span class="p">)</span>
+<span class="k">await</span> <span class="n">op</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;test.txt&quot;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;Hello World&quot;</span><span class="p">)</span>
+<span class="nb">print</span><span class="p">(</span><span class="k">await</span> <span class="n">op</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s2">&quot;test.txt&quot;</span><span class="p">))</span>
+
+<span class="n">asyncio</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
+</code></pre>
+</div>
+</div>
+
+                        <input id="mod-opendal-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+
+                        <label class="view-source-button" for="mod-opendal-view-source"><span>View Source</span></label>
+
+                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">1</span></a><span class="kn">from</span> <span class="nn">.opendal</span> <span class="kn">import</span> <span class="o">*</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">2</span></a>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">opendal</span><span class="o">.</span><span class="vm">__doc__</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos">4</span></a><span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">opendal</span><span class="p">,</span> <span class="s2">&quot;__all__&quot;</span><span class="p">):</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos">5</span></a>    <span class="n">__all__</span> <span class="o">=</span> <span class="n">opendal</span><span class="o">.</span><span class="n">__all__</span>
+</span></pre></div>
+
+
+            </section>
+                <section id="Operator">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">Operator</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#Operator"></a>
+    
+            <div class="docstring"><p><code><a href="#Operator">Operator</a></code> is the entry for all public blocking APIs</p>
+
+<p>Create a new blocking <code><a href="#Operator">Operator</a></code> with the given <code>scheme</code> and options(<code>**kwargs</code>).</p>
+</div>
+
+
+                            <div id="Operator.__init__" class="classattr">
+                                <div class="attr function">
+            
+        <span class="name">Operator</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">scheme</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span>)</span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.__init__"></a>
+    
+    
+
+                            </div>
+                            <div id="Operator.read" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">read</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">bytes</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.read"></a>
+    
+            <div class="docstring"><p>Read the whole path into bytes.</p>
+</div>
+
+
+                            </div>
+                            <div id="Operator.open_reader" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">open_reader</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n"><a href="#Reader">opendal.Reader</a></span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.open_reader"></a>
+    
+            <div class="docstring"><p>Open a file-like reader for the given path.</p>
+</div>
+
+
+                            </div>
+                            <div id="Operator.write" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">write</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">bs</span><span class="p">:</span> <span class="nb">bytes</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.write"></a>
+    
+            <div class="docstring"><p>Write bytes into given path.</p>
+</div>
+
+
+                            </div>
+                            <div id="Operator.stat" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">stat</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n"><a href="#Metadata">opendal.Metadata</a></span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.stat"></a>
+    
+            <div class="docstring"><p>Get current path's metadata <strong>without cache</strong> directly.</p>
+</div>
+
+
+                            </div>
+                            <div id="Operator.create_dir" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">create_dir</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.create_dir"></a>
+    
+            <div class="docstring"><p>Create a dir at given path.</p>
+
+<h1 id="notes">Notes</h1>
+
+<p>To indicate that a path is a directory, it is compulsory to include
+a trailing / in the path. Failure to do so may result in
+<code>NotADirectory</code> error being returned by OpenDAL.</p>
+
+<h1 id="behavior">Behavior</h1>
+
+<ul>
+<li>Create on existing dir will succeed.</li>
+<li>Create dir is always recursive, works like <code>mkdir -p</code></li>
+</ul>
+</div>
+
+
+                            </div>
+                            <div id="Operator.delete" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">delete</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.delete"></a>
+    
+            <div class="docstring"><p>Delete given path.</p>
+
+<h1 id="notes">Notes</h1>
+
+<ul>
+<li>Delete not existing error won't return errors.</li>
+</ul>
+</div>
+
+
+                            </div>
+                            <div id="Operator.list" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">list</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">Iterable</span><span class="p">[</span><span class="n"><a href="#Entry">opendal.Entry</a></span><span class="p">]</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.list"></a>
+    
+            <div class="docstring"><p>List current dir path.</p>
+</div>
+
+
+                            </div>
+                            <div id="Operator.scan" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">scan</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">Iterable</span><span class="p">[</span><span class="n"><a href="#Entry">opendal.Entry</a></span><span class="p">]</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Operator.scan"></a>
+    
+            <div class="docstring"><p>List dir in flat way.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="Reader">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">Reader</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#Reader"></a>
+    
+            <div class="docstring"><p>A file-like blocking reader.
+Can be used as a context manager.</p>
+</div>
+
+
+                            <div id="Reader.read" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">read</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">size</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">bytes</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Reader.read"></a>
+    
+            <div class="docstring"><p>Read and return size bytes, or if size is not given, until EOF.</p>
+</div>
+
+
+                            </div>
+                            <div id="Reader.write" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">write</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">/</span>, </span><span class="param"><span class="n">_bs</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Reader.write"></a>
+    
+            <div class="docstring"><p><code><a href="#Reader">Reader</a></code> doesn't support write.
+Raises a <code>NotImplementedError</code> if called.</p>
+</div>
+
+
+                            </div>
+                            <div id="Reader.seek" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">seek</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">offset</span><span class="p">:</span> <span class="nb">int</span>, </span><span class="param"><span class="n">whence</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Reader.seek"></a>
+    
+            <div class="docstring"><p>Change the stream position to the given byte offset.
+offset is interpreted relative to the position indicated by <code>whence</code>.
+The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</code> are:</p>
+
+<ul>
+<li><code>SEEK_SET</code> or <code>0</code> – start of the stream (the default); offset should be zero or positive</li>
+<li><code>SEEK_CUR</code> or <code>1</code> – current stream position; offset may be negative</li>
+<li><code>SEEK_END</code> or <code>2</code> – end of the stream; offset is usually negative</li>
+</ul>
+
+<p>Return the new absolute position.</p>
+</div>
+
+
+                            </div>
+                            <div id="Reader.tell" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">tell</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Reader.tell"></a>
+    
+            <div class="docstring"><p>Return the current stream position.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="AsyncOperator">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">AsyncOperator</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator"></a>
+    
+            <div class="docstring"><p><code><a href="#AsyncOperator">AsyncOperator</a></code> is the entry for all public async APIs</p>
+
+<p>Create a new <code><a href="#AsyncOperator">AsyncOperator</a></code> with the given <code>scheme</code> and options(<code>**kwargs</code>).</p>
+</div>
+
+
+                            <div id="AsyncOperator.__init__" class="classattr">
+                                <div class="attr function">
+            
+        <span class="name">AsyncOperator</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">scheme</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="o">**</span><span class="n">kwargs</span></span>)</span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.__init__"></a>
+    
+    
+
+                            </div>
+                            <div id="AsyncOperator.read" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">read</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">bytes</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.read"></a>
+    
+            <div class="docstring"><p>Read the whole path into bytes.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.open_reader" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">open_reader</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n"><a href="#AsyncReader">opendal.AsyncReader</a></span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.open_reader"></a>
+    
+            <div class="docstring"><p>Open a file-like reader for the given path.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.write" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">write</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">bs</span><span class="p">:</span> <span class="nb">bytes</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.write"></a>
+    
+            <div class="docstring"><p>Write bytes into given path.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.stat" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">stat</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n"><a href="#Metadata">opendal.Metadata</a></span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.stat"></a>
+    
+            <div class="docstring"><p>Get current path's metadata <strong>without cache</strong> directly.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.create_dir" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">create_dir</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.create_dir"></a>
+    
+            <div class="docstring"><p>Create a dir at given path.</p>
+
+<h1 id="notes">Notes</h1>
+
+<p>To indicate that a path is a directory, it is compulsory to include
+a trailing / in the path. Failure to do so may result in
+<code>NotADirectory</code> error being returned by OpenDAL.</p>
+
+<h1 id="behavior">Behavior</h1>
+
+<ul>
+<li>Create on existing dir will succeed.</li>
+<li>Create dir is always recursive, works like <code>mkdir -p</code></li>
+</ul>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.delete" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">delete</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.delete"></a>
+    
+            <div class="docstring"><p>Delete given path.</p>
+
+<h1 id="notes">Notes</h1>
+
+<ul>
+<li>Delete not existing error won't return errors.</li>
+</ul>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.list" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">list</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">AsyncIterable</span><span class="p">[</span><span class="n"><a href="#Entry">opendal.Entry</a></span><span class="p">]</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.list"></a>
+    
+            <div class="docstring"><p>List current dir path.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncOperator.scan" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">scan</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">path</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">AsyncIterable</span><span class="p">[</span><span class="n"><a href="#Entry">opendal.Entry</a></span><span class="p">]</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncOperator.scan"></a>
+    
+            <div class="docstring"><p>List dir in flat way.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="AsyncReader">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">AsyncReader</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncReader"></a>
+    
+            <div class="docstring"><p>A file-like async reader.
+Can be used as an async context manager.</p>
+</div>
+
+
+                            <div id="AsyncReader.read" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">read</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">size</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="nb">bytes</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncReader.read"></a>
+    
+            <div class="docstring"><p>Read and return size bytes, or if size is not given, until EOF.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncReader.write" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">write</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="o">/</span>, </span><span class="param"><span class="n">_bs</span></span><span class="return-annotation">):</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncReader.write"></a>
+    
+            <div class="docstring"><p><code><a href="#AsyncReader">AsyncReader</a></code> doesn't support write.
+Raises a <code>NotImplementedError</code> if called.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncReader.seek" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">seek</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">offset</span><span class="p">:</span> <span class="nb">int</span>, </span><span class="param"><span class="n">whence</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncReader.seek"></a>
+    
+            <div class="docstring"><p>Change the stream position to the given byte offset.
+offset is interpreted relative to the position indicated by <code>whence</code>.
+The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</code> are:</p>
+
+<ul>
+<li><code>SEEK_SET</code> or <code>0</code> – start of the stream (the default); offset should be zero or positive</li>
+<li><code>SEEK_CUR</code> or <code>1</code> – current stream position; offset may be negative</li>
+<li><code>SEEK_END</code> or <code>2</code> – end of the stream; offset is usually negative</li>
+</ul>
+
+<p>Return the new absolute position.</p>
+</div>
+
+
+                            </div>
+                            <div id="AsyncReader.tell" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">async def</span>
+        <span class="name">tell</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="nb">int</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#AsyncReader.tell"></a>
+    
+            <div class="docstring"><p>Return the current stream position.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="Entry">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">Entry</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#Entry"></a>
+    
+    
+
+                            <div id="Entry.path" class="classattr">
+                                <div class="attr variable">
+            <span class="name">path</span><span class="annotation">: str</span>
+
+        
+    </div>
+    <a class="headerlink" href="#Entry.path"></a>
+    
+            <div class="docstring"><p>Path of entry. Path is relative to operator's root.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="EntryMode">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">EntryMode</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#EntryMode"></a>
+    
+    
+
+                            <div id="EntryMode.is_file" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">is_file</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#EntryMode.is_file"></a>
+    
+            <div class="docstring"><p>Returns <code>True</code> if this is a file.</p>
+</div>
+
+
+                            </div>
+                            <div id="EntryMode.is_dir" class="classattr">
+                                <div class="attr function">
+            
+        <span class="def">def</span>
+        <span class="name">is_dir</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
+
+        
+    </div>
+    <a class="headerlink" href="#EntryMode.is_dir"></a>
+    
+            <div class="docstring"><p>Returns <code>True</code> if this is a directory.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="Metadata">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">Metadata</span>:
+
+        
+    </div>
+    <a class="headerlink" href="#Metadata"></a>
+    
+    
+
+                            <div id="Metadata.content_md5" class="classattr">
+                                <div class="attr variable">
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+
+        
+    </div>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
+    
+            <div class="docstring"><p>Content MD5 of this entry.</p>
+</div>
+
+
+                            </div>
+                            <div id="Metadata.content_type" class="classattr">
+                                <div class="attr variable">
+            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+
+        
+    </div>
+    <a class="headerlink" href="#Metadata.content_type"></a>
+    
+            <div class="docstring"><p>Content Type of this entry.</p>
+</div>
+
+
+                            </div>
+                            <div id="Metadata.mode" class="classattr">
+                                <div class="attr variable">
+            <span class="name">mode</span><span class="annotation">: <a href="#EntryMode">opendal.EntryMode</a></span>
+
+        
+    </div>
+    <a class="headerlink" href="#Metadata.mode"></a>
+    
+            <div class="docstring"><p>mode represent this entry's mode.</p>
+</div>
+
+
+                            </div>
+                            <div id="Metadata.content_length" class="classattr">
+                                <div class="attr variable">
+            <span class="name">content_length</span><span class="annotation">: int</span>
+
+        
+    </div>
+    <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 class="attr variable">
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+
+        
+    </div>
+    <a class="headerlink" href="#Metadata.etag"></a>
+    
+            <div class="docstring"><p>ETag of this entry.</p>
+</div>
+
+
+                            </div>
+                </section>
+                <section id="Error">
+                    <div class="attr class">
+            
+    <span class="def">class</span>
+    <span class="name">Error</span><wbr>(<span class="base">builtins.Exception</span>):
+
+        
+    </div>
+    <a class="headerlink" href="#Error"></a>
+    
+            <div class="docstring"><p>OpenDAL related errors</p>
+</div>
+
+
+                            <div class="inherited">
+                                <h5>Inherited Members</h5>
+                                <dl>
+                                    <div><dt>builtins.Exception</dt>
+                                <dd id="Error.__init__" class="function">Exception</dd>
+
+            </div>
+            <div><dt>builtins.BaseException</dt>
+                                <dd id="Error.with_traceback" class="function">with_traceback</dd>
+                <dd id="Error.add_note" class="function">add_note</dd>
+
+            </div>
+                                </dl>
+                            </div>
+                </section>
+    </main>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/python/search.js b/docs/python/search.js
new file mode 100644
index 00000000..189fa6cc
--- /dev/null
+++ b/docs/python/search.js
@@ -0,0 +1,46 @@
+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>OpenDAL 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=\"w\"> </span> [...]
+
+    // mirrored in build-search-index.js (part 1)
+    // Also split on html tags. this is a cheap heuristic, but good enough.
+    elasticlunr.tokenizer.setSeperator(/[\s\-.;&_'"=,()]+|<[^>]*>/);
+
+    let searchIndex;
+    if (docs._isPrebuiltIndex) {
+        console.info("using precompiled search index");
+        searchIndex = elasticlunr.Index.load(docs);
+    } else {
+        console.time("building search index");
+        // mirrored in build-search-index.js (part 2)
+        searchIndex = elasticlunr(function () {
+            this.pipeline.remove(elasticlunr.stemmer);
+            this.pipeline.remove(elasticlunr.stopWordFilter);
+            this.addField("qualname");
+            this.addField("fullname");
+            this.addField("annotation");
+            this.addField("default_value");
+            this.addField("signature");
+            this.addField("bases");
+            this.addField("doc");
+            this.setRef("fullname");
+        });
+        for (let doc of docs) {
+            searchIndex.addDoc(doc);
+        }
+        console.timeEnd("building search index");
+    }
+
+    return (term) => searchIndex.search(term, {
+        fields: {
+            qualname: {boost: 4},
+            fullname: {boost: 2},
+            annotation: {boost: 2},
+            default_value: {boost: 2},
+            signature: {boost: 2},
+            bases: {boost: 2},
+            doc: {boost: 1},
+        },
+        expand: true
+    });
+})();
\ No newline at end of file
diff --git a/index.html b/index.html
index cea3df0d..1120c3e3 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.3.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" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.8610ae2e.css">
-<link rel="preload" href="/assets/js/runtime~main.45b5dc2d.js" as="script">
-<link rel="preload" href="/assets/js/main.f797543f.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.6e4dd269.js" as="script">
+<link rel="preload" href="/assets/js/main.d23512d8.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hid [...]
-<script src="/assets/js/runtime~main.45b5dc2d.js"></script>
-<script src="/assets/js/main.f797543f.js"></script>
+<div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hid [...]
+<script src="/assets/js/runtime~main.6e4dd269.js"></script>
+<script src="/assets/js/main.d23512d8.js"></script>
 </body>
 </html>
\ No newline at end of file