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 2025/07/19 09:28:19 UTC

(opendal) branch gh-pages updated (140145095 -> fe22b42de)

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

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


 discard 140145095 deploy: fbe26c0a83e61731b367e6e857cd98012dfb6a17
     new fe22b42de deploy: 722ab9e1714ae9032ad7aeec101c7058c9ae6208

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (140145095)
            \
             N -- N -- N   refs/heads/gh-pages (fe22b42de)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 404.html                                           |   2 +-
 apps/oay/index.html                                |   2 +-
 apps/ofs/index.html                                |   2 +-
 apps/oli/index.html                                |   2 +-
 assets/js/{main.6b14fa3f.js => main.aef16f6b.js}   |   4 +-
 ...js.LICENSE.txt => main.aef16f6b.js.LICENSE.txt} |   0
 bindings/c/index.html                              |  22 +--
 bindings/cpp/index.html                            |   2 +-
 bindings/d/index.html                              |   2 +-
 bindings/dart/index.html                           |   2 +-
 bindings/dotnet/index.html                         |   2 +-
 bindings/go/index.html                             |   2 +-
 bindings/haskell/index.html                        |   2 +-
 bindings/java/index.html                           |   2 +-
 bindings/lua/index.html                            |   2 +-
 bindings/nodejs/index.html                         |   2 +-
 bindings/ocaml/index.html                          |   2 +-
 bindings/php/index.html                            |   2 +-
 bindings/python/index.html                         |   2 +-
 bindings/ruby/index.html                           |   2 +-
 bindings/swift/index.html                          |   2 +-
 bindings/zig/index.html                            |   2 +-
 .../apache-opendal-meetup-beijing-1st/index.html   |   2 +-
 blog/2025/03/01/2025-roadmap/index.html            |   2 +-
 blog/apache-opendal-graduated/index.html           |   2 +-
 .../index.html                                     |   2 +-
 .../index.html                                     |   2 +-
 blog/archive/index.html                            |   2 +-
 blog/authors/index.html                            |   2 +-
 blog/how-opendal-read-data/index.html              |   2 +-
 blog/index.html                                    |   2 +-
 blog/opendal-access-data-freely/index.html         |   2 +-
 blog/opendal-entered-apache-incubator/index.html   |   2 +-
 blog/owo-1/index.html                              |   2 +-
 blog/tags/announcement/index.html                  |   2 +-
 blog/tags/index.html                               |   2 +-
 blog/tags/internal/index.html                      |   2 +-
 blog/tags/owo/index.html                           |   2 +-
 category/applications/index.html                   |   2 +-
 category/bindings/index.html                       |   2 +-
 category/integrations/index.html                   |   2 +-
 community/category/committers/index.html           |   2 +-
 community/category/events/index.html               |   2 +-
 community/category/pmc-members/index.html          |   2 +-
 community/category/reference/index.html            |   2 +-
 community/category/release/index.html              |   2 +-
 community/committers/onboarding/index.html         |   2 +-
 .../request_for_adding_secrets/index.html          |   2 +-
 community/events/gsoc-proposal-guide/index.html    |   2 +-
 community/events/ospp-proposal-guide/index.html    |   2 +-
 community/index.html                               |   2 +-
 community/maturity/index.html                      |   2 +-
 community/pmc_members/board-reporting/index.html   |   2 +-
 .../pmc_members/nominate-committer/index.html      |   2 +-
 .../pmc_members/nominate-pmc-member/index.html     |   2 +-
 community/pmc_members/onboarding/index.html        |   2 +-
 community/release/index.html                       |   2 +-
 .../reference/generate_release_note/index.html     |   2 +-
 community/release/reference/setup_gpg/index.html   |   2 +-
 community/release/verify/index.html                |   2 +-
 community/security/index.html                      |   2 +-
 core/index.html                                    |   2 +-
 docs/lua/classes/opendal.metadata.html             |   2 +-
 docs/lua/classes/opendal.operator.html             |   2 +-
 docs/lua/index.html                                |   2 +-
 docs/nodejs/classes/index.BlockingLister.html      |   4 +-
 docs/nodejs/classes/index.BlockingReader.html      |   4 +-
 docs/nodejs/classes/index.BlockingWriter.html      |   8 +-
 docs/nodejs/classes/index.Capability.html          | 100 +++++-----
 docs/nodejs/classes/index.Entry.html               |   6 +-
 docs/nodejs/classes/index.ExternalObject.html      |   4 +-
 docs/nodejs/classes/index.Layer.html               |   2 +-
 docs/nodejs/classes/index.Lister.html              |   4 +-
 docs/nodejs/classes/index.Metadata.html            |  30 +--
 docs/nodejs/classes/index.Operator.html            |  70 +++----
 docs/nodejs/classes/index.Reader.html              |   6 +-
 docs/nodejs/classes/index.RetryLayer.html          |  14 +-
 docs/nodejs/classes/index.Writer.html              |   8 +-
 docs/nodejs/enums/index.EntryMode.html             |   8 +-
 docs/nodejs/interfaces/index.DeleteOptions.html    |   4 +-
 docs/nodejs/interfaces/index.ListOptions.html      |  12 +-
 docs/nodejs/interfaces/index.PresignedRequest.html |   8 +-
 docs/nodejs/interfaces/index.ReadOptions.html      |  28 +--
 docs/nodejs/interfaces/index.ReaderOptions.html    |  18 +-
 docs/nodejs/interfaces/index.StatOptions.html      |  18 +-
 docs/nodejs/interfaces/index.WriteOptions.html     |  24 +--
 docs/python/sitemap.xml.gz                         | Bin 127 -> 127 bytes
 docs/ruby/OpenDAL.html                             |   2 +-
 docs/ruby/OpenDAL/Capability.html                  |   2 +-
 docs/ruby/OpenDAL/ConcurrentLimitMiddleware.html   |   2 +-
 docs/ruby/OpenDAL/Entry.html                       |   2 +-
 docs/ruby/OpenDAL/IO.html                          |   2 +-
 docs/ruby/OpenDAL/Lister.html                      |   2 +-
 docs/ruby/OpenDAL/Metadata.html                    |   2 +-
 docs/ruby/OpenDAL/Operator.html                    |   2 +-
 docs/ruby/OpenDAL/OperatorInfo.html                |   2 +-
 docs/ruby/OpenDAL/RetryMiddleware.html             |   2 +-
 docs/ruby/OpenDAL/ThrottleMiddleware.html          |   2 +-
 docs/ruby/OpenDAL/TimeoutMiddleware.html           |   2 +-
 docs/ruby/_index.html                              |   2 +-
 docs/ruby/file.README.html                         |   2 +-
 docs/ruby/index.html                               |   2 +-
 docs/ruby/top-level-namespace.html                 |   2 +-
 download/index.html                                |   2 +-
 img/external/07a037f44f92dc589d8e57cc77acb9e5.svg  |   2 +-
 img/external/215e045c6b9b4e8c9b2efc199f41f8af.yml  | 220 ++++++++++-----------
 img/external/6564632a3de5ae36e76129dad4c34d7c.svg  |   2 +-
 img/external/6659ee5d99aec1b105e40ae42b70fb41.svg  |   2 +-
 img/external/7ccca72503e4823887f7fb9cb2d40b88.svg  |   2 +-
 index.html                                         |   2 +-
 integrations/cloud_filter/index.html               |   2 +-
 integrations/dav_server/index.html                 |   2 +-
 integrations/fuse3/index.html                      |   2 +-
 integrations/object_store/index.html               |   2 +-
 integrations/parquet/index.html                    |   2 +-
 integrations/spring/index.html                     |   2 +-
 integrations/unftp_sbe/index.html                  |   2 +-
 integrations/virtiofs/index.html                   |   2 +-
 lunr-index-1752809622609.json                      |   1 -
 lunr-index-1752916833955.json                      |   1 +
 lunr-index.json                                    |   2 +-
 search-doc-1752809622609.json                      |   1 -
 search-doc-1752916833955.json                      |   1 +
 search-doc.json                                    |   2 +-
 vision/index.html                                  |   2 +-
 125 files changed, 409 insertions(+), 411 deletions(-)
 rename assets/js/{main.6b14fa3f.js => main.aef16f6b.js} (99%)
 rename assets/js/{main.6b14fa3f.js.LICENSE.txt => main.aef16f6b.js.LICENSE.txt} (100%)
 delete mode 100644 lunr-index-1752809622609.json
 create mode 100644 lunr-index-1752916833955.json
 delete mode 100644 search-doc-1752809622609.json
 create mode 100644 search-doc-1752916833955.json


(opendal) 01/01: deploy: 722ab9e1714ae9032ad7aeec101c7058c9ae6208

Posted by gi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fe22b42de32da9814646aafab071a0966ce95dca
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Sat Jul 19 09:28:11 2025 +0000

    deploy: 722ab9e1714ae9032ad7aeec101c7058c9ae6208
---
 .asf.yaml                                          |   60 +
 .nojekyll                                          |    0
 404.html                                           |   17 +
 apps/oay/index.html                                |   29 +
 apps/ofs/index.html                                |   41 +
 apps/oli/index.html                                |   61 +
 assets/css/styles.0481e4aa.css                     |    1 +
 .../images/1-0b02956a3da2b4329eab11ea4779711c.png  |  Bin 0 -> 135143 bytes
 .../images/2-3b83ca1ebfbdd77770566a80131846bd.png  |  Bin 0 -> 136903 bytes
 ...tion-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png |  Bin 0 -> 26376 bytes
 ...tp-setting-395a35a58111a24514d710547fb9e278.jpg |  Bin 0 -> 149264 bytes
 ...ct-opendal-095982818f2f177cfd4cd267c8f282c4.png |  Bin 0 -> 270363 bytes
 ...endal-arch-a614dff17a53ecef1fdbedb43be31c13.png |  Bin 0 -> 177923 bytes
 ...red-apache-879d5165e27d370849e904ef8d65be25.png |  Bin 0 -> 300269 bytes
 ...ndal-power-549a25c15039d5ff165b082cf2fd7476.png |  Bin 0 -> 654101 bytes
 ...-downloads-c5d552b37aa69309d8b3c032b686dc98.png |  Bin 0 -> 248828 bytes
 ...-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png |  Bin 0 -> 323902 bytes
 ...-committer-a544b022d22a3bfffef5accc9d825942.png |  Bin 0 -> 91133 bytes
 ...pmc-member-e054bc1c41af11ec5a6bf37ae926636d.png |  Bin 0 -> 102648 bytes
 assets/js/01a85c17.d9887ca0.js                     |    1 +
 assets/js/02514dc9.8ec9faf9.js                     |    1 +
 assets/js/0284318d.699e8c6f.js                     |    1 +
 assets/js/064c7027.fb9780fe.js                     |    1 +
 assets/js/07df3158.eed6479a.js                     |    1 +
 assets/js/08af526d.c55488b8.js                     |    1 +
 assets/js/11a47109.efdae150.js                     |    1 +
 assets/js/123e9e0d.b12700aa.js                     |    1 +
 assets/js/14a24c8e.d09142da.js                     |    1 +
 assets/js/14eb3368.f5ac9170.js                     |    1 +
 assets/js/17896441.8f1bbce3.js                     |    1 +
 assets/js/1959.bb74b1ed.js                         |    2 +
 assets/js/1959.bb74b1ed.js.LICENSE.txt             |   61 +
 assets/js/1c6a48e2.6347281b.js                     |    1 +
 assets/js/1df79ffe.ef3d04ba.js                     |    1 +
 assets/js/1f391b9e.ce4aac88.js                     |    1 +
 assets/js/2063472f.f3e5ecf9.js                     |    1 +
 assets/js/22dd74f7.9bfca296.js                     |    1 +
 assets/js/24229705.adf8e46a.js                     |    1 +
 assets/js/2e06cdab.ccfdeaf4.js                     |    1 +
 assets/js/2e8f33c3.d9913482.js                     |    1 +
 assets/js/3105.5d438a29.js                         |    1 +
 assets/js/3473.1f1bfac8.js                         |    1 +
 assets/js/366ada8c.ae3a2d67.js                     |    1 +
 assets/js/36994c47.5316835a.js                     |    1 +
 assets/js/39343050.db4d25e3.js                     |    1 +
 assets/js/4111f708.cf0e0d84.js                     |    1 +
 assets/js/4799.dab92ad4.js                         |    1 +
 assets/js/4979.75dde367.js                         |    1 +
 assets/js/4c528a05.f1c6acf2.js                     |    1 +
 assets/js/4c9803b5.0ee22e7d.js                     |    1 +
 assets/js/555f5b95.b60c75e7.js                     |    1 +
 assets/js/5771c448.33d39c49.js                     |    1 +
 assets/js/5a1328aa.7bfda057.js                     |    1 +
 assets/js/5a1c6382.60bd0959.js                     |    1 +
 assets/js/5c069598.92c7fc91.js                     |    1 +
 assets/js/5e95c892.0f3e3064.js                     |    1 +
 assets/js/5e9d3d10.ec9870bd.js                     |    1 +
 assets/js/60a218c9.43af575b.js                     |    1 +
 assets/js/621db11d.d7a4873b.js                     |    1 +
 assets/js/641925c3.64624a6b.js                     |    1 +
 assets/js/64ca138b.7eb115ed.js                     |    1 +
 assets/js/67c477f7.615c6c72.js                     |    1 +
 assets/js/6875c492.afa5efc9.js                     |    1 +
 assets/js/72648c1e.91ad672a.js                     |    1 +
 assets/js/72c7c572.acc605d4.js                     |    1 +
 assets/js/7589.4f009ffe.js                         |    1 +
 assets/js/762bf81a.95f23149.js                     |    1 +
 assets/js/79029d83.533eccdc.js                     |    1 +
 assets/js/7bec6e35.643d0c4e.js                     |    1 +
 assets/js/814f3328.74ffb7f0.js                     |    1 +
 assets/js/81be9ab0.8386fa67.js                     |    1 +
 assets/js/82983ca5.2a508439.js                     |    1 +
 assets/js/871742e4.9430a7c2.js                     |    1 +
 assets/js/8876636a.aac0d561.js                     |    1 +
 assets/js/8a2489d3.9a821cad.js                     |    1 +
 assets/js/8bf4b5be.89243e74.js                     |    1 +
 assets/js/8df13e63.a1e1669d.js                     |    1 +
 assets/js/8ee0db76.090cc879.js                     |    1 +
 assets/js/91898914.2d2acdfd.js                     |    1 +
 assets/js/93836c80.db7e35f3.js                     |    1 +
 assets/js/93c7665c.562597df.js                     |    1 +
 assets/js/97bf23fb.e17ea921.js                     |    1 +
 assets/js/9897d641.6f24574a.js                     |    1 +
 assets/js/98cc138c.7d59ab36.js                     |    1 +
 assets/js/9ae7e783.ea4ddf48.js                     |    1 +
 assets/js/9e4087bc.fd9a6480.js                     |    1 +
 assets/js/a6aa9e1f.e5a718cb.js                     |    1 +
 assets/js/a6e5fa5a.d7fc158a.js                     |    1 +
 assets/js/a7456010.f84f1414.js                     |    1 +
 assets/js/a7bd4aaa.92559f63.js                     |    1 +
 assets/js/a94703ab.653d4c36.js                     |    1 +
 assets/js/a9c30f2e.6c2c7534.js                     |    1 +
 assets/js/aada36dd.a455ad08.js                     |    1 +
 assets/js/aba21aa0.51951f44.js                     |    1 +
 assets/js/acecf23e.243924ab.js                     |    1 +
 assets/js/b055ae15.2063befe.js                     |    1 +
 assets/js/b3c9a82c.3a4264aa.js                     |    1 +
 assets/js/b4600192.06f5a769.js                     |    1 +
 assets/js/b854c684.1753d7a3.js                     |    1 +
 assets/js/b9e611fa.efe58c1c.js                     |    1 +
 assets/js/be97ea89.cf48e600.js                     |    1 +
 assets/js/c190077e.a0880b6e.js                     |    1 +
 assets/js/c3c04a61.519e0ff6.js                     |    1 +
 assets/js/c723f292.52406687.js                     |    1 +
 assets/js/ccaaa0ae.37395069.js                     |    1 +
 assets/js/ccc49370.ab8201c1.js                     |    1 +
 assets/js/ce1f9e9a.4c33a95b.js                     |    1 +
 assets/js/d6bb3bd3.d0f88486.js                     |    1 +
 assets/js/d79d0e51.4f4db824.js                     |    1 +
 assets/js/db4ba166.9be064d2.js                     |    1 +
 assets/js/dbfc4782.6df50409.js                     |    1 +
 assets/js/dd04b75e.ead40786.js                     |    1 +
 assets/js/dd573aea.3fe5cac9.js                     |    1 +
 assets/js/ddb4e1f1.10b7858c.js                     |    1 +
 assets/js/dfe14563.f24c27e8.js                     |    1 +
 assets/js/e0719818.58e9c0a1.js                     |    1 +
 assets/js/e0a7550c.e8915d24.js                     |    1 +
 assets/js/e21e5353.8fbcb068.js                     |    1 +
 assets/js/e9c509e9.c22707fa.js                     |    1 +
 assets/js/f4050da2.2f2d055f.js                     |    1 +
 assets/js/f8b0372a.dee688b3.js                     |    1 +
 assets/js/f8ca66da.569f2a74.js                     |    1 +
 assets/js/fb47c099.bd0bea46.js                     |    1 +
 assets/js/fbfa070b.33f8f871.js                     |    1 +
 assets/js/fc45081a.a3bb3e5a.js                     |    1 +
 assets/js/main.aef16f6b.js                         |    2 +
 assets/js/main.aef16f6b.js.LICENSE.txt             |   68 +
 assets/js/runtime~main.01b42c7d.js                 |    1 +
 bindings/c/index.html                              |   79 +
 bindings/cpp/index.html                            |   58 +
 bindings/d/index.html                              |   26 +
 bindings/dart/index.html                           |   36 +
 bindings/dotnet/index.html                         |   26 +
 bindings/go/index.html                             |   91 +
 bindings/haskell/index.html                        |   33 +
 bindings/java/index.html                           |   77 +
 bindings/lua/index.html                            |   39 +
 bindings/nodejs/index.html                         |   54 +
 bindings/ocaml/index.html                          |   57 +
 bindings/php/index.html                            |   56 +
 bindings/python/index.html                         |   51 +
 bindings/ruby/index.html                           |   28 +
 bindings/swift/index.html                          |   32 +
 bindings/zig/index.html                            |   26 +
 .../apache-opendal-meetup-beijing-1st/index.html   |   51 +
 blog/2025/03/01/2025-roadmap/index.html            |   66 +
 blog/apache-opendal-graduated/index.html           |  100 +
 .../index.html                                     |   27 +
 .../index.html                                     |   27 +
 blog/archive/index.html                            |   17 +
 blog/atom.xml                                      |  593 ++
 blog/authors/index.html                            |   17 +
 blog/how-opendal-read-data/index.html              |  102 +
 blog/index.html                                    |   27 +
 blog/opendal-access-data-freely/index.html         |   72 +
 blog/opendal-entered-apache-incubator/index.html   |   74 +
 blog/owo-1/index.html                              |   96 +
 blog/rss.xml                                       |  555 ++
 blog/tags/announcement/index.html                  |   23 +
 blog/tags/index.html                               |   17 +
 blog/tags/internal/index.html                      |   18 +
 blog/tags/owo/index.html                           |   20 +
 category/applications/index.html                   |   17 +
 category/bindings/index.html                       |   17 +
 category/integrations/index.html                   |   17 +
 community/category/committers/index.html           |   17 +
 community/category/events/index.html               |   17 +
 community/category/pmc-members/index.html          |   17 +
 community/category/reference/index.html            |   17 +
 community/category/release/index.html              |   17 +
 community/committers/onboarding/index.html         |   87 +
 .../request_for_adding_secrets/index.html          |   33 +
 community/events/gsoc-proposal-guide/index.html    |   82 +
 community/events/ospp-proposal-guide/index.html    |   61 +
 community/index.html                               |   85 +
 community/maturity/index.html                      |  277 +
 community/pmc_members/board-reporting/index.html   |   31 +
 .../pmc_members/nominate-committer/index.html      |   45 +
 .../pmc_members/nominate-pmc-member/index.html     |   48 +
 community/pmc_members/onboarding/index.html        |   35 +
 community/release/index.html                       |  214 +
 .../reference/generate_release_note/index.html     |   24 +
 community/release/reference/setup_gpg/index.html   |   50 +
 community/release/verify/index.html                |   72 +
 community/security/index.html                      |   24 +
 core/index.html                                    |  208 +
 discord/index.html                                 |   11 +
 docs/.gitkeep                                      |    0
 docs/c/README_8md.html                             |   83 +
 docs/c/annotated.html                              |  110 +
 docs/c/bc_s.png                                    |  Bin 0 -> 676 bytes
 docs/c/bc_sd.png                                   |  Bin 0 -> 635 bytes
 docs/c/classes.html                                |   89 +
 docs/c/closed.png                                  |  Bin 0 -> 132 bytes
 docs/c/dir_d44c64559bbebec7f509842c48db8b23.html   |   93 +
 docs/c/doc.svg                                     |   12 +
 docs/c/docd.svg                                    |   12 +
 docs/c/doxygen-awesome.css                         |    8 +
 docs/c/doxygen.css                                 | 1685 +++++
 docs/c/doxygen.svg                                 |   28 +
 docs/c/dynsections.js                              |  192 +
 docs/c/files.html                                  |   89 +
 docs/c/folderclosed.svg                            |   11 +
 docs/c/folderclosedd.svg                           |   11 +
 docs/c/folderopen.svg                              |   17 +
 docs/c/folderopend.svg                             |   12 +
 docs/c/functions.html                              |  173 +
 docs/c/functions_vars.html                         |  173 +
 docs/c/globals.html                                |  175 +
 docs/c/globals_defs.html                           |   85 +
 docs/c/globals_enum.html                           |   83 +
 docs/c/globals_eval.html                           |   94 +
 docs/c/globals_func.html                           |  131 +
 docs/c/globals_type.html                           |  106 +
 docs/c/globals_vars.html                           |   83 +
 docs/c/index.html                                  |  205 +
 docs/c/jquery.js                                   |   34 +
 docs/c/menu.js                                     |  136 +
 docs/c/menudata.js                                 |   70 +
 docs/c/minus.svg                                   |    8 +
 docs/c/minusd.svg                                  |    8 +
 docs/c/nav_f.png                                   |  Bin 0 -> 153 bytes
 docs/c/nav_fd.png                                  |  Bin 0 -> 169 bytes
 docs/c/nav_g.png                                   |  Bin 0 -> 95 bytes
 docs/c/nav_h.png                                   |  Bin 0 -> 98 bytes
 docs/c/nav_hd.png                                  |  Bin 0 -> 114 bytes
 docs/c/open.png                                    |  Bin 0 -> 123 bytes
 docs/c/opendal_8h.html                             | 2602 ++++++++
 docs/c/opendal_8h_source.html                      |  593 ++
 docs/c/pages.html                                  |   88 +
 docs/c/plus.svg                                    |    9 +
 docs/c/plusd.svg                                   |    9 +
 docs/c/search/all_0.js                             |    4 +
 docs/c/search/all_1.js                             |    5 +
 docs/c/search/all_2.js                             |    5 +
 docs/c/search/all_3.js                             |    8 +
 docs/c/search/all_4.js                             |    6 +
 docs/c/search/all_5.js                             |    7 +
 docs/c/search/all_6.js                             |    5 +
 docs/c/search/all_7.js                             |   10 +
 docs/c/search/all_8.js                             |    6 +
 docs/c/search/all_9.js                             |   87 +
 docs/c/search/all_a.js                             |   11 +
 docs/c/search/all_b.js                             |   12 +
 docs/c/search/all_c.js                             |    9 +
 docs/c/search/all_d.js                             |    5 +
 docs/c/search/all_e.js                             |    4 +
 docs/c/search/all_f.js                             |   15 +
 docs/c/search/classes_0.js                         |   26 +
 docs/c/search/close.svg                            |   18 +
 docs/c/search/defines_0.js                         |    6 +
 docs/c/search/enums_0.js                           |    4 +
 docs/c/search/enumvalues_0.js                      |   15 +
 docs/c/search/files_0.js                           |    4 +
 docs/c/search/files_1.js                           |    4 +
 docs/c/search/functions_0.js                       |    4 +
 docs/c/search/functions_1.js                       |   45 +
 docs/c/search/mag.svg                              |   24 +
 docs/c/search/mag_d.svg                            |   24 +
 docs/c/search/mag_sel.svg                          |   31 +
 docs/c/search/mag_seld.svg                         |   31 +
 docs/c/search/pages_0.js                           |    4 +
 docs/c/search/pages_1.js                           |    4 +
 docs/c/search/pages_2.js                           |    4 +
 docs/c/search/pages_3.js                           |    4 +
 docs/c/search/pages_4.js                           |    4 +
 docs/c/search/pages_5.js                           |    4 +
 docs/c/search/pages_6.js                           |    4 +
 docs/c/search/search.css                           |  291 +
 docs/c/search/search.js                            |  840 +++
 docs/c/search/searchdata.js                        |   42 +
 docs/c/search/typedefs_0.js                        |   27 +
 docs/c/search/variables_0.js                       |    7 +
 docs/c/search/variables_1.js                       |    5 +
 docs/c/search/variables_2.js                       |    6 +
 docs/c/search/variables_3.js                       |    5 +
 docs/c/search/variables_4.js                       |    9 +
 docs/c/search/variables_5.js                       |    5 +
 docs/c/search/variables_6.js                       |    4 +
 docs/c/search/variables_7.js                       |    9 +
 docs/c/search/variables_8.js                       |   11 +
 docs/c/search/variables_9.js                       |    8 +
 docs/c/search/variables_a.js                       |   14 +
 docs/c/splitbar.png                                |  Bin 0 -> 314 bytes
 docs/c/splitbard.png                               |  Bin 0 -> 282 bytes
 docs/c/structopendal__bytes-members.html           |   89 +
 docs/c/structopendal__bytes.html                   |  154 +
 docs/c/structopendal__capability-members.html      |  118 +
 docs/c/structopendal__capability.html              |  651 ++
 docs/c/structopendal__entry-members.html           |   87 +
 docs/c/structopendal__entry.html                   |  123 +
 docs/c/structopendal__error-members.html           |   88 +
 docs/c/structopendal__error.html                   |  141 +
 docs/c/structopendal__lister-members.html          |   87 +
 docs/c/structopendal__lister.html                  |  120 +
 docs/c/structopendal__metadata-members.html        |   87 +
 docs/c/structopendal__metadata.html                |  121 +
 docs/c/structopendal__operator-members.html        |   87 +
 docs/c/structopendal__operator.html                |  123 +
 docs/c/structopendal__operator__info-members.html  |   87 +
 docs/c/structopendal__operator__info.html          |  118 +
 .../structopendal__operator__options-members.html  |   87 +
 docs/c/structopendal__operator__options.html       |  126 +
 docs/c/structopendal__reader-members.html          |   87 +
 docs/c/structopendal__reader.html                  |  119 +
 docs/c/structopendal__result__exists-members.html  |   88 +
 docs/c/structopendal__result__exists.html          |  137 +
 .../structopendal__result__is__exist-members.html  |   88 +
 docs/c/structopendal__result__is__exist.html       |  137 +
 docs/c/structopendal__result__list-members.html    |   88 +
 docs/c/structopendal__result__list.html            |  136 +
 ...tructopendal__result__lister__next-members.html |   88 +
 docs/c/structopendal__result__lister__next.html    |  136 +
 ...ructopendal__result__operator__new-members.html |   88 +
 docs/c/structopendal__result__operator__new.html   |  141 +
 ...topendal__result__operator__reader-members.html |   88 +
 .../c/structopendal__result__operator__reader.html |  135 +
 ...topendal__result__operator__writer-members.html |   88 +
 .../c/structopendal__result__operator__writer.html |  135 +
 docs/c/structopendal__result__read-members.html    |   88 +
 docs/c/structopendal__result__read.html            |  136 +
 ...tructopendal__result__reader__read-members.html |   88 +
 docs/c/structopendal__result__reader__read.html    |  135 +
 ...tructopendal__result__reader__seek-members.html |   88 +
 docs/c/structopendal__result__reader__seek.html    |  135 +
 docs/c/structopendal__result__stat-members.html    |   88 +
 docs/c/structopendal__result__stat.html            |  136 +
 ...ructopendal__result__writer__write-members.html |   88 +
 docs/c/structopendal__result__writer__write.html   |  135 +
 docs/c/structopendal__writer-members.html          |   87 +
 docs/c/structopendal__writer.html                  |  119 +
 docs/c/sync_off.png                                |  Bin 0 -> 853 bytes
 docs/c/sync_on.png                                 |  Bin 0 -> 845 bytes
 docs/c/tab_a.png                                   |  Bin 0 -> 142 bytes
 docs/c/tab_ad.png                                  |  Bin 0 -> 135 bytes
 docs/c/tab_b.png                                   |  Bin 0 -> 169 bytes
 docs/c/tab_bd.png                                  |  Bin 0 -> 173 bytes
 docs/c/tab_h.png                                   |  Bin 0 -> 177 bytes
 docs/c/tab_hd.png                                  |  Bin 0 -> 180 bytes
 docs/c/tab_s.png                                   |  Bin 0 -> 184 bytes
 docs/c/tab_sd.png                                  |  Bin 0 -> 188 bytes
 docs/c/tabs.css                                    |    1 +
 docs/c/todo.html                                   |   90 +
 docs/cpp/README_8md.html                           |   83 +
 docs/cpp/annotated.html                            |  101 +
 docs/cpp/async__defs_8hpp.html                     |  444 ++
 docs/cpp/async__defs_8hpp__dep__incl.map           |    5 +
 docs/cpp/async__defs_8hpp__dep__incl.md5           |    1 +
 docs/cpp/async__defs_8hpp__dep__incl.svg           |   43 +
 docs/cpp/async__defs_8hpp__incl.map                |    7 +
 docs/cpp/async__defs_8hpp__incl.md5                |    1 +
 docs/cpp/async__defs_8hpp__incl.svg                |   59 +
 docs/cpp/async__defs_8hpp_source.html              |  127 +
 docs/cpp/bc_s.png                                  |  Bin 0 -> 676 bytes
 docs/cpp/bc_sd.png                                 |  Bin 0 -> 635 bytes
 docs/cpp/classListerIterator.html                  |   94 +
 docs/cpp/classes.html                              |  104 +
 docs/cpp/classopendal_1_1Entry-members.html        |   91 +
 docs/cpp/classopendal_1_1Entry.html                |  121 +
 docs/cpp/classopendal_1_1Lister-members.html       |   96 +
 docs/cpp/classopendal_1_1Lister.html               |  277 +
 ...classopendal_1_1Lister_1_1Iterator-members.html |  101 +
 docs/cpp/classopendal_1_1Lister_1_1Iterator.html   |  367 ++
 docs/cpp/classopendal_1_1Metadata-members.html     |   98 +
 docs/cpp/classopendal_1_1Metadata.html             |  233 +
 docs/cpp/classopendal_1_1Operator-members.html     |  110 +
 docs/cpp/classopendal_1_1Operator.html             |  715 +++
 docs/cpp/classopendal_1_1Reader-members.html       |   95 +
 docs/cpp/classopendal_1_1Reader.html               |  252 +
 docs/cpp/classopendal_1_1ReaderStream-members.html |   91 +
 docs/cpp/classopendal_1_1ReaderStream.html         |  144 +
 ...1_1ReaderStream_1_1ReaderStreamBuf-members.html |   96 +
 ...opendal_1_1ReaderStream_1_1ReaderStreamBuf.html |  312 +
 ...erStream_1_1ReaderStreamBuf__inherit__graph.map |    5 +
 ...erStream_1_1ReaderStreamBuf__inherit__graph.md5 |    1 +
 ...erStream_1_1ReaderStreamBuf__inherit__graph.svg |   40 +
 ...lassopendal_1_1ReaderStream__inherit__graph.map |    5 +
 ...lassopendal_1_1ReaderStream__inherit__graph.md5 |    1 +
 ...lassopendal_1_1ReaderStream__inherit__graph.svg |   39 +
 .../classopendal_1_1async_1_1Lister-members.html   |   99 +
 docs/cpp/classopendal_1_1async_1_1Lister.html      |  347 +
 .../classopendal_1_1async_1_1Operator-members.html |  118 +
 docs/cpp/classopendal_1_1async_1_1Operator.html    |  701 ++
 .../classopendal_1_1async_1_1Reader-members.html   |   99 +
 docs/cpp/classopendal_1_1async_1_1Reader.html      |  365 ++
 docs/cpp/closed.png                                |  Bin 0 -> 132 bytes
 docs/cpp/data__structure_8hpp.html                 |  131 +
 docs/cpp/data__structure_8hpp__dep__incl.map       |    5 +
 docs/cpp/data__structure_8hpp__dep__incl.md5       |    1 +
 docs/cpp/data__structure_8hpp__dep__incl.svg       |   43 +
 docs/cpp/data__structure_8hpp__incl.map            |   11 +
 docs/cpp/data__structure_8hpp__incl.md5            |    1 +
 docs/cpp/data__structure_8hpp__incl.svg            |   95 +
 docs/cpp/data__structure_8hpp_source.html          |  168 +
 docs/cpp/dir_d44c64559bbebec7f509842c48db8b23.html |   99 +
 docs/cpp/doc.svg                                   |   12 +
 docs/cpp/docd.svg                                  |   12 +
 docs/cpp/doxygen-awesome.css                       |    8 +
 docs/cpp/doxygen.css                               | 1685 +++++
 docs/cpp/doxygen.svg                               |   28 +
 docs/cpp/dynsections.js                            |  192 +
 docs/cpp/files.html                                |   92 +
 docs/cpp/folderclosed.svg                          |   11 +
 docs/cpp/folderclosedd.svg                         |   11 +
 docs/cpp/folderopen.svg                            |   17 +
 docs/cpp/folderopend.svg                           |   12 +
 docs/cpp/functions.html                            |  219 +
 docs/cpp/functions_func.html                       |  181 +
 docs/cpp/functions_rela.html                       |   84 +
 docs/cpp/functions_type.html                       |   99 +
 docs/cpp/functions_vars.html                       |   91 +
 docs/cpp/globals.html                              |   83 +
 docs/cpp/globals_func.html                         |   83 +
 docs/cpp/graph_legend.html                         |  143 +
 docs/cpp/graph_legend.md5                          |    1 +
 docs/cpp/graph_legend.svg                          |  167 +
 docs/cpp/hierarchy.html                            |  103 +
 docs/cpp/index.html                                |  157 +
 docs/cpp/inherit_graph_0.map                       |    3 +
 docs/cpp/inherit_graph_0.md5                       |    1 +
 docs/cpp/inherit_graph_0.svg                       |   21 +
 docs/cpp/inherit_graph_1.map                       |    3 +
 docs/cpp/inherit_graph_1.md5                       |    1 +
 docs/cpp/inherit_graph_1.svg                       |   21 +
 docs/cpp/inherit_graph_10.map                      |    5 +
 docs/cpp/inherit_graph_10.md5                      |    1 +
 docs/cpp/inherit_graph_10.svg                      |   39 +
 docs/cpp/inherit_graph_11.map                      |    5 +
 docs/cpp/inherit_graph_11.md5                      |    1 +
 docs/cpp/inherit_graph_11.svg                      |   40 +
 docs/cpp/inherit_graph_2.map                       |    3 +
 docs/cpp/inherit_graph_2.md5                       |    1 +
 docs/cpp/inherit_graph_2.svg                       |   21 +
 docs/cpp/inherit_graph_3.map                       |    3 +
 docs/cpp/inherit_graph_3.md5                       |    1 +
 docs/cpp/inherit_graph_3.svg                       |   21 +
 docs/cpp/inherit_graph_4.map                       |    3 +
 docs/cpp/inherit_graph_4.md5                       |    1 +
 docs/cpp/inherit_graph_4.svg                       |   21 +
 docs/cpp/inherit_graph_5.map                       |    3 +
 docs/cpp/inherit_graph_5.md5                       |    1 +
 docs/cpp/inherit_graph_5.svg                       |   21 +
 docs/cpp/inherit_graph_6.map                       |    3 +
 docs/cpp/inherit_graph_6.md5                       |    1 +
 docs/cpp/inherit_graph_6.svg                       |   21 +
 docs/cpp/inherit_graph_7.map                       |    3 +
 docs/cpp/inherit_graph_7.md5                       |    1 +
 docs/cpp/inherit_graph_7.svg                       |   21 +
 docs/cpp/inherit_graph_8.map                       |    3 +
 docs/cpp/inherit_graph_8.md5                       |    1 +
 docs/cpp/inherit_graph_8.svg                       |   21 +
 docs/cpp/inherit_graph_9.map                       |    3 +
 docs/cpp/inherit_graph_9.md5                       |    1 +
 docs/cpp/inherit_graph_9.svg                       |   21 +
 docs/cpp/inherits.html                             |   99 +
 docs/cpp/jquery.js                                 |   34 +
 docs/cpp/menu.js                                   |  136 +
 docs/cpp/menudata.js                               |   79 +
 docs/cpp/minus.svg                                 |    8 +
 docs/cpp/minusd.svg                                |    8 +
 docs/cpp/namespacemembers.html                     |   83 +
 docs/cpp/namespacemembers_enum.html                |   83 +
 docs/cpp/namespaceopendal.html                     |  155 +
 docs/cpp/namespaceopendal_1_1async.html            |  101 +
 docs/cpp/namespaceopendal_1_1ffi.html              |   87 +
 docs/cpp/namespaces.html                           |  101 +
 docs/cpp/nav_f.png                                 |  Bin 0 -> 153 bytes
 docs/cpp/nav_fd.png                                |  Bin 0 -> 169 bytes
 docs/cpp/nav_g.png                                 |  Bin 0 -> 95 bytes
 docs/cpp/nav_h.png                                 |  Bin 0 -> 98 bytes
 docs/cpp/nav_hd.png                                |  Bin 0 -> 114 bytes
 docs/cpp/open.png                                  |  Bin 0 -> 123 bytes
 docs/cpp/opendal_8hpp.html                         |  132 +
 docs/cpp/opendal_8hpp__incl.map                    |   25 +
 docs/cpp/opendal_8hpp__incl.md5                    |    1 +
 docs/cpp/opendal_8hpp__incl.svg                    |  221 +
 docs/cpp/opendal_8hpp_source.html                  |  437 ++
 docs/cpp/opendal__async_8hpp.html                  |  124 +
 docs/cpp/opendal__async_8hpp__incl.map             |   23 +
 docs/cpp/opendal__async_8hpp__incl.md5             |    1 +
 docs/cpp/opendal__async_8hpp__incl.svg             |  203 +
 docs/cpp/opendal__async_8hpp_source.html           |  285 +
 docs/cpp/plus.svg                                  |    9 +
 docs/cpp/plusd.svg                                 |    9 +
 docs/cpp/search/all_0.js                           |    7 +
 docs/cpp/search/all_1.js                           |    6 +
 docs/cpp/search/all_10.js                          |    4 +
 docs/cpp/search/all_11.js                          |    6 +
 docs/cpp/search/all_12.js                          |    4 +
 docs/cpp/search/all_13.js                          |    6 +
 docs/cpp/search/all_2.js                           |   17 +
 docs/cpp/search/all_3.js                           |    9 +
 docs/cpp/search/all_4.js                           |   10 +
 docs/cpp/search/all_5.js                           |    4 +
 docs/cpp/search/all_6.js                           |    6 +
 docs/cpp/search/all_7.js                           |   10 +
 docs/cpp/search/all_8.js                           |    4 +
 docs/cpp/search/all_9.js                           |    5 +
 docs/cpp/search/all_a.js                           |   16 +
 docs/cpp/search/all_b.js                           |    6 +
 docs/cpp/search/all_c.js                           |   16 +
 docs/cpp/search/all_d.js                           |    7 +
 docs/cpp/search/all_e.js                           |    6 +
 docs/cpp/search/all_f.js                           |    7 +
 docs/cpp/search/classes_0.js                       |    4 +
 docs/cpp/search/classes_1.js                       |    4 +
 docs/cpp/search/classes_2.js                       |    5 +
 docs/cpp/search/classes_3.js                       |    4 +
 docs/cpp/search/classes_4.js                       |    4 +
 docs/cpp/search/classes_5.js                       |    6 +
 docs/cpp/search/close.svg                          |   18 +
 docs/cpp/search/enums_0.js                         |    4 +
 docs/cpp/search/enumvalues_0.js                    |    4 +
 docs/cpp/search/enumvalues_1.js                    |    4 +
 docs/cpp/search/enumvalues_2.js                    |    4 +
 docs/cpp/search/files_0.js                         |    4 +
 docs/cpp/search/files_1.js                         |    4 +
 docs/cpp/search/files_2.js                         |    5 +
 docs/cpp/search/files_3.js                         |    4 +
 docs/cpp/search/functions_0.js                     |    4 +
 docs/cpp/search/functions_1.js                     |    4 +
 docs/cpp/search/functions_2.js                     |    6 +
 docs/cpp/search/functions_3.js                     |    4 +
 docs/cpp/search/functions_4.js                     |    5 +
 docs/cpp/search/functions_5.js                     |    5 +
 docs/cpp/search/functions_6.js                     |    5 +
 docs/cpp/search/functions_7.js                     |    4 +
 docs/cpp/search/functions_8.js                     |    8 +
 docs/cpp/search/functions_9.js                     |   10 +
 docs/cpp/search/functions_a.js                     |    7 +
 docs/cpp/search/functions_b.js                     |    5 +
 docs/cpp/search/functions_c.js                     |    4 +
 docs/cpp/search/functions_d.js                     |    4 +
 docs/cpp/search/functions_e.js                     |    6 +
 docs/cpp/search/mag.svg                            |   24 +
 docs/cpp/search/mag_d.svg                          |   24 +
 docs/cpp/search/mag_sel.svg                        |   31 +
 docs/cpp/search/mag_seld.svg                       |   31 +
 docs/cpp/search/namespaces_0.js                    |    6 +
 docs/cpp/search/pages_0.js                         |    4 +
 docs/cpp/search/pages_1.js                         |    4 +
 docs/cpp/search/pages_2.js                         |    4 +
 docs/cpp/search/pages_3.js                         |    4 +
 docs/cpp/search/pages_4.js                         |    4 +
 docs/cpp/search/related_0.js                       |    4 +
 docs/cpp/search/related_1.js                       |    4 +
 docs/cpp/search/search.css                         |  291 +
 docs/cpp/search/search.js                          |  840 +++
 docs/cpp/search/searchdata.js                      |   45 +
 docs/cpp/search/typedefs_0.js                      |    5 +
 docs/cpp/search/typedefs_1.js                      |    5 +
 docs/cpp/search/typedefs_2.js                      |    4 +
 docs/cpp/search/typedefs_3.js                      |    4 +
 docs/cpp/search/typedefs_4.js                      |    5 +
 docs/cpp/search/typedefs_5.js                      |    4 +
 docs/cpp/search/typedefs_6.js                      |    4 +
 docs/cpp/search/typedefs_7.js                      |    8 +
 docs/cpp/search/typedefs_8.js                      |    4 +
 docs/cpp/search/typedefs_9.js                      |    4 +
 docs/cpp/search/variables_0.js                     |    8 +
 docs/cpp/search/variables_1.js                     |    4 +
 docs/cpp/search/variables_2.js                     |    4 +
 docs/cpp/search/variables_3.js                     |    4 +
 docs/cpp/search/variables_4.js                     |    4 +
 docs/cpp/splitbar.png                              |  Bin 0 -> 314 bytes
 docs/cpp/splitbard.png                             |  Bin 0 -> 282 bytes
 docs/cpp/sync_off.png                              |  Bin 0 -> 853 bytes
 docs/cpp/sync_on.png                               |  Bin 0 -> 845 bytes
 docs/cpp/tab_a.png                                 |  Bin 0 -> 142 bytes
 docs/cpp/tab_ad.png                                |  Bin 0 -> 135 bytes
 docs/cpp/tab_b.png                                 |  Bin 0 -> 169 bytes
 docs/cpp/tab_bd.png                                |  Bin 0 -> 173 bytes
 docs/cpp/tab_h.png                                 |  Bin 0 -> 177 bytes
 docs/cpp/tab_hd.png                                |  Bin 0 -> 180 bytes
 docs/cpp/tab_s.png                                 |  Bin 0 -> 184 bytes
 docs/cpp/tab_sd.png                                |  Bin 0 -> 188 bytes
 docs/cpp/tabs.css                                  |    1 +
 docs/dav-server-opendalfs/crates.js                |    2 +
 .../dav_server_opendalfs/all.html                  |    1 +
 .../dav_server_opendalfs/fs/struct.OpendalFs.html  |   11 +
 .../dav_server_opendalfs/index.html                |   25 +
 .../dav_server_opendalfs/sidebar-items.js          |    1 +
 .../dav_server_opendalfs/struct.OpendalFs.html     |  158 +
 docs/dav-server-opendalfs/help.html                |    1 +
 docs/dav-server-opendalfs/search-index.js          |    4 +
 .../dav_server_opendalfs-desc-0-.js                |    1 +
 docs/dav-server-opendalfs/settings.html            |    1 +
 docs/dav-server-opendalfs/src-files.js             |    3 +
 .../src/dav_server_opendalfs/dir.rs.html           |   97 +
 .../src/dav_server_opendalfs/file.rs.html          |  170 +
 .../src/dav_server_opendalfs/fs.rs.html            |  207 +
 .../src/dav_server_opendalfs/lib.rs.html           |   52 +
 .../src/dav_server_opendalfs/metadata.rs.html      |   65 +
 .../src/dav_server_opendalfs/utils.rs.html         |   26 +
 .../static.files/COPYRIGHT-7fb11f4e.txt            |   71 +
 .../static.files/FiraMono-Medium-86f75c8c.woff2    |  Bin 0 -> 64572 bytes
 .../static.files/FiraMono-Regular-87c26294.woff2   |  Bin 0 -> 64868 bytes
 .../static.files/FiraSans-Italic-81dc35de.woff2    |  Bin 0 -> 136300 bytes
 .../static.files/FiraSans-LICENSE-05ab6dbd.txt     |   98 +
 .../static.files/FiraSans-Medium-e1aa3f0a.woff2    |  Bin 0 -> 132780 bytes
 .../FiraSans-MediumItalic-ccf7e434.woff2           |  Bin 0 -> 140588 bytes
 .../static.files/FiraSans-Regular-0fe48ade.woff2   |  Bin 0 -> 129188 bytes
 .../static.files/LICENSE-APACHE-a60eea81.txt       |  201 +
 .../static.files/LICENSE-MIT-23f18e03.txt          |   23 +
 .../NanumBarunGothic-13b3dcba.ttf.woff2            |  Bin 0 -> 399468 bytes
 .../NanumBarunGothic-LICENSE-a37d393b.txt          |  103 +
 .../SourceCodePro-It-fc8b9304.ttf.woff2            |  Bin 0 -> 44896 bytes
 .../SourceCodePro-LICENSE-67f54ca7.txt             |   97 +
 .../SourceCodePro-Regular-8badfe75.ttf.woff2       |  Bin 0 -> 52228 bytes
 .../SourceCodePro-Semibold-aa29a496.ttf.woff2      |  Bin 0 -> 52348 bytes
 .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2           |  Bin 0 -> 81540 bytes
 .../SourceSerif4-It-ca3b17ed.ttf.woff2             |  Bin 0 -> 59716 bytes
 .../static.files/SourceSerif4-LICENSE-a2cfd9d5.md  |   98 +
 .../SourceSerif4-Regular-6b053e98.ttf.woff2        |  Bin 0 -> 76260 bytes
 .../SourceSerif4-Semibold-457a13ac.ttf.woff2       |  Bin 0 -> 80732 bytes
 .../static.files/favicon-044be391.svg              |   24 +
 .../static.files/favicon-32x32-6580c154.png        |  Bin 0 -> 1125 bytes
 .../static.files/main-fb8c74a8.js                  |   11 +
 .../static.files/normalize-9960930a.css            |    2 +
 .../static.files/noscript-893ab5e7.css             |    1 +
 .../static.files/rust-logo-9a9549ea.svg            |   61 +
 .../static.files/rustdoc-916cea96.css              |   63 +
 .../static.files/scrape-examples-5e967b76.js       |    1 +
 .../static.files/search-e7298875.js                |    6 +
 .../static.files/settings-d72f25bb.js              |   17 +
 .../static.files/src-script-b8d3f215.js            |    1 +
 .../static.files/storage-d8ac8691.js               |   23 +
 .../trait.impl/core/clone/trait.Clone.js           |    9 +
 .../trait.impl/core/marker/trait.Freeze.js         |    9 +
 .../trait.impl/core/marker/trait.Send.js           |    9 +
 .../trait.impl/core/marker/trait.Sync.js           |    9 +
 .../trait.impl/core/marker/trait.Unpin.js          |    9 +
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    9 +
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    9 +
 .../dav_server/fs/trait.DavFileSystem.js           |    9 +
 docs/fuse3-opendal/crates.js                       |    2 +
 docs/fuse3-opendal/fuse3_opendal/all.html          |    1 +
 .../file_system/struct.Filesystem.html             |   11 +
 docs/fuse3-opendal/fuse3_opendal/index.html        |   37 +
 docs/fuse3-opendal/fuse3_opendal/sidebar-items.js  |    1 +
 .../fuse3_opendal/struct.Filesystem.html           |  375 ++
 docs/fuse3-opendal/help.html                       |    1 +
 docs/fuse3-opendal/search-index.js                 |    4 +
 .../fuse3_opendal/fuse3_opendal-desc-0-.js         |    1 +
 docs/fuse3-opendal/settings.html                   |    1 +
 docs/fuse3-opendal/src-files.js                    |    3 +
 docs/fuse3-opendal/src/fuse3_opendal/file.rs.html  |   67 +
 .../src/fuse3_opendal/file_system.rs.html          |  823 +++
 docs/fuse3-opendal/src/fuse3_opendal/lib.rs.html   |   60 +
 .../static.files/COPYRIGHT-7fb11f4e.txt            |   71 +
 .../static.files/FiraMono-Medium-86f75c8c.woff2    |  Bin 0 -> 64572 bytes
 .../static.files/FiraMono-Regular-87c26294.woff2   |  Bin 0 -> 64868 bytes
 .../static.files/FiraSans-Italic-81dc35de.woff2    |  Bin 0 -> 136300 bytes
 .../static.files/FiraSans-LICENSE-05ab6dbd.txt     |   98 +
 .../static.files/FiraSans-Medium-e1aa3f0a.woff2    |  Bin 0 -> 132780 bytes
 .../FiraSans-MediumItalic-ccf7e434.woff2           |  Bin 0 -> 140588 bytes
 .../static.files/FiraSans-Regular-0fe48ade.woff2   |  Bin 0 -> 129188 bytes
 .../static.files/LICENSE-APACHE-a60eea81.txt       |  201 +
 .../static.files/LICENSE-MIT-23f18e03.txt          |   23 +
 .../NanumBarunGothic-13b3dcba.ttf.woff2            |  Bin 0 -> 399468 bytes
 .../NanumBarunGothic-LICENSE-a37d393b.txt          |  103 +
 .../SourceCodePro-It-fc8b9304.ttf.woff2            |  Bin 0 -> 44896 bytes
 .../SourceCodePro-LICENSE-67f54ca7.txt             |   97 +
 .../SourceCodePro-Regular-8badfe75.ttf.woff2       |  Bin 0 -> 52228 bytes
 .../SourceCodePro-Semibold-aa29a496.ttf.woff2      |  Bin 0 -> 52348 bytes
 .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2           |  Bin 0 -> 81540 bytes
 .../SourceSerif4-It-ca3b17ed.ttf.woff2             |  Bin 0 -> 59716 bytes
 .../static.files/SourceSerif4-LICENSE-a2cfd9d5.md  |   98 +
 .../SourceSerif4-Regular-6b053e98.ttf.woff2        |  Bin 0 -> 76260 bytes
 .../SourceSerif4-Semibold-457a13ac.ttf.woff2       |  Bin 0 -> 80732 bytes
 .../static.files/favicon-044be391.svg              |   24 +
 .../static.files/favicon-32x32-6580c154.png        |  Bin 0 -> 1125 bytes
 docs/fuse3-opendal/static.files/main-fb8c74a8.js   |   11 +
 .../static.files/normalize-9960930a.css            |    2 +
 .../static.files/noscript-893ab5e7.css             |    1 +
 .../static.files/rust-logo-9a9549ea.svg            |   61 +
 .../static.files/rustdoc-916cea96.css              |   63 +
 .../static.files/scrape-examples-5e967b76.js       |    1 +
 docs/fuse3-opendal/static.files/search-e7298875.js |    6 +
 .../static.files/settings-d72f25bb.js              |   17 +
 .../static.files/src-script-b8d3f215.js            |    1 +
 .../fuse3-opendal/static.files/storage-d8ac8691.js |   23 +
 .../trait.impl/core/marker/trait.Freeze.js         |    9 +
 .../trait.impl/core/marker/trait.Send.js           |    9 +
 .../trait.impl/core/marker/trait.Sync.js           |    9 +
 .../trait.impl/core/marker/trait.Unpin.js          |    9 +
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    9 +
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    9 +
 .../path/path_filesystem/trait.PathFilesystem.js   |    9 +
 docs/haskell/CONTRIBUTING.md                       |   93 +
 docs/haskell/OpenDAL.html                          |   25 +
 docs/haskell/README.md                             |   64 +
 docs/haskell/doc-index.html                        |    1 +
 docs/haskell/doc-index.json                        |    1 +
 docs/haskell/haddock-bundle.min.js                 |    2 +
 docs/haskell/index.html                            |    1 +
 docs/haskell/linuwial.css                          |  877 +++
 docs/haskell/meta.json                             |    1 +
 docs/haskell/opendal.haddock                       |  Bin 0 -> 8446 bytes
 docs/haskell/quick-jump.css                        |  221 +
 docs/haskell/quick-jump.min.js                     |    2 +
 docs/haskell/src/OpenDAL.FFI.html                  |  521 ++
 docs/haskell/src/OpenDAL.html                      | 2189 +++++++
 docs/haskell/src/highlight.js                      |   27 +
 docs/haskell/src/style.css                         |   97 +
 docs/haskell/synopsis.png                          |  Bin 0 -> 11327 bytes
 docs/java/allclasses-index.html                    |  395 ++
 docs/java/allpackages-index.html                   |   75 +
 docs/java/constant-values.html                     |  120 +
 docs/java/deprecated-list.html                     |   85 +
 docs/java/element-list                             |    2 +
 docs/java/help-doc.html                            |  201 +
 docs/java/index-all.html                           | 2658 ++++++++
 docs/java/index.html                               |   77 +
 docs/java/jquery-ui.overrides.css                  |   35 +
 docs/java/legal/ADDITIONAL_LICENSE_INFO            |   37 +
 docs/java/legal/ASSEMBLY_EXCEPTION                 |   27 +
 docs/java/legal/LICENSE                            |  347 +
 docs/java/legal/jquery.md                          |   26 +
 docs/java/legal/jqueryUI.md                        |   49 +
 docs/java/member-search-index.js                   |    1 +
 docs/java/module-search-index.js                   |    1 +
 docs/java/org/apache/opendal/AsyncExecutor.html    |  176 +
 docs/java/org/apache/opendal/AsyncOperator.html    |  535 ++
 docs/java/org/apache/opendal/Capability.html       |  698 ++
 docs/java/org/apache/opendal/Entry.html            |  172 +
 docs/java/org/apache/opendal/Environment.html      |  284 +
 docs/java/org/apache/opendal/Layer.html            |  167 +
 docs/java/org/apache/opendal/ListOptions.html      |  224 +
 .../org/apache/opendal/Metadata.EntryMode.html     |  252 +
 docs/java/org/apache/opendal/Metadata.html         |  351 +
 docs/java/org/apache/opendal/NativeLibrary.html    |  190 +
 docs/java/org/apache/opendal/NativeObject.html     |  272 +
 docs/java/org/apache/opendal/OpenDAL.html          |  164 +
 .../org/apache/opendal/OpenDALException.Code.html  |  312 +
 docs/java/org/apache/opendal/OpenDALException.html |  230 +
 docs/java/org/apache/opendal/Operator.html         |  445 ++
 docs/java/org/apache/opendal/OperatorInfo.html     |  210 +
 .../org/apache/opendal/OperatorInputStream.html    |  201 +
 .../org/apache/opendal/OperatorOutputStream.html   |  231 +
 docs/java/org/apache/opendal/PresignedRequest.html |  132 +
 docs/java/org/apache/opendal/ReadOptions.html      |  184 +
 .../apache/opendal/ServiceConfig.AliyunDrive.html  |  314 +
 .../org/apache/opendal/ServiceConfig.Alluxio.html  |  258 +
 .../apache/opendal/ServiceConfig.Atomicserver.html |  291 +
 .../org/apache/opendal/ServiceConfig.Azblob.html   |  358 ++
 .../org/apache/opendal/ServiceConfig.Azdls.html    |  292 +
 .../org/apache/opendal/ServiceConfig.Azfile.html   |  304 +
 docs/java/org/apache/opendal/ServiceConfig.B2.html |  304 +
 .../org/apache/opendal/ServiceConfig.Cacache.html  |  243 +
 .../apache/opendal/ServiceConfig.CloudflareKv.html |  279 +
 .../org/apache/opendal/ServiceConfig.Compfs.html   |  244 +
 .../java/org/apache/opendal/ServiceConfig.Cos.html |  315 +
 docs/java/org/apache/opendal/ServiceConfig.D1.html |  315 +
 .../org/apache/opendal/ServiceConfig.Dashmap.html  |  243 +
 .../org/apache/opendal/ServiceConfig.Dbfs.html     |  267 +
 .../org/apache/opendal/ServiceConfig.Dropbox.html  |  291 +
 .../org/apache/opendal/ServiceConfig.Etcd.html     |  324 +
 docs/java/org/apache/opendal/ServiceConfig.Fs.html |  255 +
 .../java/org/apache/opendal/ServiceConfig.Gcs.html |  395 ++
 .../org/apache/opendal/ServiceConfig.Gdrive.html   |  291 +
 .../org/apache/opendal/ServiceConfig.Ghac.html     |  279 +
 .../org/apache/opendal/ServiceConfig.Github.html   |  287 +
 .../org/apache/opendal/ServiceConfig.Gridfs.html   |  291 +
 .../apache/opendal/ServiceConfig.HdfsNative.html   |  267 +
 .../org/apache/opendal/ServiceConfig.Http.html     |  291 +
 .../apache/opendal/ServiceConfig.Huggingface.html  |  300 +
 .../org/apache/opendal/ServiceConfig.Icloud.html   |  311 +
 .../org/apache/opendal/ServiceConfig.Ipfs.html     |  255 +
 .../org/apache/opendal/ServiceConfig.Ipmfs.html    |  255 +
 .../org/apache/opendal/ServiceConfig.Koofr.html    |  282 +
 .../org/apache/opendal/ServiceConfig.Lakefs.html   |  309 +
 .../apache/opendal/ServiceConfig.Memcached.html    |  293 +
 .../org/apache/opendal/ServiceConfig.Memory.html   |  243 +
 .../org/apache/opendal/ServiceConfig.MiniMoka.html |  282 +
 .../org/apache/opendal/ServiceConfig.Moka.html     |  307 +
 .../org/apache/opendal/ServiceConfig.Mongodb.html  |  303 +
 .../org/apache/opendal/ServiceConfig.Monoiofs.html |  245 +
 .../org/apache/opendal/ServiceConfig.Mysql.html    |  300 +
 .../apache/opendal/ServiceConfig.NebulaGraph.html  |  339 +
 .../java/org/apache/opendal/ServiceConfig.Obs.html |  303 +
 .../org/apache/opendal/ServiceConfig.Onedrive.html |  303 +
 .../org/apache/opendal/ServiceConfig.Opfs.html     |  211 +
 .../java/org/apache/opendal/ServiceConfig.Oss.html |  455 ++
 .../org/apache/opendal/ServiceConfig.Pcloud.html   |  281 +
 .../org/apache/opendal/ServiceConfig.Persy.html    |  267 +
 .../apache/opendal/ServiceConfig.Postgresql.html   |  300 +
 .../org/apache/opendal/ServiceConfig.Redb.html     |  267 +
 .../org/apache/opendal/ServiceConfig.Redis.html    |  321 +
 docs/java/org/apache/opendal/ServiceConfig.S3.html |  670 ++
 .../org/apache/opendal/ServiceConfig.Seafile.html  |  294 +
 .../org/apache/opendal/ServiceConfig.Sftp.html     |  303 +
 .../org/apache/opendal/ServiceConfig.Sled.html     |  267 +
 .../org/apache/opendal/ServiceConfig.Sqlite.html   |  302 +
 .../apache/opendal/ServiceConfig.Surrealdb.html    |  339 +
 .../org/apache/opendal/ServiceConfig.Swift.html    |  279 +
 .../org/apache/opendal/ServiceConfig.Upyun.html    |  281 +
 .../opendal/ServiceConfig.VercelArtifacts.html     |  243 +
 .../apache/opendal/ServiceConfig.VercelBlob.html   |  256 +
 .../org/apache/opendal/ServiceConfig.Webdav.html   |  303 +
 .../org/apache/opendal/ServiceConfig.Webhdfs.html  |  303 +
 .../apache/opendal/ServiceConfig.YandexDisk.html   |  257 +
 docs/java/org/apache/opendal/ServiceConfig.html    |  470 ++
 docs/java/org/apache/opendal/StatOptions.html      |  132 +
 docs/java/org/apache/opendal/WriteOptions.html     |  314 +
 .../apache/opendal/class-use/AsyncExecutor.html    |  108 +
 .../apache/opendal/class-use/AsyncOperator.html    |  120 +
 .../org/apache/opendal/class-use/Capability.html   |  105 +
 docs/java/org/apache/opendal/class-use/Entry.html  |  100 +
 .../org/apache/opendal/class-use/Environment.html  |   97 +
 docs/java/org/apache/opendal/class-use/Layer.html  |  117 +
 .../org/apache/opendal/class-use/ListOptions.html  |   94 +
 .../opendal/class-use/Metadata.EntryMode.html      |  111 +
 .../org/apache/opendal/class-use/Metadata.html     |  125 +
 .../apache/opendal/class-use/NativeLibrary.html    |   62 +
 .../org/apache/opendal/class-use/NativeObject.html |  102 +
 .../java/org/apache/opendal/class-use/OpenDAL.html |   62 +
 .../opendal/class-use/OpenDALException.Code.html   |  112 +
 .../apache/opendal/class-use/OpenDALException.html |   62 +
 .../org/apache/opendal/class-use/Operator.html     |  124 +
 .../org/apache/opendal/class-use/OperatorInfo.html |   92 +
 .../opendal/class-use/OperatorInputStream.html     |   89 +
 .../opendal/class-use/OperatorOutputStream.html    |   93 +
 .../apache/opendal/class-use/PresignedRequest.html |   98 +
 .../org/apache/opendal/class-use/ReadOptions.html  |   94 +
 .../class-use/ServiceConfig.AliyunDrive.html       |   62 +
 .../opendal/class-use/ServiceConfig.Alluxio.html   |   62 +
 .../class-use/ServiceConfig.Atomicserver.html      |   62 +
 .../opendal/class-use/ServiceConfig.Azblob.html    |   62 +
 .../opendal/class-use/ServiceConfig.Azdls.html     |   62 +
 .../opendal/class-use/ServiceConfig.Azfile.html    |   62 +
 .../apache/opendal/class-use/ServiceConfig.B2.html |   62 +
 .../opendal/class-use/ServiceConfig.Cacache.html   |   62 +
 .../class-use/ServiceConfig.CloudflareKv.html      |   62 +
 .../opendal/class-use/ServiceConfig.Compfs.html    |   62 +
 .../opendal/class-use/ServiceConfig.Cos.html       |   62 +
 .../apache/opendal/class-use/ServiceConfig.D1.html |   62 +
 .../opendal/class-use/ServiceConfig.Dashmap.html   |   62 +
 .../opendal/class-use/ServiceConfig.Dbfs.html      |   62 +
 .../opendal/class-use/ServiceConfig.Dropbox.html   |   62 +
 .../opendal/class-use/ServiceConfig.Etcd.html      |   62 +
 .../apache/opendal/class-use/ServiceConfig.Fs.html |   62 +
 .../opendal/class-use/ServiceConfig.Gcs.html       |   62 +
 .../opendal/class-use/ServiceConfig.Gdrive.html    |   62 +
 .../opendal/class-use/ServiceConfig.Ghac.html      |   62 +
 .../opendal/class-use/ServiceConfig.Github.html    |   62 +
 .../opendal/class-use/ServiceConfig.Gridfs.html    |   62 +
 .../class-use/ServiceConfig.HdfsNative.html        |   62 +
 .../opendal/class-use/ServiceConfig.Http.html      |   62 +
 .../class-use/ServiceConfig.Huggingface.html       |   62 +
 .../opendal/class-use/ServiceConfig.Icloud.html    |   62 +
 .../opendal/class-use/ServiceConfig.Ipfs.html      |   62 +
 .../opendal/class-use/ServiceConfig.Ipmfs.html     |   62 +
 .../opendal/class-use/ServiceConfig.Koofr.html     |   62 +
 .../opendal/class-use/ServiceConfig.Lakefs.html    |   62 +
 .../opendal/class-use/ServiceConfig.Memcached.html |   62 +
 .../opendal/class-use/ServiceConfig.Memory.html    |   62 +
 .../opendal/class-use/ServiceConfig.MiniMoka.html  |   62 +
 .../opendal/class-use/ServiceConfig.Moka.html      |   62 +
 .../opendal/class-use/ServiceConfig.Mongodb.html   |   62 +
 .../opendal/class-use/ServiceConfig.Monoiofs.html  |   62 +
 .../opendal/class-use/ServiceConfig.Mysql.html     |   62 +
 .../class-use/ServiceConfig.NebulaGraph.html       |   62 +
 .../opendal/class-use/ServiceConfig.Obs.html       |   62 +
 .../opendal/class-use/ServiceConfig.Onedrive.html  |   62 +
 .../opendal/class-use/ServiceConfig.Opfs.html      |   62 +
 .../opendal/class-use/ServiceConfig.Oss.html       |   62 +
 .../opendal/class-use/ServiceConfig.Pcloud.html    |   62 +
 .../opendal/class-use/ServiceConfig.Persy.html     |   62 +
 .../class-use/ServiceConfig.Postgresql.html        |   62 +
 .../opendal/class-use/ServiceConfig.Redb.html      |   62 +
 .../opendal/class-use/ServiceConfig.Redis.html     |   62 +
 .../apache/opendal/class-use/ServiceConfig.S3.html |   62 +
 .../opendal/class-use/ServiceConfig.Seafile.html   |   62 +
 .../opendal/class-use/ServiceConfig.Sftp.html      |   62 +
 .../opendal/class-use/ServiceConfig.Sled.html      |   62 +
 .../opendal/class-use/ServiceConfig.Sqlite.html    |   62 +
 .../opendal/class-use/ServiceConfig.Surrealdb.html |   62 +
 .../opendal/class-use/ServiceConfig.Swift.html     |   62 +
 .../opendal/class-use/ServiceConfig.Upyun.html     |   62 +
 .../class-use/ServiceConfig.VercelArtifacts.html   |   62 +
 .../class-use/ServiceConfig.VercelBlob.html        |   62 +
 .../opendal/class-use/ServiceConfig.Webdav.html    |   62 +
 .../opendal/class-use/ServiceConfig.Webhdfs.html   |   62 +
 .../class-use/ServiceConfig.YandexDisk.html        |   62 +
 .../apache/opendal/class-use/ServiceConfig.html    |  408 ++
 .../org/apache/opendal/class-use/StatOptions.html  |   94 +
 .../org/apache/opendal/class-use/WriteOptions.html |  106 +
 .../apache/opendal/layer/ConcurrentLimitLayer.html |  186 +
 docs/java/org/apache/opendal/layer/RetryLayer.html |  179 +
 .../layer/class-use/ConcurrentLimitLayer.html      |   62 +
 .../apache/opendal/layer/class-use/RetryLayer.html |   62 +
 .../org/apache/opendal/layer/package-summary.html  |  110 +
 .../org/apache/opendal/layer/package-tree.html     |   81 +
 .../java/org/apache/opendal/layer/package-use.html |   62 +
 docs/java/org/apache/opendal/package-summary.html  |  418 ++
 docs/java/org/apache/opendal/package-tree.html     |  199 +
 docs/java/org/apache/opendal/package-use.html      |  158 +
 docs/java/overview-summary.html                    |   25 +
 docs/java/overview-tree.html                       |  205 +
 docs/java/package-search-index.js                  |    1 +
 docs/java/resources/glass.png                      |  Bin 0 -> 499 bytes
 docs/java/resources/x.png                          |  Bin 0 -> 394 bytes
 docs/java/script-dir/jquery-3.7.1.min.js           |    2 +
 docs/java/script-dir/jquery-ui.min.css             |    6 +
 docs/java/script-dir/jquery-ui.min.js              |    6 +
 docs/java/script.js                                |  132 +
 docs/java/search.js                                |  354 ++
 docs/java/serialized-form.html                     |   90 +
 docs/java/stylesheet.css                           |  869 +++
 docs/java/tag-search-index.js                      |    1 +
 docs/java/type-search-index.js                     |    1 +
 docs/lua/classes/opendal.metadata.html             |  146 +
 docs/lua/classes/opendal.operator.html             |  329 +
 docs/lua/index.html                                |   65 +
 docs/lua/ldoc.css                                  |  304 +
 docs/nodejs/assets/hierarchy.js                    |    1 +
 docs/nodejs/assets/highlight.css                   |   99 +
 docs/nodejs/assets/icons.js                        |   18 +
 docs/nodejs/assets/icons.svg                       |    1 +
 docs/nodejs/assets/main.js                         |   60 +
 docs/nodejs/assets/navigation.js                   |    1 +
 docs/nodejs/assets/search.js                       |    1 +
 docs/nodejs/assets/style.css                       | 1640 +++++
 docs/nodejs/classes/index.BlockingLister.html      |    5 +
 docs/nodejs/classes/index.BlockingReader.html      |    7 +
 docs/nodejs/classes/index.BlockingWriter.html      |   22 +
 docs/nodejs/classes/index.Capability.html          |  112 +
 docs/nodejs/classes/index.Entry.html               |    7 +
 docs/nodejs/classes/index.ExternalObject.html      |    3 +
 docs/nodejs/classes/index.Layer.html               |    3 +
 docs/nodejs/classes/index.Lister.html              |   10 +
 docs/nodejs/classes/index.Metadata.html            |   33 +
 docs/nodejs/classes/index.Operator.html            |  186 +
 docs/nodejs/classes/index.Reader.html              |   11 +
 docs/nodejs/classes/index.RetryLayer.html          |   35 +
 docs/nodejs/classes/index.Writer.html              |   22 +
 docs/nodejs/documents/CONTRIBUTING.html            |   65 +
 docs/nodejs/documents/upgrade.html                 |    9 +
 docs/nodejs/enums/index.EntryMode.html             |    7 +
 docs/nodejs/hierarchy.html                         |    1 +
 docs/nodejs/index.html                             |   46 +
 docs/nodejs/interfaces/index.DeleteOptions.html    |    2 +
 docs/nodejs/interfaces/index.ListOptions.html      |   31 +
 docs/nodejs/interfaces/index.PresignedRequest.html |    8 +
 docs/nodejs/interfaces/index.ReadOptions.html      |   54 +
 docs/nodejs/interfaces/index.ReaderOptions.html    |   39 +
 docs/nodejs/interfaces/index.StatOptions.html      |   29 +
 docs/nodejs/interfaces/index.WriteOptions.html     |   59 +
 docs/nodejs/modules.html                           |    1 +
 docs/nodejs/modules/index.html                     |    1 +
 docs/object-store-opendal/crates.js                |    2 +
 docs/object-store-opendal/help.html                |    1 +
 .../object_store_opendal/all.html                  |    1 +
 .../object_store_opendal/index.html                |   42 +
 .../object_store_opendal/sidebar-items.js          |    1 +
 .../store/struct.OpendalStore.html                 |   11 +
 .../object_store_opendal/struct.OpendalStore.html  |  200 +
 docs/object-store-opendal/search-index.js          |    4 +
 .../object_store_opendal-desc-0-.js                |    1 +
 docs/object-store-opendal/settings.html            |    1 +
 docs/object-store-opendal/src-files.js             |    3 +
 .../src/object_store_opendal/amazon_s3.rs.html     |   78 +
 .../src/object_store_opendal/lib.rs.html           |   95 +
 .../src/object_store_opendal/store.rs.html         |  756 +++
 .../src/object_store_opendal/utils.rs.html         |  147 +
 .../static.files/COPYRIGHT-7fb11f4e.txt            |   71 +
 .../static.files/FiraMono-Medium-86f75c8c.woff2    |  Bin 0 -> 64572 bytes
 .../static.files/FiraMono-Regular-87c26294.woff2   |  Bin 0 -> 64868 bytes
 .../static.files/FiraSans-Italic-81dc35de.woff2    |  Bin 0 -> 136300 bytes
 .../static.files/FiraSans-LICENSE-05ab6dbd.txt     |   98 +
 .../static.files/FiraSans-Medium-e1aa3f0a.woff2    |  Bin 0 -> 132780 bytes
 .../FiraSans-MediumItalic-ccf7e434.woff2           |  Bin 0 -> 140588 bytes
 .../static.files/FiraSans-Regular-0fe48ade.woff2   |  Bin 0 -> 129188 bytes
 .../static.files/LICENSE-APACHE-a60eea81.txt       |  201 +
 .../static.files/LICENSE-MIT-23f18e03.txt          |   23 +
 .../NanumBarunGothic-13b3dcba.ttf.woff2            |  Bin 0 -> 399468 bytes
 .../NanumBarunGothic-LICENSE-a37d393b.txt          |  103 +
 .../SourceCodePro-It-fc8b9304.ttf.woff2            |  Bin 0 -> 44896 bytes
 .../SourceCodePro-LICENSE-67f54ca7.txt             |   97 +
 .../SourceCodePro-Regular-8badfe75.ttf.woff2       |  Bin 0 -> 52228 bytes
 .../SourceCodePro-Semibold-aa29a496.ttf.woff2      |  Bin 0 -> 52348 bytes
 .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2           |  Bin 0 -> 81540 bytes
 .../SourceSerif4-It-ca3b17ed.ttf.woff2             |  Bin 0 -> 59716 bytes
 .../static.files/SourceSerif4-LICENSE-a2cfd9d5.md  |   98 +
 .../SourceSerif4-Regular-6b053e98.ttf.woff2        |  Bin 0 -> 76260 bytes
 .../SourceSerif4-Semibold-457a13ac.ttf.woff2       |  Bin 0 -> 80732 bytes
 .../static.files/favicon-044be391.svg              |   24 +
 .../static.files/favicon-32x32-6580c154.png        |  Bin 0 -> 1125 bytes
 .../static.files/main-fb8c74a8.js                  |   11 +
 .../static.files/normalize-9960930a.css            |    2 +
 .../static.files/noscript-893ab5e7.css             |    1 +
 .../static.files/rust-logo-9a9549ea.svg            |   61 +
 .../static.files/rustdoc-916cea96.css              |   63 +
 .../static.files/scrape-examples-5e967b76.js       |    1 +
 .../static.files/search-e7298875.js                |    6 +
 .../static.files/settings-d72f25bb.js              |   17 +
 .../static.files/src-script-b8d3f215.js            |    1 +
 .../static.files/storage-d8ac8691.js               |   23 +
 .../trait.impl/core/clone/trait.Clone.js           |    9 +
 .../trait.impl/core/convert/trait.From.js          |    9 +
 .../trait.impl/core/fmt/trait.Debug.js             |    9 +
 .../trait.impl/core/fmt/trait.Display.js           |    9 +
 .../trait.impl/core/marker/trait.Freeze.js         |    9 +
 .../trait.impl/core/marker/trait.Send.js           |    9 +
 .../trait.impl/core/marker/trait.Sync.js           |    9 +
 .../trait.impl/core/marker/trait.Unpin.js          |    9 +
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    9 +
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    9 +
 .../trait.impl/object_store/trait.ObjectStore.js   |    9 +
 docs/ocaml/index.html                              |   19 +
 .../odoc.support/fonts/KaTeX_AMS-Regular.woff2     |  Bin 0 -> 28076 bytes
 .../fonts/KaTeX_Caligraphic-Bold.woff2             |  Bin 0 -> 6912 bytes
 .../fonts/KaTeX_Caligraphic-Regular.woff2          |  Bin 0 -> 6908 bytes
 .../odoc.support/fonts/KaTeX_Fraktur-Bold.woff2    |  Bin 0 -> 11348 bytes
 .../odoc.support/fonts/KaTeX_Fraktur-Regular.woff2 |  Bin 0 -> 11316 bytes
 .../ocaml/odoc.support/fonts/KaTeX_Main-Bold.woff2 |  Bin 0 -> 25324 bytes
 .../odoc.support/fonts/KaTeX_Main-BoldItalic.woff2 |  Bin 0 -> 16780 bytes
 .../odoc.support/fonts/KaTeX_Main-Italic.woff2     |  Bin 0 -> 16988 bytes
 .../odoc.support/fonts/KaTeX_Main-Regular.woff2    |  Bin 0 -> 26272 bytes
 .../odoc.support/fonts/KaTeX_Math-BoldItalic.woff2 |  Bin 0 -> 16400 bytes
 .../odoc.support/fonts/KaTeX_Math-Italic.woff2     |  Bin 0 -> 16440 bytes
 .../odoc.support/fonts/KaTeX_SansSerif-Bold.woff2  |  Bin 0 -> 12216 bytes
 .../fonts/KaTeX_SansSerif-Italic.woff2             |  Bin 0 -> 12028 bytes
 .../fonts/KaTeX_SansSerif-Regular.woff2            |  Bin 0 -> 10344 bytes
 .../odoc.support/fonts/KaTeX_Script-Regular.woff2  |  Bin 0 -> 9644 bytes
 .../odoc.support/fonts/KaTeX_Size1-Regular.woff2   |  Bin 0 -> 5468 bytes
 .../odoc.support/fonts/KaTeX_Size2-Regular.woff2   |  Bin 0 -> 5208 bytes
 .../odoc.support/fonts/KaTeX_Size3-Regular.woff2   |  Bin 0 -> 3624 bytes
 .../odoc.support/fonts/KaTeX_Size4-Regular.woff2   |  Bin 0 -> 4928 bytes
 .../fonts/KaTeX_Typewriter-Regular.woff2           |  Bin 0 -> 13568 bytes
 .../fonts/fira-mono-v14-latin-500.woff2            |  Bin 0 -> 16148 bytes
 .../fonts/fira-mono-v14-latin-regular.woff2        |  Bin 0 -> 16284 bytes
 .../fonts/fira-sans-v17-latin-500.woff2            |  Bin 0 -> 24020 bytes
 .../fonts/fira-sans-v17-latin-500italic.woff2      |  Bin 0 -> 24896 bytes
 .../fonts/fira-sans-v17-latin-700.woff2            |  Bin 0 -> 24964 bytes
 .../fonts/fira-sans-v17-latin-700italic.woff2      |  Bin 0 -> 26072 bytes
 .../fonts/fira-sans-v17-latin-italic.woff2         |  Bin 0 -> 24936 bytes
 .../fonts/fira-sans-v17-latin-regular.woff2        |  Bin 0 -> 23880 bytes
 .../fonts/noticia-text-v15-latin-700.woff2         |  Bin 0 -> 21972 bytes
 .../fonts/noticia-text-v15-latin-italic.woff2      |  Bin 0 -> 17356 bytes
 .../fonts/noticia-text-v15-latin-regular.woff2     |  Bin 0 -> 22308 bytes
 docs/ocaml/odoc.support/highlight.pack.js          |  634 ++
 docs/ocaml/odoc.support/katex.min.css              |    1 +
 docs/ocaml/odoc.support/katex.min.js               |    1 +
 docs/ocaml/odoc.support/odoc.css                   | 1627 +++++
 docs/ocaml/odoc.support/odoc_search.js             |  150 +
 .../opendal/Opendal/Operator/Entry/index.html      |    2 +
 .../opendal/Opendal/Operator/Metadata/index.html   |    2 +
 .../opendal/Opendal/Operator/Reader/index.html     |    6 +
 docs/ocaml/opendal/Opendal/Operator/index.html     |   44 +
 docs/ocaml/opendal/Opendal/index.html              |    2 +
 .../ocaml/opendal/Opendal_core/Operator/index.html |   20 +
 .../opendal/Opendal_core/Seek_from/index.html      |    2 +
 docs/ocaml/opendal/Opendal_core/index.html         |    2 +
 docs/ocaml/opendal/index.html                      |    2 +
 docs/python/404.html                               |  579 ++
 docs/python/api/async_file/index.html              | 1352 ++++
 docs/python/api/async_operator/index.html          | 2600 ++++++++
 docs/python/api/file/index.html                    | 1555 +++++
 docs/python/api/metadata/index.html                | 1186 ++++
 docs/python/api/operator/index.html                | 2209 +++++++
 docs/python/assets/_mkdocstrings.css               |  171 +
 docs/python/assets/images/favicon.png              |  Bin 0 -> 1870 bytes
 .../assets/javascripts/bundle.c8b220af.min.js      |   16 +
 .../assets/javascripts/bundle.c8b220af.min.js.map  |    7 +
 .../assets/javascripts/lunr/min/lunr.ar.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.da.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.de.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.du.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.el.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.es.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.fi.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.fr.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.he.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.hi.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.hu.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.hy.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.it.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.ja.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.jp.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.kn.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.ko.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.multi.min.js  |    1 +
 .../assets/javascripts/lunr/min/lunr.nl.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.no.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.pt.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.ro.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.ru.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.sa.min.js     |    1 +
 .../lunr/min/lunr.stemmer.support.min.js           |    1 +
 .../assets/javascripts/lunr/min/lunr.sv.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.ta.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.te.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.th.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.tr.min.js     |   18 +
 .../assets/javascripts/lunr/min/lunr.vi.min.js     |    1 +
 .../assets/javascripts/lunr/min/lunr.zh.min.js     |    1 +
 docs/python/assets/javascripts/lunr/tinyseg.js     |  206 +
 docs/python/assets/javascripts/lunr/wordcut.js     | 6708 ++++++++++++++++++++
 .../javascripts/workers/search.f8cc74c7.min.js     |   42 +
 .../javascripts/workers/search.f8cc74c7.min.js.map |    7 +
 .../assets/stylesheets/main.4af4bdda.min.css       |    1 +
 .../assets/stylesheets/main.4af4bdda.min.css.map   |    1 +
 .../assets/stylesheets/palette.06af60db.min.css    |    1 +
 .../stylesheets/palette.06af60db.min.css.map       |    1 +
 docs/python/examples/basic/basic.ipynb             |   46 +
 docs/python/examples/basic/index.html              | 1143 ++++
 docs/python/examples/pandas/index.html             | 1139 ++++
 docs/python/examples/pandas/pandas.ipynb           |   44 +
 docs/python/examples/polars/index.html             | 1149 ++++
 docs/python/examples/polars/polars.ipynb           |   49 +
 docs/python/index.html                             |  726 +++
 docs/python/objects.inv                            |    7 +
 docs/python/search/search_index.json               |    1 +
 docs/python/sitemap.xml                            |    3 +
 docs/python/sitemap.xml.gz                         |  Bin 0 -> 127 bytes
 docs/ruby/OpenDAL.html                             |  127 +
 docs/ruby/OpenDAL/Capability.html                  |  131 +
 docs/ruby/OpenDAL/ConcurrentLimitMiddleware.html   |  133 +
 docs/ruby/OpenDAL/Entry.html                       |  522 ++
 docs/ruby/OpenDAL/IO.html                          | 1770 ++++++
 docs/ruby/OpenDAL/Lister.html                      |  248 +
 docs/ruby/OpenDAL/Metadata.html                    |  852 +++
 docs/ruby/OpenDAL/Operator.html                    | 1531 +++++
 docs/ruby/OpenDAL/OperatorInfo.html                |  190 +
 docs/ruby/OpenDAL/RetryMiddleware.html             |  133 +
 docs/ruby/OpenDAL/ThrottleMiddleware.html          |  133 +
 docs/ruby/OpenDAL/TimeoutMiddleware.html           |  133 +
 docs/ruby/_index.html                              |  243 +
 docs/ruby/class_list.html                          |   54 +
 docs/ruby/css/common.css                           |    1 +
 docs/ruby/css/full_list.css                        |   58 +
 docs/ruby/css/style.css                            |  503 ++
 docs/ruby/file.README.html                         |   97 +
 docs/ruby/file_list.html                           |   59 +
 docs/ruby/frames.html                              |   22 +
 docs/ruby/index.html                               |   97 +
 docs/ruby/js/app.js                                |  344 +
 docs/ruby/js/full_list.js                          |  242 +
 docs/ruby/js/jquery.js                             |    4 +
 docs/ruby/method_list.html                         |  422 ++
 docs/ruby/top-level-namespace.html                 |  110 +
 docs/rust/crates.js                                |    2 +
 docs/rust/help.html                                |    1 +
 docs/rust/opendal/all.html                         |    1 +
 .../opendal/blocking/delete/struct.Deleter.html    |   11 +
 docs/rust/opendal/blocking/index.html              |    5 +
 docs/rust/opendal/blocking/list/struct.Lister.html |   11 +
 .../opendal/blocking/operator/struct.Operator.html |   11 +
 .../buffer_iterator/struct.BufferIterator.html     |   11 +
 .../blocking/read/reader/struct.Reader.html        |   11 +
 .../struct.StdBytesIterator.html                   |   11 +
 .../blocking/read/std_reader/struct.StdReader.html |   11 +
 docs/rust/opendal/blocking/sidebar-items.js        |    1 +
 .../opendal/blocking/struct.BufferIterator.html    | 1959 ++++++
 docs/rust/opendal/blocking/struct.Deleter.html     |  135 +
 docs/rust/opendal/blocking/struct.Lister.html      | 1964 ++++++
 docs/rust/opendal/blocking/struct.Operator.html    |  442 ++
 docs/rust/opendal/blocking/struct.Reader.html      |  150 +
 .../opendal/blocking/struct.StdBytesIterator.html  | 1959 ++++++
 docs/rust/opendal/blocking/struct.StdReader.html   |  187 +
 docs/rust/opendal/blocking/struct.StdWriter.html   |  151 +
 docs/rust/opendal/blocking/struct.Writer.html      |  143 +
 .../write/std_writer/struct.StdWriter.html         |   11 +
 .../blocking/write/writer/struct.Writer.html       |   11 +
 docs/rust/opendal/docs/changelog/index.html        | 4737 ++++++++++++++
 docs/rust/opendal/docs/changelog/sidebar-items.js  |    1 +
 docs/rust/opendal/docs/comparisons/index.html      |   11 +
 .../rust/opendal/docs/comparisons/sidebar-items.js |    1 +
 .../docs/comparisons/vs_object_store/index.html    |  140 +
 .../comparisons/vs_object_store/sidebar-items.js   |    1 +
 docs/rust/opendal/docs/concepts/index.html         |   82 +
 docs/rust/opendal/docs/concepts/sidebar-items.js   |    1 +
 docs/rust/opendal/docs/index.html                  |    3 +
 .../opendal/docs/internals/accessor/index.html     |  254 +
 .../docs/internals/accessor/sidebar-items.js       |    1 +
 docs/rust/opendal/docs/internals/index.html        |   32 +
 docs/rust/opendal/docs/internals/layer/index.html  |   18 +
 .../opendal/docs/internals/layer/sidebar-items.js  |    1 +
 docs/rust/opendal/docs/internals/sidebar-items.js  |    1 +
 .../docs/performance/concurrent_write/index.html   |   65 +
 .../performance/concurrent_write/sidebar-items.js  |    1 +
 .../docs/performance/http_optimization/index.html  |   93 +
 .../performance/http_optimization/sidebar-items.js |    1 +
 docs/rust/opendal/docs/performance/index.html      |    8 +
 .../rust/opendal/docs/performance/sidebar-items.js |    1 +
 docs/rust/opendal/docs/rfcs/index.html             |   46 +
 .../opendal/docs/rfcs/rfc_0000_example/index.html  |   61 +
 .../docs/rfcs/rfc_0000_example/sidebar-items.js    |    1 +
 .../rfcs/rfc_0041_object_native_api/index.html     |  148 +
 .../rfc_0041_object_native_api/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_0044_error_handle/index.html     |  143 +
 .../rfcs/rfc_0044_error_handle/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_0057_auto_region/index.html      |  120 +
 .../rfcs/rfc_0057_auto_region/sidebar-items.js     |    1 +
 .../docs/rfcs/rfc_0069_object_stream/index.html    |  104 +
 .../rfcs/rfc_0069_object_stream/sidebar-items.js   |    1 +
 .../docs/rfcs/rfc_0090_limited_reader/index.html   |  118 +
 .../rfcs/rfc_0090_limited_reader/sidebar-items.js  |    1 +
 .../rfcs/rfc_0112_path_normalization/index.html    |   52 +
 .../rfc_0112_path_normalization/sidebar-items.js   |    1 +
 .../rfcs/rfc_0191_async_streaming_io/index.html    |  254 +
 .../rfc_0191_async_streaming_io/sidebar-items.js   |    1 +
 .../rfcs/rfc_0203_remove_credential/index.html     |   70 +
 .../rfc_0203_remove_credential/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_0221_create_dir/index.html       |   64 +
 .../docs/rfcs/rfc_0221_create_dir/sidebar-items.js |    1 +
 .../docs/rfcs/rfc_0247_retryable_error/index.html  |   56 +
 .../rfcs/rfc_0247_retryable_error/sidebar-items.js |    1 +
 .../docs/rfcs/rfc_0293_object_id/index.html        |   43 +
 .../docs/rfcs/rfc_0293_object_id/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_0337_dir_entry/index.html        |  140 +
 .../docs/rfcs/rfc_0337_dir_entry/sidebar-items.js  |    1 +
 .../rfcs/rfc_0409_accessor_capabilities/index.html |   46 +
 .../sidebar-items.js                               |    1 +
 .../opendal/docs/rfcs/rfc_0413_presign/index.html  |  102 +
 .../docs/rfcs/rfc_0413_presign/sidebar-items.js    |    1 +
 .../rfc_0423_command_line_interface/index.html     |  209 +
 .../sidebar-items.js                               |    1 +
 .../docs/rfcs/rfc_0429_init_from_iter/index.html   |   74 +
 .../rfcs/rfc_0429_init_from_iter/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_0438_multipart/index.html        |  109 +
 .../docs/rfcs/rfc_0438_multipart/sidebar-items.js  |    1 +
 .../opendal/docs/rfcs/rfc_0443_gateway/index.html  |   50 +
 .../docs/rfcs/rfc_0443_gateway/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_0501_new_builder/index.html      |   77 +
 .../rfcs/rfc_0501_new_builder/sidebar-items.js     |    1 +
 .../docs/rfcs/rfc_0554_write_refactor/index.html   |   65 +
 .../rfcs/rfc_0554_write_refactor/sidebar-items.js  |    1 +
 .../rfcs/rfc_0561_list_metadata_reuse/index.html   |  165 +
 .../rfc_0561_list_metadata_reuse/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_0599_blocking_api/index.html     |  123 +
 .../rfcs/rfc_0599_blocking_api/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_0623_redis_service/index.html    |  227 +
 .../rfcs/rfc_0623_redis_service/sidebar-items.js   |    1 +
 .../rfcs/rfc_0627_split_capabilities/index.html    |   71 +
 .../rfc_0627_split_capabilities/sidebar-items.js   |    1 +
 .../docs/rfcs/rfc_0661_path_in_accessor/index.html |   96 +
 .../rfc_0661_path_in_accessor/sidebar-items.js     |    1 +
 .../rfcs/rfc_0793_generic_kv_services/index.html   |  152 +
 .../rfc_0793_generic_kv_services/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_0926_object_reader/index.html    |   63 +
 .../rfcs/rfc_0926_object_reader/sidebar-items.js   |    1 +
 .../docs/rfcs/rfc_0977_refactor_error/index.html   |  104 +
 .../rfcs/rfc_0977_refactor_error/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_1085_object_handler/index.html   |   47 +
 .../rfcs/rfc_1085_object_handler/sidebar-items.js  |    1 +
 .../rfcs/rfc_1391_object_metadataer/index.html     |   73 +
 .../rfc_1391_object_metadataer/sidebar-items.js    |    1 +
 .../rfcs/rfc_1398_query_based_metadata/index.html  |   86 +
 .../rfc_1398_query_based_metadata/sidebar-items.js |    1 +
 .../docs/rfcs/rfc_1420_object_writer/index.html    |   96 +
 .../rfcs/rfc_1420_object_writer/sidebar-items.js   |    1 +
 .../rfcs/rfc_1477_remove_object_concept/index.html |  100 +
 .../sidebar-items.js                               |    1 +
 .../rfcs/rfc_1735_operation_extension/index.html   |   80 +
 .../rfc_1735_operation_extension/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_2083_writer_sink_api/index.html  |   74 +
 .../rfcs/rfc_2083_writer_sink_api/sidebar-items.js |    1 +
 .../docs/rfcs/rfc_2133_append_api/index.html       |   67 +
 .../docs/rfcs/rfc_2133_append_api/sidebar-items.js |    1 +
 .../rfc_2299_chain_based_operator_api/index.html   |   60 +
 .../sidebar-items.js                               |    1 +
 .../rfcs/rfc_2602_object_versioning/index.html     |  108 +
 .../rfc_2602_object_versioning/sidebar-items.js    |    1 +
 .../rfc_2758_merge_append_into_write/index.html    |   57 +
 .../sidebar-items.js                               |    1 +
 .../docs/rfcs/rfc_2774_lister_api/index.html       |   48 +
 .../docs/rfcs/rfc_2774_lister_api/sidebar-items.js |    1 +
 .../rfcs/rfc_2779_list_with_metakey/index.html     |  109 +
 .../rfc_2779_list_with_metakey/sidebar-items.js    |    1 +
 .../rfcs/rfc_2852_native_capability/index.html     |   37 +
 .../rfc_2852_native_capability/sidebar-items.js    |    1 +
 .../rfc_3017_remove_write_copy_from/index.html     |   71 +
 .../sidebar-items.js                               |    1 +
 .../opendal/docs/rfcs/rfc_3197_config/index.html   |  170 +
 .../docs/rfcs/rfc_3197_config/sidebar-items.js     |    1 +
 .../docs/rfcs/rfc_3232_align_list_api/index.html   |   50 +
 .../rfcs/rfc_3232_align_list_api/sidebar-items.js  |    1 +
 .../docs/rfcs/rfc_3243_list_prefix/index.html      |  106 +
 .../rfcs/rfc_3243_list_prefix/sidebar-items.js     |    1 +
 .../docs/rfcs/rfc_3356_lazy_reader/index.html      |   81 +
 .../rfcs/rfc_3356_lazy_reader/sidebar-items.js     |    1 +
 .../docs/rfcs/rfc_3526_list_recursive/index.html   |   39 +
 .../rfcs/rfc_3526_list_recursive/sidebar-items.js  |    1 +
 .../rfc_3574_concurrent_stat_in_list/index.html    |   56 +
 .../sidebar-items.js                               |    1 +
 .../docs/rfcs/rfc_3734_buffered_reader/index.html  |   47 +
 .../rfcs/rfc_3734_buffered_reader/sidebar-items.js |    1 +
 .../rfcs/rfc_3898_concurrent_writer/index.html     |   50 +
 .../rfc_3898_concurrent_writer/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_3911_deleter_api/index.html      |  128 +
 .../rfcs/rfc_3911_deleter_api/sidebar-items.js     |    1 +
 .../docs/rfcs/rfc_4382_range_based_read/index.html |  152 +
 .../rfc_4382_range_based_read/sidebar-items.js     |    1 +
 .../opendal/docs/rfcs/rfc_4638_executor/index.html |  156 +
 .../docs/rfcs/rfc_4638_executor/sidebar-items.js   |    1 +
 .../docs/rfcs/rfc_5314_remove_metakey/index.html   |  109 +
 .../rfcs/rfc_5314_remove_metakey/sidebar-items.js  |    1 +
 .../rfcs/rfc_5444_operator_from_uri/index.html     |  120 +
 .../rfc_5444_operator_from_uri/sidebar-items.js    |    1 +
 .../opendal/docs/rfcs/rfc_5479_context/index.html  |  106 +
 .../docs/rfcs/rfc_5479_context/sidebar-items.js    |    1 +
 .../rfcs/rfc_5485_conditional_reader/index.html    |   90 +
 .../rfc_5485_conditional_reader/sidebar-items.js   |    1 +
 .../rfcs/rfc_5495_list_with_deleted/index.html     |   58 +
 .../rfc_5495_list_with_deleted/sidebar-items.js    |    1 +
 .../rfc_5556_write_returns_metadata/index.html     |  101 +
 .../sidebar-items.js                               |    1 +
 .../rfcs/rfc_5871_read_returns_metadata/index.html |   94 +
 .../sidebar-items.js                               |    1 +
 .../rfc_6189_remove_native_blocking/index.html     |   89 +
 .../sidebar-items.js                               |    1 +
 .../docs/rfcs/rfc_6209_glob_support/index.html     |  128 +
 .../rfcs/rfc_6209_glob_support/sidebar-items.js    |    1 +
 .../docs/rfcs/rfc_6213_options_api/index.html      |  101 +
 .../rfcs/rfc_6213_options_api/sidebar-items.js     |    1 +
 docs/rust/opendal/docs/rfcs/sidebar-items.js       |    1 +
 docs/rust/opendal/docs/sidebar-items.js            |    1 +
 docs/rust/opendal/docs/upgrade/index.html          |  969 +++
 docs/rust/opendal/docs/upgrade/sidebar-items.js    |    1 +
 docs/rust/opendal/enum.EntryMode.html              |  142 +
 docs/rust/opendal/enum.ErrorKind.html              |  172 +
 docs/rust/opendal/enum.Scheme.html                 |  290 +
 docs/rust/opendal/executors/index.html             |    5 +
 docs/rust/opendal/executors/sidebar-items.js       |    1 +
 .../opendal/executors/struct.TokioExecutor.html    |  118 +
 docs/rust/opendal/index.html                       |  119 +
 .../struct.AsyncBacktraceLayer.html                |   11 +
 .../layers/await_tree/struct.AwaitTreeLayer.html   |   11 +
 .../struct.CapabilityCheckLayer.html               |   11 +
 .../opendal/layers/chaos/struct.ChaosLayer.html    |   11 +
 .../struct.ConcurrentLimitLayer.html               |   11 +
 .../opendal/layers/dtrace/struct.DtraceLayer.html  |   11 +
 .../fastmetrics/struct.FastmetricsLayer.html       |   11 +
 .../struct.FastmetricsLayerBuilder.html            |   11 +
 .../layers/fastrace/struct.FastraceLayer.html      |   11 +
 .../layers/http_client/struct.HttpClientLayer.html |   11 +
 .../struct.ImmutableIndexLayer.html                |   11 +
 docs/rust/opendal/layers/index.html                |    2 +
 .../layers/logging/struct.LoggingLayer.html        |   11 +
 .../layers/logging/trait.LoggingInterceptor.html   |   11 +
 .../layers/metrics/struct.MetricsLayer.html        |   11 +
 .../layers/mime_guess/struct.MimeGuessLayer.html   |   11 +
 .../observe/constant.DEFAULT_BYTES_BUCKETS.html    |    3 +
 .../constant.DEFAULT_BYTES_RATE_BUCKETS.html       |    4 +
 .../constant.DEFAULT_DURATION_SECONDS_BUCKETS.html |    3 +
 .../observe/constant.DEFAULT_ENTRIES_BUCKETS.html  |    3 +
 .../constant.DEFAULT_ENTRIES_RATE_BUCKETS.html     |    3 +
 .../observe/constant.DEFAULT_TTFB_BUCKETS.html     |    3 +
 .../opendal/layers/observe/enum.MetricValue.html   |  181 +
 docs/rust/opendal/layers/observe/index.html        |   50 +
 .../metrics/constant.DEFAULT_BYTES_BUCKETS.html    |   11 +
 .../constant.DEFAULT_BYTES_RATE_BUCKETS.html       |   11 +
 .../constant.DEFAULT_DURATION_SECONDS_BUCKETS.html |   11 +
 .../metrics/constant.DEFAULT_ENTRIES_BUCKETS.html  |   11 +
 .../constant.DEFAULT_ENTRIES_RATE_BUCKETS.html     |   11 +
 .../metrics/constant.DEFAULT_TTFB_BUCKETS.html     |   11 +
 .../layers/observe/metrics/enum.MetricValue.html   |   11 +
 .../layers/observe/metrics/static.LABEL_ERROR.html |   11 +
 .../observe/metrics/static.LABEL_NAMESPACE.html    |   11 +
 .../observe/metrics/static.LABEL_OPERATION.html    |   11 +
 .../layers/observe/metrics/static.LABEL_ROOT.html  |   11 +
 .../observe/metrics/static.LABEL_SCHEME.html       |   11 +
 .../observe/metrics/static.LABEL_STATUS_CODE.html  |   11 +
 .../observe/metrics/struct.MetricLabels.html       |   11 +
 .../observe/metrics/struct.MetricsAccessor.html    |   11 +
 .../observe/metrics/struct.MetricsLayer.html       |   11 +
 .../observe/metrics/trait.MetricsIntercept.html    |   11 +
 docs/rust/opendal/layers/observe/sidebar-items.js  |    1 +
 .../opendal/layers/observe/static.LABEL_ERROR.html |    2 +
 .../layers/observe/static.LABEL_NAMESPACE.html     |    2 +
 .../layers/observe/static.LABEL_OPERATION.html     |    2 +
 .../opendal/layers/observe/static.LABEL_ROOT.html  |    2 +
 .../layers/observe/static.LABEL_SCHEME.html        |    2 +
 .../layers/observe/static.LABEL_STATUS_CODE.html   |    2 +
 .../layers/observe/struct.MetricLabels.html        |  152 +
 .../layers/observe/struct.MetricsAccessor.html     |  156 +
 .../layers/observe/struct.MetricsLayer.html        |  125 +
 .../layers/observe/trait.MetricsIntercept.html     |   13 +
 .../otelmetrics/struct.OtelMetricsLayer.html       |   11 +
 .../layers/oteltrace/struct.OtelTraceLayer.html    |   11 +
 .../layers/prometheus/struct.PrometheusLayer.html  |   11 +
 .../prometheus/struct.PrometheusLayerBuilder.html  |   11 +
 .../struct.PrometheusClientLayer.html              |   11 +
 .../struct.PrometheusClientLayerBuilder.html       |   11 +
 .../opendal/layers/retry/struct.RetryLayer.html    |   11 +
 .../layers/retry/trait.RetryInterceptor.html       |   11 +
 docs/rust/opendal/layers/sidebar-items.js          |    1 +
 .../opendal/layers/struct.AsyncBacktraceLayer.html |  130 +
 .../rust/opendal/layers/struct.AwaitTreeLayer.html |  132 +
 .../layers/struct.CapabilityCheckLayer.html        |  140 +
 docs/rust/opendal/layers/struct.ChaosLayer.html    |  139 +
 .../layers/struct.ConcurrentLimitLayer.html        |  154 +
 docs/rust/opendal/layers/struct.DtraceLayer.html   |  206 +
 .../opendal/layers/struct.FastmetricsLayer.html    |  181 +
 .../layers/struct.FastmetricsLayerBuilder.html     |  143 +
 docs/rust/opendal/layers/struct.FastraceLayer.html |  162 +
 .../opendal/layers/struct.HttpClientLayer.html     |  166 +
 .../opendal/layers/struct.ImmutableIndexLayer.html |  138 +
 docs/rust/opendal/layers/struct.LoggingLayer.html  |  173 +
 docs/rust/opendal/layers/struct.MetricsLayer.html  |  153 +
 .../rust/opendal/layers/struct.MimeGuessLayer.html |  143 +
 .../opendal/layers/struct.OtelMetricsLayer.html    |  137 +
 .../rust/opendal/layers/struct.OtelTraceLayer.html |  124 +
 .../layers/struct.PrometheusClientLayer.html       |  148 +
 .../struct.PrometheusClientLayerBuilder.html       |  135 +
 .../opendal/layers/struct.PrometheusLayer.html     |  208 +
 .../layers/struct.PrometheusLayerBuilder.html      |  145 +
 docs/rust/opendal/layers/struct.RetryLayer.html    |  204 +
 docs/rust/opendal/layers/struct.ThrottleLayer.html |  144 +
 docs/rust/opendal/layers/struct.TimeoutLayer.html  |  190 +
 docs/rust/opendal/layers/struct.TracingLayer.html  |  181 +
 .../layers/throttle/struct.ThrottleLayer.html      |   11 +
 .../layers/timeout/struct.TimeoutLayer.html        |   11 +
 .../layers/tracing/struct.TracingLayer.html        |   11 +
 .../opendal/layers/trait.LoggingInterceptor.html   |   38 +
 .../opendal/layers/trait.RetryInterceptor.html     |   20 +
 docs/rust/opendal/operator_futures/index.html      |    3 +
 .../rust/opendal/operator_futures/sidebar-items.js |    1 +
 .../operator_futures/struct.OperatorFuture.html    |  597 ++
 .../operator_futures/type.FutureDelete.html        |    4 +
 .../operator_futures/type.FutureDeleter.html       |    3 +
 .../opendal/operator_futures/type.FutureList.html  |   26 +
 .../operator_futures/type.FutureLister.html        |   26 +
 .../operator_futures/type.FuturePresignDelete.html |    3 +
 .../operator_futures/type.FuturePresignRead.html   |    8 +
 .../operator_futures/type.FuturePresignStat.html   |    8 +
 .../operator_futures/type.FuturePresignWrite.html  |    7 +
 .../opendal/operator_futures/type.FutureRead.html  |   66 +
 .../operator_futures/type.FutureReader.html        |   80 +
 .../opendal/operator_futures/type.FutureStat.html  |   13 +
 .../opendal/operator_futures/type.FutureWrite.html |  113 +
 .../operator_futures/type.FutureWriter.html        |  155 +
 docs/rust/opendal/options/index.html               |    2 +
 docs/rust/opendal/options/sidebar-items.js         |    1 +
 .../rust/opendal/options/struct.DeleteOptions.html |  131 +
 docs/rust/opendal/options/struct.ListOptions.html  |  159 +
 docs/rust/opendal/options/struct.ReadOptions.html  |  193 +
 .../rust/opendal/options/struct.ReaderOptions.html |  175 +
 docs/rust/opendal/options/struct.StatOptions.html  |  162 +
 docs/rust/opendal/options/struct.WriteOptions.html |  346 +
 .../opendal/raw/accessor/struct.AccessorInfo.html  |   11 +
 docs/rust/opendal/raw/accessor/trait.Access.html   |   11 +
 .../rust/opendal/raw/accessor/trait.AccessDyn.html |   11 +
 docs/rust/opendal/raw/accessor/type.Accessor.html  |   11 +
 docs/rust/opendal/raw/adapters/index.html          |   22 +
 .../opendal/raw/adapters/kv/api/struct.Info.html   |   11 +
 .../opendal/raw/adapters/kv/api/trait.Adapter.html |   11 +
 .../opendal/raw/adapters/kv/api/trait.Scan.html    |   11 +
 .../opendal/raw/adapters/kv/api/type.Scanner.html  |   11 +
 .../raw/adapters/kv/backend/struct.Backend.html    |   11 +
 docs/rust/opendal/raw/adapters/kv/index.html       |    3 +
 docs/rust/opendal/raw/adapters/kv/sidebar-items.js |    1 +
 .../opendal/raw/adapters/kv/struct.Backend.html    |  150 +
 docs/rust/opendal/raw/adapters/kv/struct.Info.html |  121 +
 .../opendal/raw/adapters/kv/trait.Adapter.html     |   61 +
 docs/rust/opendal/raw/adapters/kv/trait.Scan.html  |   13 +
 .../rust/opendal/raw/adapters/kv/type.Scanner.html |    2 +
 docs/rust/opendal/raw/adapters/sidebar-items.js    |    1 +
 .../adapters/typed_kv/api/struct.Capability.html   |   11 +
 .../raw/adapters/typed_kv/api/struct.Info.html     |   11 +
 .../raw/adapters/typed_kv/api/struct.Value.html    |   11 +
 .../raw/adapters/typed_kv/api/trait.Adapter.html   |   11 +
 .../adapters/typed_kv/backend/struct.Backend.html  |   11 +
 docs/rust/opendal/raw/adapters/typed_kv/index.html |    4 +
 .../opendal/raw/adapters/typed_kv/sidebar-items.js |    1 +
 .../raw/adapters/typed_kv/struct.Backend.html      |  150 +
 .../raw/adapters/typed_kv/struct.Capability.html   |  133 +
 .../opendal/raw/adapters/typed_kv/struct.Info.html |  121 +
 .../raw/adapters/typed_kv/struct.Value.html        |  129 +
 .../raw/adapters/typed_kv/trait.Adapter.html       |   49 +
 .../atomic_util/struct.AtomicContentLength.html    |   11 +
 .../fn.format_datetime_into_http_date.html         |   11 +
 .../fn.parse_datetime_from_from_timestamp.html     |   11 +
 ....parse_datetime_from_from_timestamp_millis.html |   11 +
 .../fn.parse_datetime_from_rfc2822.html            |   11 +
 .../fn.parse_datetime_from_rfc3339.html            |   11 +
 docs/rust/opendal/raw/constant.VERSION.html        |    2 +
 docs/rust/opendal/raw/enum.FourWays.html           |  164 +
 docs/rust/opendal/raw/enum.Operation.html          |  163 +
 docs/rust/opendal/raw/enum.PresignOperation.html   |  130 +
 docs/rust/opendal/raw/enum.ThreeWays.html          |  148 +
 docs/rust/opendal/raw/enum.TwoWays.html            |  141 +
 .../rust/opendal/raw/enum_utils/enum.FourWays.html |   11 +
 .../opendal/raw/enum_utils/enum.ThreeWays.html     |   11 +
 docs/rust/opendal/raw/enum_utils/enum.TwoWays.html |   11 +
 docs/rust/opendal/raw/fn.build_abs_path.html       |    7 +
 docs/rust/opendal/raw/fn.build_header_value.html   |    2 +
 docs/rust/opendal/raw/fn.build_rel_path.html       |    8 +
 .../rust/opendal/raw/fn.build_rooted_abs_path.html |    7 +
 docs/rust/opendal/raw/fn.build_tmp_path_of.html    |    4 +
 .../raw/fn.format_authorization_by_basic.html      |    7 +
 .../raw/fn.format_authorization_by_bearer.html     |    4 +
 docs/rust/opendal/raw/fn.format_content_md5.html   |    2 +
 .../raw/fn.format_datetime_into_http_date.html     |    3 +
 docs/rust/opendal/raw/fn.get_basename.html         |    2 +
 docs/rust/opendal/raw/fn.get_parent.html           |    2 +
 .../opendal/raw/fn.new_http_uri_invalid_error.html |    2 +
 .../opendal/raw/fn.new_json_deserialize_error.html |    2 +
 .../opendal/raw/fn.new_json_serialize_error.html   |    2 +
 .../opendal/raw/fn.new_request_build_error.html    |    2 +
 .../raw/fn.new_request_credential_error.html       |    2 +
 .../opendal/raw/fn.new_request_sign_error.html     |    2 +
 docs/rust/opendal/raw/fn.new_std_io_error.html     |    5 +
 docs/rust/opendal/raw/fn.new_task_join_error.html  |    2 +
 .../opendal/raw/fn.new_xml_deserialize_error.html  |    2 +
 .../opendal/raw/fn.new_xml_serialize_error.html    |    2 +
 docs/rust/opendal/raw/fn.normalize_path.html       |   13 +
 docs/rust/opendal/raw/fn.normalize_root.html       |   12 +
 .../opendal/raw/fn.parse_content_disposition.html  |    2 +
 .../opendal/raw/fn.parse_content_encoding.html     |    2 +
 docs/rust/opendal/raw/fn.parse_content_length.html |    2 +
 docs/rust/opendal/raw/fn.parse_content_md5.html    |    2 +
 docs/rust/opendal/raw/fn.parse_content_range.html  |    4 +
 docs/rust/opendal/raw/fn.parse_content_type.html   |    2 +
 .../raw/fn.parse_datetime_from_from_timestamp.html |    2 +
 ....parse_datetime_from_from_timestamp_millis.html |    4 +
 .../raw/fn.parse_datetime_from_rfc2822.html        |    3 +
 .../raw/fn.parse_datetime_from_rfc3339.html        |   17 +
 docs/rust/opendal/raw/fn.parse_etag.html           |    2 +
 docs/rust/opendal/raw/fn.parse_header_to_str.html  |    6 +
 docs/rust/opendal/raw/fn.parse_into_metadata.html  |    6 +
 docs/rust/opendal/raw/fn.parse_last_modified.html  |    2 +
 docs/rust/opendal/raw/fn.parse_location.html       |    4 +
 .../opendal/raw/fn.parse_multipart_boundary.html   |    2 +
 .../opendal/raw/fn.parse_prefixed_headers.html     |    5 +
 docs/rust/opendal/raw/fn.percent_decode_path.html  |    3 +
 docs/rust/opendal/raw/fn.percent_encode_path.html  |    5 +
 docs/rust/opendal/raw/fn.validate_path.html        |    2 +
 .../raw/fn.with_error_response_context.html        |    7 +
 .../raw/futures_util/struct.ConcurrentTasks.html   |   11 +
 .../opendal/raw/futures_util/trait.MaybeSend.html  |   11 +
 .../opendal/raw/futures_util/type.BoxedFuture.html |   11 +
 .../raw/futures_util/type.BoxedStaticFuture.html   |   11 +
 .../raw/http_util/body/struct.HttpBody.html        |   11 +
 .../struct.BytesContentRange.html                  |   11 +
 .../http_util/bytes_range/struct.BytesRange.html   |   11 +
 .../raw/http_util/client/struct.HttpClient.html    |   11 +
 .../raw/http_util/client/trait.HttpFetch.html      |   11 +
 .../raw/http_util/client/type.HttpFetcher.html     |   11 +
 .../error/fn.new_request_build_error.html          |   11 +
 .../error/fn.new_request_credential_error.html     |   11 +
 .../http_util/error/fn.new_request_sign_error.html |   11 +
 .../error/fn.with_error_response_context.html      |   11 +
 .../http_util/header/fn.build_header_value.html    |   11 +
 .../header/fn.format_authorization_by_basic.html   |   11 +
 .../header/fn.format_authorization_by_bearer.html  |   11 +
 .../http_util/header/fn.format_content_md5.html    |   11 +
 .../header/fn.parse_content_disposition.html       |   11 +
 .../header/fn.parse_content_encoding.html          |   11 +
 .../http_util/header/fn.parse_content_length.html  |   11 +
 .../raw/http_util/header/fn.parse_content_md5.html |   11 +
 .../http_util/header/fn.parse_content_range.html   |   11 +
 .../http_util/header/fn.parse_content_type.html    |   11 +
 .../raw/http_util/header/fn.parse_etag.html        |   11 +
 .../http_util/header/fn.parse_header_to_str.html   |   11 +
 .../http_util/header/fn.parse_into_metadata.html   |   11 +
 .../http_util/header/fn.parse_last_modified.html   |   11 +
 .../raw/http_util/header/fn.parse_location.html    |   11 +
 .../header/fn.parse_multipart_boundary.html        |   11 +
 .../header/fn.parse_prefixed_headers.html          |   11 +
 .../http_util/multipart/struct.FormDataPart.html   |   11 +
 .../raw/http_util/multipart/struct.MixedPart.html  |   11 +
 .../raw/http_util/multipart/struct.Multipart.html  |   11 +
 .../http_util/multipart/struct.RelatedPart.html    |   11 +
 .../raw/http_util/multipart/trait.Part.html        |   11 +
 .../uri/fn.new_http_uri_invalid_error.html         |   11 +
 .../raw/http_util/uri/fn.percent_decode_path.html  |   11 +
 .../raw/http_util/uri/fn.percent_encode_path.html  |   11 +
 .../raw/http_util/uri/struct.QueryPairsWriter.html |   11 +
 docs/rust/opendal/raw/index.html                   |   17 +
 docs/rust/opendal/raw/layer/trait.Layer.html       |   11 +
 .../opendal/raw/layer/trait.LayeredAccess.html     |   11 +
 .../raw/oio/buf/flex_buf/struct.FlexBuf.html       |   11 +
 .../raw/oio/buf/pooled_buf/struct.PooledBuf.html   |   11 +
 .../raw/oio/buf/queue_buf/struct.QueueBuf.html     |   11 +
 .../opendal/raw/oio/delete/api/trait.Delete.html   |   11 +
 .../raw/oio/delete/api/trait.DeleteDyn.html        |   11 +
 .../opendal/raw/oio/delete/api/type.Deleter.html   |   11 +
 .../batch_delete/struct.BatchDeleteResult.html     |   11 +
 .../delete/batch_delete/struct.BatchDeleter.html   |   11 +
 .../oio/delete/batch_delete/trait.BatchDelete.html |   11 +
 .../one_shot_delete/struct.OneShotDeleter.html     |   11 +
 .../one_shot_delete/trait.OneShotDelete.html       |   11 +
 docs/rust/opendal/raw/oio/entry/struct.Entry.html  |   11 +
 docs/rust/opendal/raw/oio/index.html               |   17 +
 docs/rust/opendal/raw/oio/list/api/trait.List.html |   11 +
 .../rust/opendal/raw/oio/list/api/type.Lister.html |   11 +
 .../raw/oio/list/flat_list/struct.FlatLister.html  |   11 +
 .../hierarchy_list/struct.HierarchyLister.html     |   11 +
 .../raw/oio/list/page_list/struct.PageContext.html |   11 +
 .../raw/oio/list/page_list/struct.PageLister.html  |   11 +
 .../raw/oio/list/page_list/trait.PageList.html     |   11 +
 .../oio/list/prefix_list/struct.PrefixLister.html  |   11 +
 docs/rust/opendal/raw/oio/read/api/trait.Read.html |   11 +
 .../opendal/raw/oio/read/api/trait.ReadDyn.html    |   11 +
 .../rust/opendal/raw/oio/read/api/type.Reader.html |   11 +
 docs/rust/opendal/raw/oio/sidebar-items.js         |    1 +
 docs/rust/opendal/raw/oio/struct.AppendWriter.html |  128 +
 .../opendal/raw/oio/struct.BatchDeleteResult.html  |  122 +
 docs/rust/opendal/raw/oio/struct.BatchDeleter.html |  124 +
 docs/rust/opendal/raw/oio/struct.BlockWriter.html  |  120 +
 docs/rust/opendal/raw/oio/struct.Entry.html        |  142 +
 docs/rust/opendal/raw/oio/struct.FlatLister.html   |  155 +
 docs/rust/opendal/raw/oio/struct.FlexBuf.html      |  131 +
 .../opendal/raw/oio/struct.HierarchyLister.html    |  130 +
 .../rust/opendal/raw/oio/struct.MultipartPart.html |  134 +
 .../opendal/raw/oio/struct.MultipartWriter.html    |  122 +
 .../opendal/raw/oio/struct.OneShotDeleter.html     |  127 +
 .../rust/opendal/raw/oio/struct.OneShotWriter.html |  120 +
 docs/rust/opendal/raw/oio/struct.PageContext.html  |  135 +
 docs/rust/opendal/raw/oio/struct.PageLister.html   |  123 +
 docs/rust/opendal/raw/oio/struct.PooledBuf.html    |  126 +
 .../opendal/raw/oio/struct.PositionWriter.html     |  118 +
 docs/rust/opendal/raw/oio/struct.PrefixLister.html |  131 +
 docs/rust/opendal/raw/oio/struct.QueueBuf.html     |  143 +
 docs/rust/opendal/raw/oio/trait.AppendWrite.html   |   37 +
 docs/rust/opendal/raw/oio/trait.BatchDelete.html   |   33 +
 docs/rust/opendal/raw/oio/trait.BlockWrite.html    |   78 +
 docs/rust/opendal/raw/oio/trait.Delete.html        |   35 +
 docs/rust/opendal/raw/oio/trait.DeleteDyn.html     |   11 +
 docs/rust/opendal/raw/oio/trait.List.html          |   21 +
 .../rust/opendal/raw/oio/trait.MultipartWrite.html |   91 +
 docs/rust/opendal/raw/oio/trait.OneShotDelete.html |   20 +
 docs/rust/opendal/raw/oio/trait.OneShotWrite.html  |   20 +
 docs/rust/opendal/raw/oio/trait.PageList.html      |   24 +
 docs/rust/opendal/raw/oio/trait.PositionWrite.html |   36 +
 docs/rust/opendal/raw/oio/trait.Read.html          |   27 +
 docs/rust/opendal/raw/oio/trait.ReadDyn.html       |   13 +
 docs/rust/opendal/raw/oio/trait.Write.html         |   24 +
 docs/rust/opendal/raw/oio/type.Deleter.html        |    2 +
 docs/rust/opendal/raw/oio/type.Lister.html         |    2 +
 docs/rust/opendal/raw/oio/type.Reader.html         |    2 +
 docs/rust/opendal/raw/oio/type.Writer.html         |    2 +
 .../opendal/raw/oio/write/api/trait.Write.html     |   11 +
 .../opendal/raw/oio/write/api/type.Writer.html     |   11 +
 .../write/append_write/struct.AppendWriter.html    |   11 +
 .../oio/write/append_write/trait.AppendWrite.html  |   11 +
 .../oio/write/block_write/struct.BlockWriter.html  |   11 +
 .../oio/write/block_write/trait.BlockWrite.html    |   11 +
 .../multipart_write/struct.MultipartPart.html      |   11 +
 .../multipart_write/struct.MultipartWriter.html    |   11 +
 .../multipart_write/trait.MultipartWrite.html      |   11 +
 .../write/one_shot_write/struct.OneShotWriter.html |   11 +
 .../write/one_shot_write/trait.OneShotWrite.html   |   11 +
 .../position_write/struct.PositionWriter.html      |   11 +
 .../write/position_write/trait.PositionWrite.html  |   11 +
 .../rust/opendal/raw/operation/enum.Operation.html |   11 +
 .../opendal/raw/ops/enum.PresignOperation.html     |   11 +
 docs/rust/opendal/raw/ops/struct.OpCopy.html       |   11 +
 docs/rust/opendal/raw/ops/struct.OpCreateDir.html  |   11 +
 docs/rust/opendal/raw/ops/struct.OpDelete.html     |   11 +
 docs/rust/opendal/raw/ops/struct.OpDeleter.html    |   11 +
 docs/rust/opendal/raw/ops/struct.OpList.html       |   11 +
 docs/rust/opendal/raw/ops/struct.OpPresign.html    |   11 +
 docs/rust/opendal/raw/ops/struct.OpRead.html       |   11 +
 docs/rust/opendal/raw/ops/struct.OpReader.html     |   11 +
 docs/rust/opendal/raw/ops/struct.OpRename.html     |   11 +
 docs/rust/opendal/raw/ops/struct.OpStat.html       |   11 +
 docs/rust/opendal/raw/ops/struct.OpWrite.html      |   11 +
 docs/rust/opendal/raw/ops/struct.OpWriter.html     |   11 +
 docs/rust/opendal/raw/path/fn.build_abs_path.html  |   11 +
 docs/rust/opendal/raw/path/fn.build_rel_path.html  |   11 +
 .../opendal/raw/path/fn.build_rooted_abs_path.html |   11 +
 .../opendal/raw/path/fn.build_tmp_path_of.html     |   11 +
 docs/rust/opendal/raw/path/fn.get_basename.html    |   11 +
 docs/rust/opendal/raw/path/fn.get_parent.html      |   11 +
 docs/rust/opendal/raw/path/fn.normalize_path.html  |   11 +
 docs/rust/opendal/raw/path/fn.normalize_root.html  |   11 +
 docs/rust/opendal/raw/path/fn.validate_path.html   |   11 +
 .../opendal/raw/path_cache/struct.PathCacher.html  |   11 +
 .../opendal/raw/path_cache/trait.PathQuery.html    |   11 +
 .../opendal/raw/rps/struct.PresignedRequest.html   |   11 +
 docs/rust/opendal/raw/rps/struct.RpCopy.html       |   11 +
 docs/rust/opendal/raw/rps/struct.RpCreateDir.html  |   11 +
 docs/rust/opendal/raw/rps/struct.RpDelete.html     |   11 +
 docs/rust/opendal/raw/rps/struct.RpList.html       |   11 +
 docs/rust/opendal/raw/rps/struct.RpPresign.html    |   11 +
 docs/rust/opendal/raw/rps/struct.RpRead.html       |   11 +
 docs/rust/opendal/raw/rps/struct.RpRename.html     |   11 +
 docs/rust/opendal/raw/rps/struct.RpStat.html       |   11 +
 docs/rust/opendal/raw/rps/struct.RpWrite.html      |   11 +
 .../serde_util/fn.new_json_deserialize_error.html  |   11 +
 .../serde_util/fn.new_json_serialize_error.html    |   11 +
 .../serde_util/fn.new_xml_deserialize_error.html   |   11 +
 .../raw/serde_util/fn.new_xml_serialize_error.html |   11 +
 .../raw/serde_util/struct.ConfigDeserializer.html  |   11 +
 docs/rust/opendal/raw/sidebar-items.js             |    1 +
 .../raw/std_io_util/fn.new_std_io_error.html       |   11 +
 docs/rust/opendal/raw/struct.AccessorInfo.html     |  239 +
 .../opendal/raw/struct.AtomicContentLength.html    |  124 +
 .../rust/opendal/raw/struct.BytesContentRange.html |  156 +
 docs/rust/opendal/raw/struct.BytesRange.html       |  156 +
 docs/rust/opendal/raw/struct.ConcurrentTasks.html  |  177 +
 .../opendal/raw/struct.ConfigDeserializer.html     |  265 +
 docs/rust/opendal/raw/struct.FormDataPart.html     |  122 +
 docs/rust/opendal/raw/struct.HttpBody.html         |  131 +
 docs/rust/opendal/raw/struct.HttpClient.html       |  132 +
 docs/rust/opendal/raw/struct.MixedPart.html        |  127 +
 docs/rust/opendal/raw/struct.Multipart.html        |  129 +
 docs/rust/opendal/raw/struct.OpCopy.html           |  122 +
 docs/rust/opendal/raw/struct.OpCreateDir.html      |  123 +
 docs/rust/opendal/raw/struct.OpDelete.html         |  135 +
 docs/rust/opendal/raw/struct.OpDeleter.html        |  123 +
 docs/rust/opendal/raw/struct.OpList.html           |  142 +
 docs/rust/opendal/raw/struct.OpPresign.html        |  126 +
 docs/rust/opendal/raw/struct.OpRead.html           |  144 +
 docs/rust/opendal/raw/struct.OpReader.html         |  128 +
 docs/rust/opendal/raw/struct.OpRename.html         |  122 +
 docs/rust/opendal/raw/struct.OpStat.html           |  142 +
 docs/rust/opendal/raw/struct.OpWrite.html          |  147 +
 docs/rust/opendal/raw/struct.OpWriter.html         |  130 +
 docs/rust/opendal/raw/struct.PathCacher.html       |  133 +
 docs/rust/opendal/raw/struct.PresignedRequest.html |  125 +
 docs/rust/opendal/raw/struct.QueryPairsWriter.html |  122 +
 docs/rust/opendal/raw/struct.RelatedPart.html      |  122 +
 docs/rust/opendal/raw/struct.RpCopy.html           |  122 +
 docs/rust/opendal/raw/struct.RpCreateDir.html      |  121 +
 docs/rust/opendal/raw/struct.RpDelete.html         |  121 +
 docs/rust/opendal/raw/struct.RpList.html           |  121 +
 docs/rust/opendal/raw/struct.RpPresign.html        |  123 +
 docs/rust/opendal/raw/struct.RpRead.html           |  134 +
 docs/rust/opendal/raw/struct.RpRename.html         |  122 +
 docs/rust/opendal/raw/struct.RpStat.html           |  124 +
 docs/rust/opendal/raw/struct.RpWrite.html          |  122 +
 docs/rust/opendal/raw/tests/enum.ReadAction.html   |  133 +
 docs/rust/opendal/raw/tests/enum.WriteAction.html  |  133 +
 .../opendal/raw/tests/fn.init_test_service.html    |    7 +
 docs/rust/opendal/raw/tests/index.html             |    2 +
 .../opendal/raw/tests/read/enum.ReadAction.html    |   11 +
 .../opendal/raw/tests/read/struct.ReadChecker.html |   11 +
 docs/rust/opendal/raw/tests/sidebar-items.js       |    1 +
 .../opendal/raw/tests/static.TEST_RUNTIME.html     |    2 +
 .../rust/opendal/raw/tests/struct.ReadChecker.html |  123 +
 .../opendal/raw/tests/struct.WriteChecker.html     |  120 +
 .../raw/tests/utils/fn.init_test_service.html      |   11 +
 .../raw/tests/utils/static.TEST_RUNTIME.html       |   11 +
 .../opendal/raw/tests/write/enum.WriteAction.html  |   11 +
 .../raw/tests/write/struct.WriteChecker.html       |   11 +
 .../raw/tokio_util/fn.new_task_join_error.html     |   11 +
 docs/rust/opendal/raw/trait.Access.html            |  243 +
 docs/rust/opendal/raw/trait.AccessDyn.html         |  104 +
 docs/rust/opendal/raw/trait.HttpFetch.html         |   17 +
 docs/rust/opendal/raw/trait.Layer.html             |   69 +
 docs/rust/opendal/raw/trait.LayeredAccess.html     |  101 +
 docs/rust/opendal/raw/trait.MaybeSend.html         |    6 +
 docs/rust/opendal/raw/trait.Part.html              |   12 +
 docs/rust/opendal/raw/trait.PathQuery.html         |   26 +
 docs/rust/opendal/raw/type.Accessor.html           |    2 +
 docs/rust/opendal/raw/type.BoxedFuture.html        |    3 +
 docs/rust/opendal/raw/type.BoxedStaticFuture.html  |    3 +
 docs/rust/opendal/raw/type.HttpFetcher.html        |    2 +
 .../rust/opendal/raw/version/constant.VERSION.html |   11 +
 .../backend/struct.AliyunDriveBuilder.html         |   11 +
 .../config/struct.AliyunDriveConfig.html           |   11 +
 .../alluxio/backend/struct.AlluxioBuilder.html     |   11 +
 .../alluxio/config/struct.AlluxioConfig.html       |   11 +
 .../azblob/backend/struct.AzblobBuilder.html       |   11 +
 .../azblob/config/struct.AzblobConfig.html         |   11 +
 .../azdls/backend/struct.AzdlsBuilder.html         |   11 +
 .../services/azdls/config/struct.AzdlsConfig.html  |   11 +
 .../azfile/backend/struct.AzfileBuilder.html       |   11 +
 .../azfile/config/struct.AzfileConfig.html         |   11 +
 .../services/b2/backend/struct.B2Builder.html      |   11 +
 .../services/b2/config/struct.B2Config.html        |   11 +
 .../cacache/backend/struct.CacacheBuilder.html     |   11 +
 .../cacache/config/struct.CacacheConfig.html       |   11 +
 .../backend/struct.CloudflareKvBuilder.html        |   11 +
 .../config/struct.CloudflareKvConfig.html          |   11 +
 .../compfs/backend/struct.CompfsBuilder.html       |   11 +
 .../compfs/config/struct.CompfsConfig.html         |   11 +
 .../services/cos/backend/struct.CosBuilder.html    |   11 +
 .../services/cos/config/struct.CosConfig.html      |   11 +
 .../services/d1/backend/struct.D1Builder.html      |   11 +
 .../services/d1/config/struct.D1Config.html        |   11 +
 .../dashmap/backend/struct.DashmapBuilder.html     |   11 +
 .../dashmap/config/struct.DashmapConfig.html       |   11 +
 .../services/dbfs/backend/struct.DbfsBuilder.html  |   11 +
 .../services/dbfs/config/struct.DbfsConfig.html    |   11 +
 .../dropbox/builder/struct.DropboxBuilder.html     |   11 +
 .../dropbox/config/struct.DropboxConfig.html       |   11 +
 .../services/etcd/backend/struct.EtcdBuilder.html  |   11 +
 .../services/etcd/config/struct.EtcdConfig.html    |   11 +
 .../backend/struct.FoundationdbBuilder.html        |   11 +
 .../config/struct.FoundationdbConfig.html          |   11 +
 .../services/fs/backend/struct.FsBuilder.html      |   11 +
 .../services/fs/config/struct.FsConfig.html        |   11 +
 .../services/ftp/backend/struct.FtpBuilder.html    |   11 +
 .../services/ftp/config/struct.FtpConfig.html      |   11 +
 .../services/gcs/backend/struct.GcsBuilder.html    |   11 +
 .../services/gcs/config/struct.GcsConfig.html      |   11 +
 .../gdrive/builder/struct.GdriveBuilder.html       |   11 +
 .../gdrive/config/struct.GdriveConfig.html         |   11 +
 .../services/ghac/backend/struct.GhacBuilder.html  |   11 +
 .../services/ghac/config/struct.GhacConfig.html    |   11 +
 .../github/backend/struct.GithubBuilder.html       |   11 +
 .../github/config/struct.GithubConfig.html         |   11 +
 .../gridfs/backend/struct.GridfsBuilder.html       |   11 +
 .../gridfs/config/struct.GridfsConfig.html         |   11 +
 .../services/hdfs/backend/struct.HdfsBuilder.html  |   11 +
 .../services/hdfs/config/struct.HdfsConfig.html    |   11 +
 .../backend/struct.HdfsNativeBuilder.html          |   11 +
 .../config/struct.HdfsNativeConfig.html            |   11 +
 .../services/http/backend/struct.HttpBuilder.html  |   11 +
 .../services/http/config/struct.HttpConfig.html    |   11 +
 .../backend/struct.HuggingfaceBuilder.html         |   11 +
 .../config/struct.HuggingfaceConfig.html           |   11 +
 docs/rust/opendal/services/index.html              |   14 +
 .../services/ipfs/backend/struct.IpfsBuilder.html  |   11 +
 .../services/ipfs/config/struct.IpfsConfig.html    |   11 +
 .../ipmfs/builder/struct.IpmfsBuilder.html         |   11 +
 .../services/ipmfs/config/struct.IpmfsConfig.html  |   11 +
 .../koofr/backend/struct.KoofrBuilder.html         |   11 +
 .../services/koofr/config/struct.KoofrConfig.html  |   11 +
 .../lakefs/backend/struct.LakefsBuilder.html       |   11 +
 .../lakefs/config/struct.LakefsConfig.html         |   11 +
 .../memcached/backend/struct.MemcachedBuilder.html |   11 +
 .../memcached/config/struct.MemcachedConfig.html   |   11 +
 .../memory/backend/struct.MemoryBuilder.html       |   11 +
 .../memory/config/struct.MemoryConfig.html         |   11 +
 .../mini_moka/backend/struct.MiniMokaBuilder.html  |   11 +
 .../mini_moka/config/struct.MiniMokaConfig.html    |   11 +
 .../services/moka/backend/struct.MokaBuilder.html  |   11 +
 .../moka/backend/type.MokaCacheBuilder.html        |   11 +
 .../services/moka/config/struct.MokaConfig.html    |   11 +
 .../services/moka/core/struct.MokaValue.html       |   11 +
 .../mongodb/backend/struct.MongodbBuilder.html     |   11 +
 .../mongodb/config/struct.MongodbConfig.html       |   11 +
 .../monoiofs/backend/struct.MonoiofsBuilder.html   |   11 +
 .../monoiofs/config/struct.MonoiofsConfig.html     |   11 +
 .../mysql/backend/struct.MysqlBuilder.html         |   11 +
 .../services/mysql/config/struct.MysqlConfig.html  |   11 +
 .../services/obs/backend/struct.ObsBuilder.html    |   11 +
 .../services/obs/config/struct.ObsConfig.html      |   11 +
 .../onedrive/builder/struct.OnedriveBuilder.html   |   11 +
 .../onedrive/config/struct.OnedriveConfig.html     |   11 +
 .../services/oss/backend/struct.OssBuilder.html    |   11 +
 .../services/oss/config/struct.OssConfig.html      |   11 +
 .../pcloud/backend/struct.PcloudBuilder.html       |   11 +
 .../pcloud/config/struct.PcloudConfig.html         |   11 +
 .../persy/backend/struct.PersyBuilder.html         |   11 +
 .../services/persy/config/struct.PersyConfig.html  |   11 +
 .../backend/struct.PostgresqlBuilder.html          |   11 +
 .../postgresql/config/struct.PostgresqlConfig.html |   11 +
 .../services/redb/backend/struct.RedbBuilder.html  |   11 +
 .../services/redb/config/struct.RedbConfig.html    |   11 +
 .../redis/backend/struct.RedisBuilder.html         |   11 +
 .../services/redis/config/struct.RedisConfig.html  |   11 +
 .../rocksdb/backend/struct.RocksdbBuilder.html     |   11 +
 .../rocksdb/config/struct.RocksdbConfig.html       |   11 +
 .../services/s3/backend/struct.S3Builder.html      |   11 +
 .../services/s3/config/struct.S3Config.html        |   11 +
 .../seafile/backend/struct.SeafileBuilder.html     |   11 +
 .../seafile/config/struct.SeafileConfig.html       |   11 +
 .../services/sftp/backend/struct.SftpBuilder.html  |   11 +
 .../services/sftp/config/struct.SftpConfig.html    |   11 +
 docs/rust/opendal/services/sidebar-items.js        |    1 +
 .../services/sled/backend/struct.SledBuilder.html  |   11 +
 .../services/sled/config/struct.SledConfig.html    |   11 +
 .../sqlite/backend/struct.SqliteBuilder.html       |   11 +
 .../sqlite/config/struct.SqliteConfig.html         |   11 +
 docs/rust/opendal/services/struct.AliyunDrive.html |  191 +
 .../opendal/services/struct.AliyunDriveConfig.html |  155 +
 docs/rust/opendal/services/struct.Alluxio.html     |  174 +
 .../opendal/services/struct.AlluxioConfig.html     |  140 +
 docs/rust/opendal/services/struct.Azblob.html      |  269 +
 .../rust/opendal/services/struct.AzblobConfig.html |  158 +
 docs/rust/opendal/services/struct.Azdls.html       |  257 +
 docs/rust/opendal/services/struct.AzdlsConfig.html |  176 +
 docs/rust/opendal/services/struct.Azfile.html      |  222 +
 .../rust/opendal/services/struct.AzfileConfig.html |  144 +
 docs/rust/opendal/services/struct.B2.html          |  187 +
 docs/rust/opendal/services/struct.B2Config.html    |  154 +
 docs/rust/opendal/services/struct.Cacache.html     |  159 +
 .../opendal/services/struct.CacacheConfig.html     |  134 +
 .../rust/opendal/services/struct.CloudflareKv.html |  151 +
 .../services/struct.CloudflareKvConfig.html        |  140 +
 docs/rust/opendal/services/struct.Compfs.html      |  122 +
 .../rust/opendal/services/struct.CompfsConfig.html |  135 +
 docs/rust/opendal/services/struct.Cos.html         |  210 +
 docs/rust/opendal/services/struct.CosConfig.html   |  147 +
 docs/rust/opendal/services/struct.D1.html          |  184 +
 docs/rust/opendal/services/struct.D1Config.html    |  147 +
 docs/rust/opendal/services/struct.Dashmap.html     |  158 +
 .../opendal/services/struct.DashmapConfig.html     |  135 +
 docs/rust/opendal/services/struct.Dbfs.html        |  190 +
 docs/rust/opendal/services/struct.DbfsConfig.html  |  138 +
 docs/rust/opendal/services/struct.Dropbox.html     |  196 +
 .../opendal/services/struct.DropboxConfig.html     |  143 +
 docs/rust/opendal/services/struct.Etcd.html        |  183 +
 docs/rust/opendal/services/struct.EtcdConfig.html  |  156 +
 .../rust/opendal/services/struct.Foundationdb.html |  162 +
 .../services/struct.FoundationdbConfig.html        |  138 +
 docs/rust/opendal/services/struct.Fs.html          |  177 +
 docs/rust/opendal/services/struct.FsConfig.html    |  137 +
 docs/rust/opendal/services/struct.Ftp.html         |  166 +
 docs/rust/opendal/services/struct.FtpConfig.html   |  141 +
 docs/rust/opendal/services/struct.Gcs.html         |  257 +
 docs/rust/opendal/services/struct.GcsConfig.html   |  163 +
 docs/rust/opendal/services/struct.Gdrive.html      |  198 +
 .../rust/opendal/services/struct.GdriveConfig.html |  143 +
 docs/rust/opendal/services/struct.Ghac.html        |  205 +
 docs/rust/opendal/services/struct.GhacConfig.html  |  141 +
 docs/rust/opendal/services/struct.Github.html      |  183 +
 .../rust/opendal/services/struct.GithubConfig.html |  147 +
 docs/rust/opendal/services/struct.Gridfs.html      |  189 +
 .../rust/opendal/services/struct.GridfsConfig.html |  143 +
 docs/rust/opendal/services/struct.Hdfs.html        |  254 +
 docs/rust/opendal/services/struct.HdfsConfig.html  |  146 +
 docs/rust/opendal/services/struct.HdfsNative.html  |  162 +
 .../opendal/services/struct.HdfsNativeConfig.html  |  141 +
 docs/rust/opendal/services/struct.Http.html        |  176 +
 docs/rust/opendal/services/struct.HttpConfig.html  |  143 +
 docs/rust/opendal/services/struct.Huggingface.html |  213 +
 .../opendal/services/struct.HuggingfaceConfig.html |  152 +
 docs/rust/opendal/services/struct.Ipfs.html        |  190 +
 docs/rust/opendal/services/struct.IpfsConfig.html  |  137 +
 docs/rust/opendal/services/struct.Ipmfs.html       |  160 +
 docs/rust/opendal/services/struct.IpmfsConfig.html |  137 +
 docs/rust/opendal/services/struct.Koofr.html       |  189 +
 docs/rust/opendal/services/struct.KoofrConfig.html |  142 +
 docs/rust/opendal/services/struct.Lakefs.html      |  205 +
 .../rust/opendal/services/struct.LakefsConfig.html |  151 +
 docs/rust/opendal/services/struct.Memcached.html   |  178 +
 .../opendal/services/struct.MemcachedConfig.html   |  145 +
 docs/rust/opendal/services/struct.Memory.html      |  157 +
 .../rust/opendal/services/struct.MemoryConfig.html |  135 +
 docs/rust/opendal/services/struct.MiniMoka.html    |  152 +
 .../opendal/services/struct.MiniMokaConfig.html    |  144 +
 docs/rust/opendal/services/struct.Moka.html        |  187 +
 docs/rust/opendal/services/struct.MokaConfig.html  |  146 +
 docs/rust/opendal/services/struct.MokaValue.html   |  126 +
 docs/rust/opendal/services/struct.Mongodb.html     |  193 +
 .../opendal/services/struct.MongodbConfig.html     |  145 +
 docs/rust/opendal/services/struct.Monoiofs.html    |  169 +
 .../opendal/services/struct.MonoiofsConfig.html    |  137 +
 docs/rust/opendal/services/struct.Mysql.html       |  185 +
 docs/rust/opendal/services/struct.MysqlConfig.html |  152 +
 docs/rust/opendal/services/struct.Obs.html         |  205 +
 docs/rust/opendal/services/struct.ObsConfig.html   |  145 +
 docs/rust/opendal/services/struct.Onedrive.html    |  252 +
 .../opendal/services/struct.OnedriveConfig.html    |  145 +
 docs/rust/opendal/services/struct.Oss.html         |  246 +
 docs/rust/opendal/services/struct.OssConfig.html   |  180 +
 docs/rust/opendal/services/struct.Pcloud.html      |  186 +
 .../rust/opendal/services/struct.PcloudConfig.html |  142 +
 docs/rust/opendal/services/struct.Persy.html       |  166 +
 docs/rust/opendal/services/struct.PersyConfig.html |  139 +
 docs/rust/opendal/services/struct.Postgresql.html  |  184 +
 .../opendal/services/struct.PostgresqlConfig.html  |  152 +
 docs/rust/opendal/services/struct.Redb.html        |  177 +
 docs/rust/opendal/services/struct.RedbConfig.html  |  139 +
 docs/rust/opendal/services/struct.Redis.html       |  193 +
 docs/rust/opendal/services/struct.RedisConfig.html |  153 +
 docs/rust/opendal/services/struct.Rocksdb.html     |  178 +
 .../opendal/services/struct.RocksdbConfig.html     |  138 +
 docs/rust/opendal/services/struct.S3.html          |  642 ++
 docs/rust/opendal/services/struct.S3Config.html    |  285 +
 docs/rust/opendal/services/struct.Seafile.html     |  189 +
 .../opendal/services/struct.SeafileConfig.html     |  145 +
 docs/rust/opendal/services/struct.Sftp.html        |  189 +
 docs/rust/opendal/services/struct.SftpConfig.html  |  145 +
 docs/rust/opendal/services/struct.Sled.html        |  162 +
 docs/rust/opendal/services/struct.SledConfig.html  |  139 +
 docs/rust/opendal/services/struct.Sqlite.html      |  182 +
 .../rust/opendal/services/struct.SqliteConfig.html |  154 +
 docs/rust/opendal/services/struct.Surrealdb.html   |  194 +
 .../opendal/services/struct.SurrealdbConfig.html   |  151 +
 docs/rust/opendal/services/struct.Swift.html       |  235 +
 docs/rust/opendal/services/struct.SwiftConfig.html |  141 +
 docs/rust/opendal/services/struct.Tikv.html        |  172 +
 docs/rust/opendal/services/struct.TikvConfig.html  |  143 +
 docs/rust/opendal/services/struct.Upyun.html       |  184 +
 docs/rust/opendal/services/struct.UpyunConfig.html |  142 +
 .../opendal/services/struct.VercelArtifacts.html   |  166 +
 .../services/struct.VercelArtifactsConfig.html     |  135 +
 docs/rust/opendal/services/struct.VercelBlob.html  |  175 +
 .../opendal/services/struct.VercelBlobConfig.html  |  138 +
 docs/rust/opendal/services/struct.Webdav.html      |  180 +
 .../rust/opendal/services/struct.WebdavConfig.html |  145 +
 docs/rust/opendal/services/struct.Webhdfs.html     |  235 +
 .../opendal/services/struct.WebhdfsConfig.html     |  145 +
 docs/rust/opendal/services/struct.YandexDisk.html  |  176 +
 .../opendal/services/struct.YandexDiskConfig.html  |  138 +
 .../surrealdb/backend/struct.SurrealdbBuilder.html |   11 +
 .../surrealdb/config/struct.SurrealdbConfig.html   |   11 +
 .../swift/backend/struct.SwiftBuilder.html         |   11 +
 .../services/swift/config/struct.SwiftConfig.html  |   11 +
 .../services/tikv/backend/struct.TikvBuilder.html  |   11 +
 .../services/tikv/config/struct.TikvConfig.html    |   11 +
 .../opendal/services/type.MokaCacheBuilder.html    |    2 +
 .../upyun/backend/struct.UpyunBuilder.html         |   11 +
 .../services/upyun/config/struct.UpyunConfig.html  |   11 +
 .../builder/struct.VercelArtifactsBuilder.html     |   11 +
 .../config/struct.VercelArtifactsConfig.html       |   11 +
 .../backend/struct.VercelBlobBuilder.html          |   11 +
 .../config/struct.VercelBlobConfig.html            |   11 +
 .../webdav/backend/struct.WebdavBuilder.html       |   11 +
 .../webdav/config/struct.WebdavConfig.html         |   11 +
 .../webhdfs/backend/struct.WebhdfsBuilder.html     |   11 +
 .../webhdfs/config/struct.WebhdfsConfig.html       |   11 +
 .../backend/struct.YandexDiskBuilder.html          |   11 +
 .../config/struct.YandexDiskConfig.html            |   11 +
 docs/rust/opendal/sidebar-items.js                 |    1 +
 docs/rust/opendal/struct.Buffer.html               | 2641 ++++++++
 docs/rust/opendal/struct.BufferSink.html           |  183 +
 docs/rust/opendal/struct.BufferStream.html         |  627 ++
 docs/rust/opendal/struct.Capability.html           |  272 +
 docs/rust/opendal/struct.DeleteInput.html          |  123 +
 docs/rust/opendal/struct.Deleter.html              |  199 +
 docs/rust/opendal/struct.Entry.html                |  131 +
 docs/rust/opendal/struct.Error.html                |  220 +
 docs/rust/opendal/struct.Executor.html             |  129 +
 docs/rust/opendal/struct.FuturesAsyncReader.html   |  251 +
 docs/rust/opendal/struct.FuturesAsyncWriter.html   |  163 +
 docs/rust/opendal/struct.FuturesBytesSink.html     |  194 +
 docs/rust/opendal/struct.FuturesBytesStream.html   |  634 ++
 docs/rust/opendal/struct.FuturesDeleteSink.html    |  182 +
 docs/rust/opendal/struct.Lister.html               |  633 ++
 docs/rust/opendal/struct.Metadata.html             |  264 +
 docs/rust/opendal/struct.Operator.html             | 1265 ++++
 docs/rust/opendal/struct.OperatorBuilder.html      |  175 +
 docs/rust/opendal/struct.OperatorInfo.html         |  131 +
 docs/rust/opendal/struct.Reader.html               |  348 +
 docs/rust/opendal/struct.Writer.html               |  330 +
 docs/rust/opendal/trait.Builder.html               |   32 +
 docs/rust/opendal/trait.Configurator.html          |   66 +
 docs/rust/opendal/trait.Execute.html               |   35 +
 docs/rust/opendal/trait.IntoDeleteInput.html       |   15 +
 docs/rust/opendal/type.Result.html                 |    7 +
 docs/rust/opendal/types/buffer/struct.Buffer.html  |   11 +
 docs/rust/opendal/types/builder/trait.Builder.html |   11 +
 .../opendal/types/builder/trait.Configurator.html  |   11 +
 .../types/capability/struct.Capability.html        |   11 +
 .../types/delete/deleter/struct.Deleter.html       |   11 +
 .../struct.FuturesDeleteSink.html                  |   11 +
 .../types/delete/input/struct.DeleteInput.html     |   11 +
 .../types/delete/input/trait.IntoDeleteInput.html  |   11 +
 docs/rust/opendal/types/entry/struct.Entry.html    |   11 +
 docs/rust/opendal/types/error/enum.ErrorKind.html  |   11 +
 docs/rust/opendal/types/error/struct.Error.html    |   11 +
 docs/rust/opendal/types/error/type.Result.html     |   11 +
 .../opendal/types/execute/api/trait.Execute.html   |   11 +
 .../types/execute/executor/struct.Executor.html    |   11 +
 .../opendal/types/execute/executors/index.html     |   11 +
 .../tokio_executor/struct.TokioExecutor.html       |   11 +
 docs/rust/opendal/types/list/struct.Lister.html    |   11 +
 .../opendal/types/metadata/struct.Metadata.html    |   11 +
 docs/rust/opendal/types/mode/enum.EntryMode.html   |   11 +
 .../operator/builder/struct.OperatorBuilder.html   |   11 +
 .../types/operator/info/struct.OperatorInfo.html   |   11 +
 .../types/operator/operator/struct.Operator.html   |   11 +
 .../types/operator/operator_futures/index.html     |   11 +
 .../operator_futures/struct.OperatorFuture.html    |   11 +
 .../operator_futures/type.FutureDelete.html        |   11 +
 .../operator_futures/type.FutureDeleter.html       |   11 +
 .../operator/operator_futures/type.FutureList.html |   11 +
 .../operator_futures/type.FutureLister.html        |   11 +
 .../operator_futures/type.FuturePresignDelete.html |   11 +
 .../operator_futures/type.FuturePresignRead.html   |   11 +
 .../operator_futures/type.FuturePresignStat.html   |   11 +
 .../operator_futures/type.FuturePresignWrite.html  |   11 +
 .../operator/operator_futures/type.FutureRead.html |   11 +
 .../operator_futures/type.FutureReader.html        |   11 +
 .../operator/operator_futures/type.FutureStat.html |   11 +
 .../operator_futures/type.FutureWrite.html         |   11 +
 .../operator_futures/type.FutureWriter.html        |   11 +
 docs/rust/opendal/types/options/index.html         |   11 +
 .../types/options/struct.DeleteOptions.html        |   11 +
 .../opendal/types/options/struct.ListOptions.html  |   11 +
 .../opendal/types/options/struct.ReadOptions.html  |   11 +
 .../types/options/struct.ReaderOptions.html        |   11 +
 .../opendal/types/options/struct.StatOptions.html  |   11 +
 .../opendal/types/options/struct.WriteOptions.html |   11 +
 .../read/buffer_stream/struct.BufferStream.html    |   11 +
 .../struct.FuturesAsyncReader.html                 |   11 +
 .../struct.FuturesBytesStream.html                 |   11 +
 .../opendal/types/read/reader/struct.Reader.html   |   11 +
 docs/rust/opendal/types/scheme/enum.Scheme.html    |   11 +
 .../types/write/buffer_sink/struct.BufferSink.html |   11 +
 .../struct.FuturesAsyncWriter.html                 |   11 +
 .../struct.FuturesBytesSink.html                   |   11 +
 .../opendal/types/write/writer/struct.Writer.html  |   11 +
 docs/rust/search-index.js                          |    4 +
 docs/rust/search.desc/opendal/opendal-desc-0-.js   |    1 +
 docs/rust/settings.html                            |    1 +
 docs/rust/src-files.js                             |    3 +
 docs/rust/src/opendal/blocking/delete.rs.html      |   74 +
 docs/rust/src/opendal/blocking/list.rs.html        |   71 +
 docs/rust/src/opendal/blocking/mod.rs.html         |   33 +
 docs/rust/src/opendal/blocking/operator.rs.html    |  720 +++
 .../opendal/blocking/read/buffer_iterator.rs.html  |   66 +
 docs/rust/src/opendal/blocking/read/mod.rs.html    |   27 +
 docs/rust/src/opendal/blocking/read/reader.rs.html |  124 +
 .../blocking/read/std_bytes_iterator.rs.html       |   69 +
 .../src/opendal/blocking/read/std_reader.rs.html   |   95 +
 docs/rust/src/opendal/blocking/write/mod.rs.html   |   22 +
 .../src/opendal/blocking/write/std_writer.rs.html  |   82 +
 .../rust/src/opendal/blocking/write/writer.rs.html |  109 +
 docs/rust/src/opendal/docs/comparisons/mod.rs.html |   30 +
 docs/rust/src/opendal/docs/concepts.rs.html        |  135 +
 .../src/opendal/docs/internals/accessor.rs.html    |  330 +
 docs/rust/src/opendal/docs/internals/layer.rs.html |   42 +
 docs/rust/src/opendal/docs/internals/mod.rs.html   |   62 +
 docs/rust/src/opendal/docs/mod.rs.html             |   43 +
 docs/rust/src/opendal/docs/performance/mod.rs.html |   32 +
 docs/rust/src/opendal/docs/rfcs/mod.rs.html        |  278 +
 .../src/opendal/layers/async_backtrace.rs.html     |  174 +
 docs/rust/src/opendal/layers/await_tree.rs.html    |  202 +
 .../src/opendal/layers/capability_check.rs.html    |  239 +
 docs/rust/src/opendal/layers/chaos.rs.html         |  170 +
 docs/rust/src/opendal/layers/complete.rs.html      |  385 ++
 .../src/opendal/layers/concurrent_limit.rs.html    |  322 +
 .../src/opendal/layers/correctness_check.rs.html   |  439 ++
 docs/rust/src/opendal/layers/dtrace.rs.html        |  294 +
 docs/rust/src/opendal/layers/error_context.rs.html |  310 +
 docs/rust/src/opendal/layers/fastmetrics.rs.html   |  525 ++
 docs/rust/src/opendal/layers/fastrace.rs.html      |  271 +
 docs/rust/src/opendal/layers/http_client.rs.html   |  206 +
 .../src/opendal/layers/immutable_index.rs.html     |  408 ++
 docs/rust/src/opendal/layers/logging.rs.html       |  842 +++
 docs/rust/src/opendal/layers/metrics.rs.html       |  182 +
 docs/rust/src/opendal/layers/mime_guess.rs.html    |  199 +
 docs/rust/src/opendal/layers/mod.rs.html           |  130 +
 .../src/opendal/layers/observe/metrics.rs.html     |  936 +++
 docs/rust/src/opendal/layers/observe/mod.rs.html   |   93 +
 docs/rust/src/opendal/layers/otelmetrics.rs.html   |  496 ++
 docs/rust/src/opendal/layers/oteltrace.rs.html     |  203 +
 docs/rust/src/opendal/layers/prometheus.rs.html    |  686 ++
 .../src/opendal/layers/prometheus_client.rs.html   |  519 ++
 docs/rust/src/opendal/layers/retry.rs.html         |  935 +++
 docs/rust/src/opendal/layers/throttle.rs.html      |  204 +
 docs/rust/src/opendal/layers/timeout.rs.html       |  513 ++
 docs/rust/src/opendal/layers/tracing.rs.html       |  349 +
 docs/rust/src/opendal/layers/type_eraser.rs.html   |   91 +
 docs/rust/src/opendal/lib.rs.html                  |  204 +
 docs/rust/src/opendal/raw/accessor.rs.html         |  842 +++
 docs/rust/src/opendal/raw/adapters/kv/api.rs.html  |  169 +
 .../src/opendal/raw/adapters/kv/backend.rs.html    |  253 +
 docs/rust/src/opendal/raw/adapters/kv/mod.rs.html  |   36 +
 docs/rust/src/opendal/raw/adapters/mod.rs.html     |   50 +
 .../src/opendal/raw/adapters/typed_kv/api.rs.html  |  171 +
 .../opendal/raw/adapters/typed_kv/backend.rs.html  |  279 +
 .../src/opendal/raw/adapters/typed_kv/mod.rs.html  |   29 +
 docs/rust/src/opendal/raw/atomic_util.rs.html      |   57 +
 docs/rust/src/opendal/raw/azure.rs.html            |  485 ++
 docs/rust/src/opendal/raw/chrono_util.rs.html      |  109 +
 docs/rust/src/opendal/raw/enum_utils.rs.html       |  201 +
 docs/rust/src/opendal/raw/futures_util.rs.html     |  359 ++
 docs/rust/src/opendal/raw/http_util/body.rs.html   |  144 +
 .../raw/http_util/bytes_content_range.rs.html      |  239 +
 .../src/opendal/raw/http_util/bytes_range.rs.html  |  260 +
 docs/rust/src/opendal/raw/http_util/client.rs.html |  276 +
 docs/rust/src/opendal/raw/http_util/error.rs.html  |   68 +
 docs/rust/src/opendal/raw/http_util/header.rs.html |  356 ++
 docs/rust/src/opendal/raw/http_util/mod.rs.html    |   78 +
 .../src/opendal/raw/http_util/multipart.rs.html    | 1180 ++++
 docs/rust/src/opendal/raw/http_util/uri.rs.html    |  190 +
 docs/rust/src/opendal/raw/layer.rs.html            |  295 +
 docs/rust/src/opendal/raw/mod.rs.html              |  101 +
 docs/rust/src/opendal/raw/oio/buf/flex_buf.rs.html |  118 +
 docs/rust/src/opendal/raw/oio/buf/mod.rs.html      |   25 +
 .../src/opendal/raw/oio/buf/pooled_buf.rs.html     |  126 +
 .../rust/src/opendal/raw/oio/buf/queue_buf.rs.html |  117 +
 docs/rust/src/opendal/raw/oio/delete/api.rs.html   |  102 +
 .../opendal/raw/oio/delete/batch_delete.rs.html    |  127 +
 docs/rust/src/opendal/raw/oio/delete/mod.rs.html   |   30 +
 .../opendal/raw/oio/delete/one_shot_delete.rs.html |   79 +
 docs/rust/src/opendal/raw/oio/entry.rs.html        |   89 +
 docs/rust/src/opendal/raw/oio/list/api.rs.html     |   66 +
 .../src/opendal/raw/oio/list/flat_list.rs.html     |  137 +
 .../opendal/raw/oio/list/hierarchy_list.rs.html    |  135 +
 docs/rust/src/opendal/raw/oio/list/mod.rs.html     |   34 +
 .../src/opendal/raw/oio/list/page_list.rs.html     |  104 +
 .../src/opendal/raw/oio/list/prefix_list.rs.html   |   64 +
 docs/rust/src/opendal/raw/oio/mod.rs.html          |   40 +
 docs/rust/src/opendal/raw/oio/read/api.rs.html     |  119 +
 docs/rust/src/opendal/raw/oio/read/mod.rs.html     |   21 +
 docs/rust/src/opendal/raw/oio/write/api.rs.html    |   98 +
 .../src/opendal/raw/oio/write/append_write.rs.html |  111 +
 .../src/opendal/raw/oio/write/block_write.rs.html  |  405 ++
 docs/rust/src/opendal/raw/oio/write/mod.rs.html    |   41 +
 .../opendal/raw/oio/write/multipart_write.rs.html  |  518 ++
 .../opendal/raw/oio/write/one_shot_write.rs.html   |   77 +
 .../opendal/raw/oio/write/position_write.rs.html   |  284 +
 docs/rust/src/opendal/raw/operation.rs.html        |   88 +
 docs/rust/src/opendal/raw/ops.rs.html              |  885 +++
 docs/rust/src/opendal/raw/path.rs.html             |  451 ++
 docs/rust/src/opendal/raw/path_cache.rs.html       |  244 +
 docs/rust/src/opendal/raw/rps.rs.html              |  249 +
 docs/rust/src/opendal/raw/serde_util.rs.html       |  423 ++
 docs/rust/src/opendal/raw/std_io_util.rs.html      |   65 +
 docs/rust/src/opendal/raw/tests/mod.rs.html        |   30 +
 docs/rust/src/opendal/raw/tests/read.rs.html       |  116 +
 docs/rust/src/opendal/raw/tests/utils.rs.html      |   80 +
 docs/rust/src/opendal/raw/tests/write.rs.html      |   79 +
 docs/rust/src/opendal/raw/tokio_util.rs.html       |   24 +
 docs/rust/src/opendal/raw/version.rs.html          |   19 +
 .../opendal/services/aliyun_drive/backend.rs.html  |  422 ++
 .../opendal/services/aliyun_drive/config.rs.html   |   72 +
 .../src/opendal/services/aliyun_drive/core.rs.html |  651 ++
 .../opendal/services/aliyun_drive/delete.rs.html   |   51 +
 .../opendal/services/aliyun_drive/error.rs.html    |   56 +
 .../opendal/services/aliyun_drive/lister.rs.html   |  134 +
 .../src/opendal/services/aliyun_drive/mod.rs.html  |   36 +
 .../opendal/services/aliyun_drive/writer.rs.html   |  114 +
 .../src/opendal/services/alluxio/backend.rs.html   |  258 +
 .../src/opendal/services/alluxio/config.rs.html    |   50 +
 .../rust/src/opendal/services/alluxio/core.rs.html |  367 ++
 .../src/opendal/services/alluxio/delete.rs.html    |   38 +
 .../src/opendal/services/alluxio/error.rs.html     |   99 +
 .../src/opendal/services/alluxio/lister.rs.html    |   73 +
 docs/rust/src/opendal/services/alluxio/mod.rs.html |   36 +
 .../src/opendal/services/alluxio/writer.rs.html    |   74 +
 .../src/opendal/services/azblob/backend.rs.html    |  581 ++
 .../src/opendal/services/azblob/config.rs.html     |   85 +
 docs/rust/src/opendal/services/azblob/core.rs.html |  925 +++
 .../src/opendal/services/azblob/delete.rs.html     |  108 +
 .../rust/src/opendal/services/azblob/error.rs.html |  164 +
 .../src/opendal/services/azblob/lister.rs.html     |  107 +
 docs/rust/src/opendal/services/azblob/mod.rs.html  |   35 +
 .../src/opendal/services/azblob/writer.rs.html     |  177 +
 .../src/opendal/services/azdls/backend.rs.html     |  436 ++
 .../rust/src/opendal/services/azdls/config.rs.html |   89 +
 docs/rust/src/opendal/services/azdls/core.rs.html  |  388 ++
 .../rust/src/opendal/services/azdls/delete.rs.html |   48 +
 docs/rust/src/opendal/services/azdls/error.rs.html |  107 +
 .../rust/src/opendal/services/azdls/lister.rs.html |  165 +
 docs/rust/src/opendal/services/azdls/mod.rs.html   |   35 +
 .../rust/src/opendal/services/azdls/writer.rs.html |  129 +
 .../src/opendal/services/azfile/backend.rs.html    |  374 ++
 .../src/opendal/services/azfile/config.rs.html     |   61 +
 docs/rust/src/opendal/services/azfile/core.rs.html |  435 ++
 .../src/opendal/services/azfile/delete.rs.html     |   51 +
 .../rust/src/opendal/services/azfile/error.rs.html |  108 +
 .../src/opendal/services/azfile/lister.rs.html     |  217 +
 docs/rust/src/opendal/services/azfile/mod.rs.html  |   36 +
 .../src/opendal/services/azfile/writer.rs.html     |   92 +
 docs/rust/src/opendal/services/b2/backend.rs.html  |  435 ++
 docs/rust/src/opendal/services/b2/config.rs.html   |   64 +
 docs/rust/src/opendal/services/b2/core.rs.html     |  742 +++
 docs/rust/src/opendal/services/b2/delete.rs.html   |   56 +
 docs/rust/src/opendal/services/b2/error.rs.html    |  132 +
 docs/rust/src/opendal/services/b2/lister.rs.html   |  110 +
 docs/rust/src/opendal/services/b2/mod.rs.html      |   36 +
 docs/rust/src/opendal/services/b2/writer.rs.html   |  189 +
 .../src/opendal/services/cacache/backend.rs.html   |  161 +
 .../src/opendal/services/cacache/config.rs.html    |   28 +
 .../rust/src/opendal/services/cacache/core.rs.html |   96 +
 .../src/opendal/services/cacache/delete.rs.html    |   39 +
 docs/rust/src/opendal/services/cacache/mod.rs.html |   31 +
 .../src/opendal/services/cacache/writer.rs.html    |   61 +
 .../opendal/services/cloudflare_kv/backend.rs.html |  352 +
 .../opendal/services/cloudflare_kv/config.rs.html  |   52 +
 .../opendal/services/cloudflare_kv/error.rs.html   |   79 +
 .../src/opendal/services/cloudflare_kv/mod.rs.html |   27 +
 .../src/opendal/services/compfs/backend.rs.html    |  291 +
 .../src/opendal/services/compfs/config.rs.html     |   30 +
 docs/rust/src/opendal/services/compfs/core.rs.html |  159 +
 .../src/opendal/services/compfs/delete.rs.html     |   53 +
 .../src/opendal/services/compfs/lister.rs.html     |   98 +
 docs/rust/src/opendal/services/compfs/mod.rs.html  |   35 +
 .../src/opendal/services/compfs/reader.rs.html     |   79 +
 .../src/opendal/services/compfs/writer.rs.html     |   90 +
 docs/rust/src/opendal/services/cos/backend.rs.html |  443 ++
 docs/rust/src/opendal/services/cos/config.rs.html  |   54 +
 docs/rust/src/opendal/services/cos/core.rs.html    |  761 +++
 docs/rust/src/opendal/services/cos/delete.rs.html  |   48 +
 docs/rust/src/opendal/services/cos/error.rs.html   |  105 +
 docs/rust/src/opendal/services/cos/lister.rs.html  |  237 +
 docs/rust/src/opendal/services/cos/mod.rs.html     |   36 +
 docs/rust/src/opendal/services/cos/writer.rs.html  |  234 +
 docs/rust/src/opendal/services/d1/backend.rs.html  |  331 +
 docs/rust/src/opendal/services/d1/config.rs.html   |   55 +
 docs/rust/src/opendal/services/d1/error.rs.html    |   79 +
 docs/rust/src/opendal/services/d1/mod.rs.html      |   29 +
 docs/rust/src/opendal/services/d1/model.rs.html    |  125 +
 .../src/opendal/services/dashmap/backend.rs.html   |  204 +
 .../src/opendal/services/dashmap/config.rs.html    |   37 +
 .../rust/src/opendal/services/dashmap/core.rs.html |   61 +
 .../src/opendal/services/dashmap/delete.rs.html    |   40 +
 .../src/opendal/services/dashmap/lister.rs.html    |   63 +
 docs/rust/src/opendal/services/dashmap/mod.rs.html |   33 +
 .../src/opendal/services/dashmap/writer.rs.html    |   87 +
 .../rust/src/opendal/services/dbfs/backend.rs.html |  259 +
 docs/rust/src/opendal/services/dbfs/config.rs.html |   48 +
 docs/rust/src/opendal/services/dbfs/core.rs.html   |  191 +
 docs/rust/src/opendal/services/dbfs/delete.rs.html |   49 +
 docs/rust/src/opendal/services/dbfs/error.rs.html  |   74 +
 docs/rust/src/opendal/services/dbfs/lister.rs.html |   96 +
 docs/rust/src/opendal/services/dbfs/mod.rs.html    |   35 +
 docs/rust/src/opendal/services/dbfs/writer.rs.html |   64 +
 .../src/opendal/services/dropbox/backend.rs.html   |  187 +
 .../src/opendal/services/dropbox/builder.rs.html   |  223 +
 .../src/opendal/services/dropbox/config.rs.html    |   47 +
 .../rust/src/opendal/services/dropbox/core.rs.html |  535 ++
 .../src/opendal/services/dropbox/delete.rs.html    |   54 +
 .../src/opendal/services/dropbox/error.rs.html     |   85 +
 .../src/opendal/services/dropbox/lister.rs.html    |  117 +
 docs/rust/src/opendal/services/dropbox/mod.rs.html |   37 +
 .../src/opendal/services/dropbox/writer.rs.html    |   51 +
 .../rust/src/opendal/services/etcd/backend.rs.html |  340 +
 docs/rust/src/opendal/services/etcd/config.rs.html |   86 +
 docs/rust/src/opendal/services/etcd/mod.rs.html    |   24 +
 .../opendal/services/foundationdb/backend.rs.html  |  172 +
 .../opendal/services/foundationdb/config.rs.html   |   45 +
 .../src/opendal/services/foundationdb/mod.rs.html  |   24 +
 docs/rust/src/opendal/services/fs/backend.rs.html  |  274 +
 docs/rust/src/opendal/services/fs/config.rs.html   |   33 +
 docs/rust/src/opendal/services/fs/core.rs.html     |  227 +
 docs/rust/src/opendal/services/fs/delete.rs.html   |   53 +
 docs/rust/src/opendal/services/fs/error.rs.html    |   31 +
 docs/rust/src/opendal/services/fs/lister.rs.html   |   81 +
 docs/rust/src/opendal/services/fs/mod.rs.html      |   37 +
 docs/rust/src/opendal/services/fs/reader.rs.html   |   83 +
 docs/rust/src/opendal/services/fs/writer.rs.html   |  212 +
 docs/rust/src/opendal/services/ftp/backend.rs.html |  389 ++
 docs/rust/src/opendal/services/ftp/config.rs.html  |   46 +
 docs/rust/src/opendal/services/ftp/core.rs.html    |  136 +
 docs/rust/src/opendal/services/ftp/delete.rs.html  |   62 +
 docs/rust/src/opendal/services/ftp/err.rs.html     |   47 +
 docs/rust/src/opendal/services/ftp/lister.rs.html  |   72 +
 docs/rust/src/opendal/services/ftp/mod.rs.html     |   38 +
 docs/rust/src/opendal/services/ftp/reader.rs.html  |   84 +
 docs/rust/src/opendal/services/ftp/writer.rs.html  |  122 +
 docs/rust/src/opendal/services/gcs/backend.rs.html |  500 ++
 docs/rust/src/opendal/services/gcs/config.rs.html  |   71 +
 docs/rust/src/opendal/services/gcs/core.rs.html    | 1079 ++++
 docs/rust/src/opendal/services/gcs/delete.rs.html  |   98 +
 docs/rust/src/opendal/services/gcs/error.rs.html   |  122 +
 docs/rust/src/opendal/services/gcs/lister.rs.html  |  136 +
 docs/rust/src/opendal/services/gcs/mod.rs.html     |   37 +
 docs/rust/src/opendal/services/gcs/uri.rs.html     |   75 +
 docs/rust/src/opendal/services/gcs/writer.rs.html  |  163 +
 .../src/opendal/services/gdrive/backend.rs.html    |  176 +
 .../src/opendal/services/gdrive/builder.rs.html    |  229 +
 .../src/opendal/services/gdrive/config.rs.html     |   47 +
 docs/rust/src/opendal/services/gdrive/core.rs.html |  499 ++
 .../src/opendal/services/gdrive/delete.rs.html     |   57 +
 .../rust/src/opendal/services/gdrive/error.rs.html |   80 +
 .../src/opendal/services/gdrive/lister.rs.html     |  110 +
 docs/rust/src/opendal/services/gdrive/mod.rs.html  |   37 +
 .../src/opendal/services/gdrive/writer.rs.html     |   77 +
 .../rust/src/opendal/services/ghac/backend.rs.html |  286 +
 docs/rust/src/opendal/services/ghac/config.rs.html |   36 +
 docs/rust/src/opendal/services/ghac/core.rs.html   |  459 ++
 docs/rust/src/opendal/services/ghac/error.rs.html  |   52 +
 docs/rust/src/opendal/services/ghac/mod.rs.html    |   32 +
 docs/rust/src/opendal/services/ghac/writer.rs.html |  201 +
 .../src/opendal/services/github/backend.rs.html    |  286 +
 .../src/opendal/services/github/config.rs.html     |   59 +
 docs/rust/src/opendal/services/github/core.rs.html |  351 +
 .../src/opendal/services/github/delete.rs.html     |   41 +
 .../rust/src/opendal/services/github/error.rs.html |  101 +
 .../src/opendal/services/github/lister.rs.html     |  112 +
 docs/rust/src/opendal/services/github/mod.rs.html  |   35 +
 .../src/opendal/services/github/writer.rs.html     |   51 +
 .../src/opendal/services/gridfs/backend.rs.html    |  167 +
 .../src/opendal/services/gridfs/config.rs.html     |   50 +
 docs/rust/src/opendal/services/gridfs/core.rs.html |  154 +
 docs/rust/src/opendal/services/gridfs/mod.rs.html  |   26 +
 .../rust/src/opendal/services/hdfs/backend.rs.html |  415 ++
 docs/rust/src/opendal/services/hdfs/config.rs.html |   59 +
 docs/rust/src/opendal/services/hdfs/delete.rs.html |   62 +
 docs/rust/src/opendal/services/hdfs/lister.rs.html |   70 +
 docs/rust/src/opendal/services/hdfs/mod.rs.html    |   33 +
 docs/rust/src/opendal/services/hdfs/reader.rs.html |   79 +
 docs/rust/src/opendal/services/hdfs/writer.rs.html |  104 +
 .../opendal/services/hdfs_native/backend.rs.html   |  341 +
 .../opendal/services/hdfs_native/config.rs.html    |   45 +
 .../opendal/services/hdfs_native/delete.rs.html    |   47 +
 .../src/opendal/services/hdfs_native/error.rs.html |   59 +
 .../opendal/services/hdfs_native/lister.rs.html    |   85 +
 .../src/opendal/services/hdfs_native/mod.rs.html   |   36 +
 .../opendal/services/hdfs_native/reader.rs.html    |   62 +
 .../opendal/services/hdfs_native/writer.rs.html    |   61 +
 .../rust/src/opendal/services/http/backend.rs.html |  292 +
 docs/rust/src/opendal/services/http/config.rs.html |   49 +
 docs/rust/src/opendal/services/http/core.rs.html   |  125 +
 docs/rust/src/opendal/services/http/error.rs.html  |   53 +
 docs/rust/src/opendal/services/http/mod.rs.html    |   29 +
 .../opendal/services/huggingface/backend.rs.html   |  290 +
 .../opendal/services/huggingface/config.rs.html    |   75 +
 .../src/opendal/services/huggingface/core.rs.html  |  406 ++
 .../src/opendal/services/huggingface/error.rs.html |   93 +
 .../opendal/services/huggingface/lister.rs.html    |   91 +
 .../src/opendal/services/huggingface/mod.rs.html   |   31 +
 .../rust/src/opendal/services/ipfs/backend.rs.html |  258 +
 docs/rust/src/opendal/services/ipfs/config.rs.html |   32 +
 docs/rust/src/opendal/services/ipfs/core.rs.html   |  239 +
 docs/rust/src/opendal/services/ipfs/error.rs.html  |   52 +
 docs/rust/src/opendal/services/ipfs/ipld.rs.html   |  162 +
 docs/rust/src/opendal/services/ipfs/mod.rs.html    |   31 +
 .../src/opendal/services/ipmfs/backend.rs.html     |  147 +
 .../src/opendal/services/ipmfs/builder.rs.html     |  167 +
 .../rust/src/opendal/services/ipmfs/config.rs.html |   32 +
 docs/rust/src/opendal/services/ipmfs/core.rs.html  |  142 +
 .../rust/src/opendal/services/ipmfs/delete.rs.html |   48 +
 docs/rust/src/opendal/services/ipmfs/error.rs.html |   83 +
 .../rust/src/opendal/services/ipmfs/lister.rs.html |  135 +
 docs/rust/src/opendal/services/ipmfs/mod.rs.html   |   37 +
 .../rust/src/opendal/services/ipmfs/writer.rs.html |   49 +
 .../src/opendal/services/koofr/backend.rs.html     |  362 ++
 .../rust/src/opendal/services/koofr/config.rs.html |   50 +
 docs/rust/src/opendal/services/koofr/core.rs.html  |  458 ++
 .../rust/src/opendal/services/koofr/delete.rs.html |   50 +
 docs/rust/src/opendal/services/koofr/error.rs.html |   72 +
 .../rust/src/opendal/services/koofr/lister.rs.html |   88 +
 docs/rust/src/opendal/services/koofr/mod.rs.html   |   35 +
 .../rust/src/opendal/services/koofr/writer.rs.html |   53 +
 .../src/opendal/services/lakefs/backend.rs.html    |  310 +
 .../src/opendal/services/lakefs/config.rs.html     |   81 +
 docs/rust/src/opendal/services/lakefs/core.rs.html |  261 +
 .../src/opendal/services/lakefs/delete.rs.html     |   54 +
 .../rust/src/opendal/services/lakefs/error.rs.html |   93 +
 .../src/opendal/services/lakefs/lister.rs.html     |  120 +
 docs/rust/src/opendal/services/lakefs/mod.rs.html  |   35 +
 .../src/opendal/services/lakefs/writer.rs.html     |   50 +
 .../src/opendal/services/memcached/backend.rs.html |  285 +
 .../src/opendal/services/memcached/binary.rs.html  |  289 +
 .../src/opendal/services/memcached/config.rs.html  |   43 +
 .../src/opendal/services/memcached/mod.rs.html     |   27 +
 .../src/opendal/services/memory/backend.rs.html    |  190 +
 .../src/opendal/services/memory/config.rs.html     |   30 +
 docs/rust/src/opendal/services/memory/core.rs.html |   80 +
 .../src/opendal/services/memory/delete.rs.html     |   42 +
 .../src/opendal/services/memory/lister.rs.html     |   56 +
 docs/rust/src/opendal/services/memory/mod.rs.html  |   33 +
 .../src/opendal/services/memory/writer.rs.html     |   85 +
 .../src/opendal/services/mini_moka/backend.rs.html |  261 +
 .../src/opendal/services/mini_moka/config.rs.html  |   56 +
 .../src/opendal/services/mini_moka/core.rs.html    |   52 +
 .../src/opendal/services/mini_moka/delete.rs.html  |   42 +
 .../src/opendal/services/mini_moka/lister.rs.html  |   68 +
 .../src/opendal/services/mini_moka/mod.rs.html     |   33 +
 .../src/opendal/services/mini_moka/writer.rs.html  |   84 +
 docs/rust/src/opendal/services/mod.rs.html         |  206 +
 .../rust/src/opendal/services/moka/backend.rs.html |  329 +
 docs/rust/src/opendal/services/moka/config.rs.html |   59 +
 docs/rust/src/opendal/services/moka/core.rs.html   |   62 +
 docs/rust/src/opendal/services/moka/delete.rs.html |   42 +
 docs/rust/src/opendal/services/moka/lister.rs.html |   65 +
 docs/rust/src/opendal/services/moka/mod.rs.html    |   38 +
 docs/rust/src/opendal/services/moka/writer.rs.html |   83 +
 .../src/opendal/services/mongodb/backend.rs.html   |  292 +
 .../src/opendal/services/mongodb/config.rs.html    |   54 +
 docs/rust/src/opendal/services/mongodb/mod.rs.html |   24 +
 .../src/opendal/services/monoiofs/backend.rs.html  |  239 +
 .../src/opendal/services/monoiofs/config.rs.html   |   34 +
 .../src/opendal/services/monoiofs/core.rs.html     |  313 +
 .../src/opendal/services/monoiofs/delete.rs.html   |   64 +
 .../rust/src/opendal/services/monoiofs/mod.rs.html |   33 +
 .../src/opendal/services/monoiofs/reader.rs.html   |  147 +
 .../src/opendal/services/monoiofs/writer.rs.html   |  189 +
 .../src/opendal/services/mysql/backend.rs.html     |  257 +
 .../rust/src/opendal/services/mysql/config.rs.html |   66 +
 docs/rust/src/opendal/services/mysql/mod.rs.html   |   24 +
 docs/rust/src/opendal/services/obs/backend.rs.html |  443 ++
 docs/rust/src/opendal/services/obs/config.rs.html  |   53 +
 docs/rust/src/opendal/services/obs/core.rs.html    |  608 ++
 docs/rust/src/opendal/services/obs/delete.rs.html  |   48 +
 docs/rust/src/opendal/services/obs/error.rs.html   |  106 +
 docs/rust/src/opendal/services/obs/lister.rs.html  |  101 +
 docs/rust/src/opendal/services/obs/mod.rs.html     |   35 +
 docs/rust/src/opendal/services/obs/writer.rs.html  |  235 +
 .../src/opendal/services/onedrive/backend.rs.html  |  127 +
 .../src/opendal/services/onedrive/builder.rs.html  |  237 +
 .../src/opendal/services/onedrive/config.rs.html   |   49 +
 .../src/opendal/services/onedrive/core.rs.html     |  691 ++
 .../src/opendal/services/onedrive/delete.rs.html   |   47 +
 .../src/opendal/services/onedrive/error.rs.html    |   61 +
 .../opendal/services/onedrive/graph_model.rs.html  |  425 ++
 .../src/opendal/services/onedrive/lister.rs.html   |  150 +
 .../rust/src/opendal/services/onedrive/mod.rs.html |   39 +
 .../src/opendal/services/onedrive/writer.rs.html   |  168 +
 docs/rust/src/opendal/services/oss/backend.rs.html |  634 ++
 docs/rust/src/opendal/services/oss/config.rs.html  |   95 +
 docs/rust/src/opendal/services/oss/core.rs.html    | 1097 ++++
 docs/rust/src/opendal/services/oss/delete.rs.html  |  109 +
 docs/rust/src/opendal/services/oss/error.rs.html   |  109 +
 docs/rust/src/opendal/services/oss/lister.rs.html  |  256 +
 docs/rust/src/opendal/services/oss/mod.rs.html     |   35 +
 docs/rust/src/opendal/services/oss/writer.rs.html  |  228 +
 .../src/opendal/services/pcloud/backend.rs.html    |  359 ++
 .../src/opendal/services/pcloud/config.rs.html     |   51 +
 docs/rust/src/opendal/services/pcloud/core.rs.html |  461 ++
 .../src/opendal/services/pcloud/delete.rs.html     |   66 +
 .../rust/src/opendal/services/pcloud/error.rs.html |   88 +
 .../src/opendal/services/pcloud/lister.rs.html     |   95 +
 docs/rust/src/opendal/services/pcloud/mod.rs.html  |   35 +
 .../src/opendal/services/pcloud/writer.rs.html     |   66 +
 .../src/opendal/services/persy/backend.rs.html     |  227 +
 .../rust/src/opendal/services/persy/config.rs.html |   32 +
 docs/rust/src/opendal/services/persy/mod.rs.html   |   24 +
 .../opendal/services/postgresql/backend.rs.html    |  259 +
 .../src/opendal/services/postgresql/config.rs.html |   66 +
 .../src/opendal/services/postgresql/mod.rs.html    |   24 +
 .../rust/src/opendal/services/redb/backend.rs.html |  281 +
 docs/rust/src/opendal/services/redb/config.rs.html |   34 +
 docs/rust/src/opendal/services/redb/mod.rs.html    |   24 +
 .../src/opendal/services/redis/backend.rs.html     |  443 ++
 .../rust/src/opendal/services/redis/config.rs.html |   79 +
 docs/rust/src/opendal/services/redis/core.rs.html  |  209 +
 .../rust/src/opendal/services/redis/delete.rs.html |   40 +
 docs/rust/src/opendal/services/redis/mod.rs.html   |   31 +
 .../rust/src/opendal/services/redis/writer.rs.html |   57 +
 .../src/opendal/services/rocksdb/backend.rs.html   |  160 +
 .../src/opendal/services/rocksdb/config.rs.html    |   34 +
 docs/rust/src/opendal/services/rocksdb/mod.rs.html |   24 +
 docs/rust/src/opendal/services/s3/backend.rs.html  | 1267 ++++
 docs/rust/src/opendal/services/s3/config.rs.html   |  212 +
 docs/rust/src/opendal/services/s3/core.rs.html     | 1741 +++++
 docs/rust/src/opendal/services/s3/delete.rs.html   |  109 +
 docs/rust/src/opendal/services/s3/error.rs.html    |  166 +
 docs/rust/src/opendal/services/s3/lister.rs.html   |  405 ++
 docs/rust/src/opendal/services/s3/mod.rs.html      |   35 +
 docs/rust/src/opendal/services/s3/writer.rs.html   |  262 +
 .../src/opendal/services/seafile/backend.rs.html   |  298 +
 .../src/opendal/services/seafile/config.rs.html    |   56 +
 .../rust/src/opendal/services/seafile/core.rs.html |  475 ++
 .../src/opendal/services/seafile/delete.rs.html    |   40 +
 .../src/opendal/services/seafile/error.rs.html     |   86 +
 .../src/opendal/services/seafile/lister.rs.html    |   83 +
 docs/rust/src/opendal/services/seafile/mod.rs.html |   35 +
 .../src/opendal/services/seafile/writer.rs.html    |   55 +
 .../rust/src/opendal/services/sftp/backend.rs.html |  398 ++
 docs/rust/src/opendal/services/sftp/config.rs.html |   50 +
 docs/rust/src/opendal/services/sftp/core.rs.html   |  154 +
 docs/rust/src/opendal/services/sftp/delete.rs.html |   55 +
 docs/rust/src/opendal/services/sftp/error.rs.html  |   57 +
 docs/rust/src/opendal/services/sftp/lister.rs.html |   88 +
 docs/rust/src/opendal/services/sftp/mod.rs.html    |   39 +
 docs/rust/src/opendal/services/sftp/reader.rs.html |   78 +
 docs/rust/src/opendal/services/sftp/utils.rs.html  |   51 +
 docs/rust/src/opendal/services/sftp/writer.rs.html |   67 +
 .../rust/src/opendal/services/sled/backend.rs.html |  195 +
 docs/rust/src/opendal/services/sled/config.rs.html |   45 +
 docs/rust/src/opendal/services/sled/mod.rs.html    |   24 +
 .../src/opendal/services/sqlite/backend.rs.html    |  327 +
 .../src/opendal/services/sqlite/config.rs.html     |   70 +
 docs/rust/src/opendal/services/sqlite/mod.rs.html  |   24 +
 .../src/opendal/services/surrealdb/backend.rs.html |  366 ++
 .../src/opendal/services/surrealdb/config.rs.html  |   64 +
 .../src/opendal/services/surrealdb/mod.rs.html     |   24 +
 .../src/opendal/services/swift/backend.rs.html     |  276 +
 .../rust/src/opendal/services/swift/config.rs.html |   53 +
 docs/rust/src/opendal/services/swift/core.rs.html  |  310 +
 .../rust/src/opendal/services/swift/delete.rs.html |   49 +
 docs/rust/src/opendal/services/swift/error.rs.html |   90 +
 .../rust/src/opendal/services/swift/lister.rs.html |  119 +
 docs/rust/src/opendal/services/swift/mod.rs.html   |   35 +
 .../rust/src/opendal/services/swift/writer.rs.html |   53 +
 .../rust/src/opendal/services/tikv/backend.rs.html |  238 +
 docs/rust/src/opendal/services/tikv/config.rs.html |   52 +
 docs/rust/src/opendal/services/tikv/mod.rs.html    |   24 +
 .../src/opendal/services/upyun/backend.rs.html     |  318 +
 .../rust/src/opendal/services/upyun/config.rs.html |   51 +
 docs/rust/src/opendal/services/upyun/core.rs.html  |  521 ++
 .../rust/src/opendal/services/upyun/delete.rs.html |   50 +
 docs/rust/src/opendal/services/upyun/error.rs.html |   97 +
 .../rust/src/opendal/services/upyun/lister.rs.html |  101 +
 docs/rust/src/opendal/services/upyun/mod.rs.html   |   35 +
 .../rust/src/opendal/services/upyun/writer.rs.html |  127 +
 .../services/vercel_artifacts/backend.rs.html      |   99 +
 .../services/vercel_artifacts/builder.rs.html      |  119 +
 .../services/vercel_artifacts/config.rs.html       |   39 +
 .../opendal/services/vercel_artifacts/core.rs.html |  112 +
 .../services/vercel_artifacts/error.rs.html        |   50 +
 .../opendal/services/vercel_artifacts/mod.rs.html  |   33 +
 .../services/vercel_artifacts/writer.rs.html       |   58 +
 .../opendal/services/vercel_blob/backend.rs.html   |  252 +
 .../opendal/services/vercel_blob/config.rs.html    |   45 +
 .../src/opendal/services/vercel_blob/core.rs.html  |  449 ++
 .../opendal/services/vercel_blob/delete.rs.html    |   38 +
 .../src/opendal/services/vercel_blob/error.rs.html |  110 +
 .../opendal/services/vercel_blob/lister.rs.html    |   69 +
 .../src/opendal/services/vercel_blob/mod.rs.html   |   35 +
 .../opendal/services/vercel_blob/writer.rs.html    |  143 +
 .../src/opendal/services/webdav/backend.rs.html    |  319 +
 .../src/opendal/services/webdav/config.rs.html     |   53 +
 docs/rust/src/opendal/services/webdav/core.rs.html |  859 +++
 .../src/opendal/services/webdav/delete.rs.html     |   47 +
 .../rust/src/opendal/services/webdav/error.rs.html |   53 +
 .../src/opendal/services/webdav/lister.rs.html     |  106 +
 docs/rust/src/opendal/services/webdav/mod.rs.html  |   35 +
 .../src/opendal/services/webdav/writer.rs.html     |   56 +
 .../src/opendal/services/webhdfs/backend.rs.html   |  377 ++
 .../src/opendal/services/webhdfs/config.rs.html    |   52 +
 .../rust/src/opendal/services/webhdfs/core.rs.html |  398 ++
 .../src/opendal/services/webhdfs/delete.rs.html    |   46 +
 .../src/opendal/services/webhdfs/error.rs.html     |  126 +
 .../src/opendal/services/webhdfs/lister.rs.html    |  130 +
 .../src/opendal/services/webhdfs/message.rs.html   |  249 +
 docs/rust/src/opendal/services/webhdfs/mod.rs.html |   38 +
 .../src/opendal/services/webhdfs/writer.rs.html    |  177 +
 .../opendal/services/yandex_disk/backend.rs.html   |  268 +
 .../opendal/services/yandex_disk/config.rs.html    |   45 +
 .../src/opendal/services/yandex_disk/core.rs.html  |  340 +
 .../opendal/services/yandex_disk/delete.rs.html    |   54 +
 .../src/opendal/services/yandex_disk/error.rs.html |  104 +
 .../opendal/services/yandex_disk/lister.rs.html    |  113 +
 .../src/opendal/services/yandex_disk/mod.rs.html   |   35 +
 .../opendal/services/yandex_disk/writer.rs.html    |   52 +
 docs/rust/src/opendal/types/buffer.rs.html         |  991 +++
 docs/rust/src/opendal/types/builder.rs.html        |  148 +
 docs/rust/src/opendal/types/capability.rs.html     |  207 +
 docs/rust/src/opendal/types/context/mod.rs.html    |   22 +
 docs/rust/src/opendal/types/context/read.rs.html   |  231 +
 docs/rust/src/opendal/types/context/write.rs.html  |  441 ++
 docs/rust/src/opendal/types/delete/deleter.rs.html |  220 +
 .../types/delete/futures_delete_sink.rs.html       |  176 +
 docs/rust/src/opendal/types/delete/input.rs.html   |   97 +
 docs/rust/src/opendal/types/delete/mod.rs.html     |   26 +
 docs/rust/src/opendal/types/entry.rs.html          |   69 +
 docs/rust/src/opendal/types/error.rs.html          |  538 ++
 docs/rust/src/opendal/types/execute/api.rs.html    |  110 +
 .../src/opendal/types/execute/executor.rs.html     |   96 +
 .../opendal/types/execute/executors/mod.rs.html    |   27 +
 .../types/execute/executors/tokio_executor.rs.html |   60 +
 docs/rust/src/opendal/types/execute/mod.rs.html    |   25 +
 docs/rust/src/opendal/types/list.rs.html           |  137 +
 docs/rust/src/opendal/types/metadata.rs.html       |  436 ++
 docs/rust/src/opendal/types/mod.rs.html            |   69 +
 docs/rust/src/opendal/types/mode.rs.html           |   68 +
 .../src/opendal/types/operator/builder.rs.html     |  512 ++
 docs/rust/src/opendal/types/operator/info.rs.html  |   61 +
 docs/rust/src/opendal/types/operator/mod.rs.html   |   30 +
 .../src/opendal/types/operator/operator.rs.html    | 2115 ++++++
 .../types/operator/operator_futures.rs.html        | 1400 ++++
 docs/rust/src/opendal/types/options.rs.html        |  514 ++
 .../src/opendal/types/read/buffer_stream.rs.html   |  272 +
 .../types/read/futures_async_reader.rs.html        |  289 +
 .../types/read/futures_bytes_stream.rs.html        |  157 +
 docs/rust/src/opendal/types/read/mod.rs.html       |   29 +
 docs/rust/src/opendal/types/read/reader.rs.html    |  582 ++
 docs/rust/src/opendal/types/scheme.rs.html         |  473 ++
 .../src/opendal/types/write/buffer_sink.rs.html    |  188 +
 .../types/write/futures_async_writer.rs.html       |  136 +
 .../opendal/types/write/futures_bytes_sink.rs.html |  103 +
 docs/rust/src/opendal/types/write/mod.rs.html      |   26 +
 docs/rust/src/opendal/types/write/writer.rs.html   |  411 ++
 docs/rust/static.files/COPYRIGHT-7fb11f4e.txt      |   71 +
 .../static.files/FiraMono-Medium-86f75c8c.woff2    |  Bin 0 -> 64572 bytes
 .../static.files/FiraMono-Regular-87c26294.woff2   |  Bin 0 -> 64868 bytes
 .../static.files/FiraSans-Italic-81dc35de.woff2    |  Bin 0 -> 136300 bytes
 .../static.files/FiraSans-LICENSE-05ab6dbd.txt     |   98 +
 .../static.files/FiraSans-Medium-e1aa3f0a.woff2    |  Bin 0 -> 132780 bytes
 .../FiraSans-MediumItalic-ccf7e434.woff2           |  Bin 0 -> 140588 bytes
 .../static.files/FiraSans-Regular-0fe48ade.woff2   |  Bin 0 -> 129188 bytes
 docs/rust/static.files/LICENSE-APACHE-a60eea81.txt |  201 +
 docs/rust/static.files/LICENSE-MIT-23f18e03.txt    |   23 +
 .../NanumBarunGothic-13b3dcba.ttf.woff2            |  Bin 0 -> 399468 bytes
 .../NanumBarunGothic-LICENSE-a37d393b.txt          |  103 +
 .../SourceCodePro-It-fc8b9304.ttf.woff2            |  Bin 0 -> 44896 bytes
 .../SourceCodePro-LICENSE-67f54ca7.txt             |   97 +
 .../SourceCodePro-Regular-8badfe75.ttf.woff2       |  Bin 0 -> 52228 bytes
 .../SourceCodePro-Semibold-aa29a496.ttf.woff2      |  Bin 0 -> 52348 bytes
 .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2           |  Bin 0 -> 81540 bytes
 .../SourceSerif4-It-ca3b17ed.ttf.woff2             |  Bin 0 -> 59716 bytes
 .../static.files/SourceSerif4-LICENSE-a2cfd9d5.md  |   98 +
 .../SourceSerif4-Regular-6b053e98.ttf.woff2        |  Bin 0 -> 76260 bytes
 .../SourceSerif4-Semibold-457a13ac.ttf.woff2       |  Bin 0 -> 80732 bytes
 docs/rust/static.files/favicon-044be391.svg        |   24 +
 docs/rust/static.files/favicon-32x32-6580c154.png  |  Bin 0 -> 1125 bytes
 docs/rust/static.files/main-fb8c74a8.js            |   11 +
 docs/rust/static.files/normalize-9960930a.css      |    2 +
 docs/rust/static.files/noscript-893ab5e7.css       |    1 +
 docs/rust/static.files/rust-logo-9a9549ea.svg      |   61 +
 docs/rust/static.files/rustdoc-916cea96.css        |   63 +
 docs/rust/static.files/scrape-examples-5e967b76.js |    1 +
 docs/rust/static.files/search-e7298875.js          |    6 +
 docs/rust/static.files/settings-d72f25bb.js        |   17 +
 docs/rust/static.files/src-script-b8d3f215.js      |    1 +
 docs/rust/static.files/storage-d8ac8691.js         |   23 +
 .../trait.impl/bytes/buf/buf_impl/trait.Buf.js     |    9 +
 .../trait.impl/compio_buf/io_buf/trait.IoBuf.js    |    9 +
 docs/rust/trait.impl/core/clone/trait.Clone.js     |    9 +
 docs/rust/trait.impl/core/cmp/trait.Eq.js          |    9 +
 docs/rust/trait.impl/core/cmp/trait.PartialEq.js   |    9 +
 docs/rust/trait.impl/core/convert/trait.From.js    |    9 +
 docs/rust/trait.impl/core/default/trait.Default.js |    9 +
 docs/rust/trait.impl/core/error/trait.Error.js     |    9 +
 docs/rust/trait.impl/core/fmt/trait.Debug.js       |    9 +
 docs/rust/trait.impl/core/fmt/trait.Display.js     |    9 +
 .../core/future/into_future/trait.IntoFuture.js    |    9 +
 docs/rust/trait.impl/core/hash/trait.Hash.js       |    9 +
 .../core/iter/traits/collect/trait.FromIterator.js |    9 +
 .../core/iter/traits/iterator/trait.Iterator.js    |    9 +
 docs/rust/trait.impl/core/marker/trait.Copy.js     |    9 +
 docs/rust/trait.impl/core/marker/trait.Freeze.js   |    9 +
 docs/rust/trait.impl/core/marker/trait.Send.js     |    9 +
 .../core/marker/trait.StructuralPartialEq.js       |    9 +
 docs/rust/trait.impl/core/marker/trait.Sync.js     |    9 +
 docs/rust/trait.impl/core/marker/trait.Unpin.js    |    9 +
 docs/rust/trait.impl/core/ops/drop/trait.Drop.js   |    9 +
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    9 +
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    9 +
 .../trait.impl/core/str/traits/trait.FromStr.js    |    9 +
 .../trait.impl/futures_core/stream/trait.Stream.js |    9 +
 .../futures_io/if_std/trait.AsyncBufRead.js        |    9 +
 .../futures_io/if_std/trait.AsyncRead.js           |    9 +
 .../futures_io/if_std/trait.AsyncSeek.js           |    9 +
 .../futures_io/if_std/trait.AsyncWrite.js          |    9 +
 docs/rust/trait.impl/futures_sink/trait.Sink.js    |    9 +
 .../opendal/layers/retry/trait.RetryInterceptor.js |    9 +
 .../opendal/raw/accessor/trait.Access.js           |    9 +
 .../opendal/raw/accessor/trait.AccessDyn.js        |    9 +
 .../opendal/raw/adapters/kv/api/trait.Scan.js      |    9 +
 .../opendal/raw/futures_util/trait.MaybeSend.js    |    9 +
 .../raw/http_util/client/trait.HttpFetch.js        |    9 +
 .../opendal/raw/http_util/multipart/trait.Part.js  |    9 +
 .../trait.impl/opendal/raw/layer/trait.Layer.js    |    9 +
 .../opendal/raw/layer/trait.LayeredAccess.js       |    9 +
 .../opendal/raw/oio/delete/api/trait.Delete.js     |    9 +
 .../opendal/raw/oio/delete/api/trait.DeleteDyn.js  |    9 +
 .../opendal/raw/oio/list/api/trait.List.js         |    9 +
 .../opendal/raw/oio/read/api/trait.Read.js         |    9 +
 .../opendal/raw/oio/read/api/trait.ReadDyn.js      |    9 +
 .../opendal/raw/oio/write/api/trait.Write.js       |    9 +
 .../opendal/types/builder/trait.Builder.js         |    9 +
 .../opendal/types/builder/trait.Configurator.js    |    9 +
 .../types/delete/input/trait.IntoDeleteInput.js    |    9 +
 .../opendal/types/execute/api/trait.Execute.js     |    9 +
 docs/rust/trait.impl/serde/de/trait.Deserialize.js |    9 +
 .../rust/trait.impl/serde/de/trait.Deserializer.js |    9 +
 docs/rust/trait.impl/serde/ser/trait.Serialize.js  |    9 +
 docs/rust/trait.impl/std/io/trait.BufRead.js       |    9 +
 docs/rust/trait.impl/std/io/trait.Read.js          |    9 +
 docs/rust/trait.impl/std/io/trait.Seek.js          |    9 +
 docs/rust/trait.impl/std/io/trait.Write.js         |    9 +
 docs/rust/type.impl/alloc/boxed/struct.Box.js      |    9 +
 docs/rust/type.impl/alloc/sync/struct.Arc.js       |    9 +
 docs/rust/type.impl/core/result/enum.Result.js     |    9 +
 .../futures_core/future/type.BoxFuture.js          |    9 +
 .../moka/future/builder/struct.CacheBuilder.js     |    9 +
 .../operator_futures/struct.OperatorFuture.js      |    9 +
 docs/unftp-sbe-opendal/crates.js                   |    2 +
 docs/unftp-sbe-opendal/help.html                   |    1 +
 docs/unftp-sbe-opendal/search-index.js             |    4 +
 .../unftp_sbe_opendal/unftp_sbe_opendal-desc-0-.js |    1 +
 docs/unftp-sbe-opendal/settings.html               |    1 +
 docs/unftp-sbe-opendal/src-files.js                |    3 +
 .../src/unftp_sbe_opendal/lib.rs.html              |  261 +
 .../static.files/COPYRIGHT-7fb11f4e.txt            |   71 +
 .../static.files/FiraMono-Medium-86f75c8c.woff2    |  Bin 0 -> 64572 bytes
 .../static.files/FiraMono-Regular-87c26294.woff2   |  Bin 0 -> 64868 bytes
 .../static.files/FiraSans-Italic-81dc35de.woff2    |  Bin 0 -> 136300 bytes
 .../static.files/FiraSans-LICENSE-05ab6dbd.txt     |   98 +
 .../static.files/FiraSans-Medium-e1aa3f0a.woff2    |  Bin 0 -> 132780 bytes
 .../FiraSans-MediumItalic-ccf7e434.woff2           |  Bin 0 -> 140588 bytes
 .../static.files/FiraSans-Regular-0fe48ade.woff2   |  Bin 0 -> 129188 bytes
 .../static.files/LICENSE-APACHE-a60eea81.txt       |  201 +
 .../static.files/LICENSE-MIT-23f18e03.txt          |   23 +
 .../NanumBarunGothic-13b3dcba.ttf.woff2            |  Bin 0 -> 399468 bytes
 .../NanumBarunGothic-LICENSE-a37d393b.txt          |  103 +
 .../SourceCodePro-It-fc8b9304.ttf.woff2            |  Bin 0 -> 44896 bytes
 .../SourceCodePro-LICENSE-67f54ca7.txt             |   97 +
 .../SourceCodePro-Regular-8badfe75.ttf.woff2       |  Bin 0 -> 52228 bytes
 .../SourceCodePro-Semibold-aa29a496.ttf.woff2      |  Bin 0 -> 52348 bytes
 .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2           |  Bin 0 -> 81540 bytes
 .../SourceSerif4-It-ca3b17ed.ttf.woff2             |  Bin 0 -> 59716 bytes
 .../static.files/SourceSerif4-LICENSE-a2cfd9d5.md  |   98 +
 .../SourceSerif4-Regular-6b053e98.ttf.woff2        |  Bin 0 -> 76260 bytes
 .../SourceSerif4-Semibold-457a13ac.ttf.woff2       |  Bin 0 -> 80732 bytes
 .../static.files/favicon-044be391.svg              |   24 +
 .../static.files/favicon-32x32-6580c154.png        |  Bin 0 -> 1125 bytes
 .../static.files/main-fb8c74a8.js                  |   11 +
 .../static.files/normalize-9960930a.css            |    2 +
 .../static.files/noscript-893ab5e7.css             |    1 +
 .../static.files/rust-logo-9a9549ea.svg            |   61 +
 .../static.files/rustdoc-916cea96.css              |   63 +
 .../static.files/scrape-examples-5e967b76.js       |    1 +
 .../static.files/search-e7298875.js                |    6 +
 .../static.files/settings-d72f25bb.js              |   17 +
 .../static.files/src-script-b8d3f215.js            |    1 +
 .../static.files/storage-d8ac8691.js               |   23 +
 .../trait.impl/core/clone/trait.Clone.js           |    9 +
 .../trait.impl/core/cmp/trait.Eq.js                |    9 +
 .../trait.impl/core/cmp/trait.PartialEq.js         |    9 +
 .../trait.impl/core/fmt/trait.Debug.js             |    9 +
 .../trait.impl/core/marker/trait.Freeze.js         |    9 +
 .../trait.impl/core/marker/trait.Send.js           |    9 +
 .../core/marker/trait.StructuralPartialEq.js       |    9 +
 .../trait.impl/core/marker/trait.Sync.js           |    9 +
 .../trait.impl/core/marker/trait.Unpin.js          |    9 +
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    9 +
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    9 +
 .../storage/storage_backend/trait.Metadata.js      |    9 +
 .../storage_backend/trait.StorageBackend.js        |    9 +
 docs/unftp-sbe-opendal/unftp_sbe_opendal/all.html  |    1 +
 .../unftp-sbe-opendal/unftp_sbe_opendal/index.html |   38 +
 .../unftp_sbe_opendal/sidebar-items.js             |    1 +
 .../unftp_sbe_opendal/struct.OpendalMetadata.html  |   40 +
 .../unftp_sbe_opendal/struct.OpendalStorage.html   |  168 +
 docs/virtiofs-opendal/crates.js                    |    2 +
 docs/virtiofs-opendal/help.html                    |    1 +
 docs/virtiofs-opendal/search-index.js              |    4 +
 .../virtiofs_opendal/virtiofs_opendal-desc-0-.js   |    1 +
 docs/virtiofs-opendal/settings.html                |    1 +
 docs/virtiofs-opendal/src-files.js                 |    3 +
 .../src/virtiofs_opendal/buffer.rs.html            |  117 +
 .../src/virtiofs_opendal/error.rs.html             |   94 +
 .../src/virtiofs_opendal/filesystem.rs.html        |  699 ++
 .../virtiofs_opendal/filesystem_message.rs.html    |  288 +
 .../src/virtiofs_opendal/lib.rs.html               |   25 +
 .../src/virtiofs_opendal/virtiofs.rs.html          |  329 +
 .../src/virtiofs_opendal/virtiofs_util.rs.html     |  492 ++
 .../static.files/COPYRIGHT-7fb11f4e.txt            |   71 +
 .../static.files/FiraMono-Medium-86f75c8c.woff2    |  Bin 0 -> 64572 bytes
 .../static.files/FiraMono-Regular-87c26294.woff2   |  Bin 0 -> 64868 bytes
 .../static.files/FiraSans-Italic-81dc35de.woff2    |  Bin 0 -> 136300 bytes
 .../static.files/FiraSans-LICENSE-05ab6dbd.txt     |   98 +
 .../static.files/FiraSans-Medium-e1aa3f0a.woff2    |  Bin 0 -> 132780 bytes
 .../FiraSans-MediumItalic-ccf7e434.woff2           |  Bin 0 -> 140588 bytes
 .../static.files/FiraSans-Regular-0fe48ade.woff2   |  Bin 0 -> 129188 bytes
 .../static.files/LICENSE-APACHE-a60eea81.txt       |  201 +
 .../static.files/LICENSE-MIT-23f18e03.txt          |   23 +
 .../NanumBarunGothic-13b3dcba.ttf.woff2            |  Bin 0 -> 399468 bytes
 .../NanumBarunGothic-LICENSE-a37d393b.txt          |  103 +
 .../SourceCodePro-It-fc8b9304.ttf.woff2            |  Bin 0 -> 44896 bytes
 .../SourceCodePro-LICENSE-67f54ca7.txt             |   97 +
 .../SourceCodePro-Regular-8badfe75.ttf.woff2       |  Bin 0 -> 52228 bytes
 .../SourceCodePro-Semibold-aa29a496.ttf.woff2      |  Bin 0 -> 52348 bytes
 .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2           |  Bin 0 -> 81540 bytes
 .../SourceSerif4-It-ca3b17ed.ttf.woff2             |  Bin 0 -> 59716 bytes
 .../static.files/SourceSerif4-LICENSE-a2cfd9d5.md  |   98 +
 .../SourceSerif4-Regular-6b053e98.ttf.woff2        |  Bin 0 -> 76260 bytes
 .../SourceSerif4-Semibold-457a13ac.ttf.woff2       |  Bin 0 -> 80732 bytes
 .../static.files/favicon-044be391.svg              |   24 +
 .../static.files/favicon-32x32-6580c154.png        |  Bin 0 -> 1125 bytes
 .../virtiofs-opendal/static.files/main-fb8c74a8.js |   11 +
 .../static.files/normalize-9960930a.css            |    2 +
 .../static.files/noscript-893ab5e7.css             |    1 +
 .../static.files/rust-logo-9a9549ea.svg            |   61 +
 .../static.files/rustdoc-916cea96.css              |   63 +
 .../static.files/scrape-examples-5e967b76.js       |    1 +
 .../static.files/search-e7298875.js                |    6 +
 .../static.files/settings-d72f25bb.js              |   17 +
 .../static.files/src-script-b8d3f215.js            |    1 +
 .../static.files/storage-d8ac8691.js               |   23 +
 .../trait.impl/core/marker/trait.Freeze.js         |    9 +
 .../trait.impl/core/marker/trait.Send.js           |    9 +
 .../trait.impl/core/marker/trait.Sync.js           |    9 +
 .../trait.impl/core/marker/trait.Unpin.js          |    9 +
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    9 +
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    9 +
 docs/virtiofs-opendal/virtiofs_opendal/all.html    |    1 +
 docs/virtiofs-opendal/virtiofs_opendal/index.html  |    4 +
 .../virtiofs_opendal/sidebar-items.js              |    1 +
 .../virtiofs_opendal/struct.VirtioFs.html          |   29 +
 .../virtiofs_opendal/virtiofs/struct.VirtioFs.html |   11 +
 docs/vision/index.html                             |   11 +
 download/index.html                                |   43 +
 img/architectural.png                              |  Bin 0 -> 177923 bytes
 img/asf_logo_wide.svg                              |  279 +
 img/external/0331140e6c28f97a21906ae8f1b0117b.svg  |    1 +
 img/external/038db5f95e5f731e54b781037836d4a3.svg  |    1 +
 img/external/07a037f44f92dc589d8e57cc77acb9e5.svg  |    1 +
 img/external/11f3ee113877f72b02fab00aae6b1a41.svg  |    1 +
 img/external/121627affd80c128b185cc7476046df6.svg  |    1 +
 img/external/215e045c6b9b4e8c9b2efc199f41f8af.yml  | 5568 ++++++++++++++++
 img/external/22edcdd5dfe4e195b43abf21ba698610.svg  |    1 +
 img/external/28db3ec56d32c9eff32117fd2c3926a3.svg  |    1 +
 img/external/2df9af50d923c7e6cd0c9521c3d4e194.svg  |    1 +
 img/external/339821411e4b1af1a6f5b9137a1246d5.svg  |    1 +
 img/external/3f78235565441f57291f2f43533e8a26.svg  |    1 +
 img/external/4079df26a2c75f9863cb3d997d7d1f3d.svg  |    1 +
 img/external/47be6928a0aa36f7a49382df2f39ea19.svg  |    1 +
 img/external/552ab0d9376d217ab2e8b0ade233afb8.svg  |    1 +
 img/external/569427d642e3d231c42ddf479509d1ad.svg  |    1 +
 img/external/588af842932c40a78cc2afe70ce679e1.svg  |    1 +
 img/external/6564632a3de5ae36e76129dad4c34d7c.svg  |    1 +
 img/external/6659ee5d99aec1b105e40ae42b70fb41.svg  |    1 +
 img/external/6a13f224a9ca353f3d7201919a549c91.svg  |    1 +
 img/external/6b22fa4275ae58639ae931b7176587b5.svg  |    1 +
 img/external/6fc9234a805e6983d9cc27a62c8568aa.svg  |    1 +
 img/external/71c0d8847d34b7f8ce3fd204c652c6f9.svg  |    1 +
 img/external/7ccca72503e4823887f7fb9cb2d40b88.svg  |    1 +
 img/external/84bfff85afb8c10c2aedfd0edf4bf160.svg  |    1 +
 img/external/8ad9e3f1aef2df4bcd3bdc30efac46ac.svg  |    1 +
 img/external/9438f0541b4c423401b7a1ad6dc4c99f.svg  |    1 +
 img/external/96bb300aff72595c73ddb972007e8219.svg  |    1 +
 img/external/991d1885f941890b212be437d947cdbc.svg  |    1 +
 img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg  |  Bin 0 -> 87513 bytes
 img/external/b19ba77524a128e2e1f1f06a7f0f8ac9.svg  |    1 +
 img/external/bc0198e84b604118d2689a6877fd1877.svg  |    1 +
 img/external/d4f46a1c296824e868bd9064621d5493.svg  |    1 +
 img/external/d72b608ed149e7c35843c1cf675575a4.svg  |    1 +
 img/external/e90fb803e25e12f621eafa3d092fe628.png  |  Bin 0 -> 177923 bytes
 img/external/f268c2d40c7f09706f7fbefc880c9299.png  |  Bin 0 -> 200099 bytes
 img/external/f64bfceadefc97b376485eaeb63a6675.svg  |    8 +
 img/favicon.ico                                    |  Bin 0 -> 1595 bytes
 img/logo.svg                                       |    1 +
 img/logo_dark.svg                                  |    1 +
 index.html                                         |   17 +
 integrations/cloud_filter/index.html               |   26 +
 integrations/dav_server/index.html                 |   30 +
 integrations/fuse3/index.html                      |   30 +
 integrations/object_store/index.html               |   45 +
 integrations/parquet/index.html                    |   31 +
 integrations/spring/index.html                     |   47 +
 integrations/unftp_sbe/index.html                  |   30 +
 integrations/virtiofs/index.html                   |   24 +
 llms-full.txt                                      | 5796 +++++++++++++++++
 llms.txt                                           |   74 +
 lunr-index-1752916833955.json                      |    1 +
 lunr-index.json                                    |    1 +
 maillist/index.html                                |   11 +
 search-doc-1752916833955.json                      |    1 +
 search-doc.json                                    |    1 +
 sitemap.xml                                        |    1 +
 vision/index.html                                  |  102 +
 2914 files changed, 307170 insertions(+)

diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 000000000..c93c98a6a
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# All configurations could be found here: https://github.com/apache/infrastructure-asfyaml/
+
+github:
+  description: "Apache OpenDAL: One Layer, All Storage."
+  homepage: https://opendal.apache.org
+  labels:
+    - rust
+    - storage
+    - s3
+    - gcs
+    - azblob
+    - redis
+    - hacktoberfest
+  enabled_merge_buttons:
+    squash: true
+    merge: false
+    rebase: false
+  protected_branches:
+    main:
+      required_pull_request_reviews:
+        required_approving_review_count: 1
+  custom_subjects:
+    new_discussion: "{title}"
+    edit_discussion: "Re: {title}"
+    close_discussion: "Re: {title}"
+    close_discussion_with_comment: "Re: {title}"
+    reopen_discussion: "Re: {title}"
+    new_comment_discussion: "Re: {title}"
+    edit_comment_discussion: "Re: {title}"
+    delete_comment_discussion: "Re: {title}"
+
+notifications:
+  commits: commits@opendal.apache.org
+  issues: commits@opendal.apache.org
+  pullrequests: commits@opendal.apache.org
+  discussions: dev@opendal.apache.org
+
+staging:
+  profile: ~
+  autostage: site/*
+
+publish:
+  whoami: gh-pages
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 000000000..e69de29bb
diff --git a/404.html b/404.html
new file mode 100644
index 000000000..88c3a2eb1
--- /dev/null
+++ b/404.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.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/404.html/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name=" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/apps/oay/index.html b/apps/oay/index.html
new file mode 100644
index 000000000..6a7cb547c
--- /dev/null
+++ b/apps/oay/index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-apps/oay" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Oay | 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/apps/oay/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="d [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><code>oay</code> is an OpenDAL Gateway that empowers users to access data through their preferred APIs.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="goal">Goal<a href="#goal" class="hash-link" aria-label="Direct link to Goal" title="Direct link to Goal">​</a></h2>
+<p>Allow users to access different storage backend through their preferred APIs.</p>
+<p><img decoding="async" loading="lazy" src="/img/external/f268c2d40c7f09706f7fbefc880c9299.png" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="status">Status<a href="#status" class="hash-link" aria-label="Direct link to Status" title="Direct link to Status">​</a></h2>
+<p>Our first milestone is to provide S3 APIs.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="s3-api">S3 API<a href="#s3-api" class="hash-link" aria-label="Direct link to S3 API" title="Direct link to S3 API">​</a></h3>
+<p>Only <code>list_object_v2</code> with <code>start_after</code> is supported.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="branding">Branding<a href="#branding" class="hash-link" aria-label="Direct link to Branding" title="Direct link to Branding">​</a></h2>
+<p>The first and most prominent mentions must use the full form: <strong>Apache OpenDAL™</strong> of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.</p>
+<p>For more details, see the <a href="https://www.apache.org/foundation/marks/guide">Apache Product Name Usage Guide</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/40-apps/oay.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="ico [...]
+
+</body></html>
\ No newline at end of file
diff --git a/apps/ofs/index.html b/apps/ofs/index.html
new file mode 100644
index 000000000..722f430a9
--- /dev/null
+++ b/apps/ofs/index.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-apps/ofs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Ofs | 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/apps/ofs/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="d [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><code>ofs</code> is a userspace filesystem backing by OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="status">Status<a href="#status" class="hash-link" aria-label="Direct link to Status" title="Direct link to Status">​</a></h2>
+<p><code>ofs</code> is a work in progress. we only support <code>fs</code> and <code>s3</code> as backend on <code>Linux</code> currently.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="how-to-use-ofs">How to use <code>ofs</code><a href="#how-to-use-ofs" class="hash-link" aria-label="Direct link to how-to-use-ofs" title="Direct link to how-to-use-ofs">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="install-fuse-on-linux">Install <code>FUSE</code> on Linux<a href="#install-fuse-on-linux" class="hash-link" aria-label="Direct link to install-fuse-on-linux" title="Direct link to install-fuse-on-linux">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">sudo pacman -S fuse3 --noconfirm # archlinux</span><br></span><span class="token-line" st [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="load-fuse-kernel-module-on-freebsd">Load <code>FUSE</code> kernel module on FreeBSD<a href="#load-fuse-kernel-module-on-freebsd" class="hash-link" aria-label="Direct link to load-fuse-kernel-module-on-freebsd" title="Direct link to load-fuse-kernel-module-on-freebsd">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">kldload fuse</span><br></span></code></pre></div></div>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="install-ofs">Install <code>ofs</code><a href="#install-ofs" class="hash-link" aria-label="Direct link to install-ofs" title="Direct link to install-ofs">​</a></h3>
+<p><code>ofs</code> could be installed by <code>cargo</code>:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cargo install ofs</span><br></span></code></pre></div></div>
+<blockquote>
+<p><code>cargo</code> is the Rust package manager. <code>cargo</code> could be installed by following the <a href="https://www.rust-lang.org/tools/install">Installation</a> from Rust official website.</p>
+</blockquote>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="mount-directory">Mount directory<a href="#mount-directory" class="hash-link" aria-label="Direct link to Mount directory" title="Direct link to Mount directory">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">ofs &lt;mount-point&gt; &#x27;fs://?root=&lt;directory&gt;&#x27;</span><br></span></code> [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="mount-s3-bucket">Mount S3 bucket<a href="#mount-s3-bucket" class="hash-link" aria-label="Direct link to Mount S3 bucket" title="Direct link to Mount S3 bucket">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">ofs &lt;mount-point&gt; &#x27;s3://?root=&lt;path&gt;&amp;bucket=&lt;bucket&gt;&amp;endpo [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="branding">Branding<a href="#branding" class="hash-link" aria-label="Direct link to Branding" title="Direct link to Branding">​</a></h2>
+<p>The first and most prominent mentions must use the full form: <strong>Apache OpenDAL™</strong> of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.</p>
+<p>For more details, see the <a href="https://www.apache.org/foundation/marks/guide">Apache Product Name Usage Guide</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/40-apps/ofs.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="ico [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/apps/oli/index.html b/apps/oli/index.html
new file mode 100644
index 000000000..1e4bc48f3
--- /dev/null
+++ b/apps/oli/index.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-apps/oli" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Oli | 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/apps/oli/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="d [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><code>oli</code> stands for OpenDAL Command Line Interface. It aims to provide a unified and user-friendly way to manipulate data stored in various storage service.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="how-to-use-oli">How to use <code>oli</code><a href="#how-to-use-oli" class="hash-link" aria-label="Direct link to how-to-use-oli" title="Direct link to how-to-use-oli">​</a></h2>
+<p><code>oli</code> provide basic sub-commands like <code>oli ls</code>, <code>oli cat</code>, <code>oli stat</code>, <code>oli cp</code>, <code>oli rm</code>, and <code>oli bench</code> just like what you use on your local filesystem.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="install-oli">Install <code>oli</code><a href="#install-oli" class="hash-link" aria-label="Direct link to install-oli" title="Direct link to install-oli">​</a></h3>
+<p><code>oli</code> could be installed by <code>cargo</code>:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cargo install oli</span><br></span></code></pre></div></div>
+<blockquote>
+<p><code>cargo</code> is the Rust package manager. <code>cargo</code> could be installed by following the <a href="https://www.rust-lang.org/tools/install">Installation</a> from Rust official website.</p>
+</blockquote>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="configure-oli-profile">Configure <code>oli</code> Profile<a href="#configure-oli-profile" class="hash-link" aria-label="Direct link to configure-oli-profile" title="Direct link to configure-oli-profile">​</a></h3>
+<p><code>oli</code> requires a config file to work, it should be:</p>
+<ul>
+<li><code>~/.config/oli/config.toml</code> on Linux</li>
+<li><code>~/Library/Application Support/oli/config.toml</code> on macOS</li>
+<li><code>C:\Users\&lt;UserName&gt;\AppData\Roaming\oli\config.toml</code> on Windows</li>
+</ul>
+<p>The content of <code>config.toml</code> should follow these pattern:</p>
+<div class="language-toml codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-toml codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[profiles.&lt;profile_name&gt;]</span><br></span><span class="token-line" style="color:#393 [...]
+<p>Here is an example of <code>config.toml</code>:</p>
+<div class="language-toml codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-toml codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[profiles.s3]</span><br></span><span class="token-line" style="color:#393A34"><span class=" [...]
+<p>For different services, you could find the configuration keys in the corresponding <a href="https://docs.rs/opendal/0.50.2/opendal/services/index.html">service document</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="example-use-oli-to-upload-file-to-aws-s3">Example: use <code>oli</code> to upload file to AWS S3<a href="#example-use-oli-to-upload-file-to-aws-s3" class="hash-link" aria-label="Direct link to example-use-oli-to-upload-file-to-aws-s3" title="Direct link to example-use-oli-to-upload-file-to-aws-s3">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">oli cp ./update-ecs-loadbalancer.json s3:/update-ecs-loadbalancer.json</span><br></span>< [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="example-use-oli-copy-file-from-s3-to-r2">Example: use <code>oli</code> copy file from S3 to R2<a href="#example-use-oli-copy-file-from-s3-to-r2" class="hash-link" aria-label="Direct link to example-use-oli-copy-file-from-s3-to-r2" title="Direct link to example-use-oli-copy-file-from-s3-to-r2">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">oli cp s3:/fleet.png r2:/fleet.png</span><br></span><span class="token-line" style="color [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="example-use-oli-bench-command">Example: use <code>oli</code> bench command<a href="#example-use-oli-bench-command" class="hash-link" aria-label="Direct link to example-use-oli-bench-command" title="Direct link to example-use-oli-bench-command">​</a></h3>
+<p>use the oli config file or create a new config file for bench command</p>
+<p>Here is an example of <code>config.toml</code> using bench command:</p>
+<div class="language-toml codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-toml codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[profiles.demo]</span><br></span><span class="token-line" style="color:#393A34"><span class [...]
+<p>create a bench suite config file</p>
+<p>Here is an example of <code>suite.toml</code>:</p>
+<div class="language-toml codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-toml codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">file_size = &quot;64MiB&quot;</span><br></span><span class="token-line" style="color:#393A3 [...]
+<p>then can use bench command use config file and suite file</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">oli bench --config config.toml demo suite.toml</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="contribute-to-oli">Contribute to <code>oli</code><a href="#contribute-to-oli" class="hash-link" aria-label="Direct link to contribute-to-oli" title="Direct link to contribute-to-oli">​</a></h2>
+<p>Contribution is not only about code, but also about documentation, examples, and so on! 🚀</p>
+<p>If you have any questions or suggestions about <code>oli</code>, please feel free to open an issue on GitHub.</p>
+<p>As <code>oli</code> is a part of Apache OpenDAL, you should follow the <a href="https://github.com/apache/opendal/blob/main/CONTRIBUTING.md">CONTRIBUTION</a> documentation. There are still lots works to do with <code>oli</code>, you could track them on this <a href="https://github.com/apache/opendal/issues/422">GitHub Issue</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="branding">Branding<a href="#branding" class="hash-link" aria-label="Direct link to Branding" title="Direct link to Branding">​</a></h2>
+<p>The first and most prominent mentions must use the full form: <strong>Apache OpenDAL™</strong> of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.</p>
+<p>For more details, see the <a href="https://www.apache.org/foundation/marks/guide">Apache Product Name Usage Guide</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/40-apps/oli.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="ico [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/assets/css/styles.0481e4aa.css b/assets/css/styles.0481e4aa.css
new file mode 100644
index 000000000..019a0366f
--- /dev/null
+++ b/assets/css/styles.0481e4aa.css
@@ -0,0 +1 @@
+.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}body,ol ol,ol ul,ul ol,ul ul{margin:0}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.butt [...]
\ No newline at end of file
diff --git a/assets/images/1-0b02956a3da2b4329eab11ea4779711c.png b/assets/images/1-0b02956a3da2b4329eab11ea4779711c.png
new file mode 100644
index 000000000..2e7e0529c
Binary files /dev/null and b/assets/images/1-0b02956a3da2b4329eab11ea4779711c.png differ
diff --git a/assets/images/2-3b83ca1ebfbdd77770566a80131846bd.png b/assets/images/2-3b83ca1ebfbdd77770566a80131846bd.png
new file mode 100644
index 000000000..a6025d942
Binary files /dev/null and b/assets/images/2-3b83ca1ebfbdd77770566a80131846bd.png differ
diff --git a/assets/images/adoption-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png b/assets/images/adoption-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png
new file mode 100644
index 000000000..6a036694f
Binary files /dev/null and b/assets/images/adoption-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png differ
diff --git a/assets/images/gmail-smtp-setting-395a35a58111a24514d710547fb9e278.jpg b/assets/images/gmail-smtp-setting-395a35a58111a24514d710547fb9e278.jpg
new file mode 100644
index 000000000..6b5645a96
Binary files /dev/null and b/assets/images/gmail-smtp-setting-395a35a58111a24514d710547fb9e278.jpg differ
diff --git a/assets/images/incubator-project-opendal-095982818f2f177cfd4cd267c8f282c4.png b/assets/images/incubator-project-opendal-095982818f2f177cfd4cd267c8f282c4.png
new file mode 100644
index 000000000..58be27708
Binary files /dev/null and b/assets/images/incubator-project-opendal-095982818f2f177cfd4cd267c8f282c4.png differ
diff --git a/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png b/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png
new file mode 100644
index 000000000..609b0e26c
Binary files /dev/null and b/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png differ
diff --git a/assets/images/opendal-entered-apache-879d5165e27d370849e904ef8d65be25.png b/assets/images/opendal-entered-apache-879d5165e27d370849e904ef8d65be25.png
new file mode 100644
index 000000000..1b99c34b7
Binary files /dev/null and b/assets/images/opendal-entered-apache-879d5165e27d370849e904ef8d65be25.png differ
diff --git a/assets/images/opendal-power-549a25c15039d5ff165b082cf2fd7476.png b/assets/images/opendal-power-549a25c15039d5ff165b082cf2fd7476.png
new file mode 100644
index 000000000..d9f6f382b
Binary files /dev/null and b/assets/images/opendal-power-549a25c15039d5ff165b082cf2fd7476.png differ
diff --git a/assets/images/opendal-python-downloads-c5d552b37aa69309d8b3c032b686dc98.png b/assets/images/opendal-python-downloads-c5d552b37aa69309d8b3c032b686dc98.png
new file mode 100644
index 000000000..475d700f4
Binary files /dev/null and b/assets/images/opendal-python-downloads-c5d552b37aa69309d8b3c032b686dc98.png differ
diff --git a/assets/images/opendal-rust-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png b/assets/images/opendal-rust-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png
new file mode 100644
index 000000000..c287ee654
Binary files /dev/null and b/assets/images/opendal-rust-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png differ
diff --git a/assets/images/roster-add-committer-a544b022d22a3bfffef5accc9d825942.png b/assets/images/roster-add-committer-a544b022d22a3bfffef5accc9d825942.png
new file mode 100644
index 000000000..9ace0c394
Binary files /dev/null and b/assets/images/roster-add-committer-a544b022d22a3bfffef5accc9d825942.png differ
diff --git a/assets/images/roster-add-pmc-member-e054bc1c41af11ec5a6bf37ae926636d.png b/assets/images/roster-add-pmc-member-e054bc1c41af11ec5a6bf37ae926636d.png
new file mode 100644
index 000000000..6bbe0f046
Binary files /dev/null and b/assets/images/roster-add-pmc-member-e054bc1c41af11ec5a6bf37ae926636d.png differ
diff --git a/assets/js/01a85c17.d9887ca0.js b/assets/js/01a85c17.d9887ca0.js
new file mode 100644
index 000000000..89978e361
--- /dev/null
+++ b/assets/js/01a85c17.d9887ca0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8209],{737:(e,t,a)=>{a.d(t,{A:()=>l});a(6672);var s=a(3526),n=a(6224);const i={tag:"tag_pAIo",tagRegular:"tagRegular_kD8B",tagWithCount:"tagWithCount_KrMf"};var r=a(3420);function l({permalink:e,label:t,count:a,description:l}){return(0,r.jsxs)(n.A,{rel:"tag",href:e,title:l,className:(0,s.A)(i.tag,a?i.tagWithCount:i.tagRegular),children:[t,a&&(0,r.jsx)("span",{children:a})]})}},1946:(e,t,a)=>{a.d(t [...]
\ No newline at end of file
diff --git a/assets/js/02514dc9.8ec9faf9.js b/assets/js/02514dc9.8ec9faf9.js
new file mode 100644
index 000000000..beeacb74c
--- /dev/null
+++ b/assets/js/02514dc9.8ec9faf9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[307],{1445:e=>{e.exports=JSON.parse('{"permalink":"/blog/opendal-entered-apache-incubator","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2023-03-16-opendal-entered-apache-incubator/index.md","source":"@site/blog/2023-03-16-opendal-entered-apache-incubator/index.md","title":"Way to Go: OpenDAL successfully entered Apache Incubator","description":"On February 27th, 2023, the Op [...]
\ No newline at end of file
diff --git a/assets/js/0284318d.699e8c6f.js b/assets/js/0284318d.699e8c6f.js
new file mode 100644
index 000000000..52cd9c41e
--- /dev/null
+++ b/assets/js/0284318d.699e8c6f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[277],{5404:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>o});var s=a(6672);const n={},r=s.createContext(n);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(r.Provider,{value:t},e.children)}},7891:(e [...]
\ No newline at end of file
diff --git a/assets/js/064c7027.fb9780fe.js b/assets/js/064c7027.fb9780fe.js
new file mode 100644
index 000000000..c6f60b595
--- /dev/null
+++ b/assets/js/064c7027.fb9780fe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7282],{4616:(e,i,n)=>{n.d(i,{A:()=>t});const t=n.p+"assets/images/gmail-smtp-setting-395a35a58111a24514d710547fb9e278.jpg"},5404:(e,i,n)=>{n.d(i,{R:()=>o,x:()=>r});var t=n(6672);const s={},a=t.createContext(s);function o(e){const i=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e [...]
\ No newline at end of file
diff --git a/assets/js/07df3158.eed6479a.js b/assets/js/07df3158.eed6479a.js
new file mode 100644
index 000000000..c77d1f477
--- /dev/null
+++ b/assets/js/07df3158.eed6479a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4429],{1445:e=>{e.exports=JSON.parse('{"permalink":"/blog/opendal-entered-apache-incubator","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2023-03-16-opendal-entered-apache-incubator/index.md","source":"@site/blog/2023-03-16-opendal-entered-apache-incubator/index.md","title":"Way to Go: OpenDAL successfully entered Apache Incubator","description":"On February 27th, 2023, the O [...]
\ No newline at end of file
diff --git a/assets/js/08af526d.c55488b8.js b/assets/js/08af526d.c55488b8.js
new file mode 100644
index 000000000..b664d0b8d
--- /dev/null
+++ b/assets/js/08af526d.c55488b8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[529],{1344:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":9,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/11a47109.efdae150.js b/assets/js/11a47109.efdae150.js
new file mode 100644
index 000000000..bdd6662b9
--- /dev/null
+++ b/assets/js/11a47109.efdae150.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1055],{4716:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Applications Overview","slug":"/category/applications","permalink":"/category/applications","sidebar":"docs","navigation":{"previous":{"title":"Virtiofs","permalink":"/integrations/virtiofs"},"next":{"title":"Oay","permalink":"/apps/oay"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/123e9e0d.b12700aa.js b/assets/js/123e9e0d.b12700aa.js
new file mode 100644
index 000000000..2985787e0
--- /dev/null
+++ b/assets/js/123e9e0d.b12700aa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5704],{383:(e,n,s)=>{s.d(n,{A:()=>i});var a=s(6672),r=s(3420);function i({children:e,owner:n="apache",repo:s="opendal",branch:i="main",basePath:t="",components:l={}}){const d=e=>{const a=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${i}/${t}${a}`},o={...l,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...s,href:d(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/14a24c8e.d09142da.js b/assets/js/14a24c8e.d09142da.js
new file mode 100644
index 000000000..d4bb82446
--- /dev/null
+++ b/assets/js/14a24c8e.d09142da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7867],{5404:(e,n,a)=>{a.d(n,{R:()=>o,x:()=>r});var s=a(6672);const t={},i=s.createContext(t);function o(e){const n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:n},e.children)}},7572:( [...]
\ No newline at end of file
diff --git a/assets/js/14eb3368.f5ac9170.js b/assets/js/14eb3368.f5ac9170.js
new file mode 100644
index 000000000..009d17429
--- /dev/null
+++ b/assets/js/14eb3368.f5ac9170.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6969],{239:(e,s,n)=>{n.r(s),n.d(s,{default:()=>I});n(6672);var t=n(9859),r=n(1100),a=n(8115),i=n(3526),l=n(6224),c=n(5018),o=n(8200),d=n(9225),u=n(1959);const m={cardContainer:"cardContainer_hmre",cardTitle:"cardTitle_ndjs",cardDescription:"cardDescription_EiX3"};var h=n(3420);function b({className:e,href:s,children:n}){return(0,h.jsx)(l.A,{href:s,className:(0,i.A)("card padding--lg",m.cardContain [...]
\ No newline at end of file
diff --git a/assets/js/17896441.8f1bbce3.js b/assets/js/17896441.8f1bbce3.js
new file mode 100644
index 000000000..a3cc58173
--- /dev/null
+++ b/assets/js/17896441.8f1bbce3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8401],{737:(e,n,t)=>{t.d(n,{A:()=>o});t(6672);var s=t(3526),a=t(6224);const i={tag:"tag_pAIo",tagRegular:"tagRegular_kD8B",tagWithCount:"tagWithCount_KrMf"};var l=t(3420);function o({permalink:e,label:n,count:t,description:o}){return(0,l.jsxs)(a.A,{rel:"tag",href:e,title:o,className:(0,s.A)(i.tag,t?i.tagWithCount:i.tagRegular),children:[n,t&&(0,l.jsx)("span",{children:t})]})}},832:(e,n,t)=>{t.r(n) [...]
\ No newline at end of file
diff --git a/assets/js/1959.bb74b1ed.js b/assets/js/1959.bb74b1ed.js
new file mode 100644
index 000000000..f39dd757c
--- /dev/null
+++ b/assets/js/1959.bb74b1ed.js
@@ -0,0 +1,2 @@
+/*! For license information please see 1959.bb74b1ed.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1959],{291:(e,t,n)=>{"use strict";t.test=function(){return"function"==typeof n.g.queueMicrotask},t.install=function(e){return function(){n.g.queueMicrotask(e)}}},796:(e,t,n)=>{"use strict";e.exports={hits:n(4092),popularIn:n(2982)}},1380:e=>{"use strict";e.exports=function(e){var t=e.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||e.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(t)retu [...]
\ No newline at end of file
diff --git a/assets/js/1959.bb74b1ed.js.LICENSE.txt b/assets/js/1959.bb74b1ed.js.LICENSE.txt
new file mode 100644
index 000000000..1cf473c23
--- /dev/null
+++ b/assets/js/1959.bb74b1ed.js.LICENSE.txt
@@ -0,0 +1,61 @@
+/*!
+ * lunr.Builder
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.Index
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.Pipeline
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.Set
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.TokenSet
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.Vector
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.stemmer
+ * Copyright (C) 2020 Oliver Nightingale
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+ */
+
+/*!
+ * lunr.stopWordFilter
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.tokenizer
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.trimmer
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/*!
+ * lunr.utils
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
+ * Copyright (C) 2020 Oliver Nightingale
+ * @license MIT
+ */
diff --git a/assets/js/1c6a48e2.6347281b.js b/assets/js/1c6a48e2.6347281b.js
new file mode 100644
index 000000000..b0e9d363c
--- /dev/null
+++ b/assets/js/1c6a48e2.6347281b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8705],{2526:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Committers","slug":"/category/pmc-members","permalink":"/community/category/pmc-members","sidebar":"docs","navigation":{"previous":{"title":"Request for adding secrets","permalink":"/community/committers/request_for_adding_secrets"},"next":{"title":"Onboarding","permalink":"/community/pmc_members/onboarding"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/1df79ffe.ef3d04ba.js b/assets/js/1df79ffe.ef3d04ba.js
new file mode 100644
index 000000000..9356ecd6a
--- /dev/null
+++ b/assets/js/1df79ffe.ef3d04ba.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5515],{383:(e,n,a)=>{a.d(n,{A:()=>t});var s=a(6672),i=a(3420);function t({children:e,owner:n="apache",repo:a="opendal",branch:t="main",basePath:l="",components:r={}}){const c=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${a}/blob/${t}/${l}${s}`},o={...r,a:e=>{const{href:n,...a}=e;return n&&n.startsWith("./")?(0,i.jsx)("a",{...a,href:c(n)}):(0,i.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/1f391b9e.ce4aac88.js b/assets/js/1f391b9e.ce4aac88.js
new file mode 100644
index 000000000..4c7d8b960
--- /dev/null
+++ b/assets/js/1f391b9e.ce4aac88.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6061],{4327:(e,n,t)=>{t.d(n,{A:()=>v});var a=t(6672),i=t(6711);function s(e){const n=e.map(e=>({...e,parentIndex:-1,children:[]})),t=Array(7).fill(-1);n.forEach((e,n)=>{const a=t.slice(2,e.level);e.parentIndex=Math.max(...a),t[e.level]=n});const a=[];return n.forEach(e=>{const{parentIndex:t,...i}=e;t>=0?n[t].children.push(i):a.push(i)}),a}function r({toc:e,minHeadingLevel:n,maxHeadingLevel:t}){ret [...]
\ No newline at end of file
diff --git a/assets/js/2063472f.f3e5ecf9.js b/assets/js/2063472f.f3e5ecf9.js
new file mode 100644
index 000000000..0415e3d9a
--- /dev/null
+++ b/assets/js/2063472f.f3e5ecf9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3215],{7646:e=>{e.exports=JSON.parse('{"tags":[{"label":"announcement","permalink":"/blog/tags/announcement","count":7},{"label":"owo","permalink":"/blog/tags/owo","count":1},{"label":"internal","permalink":"/blog/tags/internal","count":1}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/22dd74f7.9bfca296.js b/assets/js/22dd74f7.9bfca296.js
new file mode 100644
index 000000000..ecdf68398
--- /dev/null
+++ b/assets/js/22dd74f7.9bfca296.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1567],{5226:i=>{i.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Overview","href":"/","docId":"overview","unlisted":false},{"type":"link","label":"Vision","href":"/vision","docId":"vision","unlisted":false},{"type":"li [...]
\ No newline at end of file
diff --git a/assets/js/24229705.adf8e46a.js b/assets/js/24229705.adf8e46a.js
new file mode 100644
index 000000000..cf89497fe
--- /dev/null
+++ b/assets/js/24229705.adf8e46a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4340],{6714:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Committers","slug":"/category/committers","permalink":"/community/category/committers","sidebar":"docs","navigation":{"previous":{"title":"Setup GPG key","permalink":"/community/release/reference/setup_gpg"},"next":{"title":"Onboarding","permalink":"/community/committers/onboarding"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/2e06cdab.ccfdeaf4.js b/assets/js/2e06cdab.ccfdeaf4.js
new file mode 100644
index 000000000..2c9db263d
--- /dev/null
+++ b/assets/js/2e06cdab.ccfdeaf4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3118],{551:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>p,metadata:()=>o,toc:()=>c});var o=n(8116),a=n(3420),i=n(5404);const p={title:"Apache OpenDAL\u2122 participates in Google Summer of Code 2024",date:new Date("2024-02-28T00:00:00.000Z"),slug:"apache-opendal-participates-in-gsoc-2024",tags:["announcement"],authors:"xuanwo"},r=void 0,s={authorsImageUrls: [...]
\ No newline at end of file
diff --git a/assets/js/2e8f33c3.d9913482.js b/assets/js/2e8f33c3.d9913482.js
new file mode 100644
index 000000000..207b8e3d7
--- /dev/null
+++ b/assets/js/2e8f33c3.d9913482.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3586],{859:e=>{e.exports=JSON.parse('{"permalink":"/blog/apache-opendal-participates-in-ospp-2024","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2024-04-30-apache-opendal-participates-in-ospp-2024/index.md","source":"@site/blog/2024-04-30-apache-opendal-participates-in-ospp-2024/index.md","title":"Apache OpenDAL\u2122 participates in Open Source Promotion Plan 2024","descript [...]
\ No newline at end of file
diff --git a/assets/js/3105.5d438a29.js b/assets/js/3105.5d438a29.js
new file mode 100644
index 000000000..3bf4d5131
--- /dev/null
+++ b/assets/js/3105.5d438a29.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3105],{1619:(e,t,s)=>{s.d(t,{A:()=>C});var a=s(6672),n=s(3526),i=s(6224),l=s(3420);const r="githubSvg_lB3Z";const o="xSvg_Md7H";const c=function(e){return(0,l.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,l.jsx)("path",{stroke:"none",d:"M0  [...]
\ No newline at end of file
diff --git a/assets/js/3473.1f1bfac8.js b/assets/js/3473.1f1bfac8.js
new file mode 100644
index 000000000..fcf4c9b62
--- /dev/null
+++ b/assets/js/3473.1f1bfac8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3473],{1407:(e,t,n)=>{n.d(t,{A:()=>r});n(6672);var i=n(3526),o=n(9225),s=n(1959),a=n(3420);function r({className:e}){return(0,a.jsx)("main",{className:(0,i.A)("container margin-vert--xl",e),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,a.jsx)(o.A,{id:"theme.NotFound.titl [...]
\ No newline at end of file
diff --git a/assets/js/366ada8c.ae3a2d67.js b/assets/js/366ada8c.ae3a2d67.js
new file mode 100644
index 000000000..f874e0559
--- /dev/null
+++ b/assets/js/366ada8c.ae3a2d67.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1849],{2178:e=>{e.exports=JSON.parse('{"tag":{"label":"announcement","permalink":"/blog/tags/announcement","allTagsPath":"/blog/tags","count":7,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/announcement","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/36994c47.5316835a.js b/assets/js/36994c47.5316835a.js
new file mode 100644
index 000000000..91a6435ce
--- /dev/null
+++ b/assets/js/36994c47.5316835a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9858],{5516:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/39343050.db4d25e3.js b/assets/js/39343050.db4d25e3.js
new file mode 100644
index 000000000..ee7941b84
--- /dev/null
+++ b/assets/js/39343050.db4d25e3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7992],{5404:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var a=n(6672);const o={},p=a.createContext(o);function i(e){const t=a.useContext(p);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(p.Provider,{value:t},e.children)}},5702:( [...]
\ No newline at end of file
diff --git a/assets/js/4111f708.cf0e0d84.js b/assets/js/4111f708.cf0e0d84.js
new file mode 100644
index 000000000..e37de5b02
--- /dev/null
+++ b/assets/js/4111f708.cf0e0d84.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2945],{5404:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var r=n(6672);const s={},o=r.createContext(s);function a(e){const t=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(o.Provider,{value:t},e.children)}},6273:( [...]
\ No newline at end of file
diff --git a/assets/js/4799.dab92ad4.js b/assets/js/4799.dab92ad4.js
new file mode 100644
index 000000000..5f69c9c19
--- /dev/null
+++ b/assets/js/4799.dab92ad4.js
@@ -0,0 +1 @@
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4799],{2912:(e,s,a)=>{"use strict";a.d(s,{A:()=>p});var n=a(6430);const p=n},9056:()=>{}}]);
\ No newline at end of file
diff --git a/assets/js/4979.75dde367.js b/assets/js/4979.75dde367.js
new file mode 100644
index 000000000..70543bcf2
--- /dev/null
+++ b/assets/js/4979.75dde367.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4979],{4979:(e,s,p)=>{p.r(s)}}]);
\ No newline at end of file
diff --git a/assets/js/4c528a05.f1c6acf2.js b/assets/js/4c528a05.f1c6acf2.js
new file mode 100644
index 000000000..2bc2983ec
--- /dev/null
+++ b/assets/js/4c528a05.f1c6acf2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2577],{383:(e,n,s)=>{s.d(n,{A:()=>l});var t=s(6672),i=s(3420);function l({children:e,owner:n="apache",repo:s="opendal",branch:l="main",basePath:r="",components:o={}}){const a=e=>{const t=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${l}/${r}${t}`},p={...o,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,i.jsx)("a",{...s,href:a(n)}):(0,i.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/4c9803b5.0ee22e7d.js b/assets/js/4c9803b5.0ee22e7d.js
new file mode 100644
index 000000000..b31c9e898
--- /dev/null
+++ b/assets/js/4c9803b5.0ee22e7d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1715],{50:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>d,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"pmc_members/nominate-pmc-member","title":"Nominate PMC Member","description":"This document mainly introduces how a PMC member nominates a new PMC member.","source":"@site/community/pmc_members/nominate-pmc-member.md","sourceDirName":"pmc_members", [...]
\ No newline at end of file
diff --git a/assets/js/555f5b95.b60c75e7.js b/assets/js/555f5b95.b60c75e7.js
new file mode 100644
index 000000000..6bdacfa80
--- /dev/null
+++ b/assets/js/555f5b95.b60c75e7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1711],{383:(e,s,r)=>{r.d(s,{A:()=>d});var t=r(6672),n=r(3420);function d({children:e,owner:s="apache",repo:r="opendal",branch:d="main",basePath:a="",components:i={}}){const c=e=>{const t=e.replace(/^\.\//,"");return`https://github.com/${s}/${r}/blob/${d}/${a}${t}`},h={...i,a:e=>{const{href:s,...r}=e;return s&&s.startsWith("./")?(0,n.jsx)("a",{...r,href:c(s)}):(0,n.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/5771c448.33d39c49.js b/assets/js/5771c448.33d39c49.js
new file mode 100644
index 000000000..0f2de9480
--- /dev/null
+++ b/assets/js/5771c448.33d39c49.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5274],{5404:(e,t,i)=>{i.d(t,{R:()=>r,x:()=>o});var n=i(6672);const s={},a=n.createContext(s);function r(e){const t=n.useContext(a);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(a.Provider,{value:t},e.children)}},7761:( [...]
\ No newline at end of file
diff --git a/assets/js/5a1328aa.7bfda057.js b/assets/js/5a1328aa.7bfda057.js
new file mode 100644
index 000000000..af2988ea4
--- /dev/null
+++ b/assets/js/5a1328aa.7bfda057.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5165],{383:(e,t,n)=>{n.d(t,{A:()=>o});var s=n(6672),r=n(3420);function o({children:e,owner:t="apache",repo:n="opendal",branch:o="main",basePath:a="",components:i={}}){const c=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${t}/${n}/blob/${o}/${a}${s}`},l={...i,a:e=>{const{href:t,...n}=e;return t&&t.startsWith("./")?(0,r.jsx)("a",{...n,href:c(t)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/5a1c6382.60bd0959.js b/assets/js/5a1c6382.60bd0959.js
new file mode 100644
index 000000000..f7ab9d195
--- /dev/null
+++ b/assets/js/5a1c6382.60bd0959.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[386],{5269:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>c});var n=t(8116),a=t(3420),r=t(5404);const i={title:"Apache OpenDAL\u2122 participates in Google Summer of Code 2024",date:new Date("2024-02-28T00:00:00.000Z"),slug:"apache-opendal-participates-in-gsoc-2024",tags:["announcement"],authors:"xuanwo"},s=void 0,p={authorsImageUrls: [...]
\ No newline at end of file
diff --git a/assets/js/5c069598.92c7fc91.js b/assets/js/5c069598.92c7fc91.js
new file mode 100644
index 000000000..f2ab079d0
--- /dev/null
+++ b/assets/js/5c069598.92c7fc91.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5156],{269:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"release/verify","title":"Verify a release candidate","description":"To verify a release candidate, the following checklist could be used:","source":"@site/community/release/verify.md","sourceDirName":"release","slug":"/release/verify","permalink": [...]
\ No newline at end of file
diff --git a/assets/js/5e95c892.0f3e3064.js b/assets/js/5e95c892.0f3e3064.js
new file mode 100644
index 000000000..3d1bc3fc1
--- /dev/null
+++ b/assets/js/5e95c892.0f3e3064.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9647],{589:(e,s,r)=>{r.r(s),r.d(s,{default:()=>d});r(6672);var a=r(3526),n=r(9859),t=r(1296),u=r(6271),c=r(9574),l=r(3420);function d(e){return(0,l.jsx)(n.e3,{className:(0,a.A)(t.G.wrapper.docsPages),children:(0,l.jsx)(c.A,{children:(0,u.v)(e.route.routes)})})}}}]);
\ No newline at end of file
diff --git a/assets/js/5e9d3d10.ec9870bd.js b/assets/js/5e9d3d10.ec9870bd.js
new file mode 100644
index 000000000..559590432
--- /dev/null
+++ b/assets/js/5e9d3d10.ec9870bd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9452],{383:(e,n,t)=>{t.d(n,{A:()=>i});var s=t(6672),r=t(3420);function i({children:e,owner:n="apache",repo:t="opendal",branch:i="main",basePath:a="",components:d={}}){const l=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${i}/${a}${s}`},c={...d,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:l(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/60a218c9.43af575b.js b/assets/js/60a218c9.43af575b.js
new file mode 100644
index 000000000..fbe17427e
--- /dev/null
+++ b/assets/js/60a218c9.43af575b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8883],{383:(e,n,s)=>{s.d(n,{A:()=>i});var t=s(6672),r=s(3420);function i({children:e,owner:n="apache",repo:s="opendal",branch:i="main",basePath:l="",components:a={}}){const d=e=>{const t=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${i}/${l}${t}`},o={...a,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...s,href:d(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/621db11d.d7a4873b.js b/assets/js/621db11d.d7a4873b.js
new file mode 100644
index 000000000..124d16410
--- /dev/null
+++ b/assets/js/621db11d.d7a4873b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4212],{762:(t,e,s)=>{s.d(e,{ZD:()=>u,uz:()=>l});s(6672);var a=s(9225),o=s(5018);s(3420);function r(){const{selectMessage:t}=(0,o.W)();return e=>t(e,(0,a.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)' [...]
\ No newline at end of file
diff --git a/assets/js/641925c3.64624a6b.js b/assets/js/641925c3.64624a6b.js
new file mode 100644
index 000000000..a40ab76d2
--- /dev/null
+++ b/assets/js/641925c3.64624a6b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9510],{383:(e,n,t)=>{t.d(n,{A:()=>i});var s=t(6672),r=t(3420);function i({children:e,owner:n="apache",repo:t="opendal",branch:i="main",basePath:a="",components:l={}}){const o=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${i}/${a}${s}`},d={...l,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:o(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/64ca138b.7eb115ed.js b/assets/js/64ca138b.7eb115ed.js
new file mode 100644
index 000000000..ce53cce9f
--- /dev/null
+++ b/assets/js/64ca138b.7eb115ed.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3451],{684:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>l,frontMatter:()=>d,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"maturity","title":"Maturity","description":"The goals of this maturity model are to describe how Apache projects operate in a concise and high-level way, and to provide a basic framework that projects may choose to use to evaluate themselves.","so [...]
\ No newline at end of file
diff --git a/assets/js/67c477f7.615c6c72.js b/assets/js/67c477f7.615c6c72.js
new file mode 100644
index 000000000..14cf108ee
--- /dev/null
+++ b/assets/js/67c477f7.615c6c72.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6944],{383:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(6672),s=n(3420);function i({children:e,owner:t="apache",repo:n="opendal",branch:i="main",basePath:o="",components:a={}}){const c=e=>{const r=e.replace(/^\.\//,"");return`https://github.com/${t}/${n}/blob/${i}/${o}${r}`},d={...a,a:e=>{const{href:t,...n}=e;return t&&t.startsWith("./")?(0,s.jsx)("a",{...n,href:c(t)}):(0,s.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/6875c492.afa5efc9.js b/assets/js/6875c492.afa5efc9.js
new file mode 100644
index 000000000..426015e70
--- /dev/null
+++ b/assets/js/6875c492.afa5efc9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4813],{240:(e,t,a)=>{a.d(t,{A:()=>r});a(6672);var n=a(6325),s=a(7368),i=a(3420);function r({items:e,component:t=s.A}){return(0,i.jsx)(i.Fragment,{children:e.map(({content:e})=>(0,i.jsx)(n.in,{content:e,children:(0,i.jsx)(t,{children:(0,i.jsx)(e,{})})},e.metadata.permalink))})}},737:(e,t,a)=>{a.d(t,{A:()=>l});a(6672);var n=a(3526),s=a(6224);const i={tag:"tag_pAIo",tagRegular:"tagRegular_kD8B",tagWi [...]
\ No newline at end of file
diff --git a/assets/js/72648c1e.91ad672a.js b/assets/js/72648c1e.91ad672a.js
new file mode 100644
index 000000000..cce49a413
--- /dev/null
+++ b/assets/js/72648c1e.91ad672a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8203],{383:(e,n,t)=>{t.d(n,{A:()=>i});var s=t(6672),r=t(3420);function i({children:e,owner:n="apache",repo:t="opendal",branch:i="main",basePath:a="",components:c={}}){const d=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${i}/${a}${s}`},l={...c,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:d(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/72c7c572.acc605d4.js b/assets/js/72c7c572.acc605d4.js
new file mode 100644
index 000000000..d41d7db24
--- /dev/null
+++ b/assets/js/72c7c572.acc605d4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[441],{5404:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(6672);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}},6622:e= [...]
\ No newline at end of file
diff --git a/assets/js/7589.4f009ffe.js b/assets/js/7589.4f009ffe.js
new file mode 100644
index 000000000..f1b254e78
--- /dev/null
+++ b/assets/js/7589.4f009ffe.js
@@ -0,0 +1 @@
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7589],{3339:(e,t,n)=>{"use strict";n.d(t,{A:()=>S});var s=n(6672),a=n(3420);function r(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find(e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type),r=t.filter(e=>e!==n),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:r.length>0?(0,a.jsx)(a.Fragment,{children:r}):null}}(e.children),r=e.title??t;return{...e,...r&&{title:r},ch [...]
\ No newline at end of file
diff --git a/assets/js/762bf81a.95f23149.js b/assets/js/762bf81a.95f23149.js
new file mode 100644
index 000000000..4f73c9f4f
--- /dev/null
+++ b/assets/js/762bf81a.95f23149.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5384],{5404:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var s=t(6672);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}},8530:( [...]
\ No newline at end of file
diff --git a/assets/js/79029d83.533eccdc.js b/assets/js/79029d83.533eccdc.js
new file mode 100644
index 000000000..b1691acc2
--- /dev/null
+++ b/assets/js/79029d83.533eccdc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6533],{5404:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>c});var s=n(6672);const r={},o=s.createContext(r);function i(e){const t=s.useContext(o);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:t},e.children)}},9052:( [...]
\ No newline at end of file
diff --git a/assets/js/7bec6e35.643d0c4e.js b/assets/js/7bec6e35.643d0c4e.js
new file mode 100644
index 000000000..c958828ce
--- /dev/null
+++ b/assets/js/7bec6e35.643d0c4e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[439],{4618:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"events/ospp-proposal-guide","title":"OSPP Project Proposal Guidance","description":"This document contains a short guide on how to structure your OpenDAL Open Source Promotion Plan (OSPP) project proposal and how to increase the chance of your pro [...]
\ No newline at end of file
diff --git a/assets/js/814f3328.74ffb7f0.js b/assets/js/814f3328.74ffb7f0.js
new file mode 100644
index 000000000..b5dcfb9f3
--- /dev/null
+++ b/assets/js/814f3328.74ffb7f0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7472],{5513:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Apache OpenDAL 2025 Roadmap: Perfecting Production Adoption","permalink":"/blog/2025/03/01/2025-roadmap","unlisted":false,"date":"2025-03-01T00:00:00.000Z"},{"title":"Apache OpenDAL\u2122 Beijing Meetup 1st","permalink":"/blog/2024/09/09/apache-opendal-meetup-beijing-1st","unlisted":false,"date":"2024-09-09T00:00:00.0 [...]
\ No newline at end of file
diff --git a/assets/js/81be9ab0.8386fa67.js b/assets/js/81be9ab0.8386fa67.js
new file mode 100644
index 000000000..b5b95ff88
--- /dev/null
+++ b/assets/js/81be9ab0.8386fa67.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8041],{383:(e,n,t)=>{t.d(n,{A:()=>o});var r=t(6672),i=t(3420);function o({children:e,owner:n="apache",repo:t="opendal",branch:o="main",basePath:a="",components:s={}}){const p=e=>{const r=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${o}/${a}${r}`},c={...s,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,i.jsx)("a",{...t,href:p(n)}):(0,i.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/82983ca5.2a508439.js b/assets/js/82983ca5.2a508439.js
new file mode 100644
index 000000000..fed5678d6
--- /dev/null
+++ b/assets/js/82983ca5.2a508439.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2658],{383:(e,n,t)=>{t.d(n,{A:()=>a});var s=t(6672),i=t(3420);function a({children:e,owner:n="apache",repo:t="opendal",branch:a="main",basePath:r="",components:d={}}){const o=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${a}/${r}${s}`},c={...d,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,i.jsx)("a",{...t,href:o(n)}):(0,i.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/871742e4.9430a7c2.js b/assets/js/871742e4.9430a7c2.js
new file mode 100644
index 000000000..f0975b60e
--- /dev/null
+++ b/assets/js/871742e4.9430a7c2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2733],{5404:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>s});var o=t(6672);const a={},i=o.createContext(a);function r(e){const n=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),o.createElement(i.Provider,{value:n},e.children)}},6836:( [...]
\ No newline at end of file
diff --git a/assets/js/8876636a.aac0d561.js b/assets/js/8876636a.aac0d561.js
new file mode 100644
index 000000000..50e911a62
--- /dev/null
+++ b/assets/js/8876636a.aac0d561.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[358],{6413:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Bindings Overview","slug":"/category/bindings","permalink":"/category/bindings","sidebar":"docs","navigation":{"previous":{"title":"Core","permalink":"/core"},"next":{"title":"C \ud83d\udea7","permalink":"/bindings/c"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/8a2489d3.9a821cad.js b/assets/js/8a2489d3.9a821cad.js
new file mode 100644
index 000000000..23f554047
--- /dev/null
+++ b/assets/js/8a2489d3.9a821cad.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4930],{712:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var a=t(6525),s=t(3420),o=t(5404);const r={title:"Apache OpenDAL\u2122 is now Graduated",date:new Date("2024-01-22T00:00:00.000Z"),slug:"apache-opendal-graduated",tags:["announcement"],authors:"xuanwo"},i=void 0,c={authorsImageUrls:[void 0]},l=[{value:"What&#39;s Apache Ope [...]
\ No newline at end of file
diff --git a/assets/js/8bf4b5be.89243e74.js b/assets/js/8bf4b5be.89243e74.js
new file mode 100644
index 000000000..6c017a773
--- /dev/null
+++ b/assets/js/8bf4b5be.89243e74.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8515],{5404:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var i=t(6672);const s={},r=i.createContext(s);function a(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:n},e.children)}},6200:e [...]
\ No newline at end of file
diff --git a/assets/js/8df13e63.a1e1669d.js b/assets/js/8df13e63.a1e1669d.js
new file mode 100644
index 000000000..46d8542e9
--- /dev/null
+++ b/assets/js/8df13e63.a1e1669d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3833],{5404:(e,o,t)=>{t.d(o,{R:()=>s,x:()=>a});var n=t(6672);const i={},r=n.createContext(i);function s(e){const o=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(o):{...o,...e}},[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),n.createElement(r.Provider,{value:o},e.children)}},8863:( [...]
\ No newline at end of file
diff --git a/assets/js/8ee0db76.090cc879.js b/assets/js/8ee0db76.090cc879.js
new file mode 100644
index 000000000..654a32869
--- /dev/null
+++ b/assets/js/8ee0db76.090cc879.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1656],{7819:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Reference","slug":"/category/reference","permalink":"/community/category/reference","sidebar":"docs","navigation":{"previous":{"title":"Verify a release candidate","permalink":"/community/release/verify"},"next":{"title":"Generate release note","permalink":"/community/release/reference/generate_release_note"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/91898914.2d2acdfd.js b/assets/js/91898914.2d2acdfd.js
new file mode 100644
index 000000000..62b7da584
--- /dev/null
+++ b/assets/js/91898914.2d2acdfd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3926],{383:(e,t,n)=>{n.d(t,{A:()=>s});var r=n(6672),a=n(3420);function s({children:e,owner:t="apache",repo:n="opendal",branch:s="main",basePath:i="",components:o={}}){const c=e=>{const r=e.replace(/^\.\//,"");return`https://github.com/${t}/${n}/blob/${s}/${i}${r}`},l={...o,a:e=>{const{href:t,...n}=e;return t&&t.startsWith("./")?(0,a.jsx)("a",{...n,href:c(t)}):(0,a.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/93836c80.db7e35f3.js b/assets/js/93836c80.db7e35f3.js
new file mode 100644
index 000000000..c2d5c5e30
--- /dev/null
+++ b/assets/js/93836c80.db7e35f3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1221],{1166:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Integrations Overview","slug":"/category/integrations","permalink":"/category/integrations","sidebar":"docs","navigation":{"previous":{"title":"Zig \ud83d\udea7","permalink":"/bindings/zig"},"next":{"title":"Cloud Filter","permalink":"/integrations/cloud_filter"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/93c7665c.562597df.js b/assets/js/93c7665c.562597df.js
new file mode 100644
index 000000000..237b1a225
--- /dev/null
+++ b/assets/js/93c7665c.562597df.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6573],{1136:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"community","title":"Community","description":"Welcome to the Apache OpenDAL\u2122 community!","source":"@site/community/index.mdx","sourceDirName":".","slug":"/","permalink":"/community/","draft":false,"unlisted":false,"editUrl":"https://github.c [...]
\ No newline at end of file
diff --git a/assets/js/97bf23fb.e17ea921.js b/assets/js/97bf23fb.e17ea921.js
new file mode 100644
index 000000000..b3bedfb18
--- /dev/null
+++ b/assets/js/97bf23fb.e17ea921.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2542],{383:(e,n,t)=>{t.d(n,{A:()=>a});var s=t(6672),o=t(3420);function a({children:e,owner:n="apache",repo:t="opendal",branch:a="main",basePath:i="",components:p={}}){const c=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${a}/${i}${s}`},r={...p,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,o.jsx)("a",{...t,href:c(n)}):(0,o.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/9897d641.6f24574a.js b/assets/js/9897d641.6f24574a.js
new file mode 100644
index 000000000..672ea0862
--- /dev/null
+++ b/assets/js/9897d641.6f24574a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9255],{5404:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>c});var n=a(6672);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}},5790:( [...]
\ No newline at end of file
diff --git a/assets/js/98cc138c.7d59ab36.js b/assets/js/98cc138c.7d59ab36.js
new file mode 100644
index 000000000..1360cb760
--- /dev/null
+++ b/assets/js/98cc138c.7d59ab36.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[137],{1933:e=>{e.exports=JSON.parse('{"permalink":"/blog/owo-1","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2023-09-14-owo-1/index.md","source":"@site/blog/2023-09-14-owo-1/index.md","title":"OwO #1: The v0.40 Release","description":"OwO (Outcome, Working, Outlook) is an Apache OpenDAL\u2122 release blog series, where we share the current work status and future plans.","dat [...]
\ No newline at end of file
diff --git a/assets/js/9ae7e783.ea4ddf48.js b/assets/js/9ae7e783.ea4ddf48.js
new file mode 100644
index 000000000..f065e6c24
--- /dev/null
+++ b/assets/js/9ae7e783.ea4ddf48.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2030],{5404:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(6672);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}},5720:( [...]
\ No newline at end of file
diff --git a/assets/js/9e4087bc.fd9a6480.js b/assets/js/9e4087bc.fd9a6480.js
new file mode 100644
index 000000000..4125ae0f3
--- /dev/null
+++ b/assets/js/9e4087bc.fd9a6480.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2711],{5725:(e,a,r)=>{r.d(a,{i:()=>n});var t=r(2488);function n(e={}){const{i18n:{currentLocale:a}}=(0,t.A)(),r=function(){const{i18n:{currentLocale:e,localeConfigs:a}}=(0,t.A)();return a[e].calendar}();return new Intl.DateTimeFormat(a,{calendar:r,...e})}},9655:(e,a,r)=>{r.r(a),r.d(a,{default:()=>m});r(6672);var t=r(6224),n=r(9225),s=r(9859),i=r(5725),c=r(9574),l=r(1959),o=r(3420);function d({year [...]
\ No newline at end of file
diff --git a/assets/js/a6aa9e1f.e5a718cb.js b/assets/js/a6aa9e1f.e5a718cb.js
new file mode 100644
index 000000000..bdf6eef3f
--- /dev/null
+++ b/assets/js/a6aa9e1f.e5a718cb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7643],{240:(e,t,a)=>{a.d(t,{A:()=>r});a(6672);var n=a(6325),s=a(7368),i=a(3420);function r({items:e,component:t=s.A}){return(0,i.jsx)(i.Fragment,{children:e.map(({content:e})=>(0,i.jsx)(n.in,{content:e,children:(0,i.jsx)(t,{children:(0,i.jsx)(e,{})})},e.metadata.permalink))})}},737:(e,t,a)=>{a.d(t,{A:()=>l});a(6672);var n=a(3526),s=a(6224);const i={tag:"tag_pAIo",tagRegular:"tagRegular_kD8B",tagWi [...]
\ No newline at end of file
diff --git a/assets/js/a6e5fa5a.d7fc158a.js b/assets/js/a6e5fa5a.d7fc158a.js
new file mode 100644
index 000000000..546a4c60d
--- /dev/null
+++ b/assets/js/a6e5fa5a.d7fc158a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6577],{383:(e,n,t)=>{t.d(n,{A:()=>i});var s=t(6672),r=t(3420);function i({children:e,owner:n="apache",repo:t="opendal",branch:i="main",basePath:o="",components:d={}}){const a=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${i}/${o}${s}`},c={...d,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:a(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/a7456010.f84f1414.js b/assets/js/a7456010.f84f1414.js
new file mode 100644
index 000000000..e33a4e29e
--- /dev/null
+++ b/assets/js/a7456010.f84f1414.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1235],{8552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/a7bd4aaa.92559f63.js b/assets/js/a7bd4aaa.92559f63.js
new file mode 100644
index 000000000..c72ace2e7
--- /dev/null
+++ b/assets/js/a7bd4aaa.92559f63.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7098],{6368:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(6672);var r=s(9859);function o(n,e){return`docs-${n}-${e}`}var t=s(5809),i=s(6271),c=s(3675),a=s(3420);function u(n){const{version:e}=n;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.A,{version:e.version,tag:o(e.pluginId,e.version)}),(0,a.jsx)(r.be,{children:e.noIndex&&(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}funct [...]
\ No newline at end of file
diff --git a/assets/js/a94703ab.653d4c36.js b/assets/js/a94703ab.653d4c36.js
new file mode 100644
index 000000000..239a3cb60
--- /dev/null
+++ b/assets/js/a94703ab.653d4c36.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9048],{1407:(e,t,n)=>{n.d(t,{A:()=>r});n(6672);var a=n(3526),o=n(9225),i=n(1959),s=n(3420);function r({className:e}){return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",e),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.titl [...]
\ No newline at end of file
diff --git a/assets/js/a9c30f2e.6c2c7534.js b/assets/js/a9c30f2e.6c2c7534.js
new file mode 100644
index 000000000..99794acb2
--- /dev/null
+++ b/assets/js/a9c30f2e.6c2c7534.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8334],{3977:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"pmc_members/nominate-committer","title":"Nominate Committer","description":"This document mainly introduces how a PMC member nominates a new committer.","source":"@site/community/pmc_members/nominate-committer.md","sourceDirName":"pmc_members","s [...]
\ No newline at end of file
diff --git a/assets/js/aada36dd.a455ad08.js b/assets/js/aada36dd.a455ad08.js
new file mode 100644
index 000000000..f7dcad9b3
--- /dev/null
+++ b/assets/js/aada36dd.a455ad08.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2543],{5862:e=>{e.exports=JSON.parse('{"version":{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Community","href":"/community/","docId":"community","unlisted":false},{"type":"link","label":"Maturity","href":"/community/maturity","docId":"maturity" [...]
\ No newline at end of file
diff --git a/assets/js/aba21aa0.51951f44.js b/assets/js/aba21aa0.51951f44.js
new file mode 100644
index 000000000..5ea5bce07
--- /dev/null
+++ b/assets/js/aba21aa0.51951f44.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5742],{7093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/acecf23e.243924ab.js b/assets/js/acecf23e.243924ab.js
new file mode 100644
index 000000000..34464223c
--- /dev/null
+++ b/assets/js/acecf23e.243924ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1903],{1912:e=>{e.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog","authorsListPath":"/blog/authors"}')}}]);
\ No newline at end of file
diff --git a/assets/js/b055ae15.2063befe.js b/assets/js/b055ae15.2063befe.js
new file mode 100644
index 000000000..b28e5d81b
--- /dev/null
+++ b/assets/js/b055ae15.2063befe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9479],{383:(e,n,s)=>{s.d(n,{A:()=>r});var i=s(6672),t=s(3420);function r({children:e,owner:n="apache",repo:s="opendal",branch:r="main",basePath:c="",components:d={}}){const l=e=>{const i=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${r}/${c}${i}`},a={...d,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,t.jsx)("a",{...s,href:l(n)}):(0,t.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/b3c9a82c.3a4264aa.js b/assets/js/b3c9a82c.3a4264aa.js
new file mode 100644
index 000000000..3fadc57ee
--- /dev/null
+++ b/assets/js/b3c9a82c.3a4264aa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5012],{4420:e=>{e.exports=JSON.parse('{"tag":{"label":"owo","permalink":"/blog/tags/owo","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/owo","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/b4600192.06f5a769.js b/assets/js/b4600192.06f5a769.js
new file mode 100644
index 000000000..981e948f8
--- /dev/null
+++ b/assets/js/b4600192.06f5a769.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4411],{859:e=>{e.exports=JSON.parse('{"permalink":"/blog/apache-opendal-participates-in-ospp-2024","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2024-04-30-apache-opendal-participates-in-ospp-2024/index.md","source":"@site/blog/2024-04-30-apache-opendal-participates-in-ospp-2024/index.md","title":"Apache OpenDAL\u2122 participates in Open Source Promotion Plan 2024","descript [...]
\ No newline at end of file
diff --git a/assets/js/b854c684.1753d7a3.js b/assets/js/b854c684.1753d7a3.js
new file mode 100644
index 000000000..d9e17349d
--- /dev/null
+++ b/assets/js/b854c684.1753d7a3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[389],{383:(e,n,t)=>{t.d(n,{A:()=>a});var s=t(6672),r=t(3420);function a({children:e,owner:n="apache",repo:t="opendal",branch:a="main",basePath:i="",components:o={}}){const l=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${a}/${i}${s}`},c={...o,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:l(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chil [...]
\ No newline at end of file
diff --git a/assets/js/b9e611fa.efe58c1c.js b/assets/js/b9e611fa.efe58c1c.js
new file mode 100644
index 000000000..b83f6e8d4
--- /dev/null
+++ b/assets/js/b9e611fa.efe58c1c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{1147:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>p,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"pmc_members/board-reporting","title":"Board reporting","description":"Apache PMC members are responsible for reporting the status of their projects to the Apache Board of Directors. This page provides guidance on how to prepare and submit reports [...]
\ No newline at end of file
diff --git a/assets/js/be97ea89.cf48e600.js b/assets/js/be97ea89.cf48e600.js
new file mode 100644
index 000000000..c243f6453
--- /dev/null
+++ b/assets/js/be97ea89.cf48e600.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7947],{3774:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var a=n(6200),o=n(3420),i=n(5404);const s={title:"Apache OpenDAL\u2122 Internal: Data Reading",date:new Date("2023-08-15T00:00:00.000Z"),slug:"how-opendal-read-data",tags:["internal"],description:"The first article will discuss OpenDAL's most commonly used data reading fun [...]
\ No newline at end of file
diff --git a/assets/js/c190077e.a0880b6e.js b/assets/js/c190077e.a0880b6e.js
new file mode 100644
index 000000000..59fe64512
--- /dev/null
+++ b/assets/js/c190077e.a0880b6e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8363],{383:(e,n,s)=>{s.d(n,{A:()=>l});var a=s(6672),t=s(3420);function l({children:e,owner:n="apache",repo:s="opendal",branch:l="main",basePath:r="",components:i={}}){const o=e=>{const a=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${l}/${r}${a}`},d={...i,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,t.jsx)("a",{...s,href:o(n)}):(0,t.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/c3c04a61.519e0ff6.js b/assets/js/c3c04a61.519e0ff6.js
new file mode 100644
index 000000000..89c54e35f
--- /dev/null
+++ b/assets/js/c3c04a61.519e0ff6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4901],{383:(e,n,s)=>{s.d(n,{A:()=>a});var t=s(6672),r=s(3420);function a({children:e,owner:n="apache",repo:s="opendal",branch:a="main",basePath:i="",components:o={}}){const d=e=>{const t=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${a}/${i}${t}`},l={...o,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...s,href:d(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/c723f292.52406687.js b/assets/js/c723f292.52406687.js
new file mode 100644
index 000000000..c7d63fbe3
--- /dev/null
+++ b/assets/js/c723f292.52406687.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[845],{383:(e,n,s)=>{s.d(n,{A:()=>r});var t=s(6672),o=s(3420);function r({children:e,owner:n="apache",repo:s="opendal",branch:r="main",basePath:a="",components:l={}}){const c=e=>{const t=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${r}/${a}${t}`},i={...l,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,o.jsx)("a",{...s,href:c(n)}):(0,o.jsx)("a",{...e})},p:e=>{const{chil [...]
\ No newline at end of file
diff --git a/assets/js/ccaaa0ae.37395069.js b/assets/js/ccaaa0ae.37395069.js
new file mode 100644
index 000000000..ed3a2218c
--- /dev/null
+++ b/assets/js/ccaaa0ae.37395069.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9722],{383:(e,n,t)=>{t.d(n,{A:()=>i});var r=t(6672),o=t(3420);function i({children:e,owner:n="apache",repo:t="opendal",branch:i="main",basePath:s="",components:a={}}){const c=e=>{const r=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${i}/${s}${r}`},l={...a,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,o.jsx)("a",{...t,href:c(n)}):(0,o.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/ccc49370.ab8201c1.js b/assets/js/ccc49370.ab8201c1.js
new file mode 100644
index 000000000..d57e0ba8c
--- /dev/null
+++ b/assets/js/ccc49370.ab8201c1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3249],{737:(e,t,n)=>{n.d(t,{A:()=>l});n(6672);var a=n(3526),s=n(6224);const i={tag:"tag_pAIo",tagRegular:"tagRegular_kD8B",tagWithCount:"tagWithCount_KrMf"};var r=n(3420);function l({permalink:e,label:t,count:n,description:l}){return(0,r.jsxs)(s.A,{rel:"tag",href:e,title:l,className:(0,a.A)(i.tag,n?i.tagWithCount:i.tagRegular),children:[t,n&&(0,r.jsx)("span",{children:n})]})}},1730:(e,t,n)=>{n.d(t [...]
\ No newline at end of file
diff --git a/assets/js/ce1f9e9a.4c33a95b.js b/assets/js/ce1f9e9a.4c33a95b.js
new file mode 100644
index 000000000..6baf08882
--- /dev/null
+++ b/assets/js/ce1f9e9a.4c33a95b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9434],{4308:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>p,metadata:()=>n,toc:()=>u});var n=t(6525),o=t(3420),r=t(5404);const p={title:"Apache OpenDAL\u2122 is now Graduated",date:new Date("2024-01-22T00:00:00.000Z"),slug:"apache-opendal-graduated",tags:["announcement"],authors:"xuanwo"},c=void 0,s={authorsImageUrls:[void 0]},u=[];function l(e){const a={a:" [...]
\ No newline at end of file
diff --git a/assets/js/d6bb3bd3.d0f88486.js b/assets/js/d6bb3bd3.d0f88486.js
new file mode 100644
index 000000000..845d2fc8d
--- /dev/null
+++ b/assets/js/d6bb3bd3.d0f88486.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6841],{5404:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>o});var a=s(6672);const t={},i=a.createContext(t);function r(e){const n=a.useContext(i);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),a.createElement(i.Provider,{value:n},e.children)}},9030:( [...]
\ No newline at end of file
diff --git a/assets/js/d79d0e51.4f4db824.js b/assets/js/d79d0e51.4f4db824.js
new file mode 100644
index 000000000..5ec794fc4
--- /dev/null
+++ b/assets/js/d79d0e51.4f4db824.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1764],{383:(e,n,s)=>{s.d(n,{A:()=>a});var t=s(6672),i=s(3420);function a({children:e,owner:n="apache",repo:s="opendal",branch:a="main",basePath:r="",components:o={}}){const l=e=>{const t=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${a}/${r}${t}`},c={...o,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,i.jsx)("a",{...s,href:l(n)}):(0,i.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/db4ba166.9be064d2.js b/assets/js/db4ba166.9be064d2.js
new file mode 100644
index 000000000..3f639afdf
--- /dev/null
+++ b/assets/js/db4ba166.9be064d2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2893],{383:(e,n,t)=>{t.d(n,{A:()=>r});var i=t(6672),s=t(3420);function r({children:e,owner:n="apache",repo:t="opendal",branch:r="main",basePath:a="",components:c={}}){const d=e=>{const i=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${r}/${a}${i}`},o={...c,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,s.jsx)("a",{...t,href:d(n)}):(0,s.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/dbfc4782.6df50409.js b/assets/js/dbfc4782.6df50409.js
new file mode 100644
index 000000000..ceec898b0
--- /dev/null
+++ b/assets/js/dbfc4782.6df50409.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8749],{1895:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/2025/03/01/2025-roadmap","metadata":{"permalink":"/blog/2025/03/01/2025-roadmap","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2025-03-01-2025-roadmap/index.md","source":"@site/blog/2025-03-01-2025-roadmap/index.md","title":"Apache OpenDAL 2025 Roadmap: Perfecting Production Adoption","description":"Hi eve [...]
\ No newline at end of file
diff --git a/assets/js/dd04b75e.ead40786.js b/assets/js/dd04b75e.ead40786.js
new file mode 100644
index 000000000..3bed4eb3a
--- /dev/null
+++ b/assets/js/dd04b75e.ead40786.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1672],{3024:e=>{e.exports=JSON.parse('{"authors":[{"name":"Xuanwo","url":"https://github.com/Xuanwo","key":"xuanwo","page":null,"count":8},{"name":"PsiACE","url":"https://github.com/PsiACE","key":"psiace","page":null,"count":2}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/dd573aea.3fe5cac9.js b/assets/js/dd573aea.3fe5cac9.js
new file mode 100644
index 000000000..fda3607b4
--- /dev/null
+++ b/assets/js/dd573aea.3fe5cac9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9005],{383:(e,n,o)=>{o.d(n,{A:()=>l});var s=o(6672),i=o(3420);function l({children:e,owner:n="apache",repo:o="opendal",branch:l="main",basePath:c="",components:t={}}){const a=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${o}/blob/${l}/${c}${s}`},r={...t,a:e=>{const{href:n,...o}=e;return n&&n.startsWith("./")?(0,i.jsx)("a",{...o,href:a(n)}):(0,i.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/ddb4e1f1.10b7858c.js b/assets/js/ddb4e1f1.10b7858c.js
new file mode 100644
index 000000000..80473f806
--- /dev/null
+++ b/assets/js/ddb4e1f1.10b7858c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7948],{1642:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"overview","title":"Welcome to Apache OpenDAL\u2122","description":"OpenDAL represents Open Data Access Layer. Our vision is One Layer, All Storage.","source":"@site/docs/01-overview.md","sourceDirName":".","slug":"/","permalink":"/","draft":false [...]
\ No newline at end of file
diff --git a/assets/js/dfe14563.f24c27e8.js b/assets/js/dfe14563.f24c27e8.js
new file mode 100644
index 000000000..169cd7e43
--- /dev/null
+++ b/assets/js/dfe14563.f24c27e8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4655],{383:(e,n,t)=>{t.d(n,{A:()=>i});var s=t(6672),r=t(3420);function i({children:e,owner:n="apache",repo:t="opendal",branch:i="main",basePath:d="",components:a={}}){const c=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${i}/${d}${s}`},o={...a,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:c(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/e0719818.58e9c0a1.js b/assets/js/e0719818.58e9c0a1.js
new file mode 100644
index 000000000..9c0380d8d
--- /dev/null
+++ b/assets/js/e0719818.58e9c0a1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5220],{8669:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]);
\ No newline at end of file
diff --git a/assets/js/e0a7550c.e8915d24.js b/assets/js/e0a7550c.e8915d24.js
new file mode 100644
index 000000000..207d56a22
--- /dev/null
+++ b/assets/js/e0a7550c.e8915d24.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7429],{383:(e,n,s)=>{s.d(n,{A:()=>r});var a=s(6672),t=s(3420);function r({children:e,owner:n="apache",repo:s="opendal",branch:r="main",basePath:i="",components:l={}}){const o=e=>{const a=e.replace(/^\.\//,"");return`https://github.com/${n}/${s}/blob/${r}/${i}${a}`},c={...l,a:e=>{const{href:n,...s}=e;return n&&n.startsWith("./")?(0,t.jsx)("a",{...s,href:o(n)}):(0,t.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/e21e5353.8fbcb068.js b/assets/js/e21e5353.8fbcb068.js
new file mode 100644
index 000000000..7ea1cbbf5
--- /dev/null
+++ b/assets/js/e21e5353.8fbcb068.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8800],{9868:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Events","slug":"/category/events","permalink":"/community/category/events","sidebar":"docs","navigation":{"previous":{"title":"Security","permalink":"/community/security"},"next":{"title":"GSoC Project Proposal Guidance","permalink":"/community/events/gsoc-proposal-guide"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/e9c509e9.c22707fa.js b/assets/js/e9c509e9.c22707fa.js
new file mode 100644
index 000000000..c5f0d39ed
--- /dev/null
+++ b/assets/js/e9c509e9.c22707fa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5434],{2234:e=>{e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Release","slug":"/category/release","permalink":"/community/category/release","sidebar":"docs","navigation":{"previous":{"title":"OSPP Project Proposal Guidance","permalink":"/community/events/ospp-proposal-guide"},"next":{"title":"Create a release","permalink":"/community/release/"}}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/f4050da2.2f2d055f.js b/assets/js/f4050da2.2f2d055f.js
new file mode 100644
index 000000000..cec087cab
--- /dev/null
+++ b/assets/js/f4050da2.2f2d055f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3469],{383:(e,t,n)=>{n.d(t,{A:()=>a});var s=n(6672),r=n(3420);function a({children:e,owner:t="apache",repo:n="opendal",branch:a="main",basePath:o="",components:i={}}){const c=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${t}/${n}/blob/${a}/${o}${s}`},d={...i,a:e=>{const{href:t,...n}=e;return t&&t.startsWith("./")?(0,r.jsx)("a",{...n,href:c(t)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/f8b0372a.dee688b3.js b/assets/js/f8b0372a.dee688b3.js
new file mode 100644
index 000000000..e66e8ff45
--- /dev/null
+++ b/assets/js/f8b0372a.dee688b3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8250],{1726:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"vision","title":"Vision","description":"Charter","source":"@site/docs/02-vision.md","sourceDirName":".","slug":"/vision","permalink":"/vision","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/opendal/tree/main/website/docs/02-v [...]
\ No newline at end of file
diff --git a/assets/js/f8ca66da.569f2a74.js b/assets/js/f8ca66da.569f2a74.js
new file mode 100644
index 000000000..60cdbd993
--- /dev/null
+++ b/assets/js/f8ca66da.569f2a74.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8844],{383:(e,n,t)=>{t.d(n,{A:()=>a});var s=t(6672),r=t(3420);function a({children:e,owner:n="apache",repo:t="opendal",branch:a="main",basePath:i="",components:o={}}){const c=e=>{const s=e.replace(/^\.\//,"");return`https://github.com/${n}/${t}/blob/${a}/${i}${s}`},l={...o,a:e=>{const{href:n,...t}=e;return n&&n.startsWith("./")?(0,r.jsx)("a",{...t,href:c(n)}):(0,r.jsx)("a",{...e})},p:e=>{const{chi [...]
\ No newline at end of file
diff --git a/assets/js/fb47c099.bd0bea46.js b/assets/js/fb47c099.bd0bea46.js
new file mode 100644
index 000000000..3d42baabf
--- /dev/null
+++ b/assets/js/fb47c099.bd0bea46.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[431],{1933:e=>{e.exports=JSON.parse('{"permalink":"/blog/owo-1","editUrl":"https://github.com/apache/opendal/tree/main/website/blog/2023-09-14-owo-1/index.md","source":"@site/blog/2023-09-14-owo-1/index.md","title":"OwO #1: The v0.40 Release","description":"OwO (Outcome, Working, Outlook) is an Apache OpenDAL\u2122 release blog series, where we share the current work status and future plans.","dat [...]
\ No newline at end of file
diff --git a/assets/js/fbfa070b.33f8f871.js b/assets/js/fbfa070b.33f8f871.js
new file mode 100644
index 000000000..f954818c7
--- /dev/null
+++ b/assets/js/fbfa070b.33f8f871.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1633],{5404:(e,i,t)=>{t.d(i,{R:()=>o,x:()=>a});var n=t(6672);const s={},r=n.createContext(s);function o(e){const i=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:i},e.children)}},6358:( [...]
\ No newline at end of file
diff --git a/assets/js/fc45081a.a3bb3e5a.js b/assets/js/fc45081a.a3bb3e5a.js
new file mode 100644
index 000000000..1f84c33e3
--- /dev/null
+++ b/assets/js/fc45081a.a3bb3e5a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[297],{735:e=>{e.exports=JSON.parse('{"tag":{"label":"internal","permalink":"/blog/tags/internal","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/internal","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/main.aef16f6b.js b/assets/js/main.aef16f6b.js
new file mode 100644
index 000000000..7e63f1118
--- /dev/null
+++ b/assets/js/main.aef16f6b.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.aef16f6b.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8792],{86:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(6672),o=n(2111);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s({desktopBreakpoint:e=i}={}){const[t,n]=(0,r.useState)(()=>"ssr");return(0,r.useEffect)(()=>{function t(){n(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(e))}r [...]
\ No newline at end of file
diff --git a/assets/js/main.aef16f6b.js.LICENSE.txt b/assets/js/main.aef16f6b.js.LICENSE.txt
new file mode 100644
index 000000000..540cbdb7c
--- /dev/null
+++ b/assets/js/main.aef16f6b.js.LICENSE.txt
@@ -0,0 +1,68 @@
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */
+
+/*!***************************************************
+* mark.js v8.11.1
+* https://markjs.io/
+* Copyright (c) 2014–2018, Julian Kühnel
+* Released under the MIT license https://git.io/vwTVl
+*****************************************************/
+
+/**
+ * @license React
+ * react-dom-client.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-dom.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-jsx-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * scheduler.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/assets/js/runtime~main.01b42c7d.js b/assets/js/runtime~main.01b42c7d.js
new file mode 100644
index 000000000..5f1350600
--- /dev/null
+++ b/assets/js/runtime~main.01b42c7d.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,d,b,f={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return f[e].call(c.exports,c,c.exports,r),c.exports}r.m=f,e=[],r.O=(a,c,d,b)=>{if(!c){var f=1/0;for(i=0;i<e.length;i++){c=e[i][0],d=e[i][1],b=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&b||f>=b)&&Object.keys(r.O).every(e=>r.O[e](c[o]))?c.splice(o--,1):(t=!1,b<f&&(f=b));if(t){e.splice(i--,1);var n=d();void 0!==n&&(a=n)}}return a}b=b||0;for(var i=e.length;i>0&&e[i-1][2 [...]
\ No newline at end of file
diff --git a/bindings/c/index.html b/bindings/c/index.html
new file mode 100644
index 000000000..aca2cd346
--- /dev/null
+++ b/bindings/c/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/c" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">C 🚧 | 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/bindings/c/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/c/"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="https://github.com/apache/opendal/assets/5351546/87bbf6e5-f19e-449a-b368-3e283016c887" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<p>A simple read and write example</p>
+<div class="language-C language-c codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-c codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro propert [...]
+<p>For more examples, please refer to <code>./examples</code></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h2>
+<p>To build OpenDAL C binding, the following is all you need:</p>
+<ul>
+<li>
+<p>A compiler that supports <strong>C11</strong> and <strong>C++14</strong>, <em>e.g.</em> clang and gcc</p>
+</li>
+<li>
+<p>To format the code, you need to install <strong>clang-format</strong></p>
+<ul>
+<li>The <code>opendal.h</code> is not formatted by hands when you contribute, please do not format the file. <strong>Use <code>make format</code> only.</strong></li>
+<li>If your contribution is related to the files under <code>./tests</code>, you may format it before submitting your pull request. But notice that different versions of <code>clang-format</code> may format the files differently.</li>
+</ul>
+</li>
+<li>
+<p>(optional) <strong>Doxygen</strong> need to be installed to generate documentations.</p>
+</li>
+</ul>
+<p>For Ubuntu and Debian:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># install C/C++ toolchain</span><br></span><span class="token-line" style="color:#393A34" [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="makefile">Makefile<a href="#makefile" class="hash-link" aria-label="Direct link to Makefile" title="Direct link to Makefile">​</a></h2>
+<ul>
+<li>
+<p>To <strong>build the library and header file</strong>.</p>
+<div class="language-sh codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-sh codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">mkdir -p build &amp;&amp; cd build</span><br></span><span class="token-line" style="color:#393A [...]
+<ul>
+<li>
+<p>The header file <code>opendal.h</code> is under <code>./include</code></p>
+</li>
+<li>
+<p>The library is under <code>../../target/debug</code> after building.</p>
+</li>
+<li>
+<p>use <code>FEATURES</code> to enable services, like <code>cmake .. -DFEATURES="opendal/services-memory,opendal/services-fs"</code></p>
+</li>
+</ul>
+</li>
+<li>
+<p>To <strong>clean</strong> the build results.</p>
+<div class="language-sh codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-sh codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cargo clean</span><br></span><span class="token-line" style="color:#393A34"><span class="token  [...]
+</li>
+<li>
+<p>To build and run the <strong>tests</strong>. (Note that you need to install Valgrind and GTest)</p>
+<div class="language-sh codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-sh codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd build</span><br></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
+</li>
+<li>
+<p>To build the <strong>examples</strong></p>
+<div class="language-sh codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-sh codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd build</span><br></span><span class="token-line" style="color:#393A34"><span class="token pla [...]
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="documentation">Documentation<a href="#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation">​</a></h2>
+<p>The documentation index page source is under <code>./docs/doxygen/html/index.html</code>.
+If you want to build the documentations yourself, you could use</p>
+<div class="language-sh codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-sh codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># this requires you to install doxygen</span><br></span><span class="token-line" style="color:# [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="used-by">Used by<a href="#used-by" class="hash-link" aria-label="Direct link to Used by" title="Direct link to Used by">​</a></h2>
+<p>Check out the <a href="https://github.com/apache/opendal/blob/main/bindings/c/users.md">users</a> list for more details on who is using OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/c.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="i [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/cpp/index.html b/bindings/cpp/index.html
new file mode 100644
index 000000000..0c470bfe9
--- /dev/null
+++ b/bindings/cpp/index.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/cpp" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Cpp 🚧 | 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/bindings/cpp/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/cpp/"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<p>Documents: <a href="https://opendal.apache.org/docs/cpp/"><img decoding="async" loading="lazy" src="/img/external/2df9af50d923c7e6cd0c9521c3d4e194.svg" alt="Documents" class="img_AUsV"></a></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<div class="language-cpp codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-cpp codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property direc [...]
+<p>More examples can be found <a href="../../examples/cpp">here</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="using">Using<a href="#using" class="hash-link" aria-label="Direct link to Using" title="Direct link to Using">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="cmake">CMake<a href="#cmake" class="hash-link" aria-label="Direct link to CMake" title="Direct link to CMake">​</a></h3>
+<p>You can use <code>FetchContent</code> to add OpenDAL to your project.</p>
+<div class="language-cmake codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-cmake codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">FetchContent_Declare(</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<p>Or you can download the source code and add it to your project.</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">mkdir third_party</span><br></span><span class="token-line" style="color:#393A34"><span c [...]
+<div class="language-cmake codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-cmake codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">add_subdirectory(third_party/opendal/bindings/cpp)</span><br></span></code></pre></div></div>
+<p>Now you can use OpenDAL in your project.</p>
+<div class="language-cmake codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-cmake codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">target_link_libraries(your_target opendal_cpp)</span><br></span></code></pre></div></div>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="others">Others<a href="#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others">​</a></h3>
+<p>Support for more package managers is coming soon!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="compiling">Compiling<a href="#compiling" class="hash-link" aria-label="Direct link to Compiling" title="Direct link to Compiling">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h3>
+<ul>
+<li>CMake &gt;= 3.22</li>
+<li>C++ compiler with C++17 support</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h3>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">mkdir build</span><br></span><span class="token-line" style="color:#393A34"><span class="to [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="test">Test<a href="#test" class="hash-link" aria-label="Direct link to Test" title="Direct link to Test">​</a></h3>
+<p>You should build the project with <code>OPENDAL_ENABLE_TESTING</code> option. Then run:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">make test</span><br></span></code></pre></div></div>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="docs">Docs<a href="#docs" class="hash-link" aria-label="Direct link to Docs" title="Direct link to Docs">​</a></h3>
+<p>You should build the project with <code>OPENDAL_ENABLE_DOCUMENTATION</code> option. Then run:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">make docs</span><br></span></code></pre></div></div>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="cmake-options">CMake Options<a href="#cmake-options" class="hash-link" aria-label="Direct link to CMake Options" title="Direct link to CMake Options">​</a></h3>
+<ul>
+<li><code>OPENDAL_DEV</code>: Enable development environment for OpenDAL. It will enable most development options. With this option, you don't need to set other options. Default: <code>OFF</code></li>
+<li><code>OPENDAL_ENABLE_ADDRESS_SANITIZER</code>: Enable address sanitizer. Default: <code>OFF</code></li>
+<li><code>OPENDAL_ENABLE_DOCUMENTATION</code>: Enable documentation. Default: <code>OFF</code></li>
+<li><code>OPENDAL_DOCS_ONLY</code>: Only build documentation. Default: <code>OFF</code></li>
+<li><code>OPENDAL_ENABLE_TESTING</code>: Enable testing. Default: <code>OFF</code></li>
+<li><code>OPENDAL_ENABLE_ASYNC</code>: Enable async support. Default: <code>OFF</code></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/cpp.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class= [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/d/index.html b/bindings/d/index.html
new file mode 100644
index 000000000..029d66da8
--- /dev/null
+++ b/bindings/d/index.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/d" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">D 🚧 | 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/bindings/d/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/d"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h2>
+<p>To compile OpenDAL d binding from source code, you need:</p>
+<ul>
+<li><a href="https://dlang.org/download">dmd/ldc/gdc</a></li>
+</ul>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># build libopendal_c (underneath call make -C ../c)</span><br></span><span class="token-lin [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/d.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="i [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/dart/index.html b/bindings/dart/index.html
new file mode 100644
index 000000000..a3541231d
--- /dev/null
+++ b/bindings/dart/index.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/dart" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Dart 🚧 | 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/bindings/dart/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="useful-links">Useful Links<a href="#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links">​</a></h2>
+<ul>
+<li><a href="https://github.com/apache/opendal/blob/main/bindings/dart/examples">Examples</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
+<p>Api is designed to be like stdlib style.</p>
+<p>This is stdlib</p>
+<div class="language-dart codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-dart codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">import &#x27;dart:io&#x27;;</span><br></span><span class="token-line" style="color:#393A34" [...]
+<p>This is opendal</p>
+<div class="language-dart codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-dart codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">import &#x27;package:opendal/opendal.dart&#x27;;</span><br></span><span class="token-line"  [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="test">Test<a href="#test" class="hash-link" aria-label="Direct link to Test" title="Direct link to Test">​</a></h2>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">dart run tests/opendal_test.dart</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="development">Development<a href="#development" class="hash-link" aria-label="Direct link to Development" title="Direct link to Development">​</a></h2>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">flutter pub get</span><br></span><span class="token-line" style="color:#393A34"><span class [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="update-generated-code">Update generated code<a href="#update-generated-code" class="hash-link" aria-label="Direct link to Update generated code" title="Direct link to Update generated code">​</a></h2>
+<p>This binding uses <a href="https://github.com/fzyzcjy/flutter_rust_bridge">https://github.com/fzyzcjy/flutter_rust_bridge</a>, when updating the codegen. First check <code>FLUTTER_RUST_BRIDGE_CODEGEN_VERSION</code>, then pin the version of <code>flutter_rust_bridge</code> in <code>pubspec.yaml</code> and <code>rust/Cargo.toml</code>. Make sure the runtime versions are matched.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/dart.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/bindings/dotnet/index.html b/bindings/dotnet/index.html
new file mode 100644
index 000000000..e05dffe60
--- /dev/null
+++ b/bindings/dotnet/index.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/dotnet" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Dotnet 🚧 | 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/bindings/dotnet/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/dotnet"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p>This binding is currently under development. Please check back later.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h2>
+<p>To compile OpenDAL .NET binding from source code, you need:</p>
+<ul>
+<li><a href="https://dotnet.microsoft.com/en-us/download/dotnet">.NET</a> version 7.0</li>
+</ul>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cargo build</span><br></span><span class="token-line" style="color:#393A34"><span class="to [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/dotnet.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" cla [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/go/index.html b/bindings/go/index.html
new file mode 100644
index 000000000..1160b3e64
--- /dev/null
+++ b/bindings/go/index.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/go" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Go | 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/bindings/go/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name= [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://pkg.go.dev/github.com/apache/opendal/bindings/go"><img decoding="async" loading="lazy" src="/img/external/6fc9234a805e6983d9cc27a62c8568aa.svg" alt="" class="img_AUsV"></a>
+<a href="https://pkg.go.dev/github.com/apache/opendal/bindings/go"><img decoding="async" loading="lazy" src="/img/external/4079df26a2c75f9863cb3d997d7d1f3d.svg" alt="Go Reference" class="img_AUsV"></a></p>
+<p>opendal-go is a <strong>Native</strong> support Go binding without CGO enabled and is built on top of opendal-c.</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">go get github.com/apache/opendal/bindings/go@latest</span><br></span></code></pre></div></div>
+<p>opendal-go requires <strong>libffi</strong> to be installed.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="basic-usage">Basic Usage<a href="#basic-usage" class="hash-link" aria-label="Direct link to Basic Usage" title="Direct link to Basic Usage">​</a></h2>
+<div class="language-go codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-go codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">package</span><span class="token plain"> main</span><br></span><span cl [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="run-tests">Run Tests<a href="#run-tests" class="hash-link" aria-label="Direct link to Run Tests" title="Direct link to Run Tests">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="behavior-tests">Behavior Tests<a href="#behavior-tests" class="hash-link" aria-label="Direct link to Behavior Tests" title="Direct link to Behavior Tests">​</a></h3>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd tests/behavior_tests</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="benchmark">Benchmark<a href="#benchmark" class="hash-link" aria-label="Direct link to Benchmark" title="Direct link to Benchmark">​</a></h3>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd tests/behavior_tests</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<details class="details_FSmu alert alert--info details_seRW" data-collapsed="true"><summary>
+  A benchmark between OpenDAL Go binding and aws-sdk-go on minio S3 compatible storage
+  </summary><div><div class="collapsibleContent_uSUc">
+  <!-- -->
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">goos: linux</span><br></span><span class="token-line" style="color:#393A34"><span class="to [...]
+<p><strong>Diff</strong> with <a href="https://pkg.go.dev/golang.org/x/perf/cmd/benchstat">benchstat</a></p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">benchstat aws.txt opendal.txt</span><br></span><span class="token-line" style="color:#393A3 [...]
+</div></div></details>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2>
+<ul class="contains-task-list containsTaskList_RROW">
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> OperatorInfo</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Stat
+<ul class="contains-task-list containsTaskList_RROW">
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Metadata</li>
+</ul>
+</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> IsExist</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Read
+<ul class="contains-task-list containsTaskList_RROW">
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Read</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Reader -- implement as <code>io.ReadSeekCloser</code></li>
+</ul>
+</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Write
+<ul class="contains-task-list containsTaskList_RROW">
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Write</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Writer -- implement as <code>io.WriteCloser</code></li>
+</ul>
+</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Delete</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> CreateDir</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> Lister
+<ul class="contains-task-list containsTaskList_RROW">
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Entry</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> Metadata -- Need support from the C binding</li>
+</ul>
+</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Copy</li>
+<li class="task-list-item"><input type="checkbox" disabled="" checked=""> Rename</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="development">Development<a href="#development" class="hash-link" aria-label="Direct link to Development" title="Direct link to Development">​</a></h2>
+<p>The guide is based on Linux and Windows. For other platforms, please adjust the commands accordingly.</p>
+<p>To develop the Go binding, you need to have the following dependencies installed:</p>
+<ul>
+<li>zstd</li>
+<li>Rust toolchain</li>
+<li>Go</li>
+<li>(Required for Windows) libffi-8.dll in the root of the workspace directory</li>
+</ul>
+<p>We use <code>go workspace</code> to manage and build the dependencies. To set up the workspace, run the following commands:</p>
+<details class="details_FSmu alert alert--info details_seRW" data-collapsed="true"><summary>
+  For Linux, macOS and Windows (MSVC)
+  </summary><div><div class="collapsibleContent_uSUc">
+  <!-- -->
+<br>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">mkdir opendal_workspace</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<p>To build and run tests, run the following commands:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd opendal_workspace</span><br></span><span class="token-line" style="color:#393A34"><span  [...]
+<p>To run the benchmarks, you can use the following command:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">make bench</span><br></span></code></pre></div></div>
+</div></div></details>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/go.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class=" [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/haskell/index.html b/bindings/haskell/index.html
new file mode 100644
index 000000000..7fcada5bc
--- /dev/null
+++ b/bindings/haskell/index.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/haskell" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Haskell 🚧 | 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/bindings/haskell/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh= [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/haskell"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<p>Basic usage</p>
+<div class="language-haskell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-haskell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">import OpenDAL</span><br></span><span class="token-line" style="color:#393A34"><span  [...]
+<p>Use logger</p>
+<div class="language-haskell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-haskell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">import OpenDAL</span><br></span><span class="token-line" style="color:#393A34"><span  [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h2>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cabal build</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="test">Test<a href="#test" class="hash-link" aria-label="Direct link to Test" title="Direct link to Test">​</a></h2>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cabal test</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="doc">Doc<a href="#doc" class="hash-link" aria-label="Direct link to Doc" title="Direct link to Doc">​</a></h2>
+<p>To generate the documentation:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cabal haddock</span><br></span></code></pre></div></div>
+<p>If your <code>cabal</code> version is greater than <code>3.8</code>, you can use <code>cabal haddock --open</code> to open the documentation in your browser. Otherwise, you can visit the documentation from <code>dist-newstyle/build/$ARCH/ghc-$VERSION/opendal-$VERSION/doc/html/opendal/index.html</code>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/haskell.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" cl [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/java/index.html b/bindings/java/index.html
new file mode 100644
index 000000000..8b0864df4
--- /dev/null
+++ b/bindings/java/index.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/java" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Java | 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/bindings/java/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://central.sonatype.com/search?q=opendal&amp;smo=true"><img decoding="async" loading="lazy" src="/img/external/6fc9234a805e6983d9cc27a62c8568aa.svg" alt="" class="img_AUsV"></a>
+<a href="https://central.sonatype.com/search?q=opendal&amp;smo=true"><img decoding="async" loading="lazy" src="/img/external/11f3ee113877f72b02fab00aae6b1a41.svg" alt="Maven Central" class="img_AUsV"></a>
+<a href="https://opendal.apache.org/docs/java/"><img decoding="async" loading="lazy" src="/img/external/0331140e6c28f97a21906ae8f1b0117b.svg" alt="Website" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="useful-links">Useful Links<a href="#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links">​</a></h2>
+<ul>
+<li><a href="https://opendal.apache.org/docs/java/">Documentation</a></li>
+<li><a href="https://github.com/apache/opendal/blob/main/bindings/java/upgrade.md">Upgrade Guide</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<div class="language-java codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-java codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token i [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="getting-started">Getting Started<a href="#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started">​</a></h2>
+<p>This project is built upon the native OpenDAL lib. And it is released for multiple platforms that you can use a classifier to specify the platform you are building the application on.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="maven">Maven<a href="#maven" class="hash-link" aria-label="Direct link to Maven" title="Direct link to Maven">​</a></h3>
+<p>Generally, you can first add the <code>os-maven-plugin</code> for automatically detect the classifier based on your platform:</p>
+<div class="language-xml codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-xml codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">buil [...]
+<p>Then add the dependency to <code>opendal</code> as following:</p>
+<div class="language-xml codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-xml codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">depe [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="gradle">Gradle<a href="#gradle" class="hash-link" aria-label="Direct link to Gradle" title="Direct link to Gradle">​</a></h3>
+<p>For Gradle, you can first add the <code>com.google.osdetector</code> for automatically detect the classifier based on your platform:</p>
+<div class="language-groovy codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-groovy codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">plugins </span><span class="token punctuation" style="color:#393A34">{</span><span clas [...]
+<p>Then add the dependency to `opendal as following:</p>
+<div class="language-groovy codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-groovy codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">dependencies </span><span class="token punctuation" style="color:#393A34">{</span><span [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="classified-library">Classified library<a href="#classified-library" class="hash-link" aria-label="Direct link to Classified library" title="Direct link to Classified library">​</a></h3>
+<p>Note that the dependency without classifier ships all classes and resources except the "opendal_java" shared library. And those with classifier bundle only the shared library.</p>
+<p>For downstream usage, it's recommended:</p>
+<ul>
+<li>Depend on the one without classifier to write code;</li>
+<li>Depend on the classified ones with "test" for testing.</li>
+</ul>
+<p>To load the shared library correctly, you can choose one of the following approaches:</p>
+<ul>
+<li>Append the classified JARs to the classpath at the runtime;</li>
+<li>Depend on the classified JARs and build a fat JAR (You may need to depend on all the provided classified JARs for running on multiple platforms);</li>
+<li>Build your own "opendal_java" shared library and specify "-Djava.library.path" to the folder containing that shared library.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h2>
+<p>This project provides OpenDAL Java bindings with artifact name <code>opendal</code>. It depends on JDK 8 or later.</p>
+<p>You can use Maven to build both Rust dynamic lib and JAR files with one command now:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">./mvnw clean package -DskipTests=true</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="run-tests">Run tests<a href="#run-tests" class="hash-link" aria-label="Direct link to Run tests" title="Direct link to Run tests">​</a></h2>
+<p>Currently, all tests are written in Java.</p>
+<p>You can run the base tests with the following command:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">./mvnw clean verify</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="code-style">Code style<a href="#code-style" class="hash-link" aria-label="Direct link to Code style" title="Direct link to Code style">​</a></h2>
+<p>This project uses <a href="https://github.com/diffplug/spotless">spotless</a> for code formatting so that all developers share a consistent code style without bikeshedding on it.</p>
+<p>You can apply the code style with the following command::</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">./mvnw spotless:apply</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="run-behavior-tests">Run behavior tests<a href="#run-behavior-tests" class="hash-link" aria-label="Direct link to Run behavior tests" title="Direct link to Run behavior tests">​</a></h2>
+<p>Services behavior tests read necessary configs from env vars or the <code>.env</code> file.</p>
+<p>You can copy <a href="/.env.example">.env.example</a> to <code>${project.rootdir}/.env</code> and change the values on need, or directly set env vars with <code>export KEY=VALUE</code>.</p>
+<p>Take <code>fs</code> for example, we need to enable bench on <code>fs</code> on <code>/tmp/</code>:</p>
+<div class="language-properties codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-properties codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">OPENDAL_TEST=fs</span><br></span><span class="token-line" style="color:#393A34" [...]
+<p>You can run service behavior tests of enabled with the following command:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">./mvnw test -Dtest="behavior.*Test"</span><br></span></code></pre></div></div>
+<p>Remember to enable the necessary features via <code>-Dcargo-build.features=services-xxx</code> when running specific service test:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">export OPENDAL_TEST=redis</span><br></span><span class="token-line" style="color:#393A34" [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="used-by">Used by<a href="#used-by" class="hash-link" aria-label="Direct link to Used by" title="Direct link to Used by">​</a></h2>
+<p>Check out the <a href="https://github.com/apache/opendal/blob/main/bindings/java/users.md">users</a> list for more details on who is using OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/java.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/lua/index.html b/bindings/lua/index.html
new file mode 100644
index 000000000..c5bab9223
--- /dev/null
+++ b/bindings/lua/index.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/lua" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Lua 🚧 | 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/bindings/lua/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/lua/"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<div class="language-lua codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-lua codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">local opendal = require("opendal")</span><br></span><span class="token-line" style="color:#39 [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="lua-version">Lua version<a href="#lua-version" class="hash-link" aria-label="Direct link to Lua version" title="Direct link to Lua version">​</a></h2>
+<p>You have to enable one of the features: lua54, lua53, lua52, lua51, luajit(52) or luau in <code>Cargo.toml</code>, according to the chosen Lua version. Default Lua version is 5.2.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="build-from-source">Build from source<a href="#build-from-source" class="hash-link" aria-label="Direct link to Build from source" title="Direct link to Build from source">​</a></h2>
+<ol>
+<li>Build OpenDAL Lua Interface</li>
+</ol>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">$ cd bindings/lua</span><br></span><span class="token-line" style="color:#393A34"><span cla [...]
+<ol start="2">
+<li>Install opendal Lua library</li>
+</ol>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># copy to lua share library directory</span><br></span><span class="token-line" style="colo [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="install-from-luarocks">Install from LuaRocks<a href="#install-from-luarocks" class="hash-link" aria-label="Direct link to Install from LuaRocks" title="Direct link to Install from LuaRocks">​</a></h2>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">$ luarocks make</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">$ lua5.2 example/fs.lua</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="test">Test<a href="#test" class="hash-link" aria-label="Direct link to Test" title="Direct link to Test">​</a></h2>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">$ busted -o gtest test/opendal_test.lua</span><br></span><span class="token-line" style="co [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/lua.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class= [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/nodejs/index.html b/bindings/nodejs/index.html
new file mode 100644
index 000000000..acc4553bc
--- /dev/null
+++ b/bindings/nodejs/index.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/nodejs" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Node.js | 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/bindings/nodejs/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tr [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://www.npmjs.com/package/opendal"><img decoding="async" loading="lazy" src="/img/external/6fc9234a805e6983d9cc27a62c8568aa.svg" alt="" class="img_AUsV"></a>
+<a href="https://www.npmjs.com/package/opendal"><img decoding="async" loading="lazy" src="/img/external/6a13f224a9ca353f3d7201919a549c91.svg" alt="npm" class="img_AUsV"></a>
+<a href="https://opendal.apache.org/docs/nodejs/"><img decoding="async" loading="lazy" src="/img/external/0331140e6c28f97a21906ae8f1b0117b.svg" alt="Website" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="useful-links">Useful Links<a href="#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links">​</a></h2>
+<ul>
+<li><a href="https://opendal.apache.org/docs/nodejs/">Documentation</a></li>
+<li><a href="https://github.com/apache/opendal/blob/main/bindings/nodejs/upgrade.md">Upgrade Guide</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">npm install opendal</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="docs">Docs<a href="#docs" class="hash-link" aria-label="Direct link to Docs" title="Direct link to Docs">​</a></h2>
+<p>To build the docs locally, please run the following commands:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># Only need to run once unless you want to update the docs theme</span><br></span><span c [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="tests">Tests<a href="#tests" class="hash-link" aria-label="Direct link to Tests" title="Direct link to Tests">​</a></h2>
+<p>Services behavior tests read necessary configs from env vars or the <code>.env</code> file.</p>
+<p>You can copy <a href="/.env.example">.env.example</a> to <code>$(pwd)/.env</code> and change the values on need, or directly set env vars with <code>export KEY=VALUE</code>.</p>
+<p>Take <code>fs</code> for example, we need to enable bench on <code>fs</code> on <code>/tmp</code>:</p>
+<div class="language-properties codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-properties codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">OPENDAL_TEST=fs</span><br></span><span class="token-line" style="color:#393A34" [...]
+<p>You can run service behavior tests of enabled with the following command:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">pnpm build &amp;&amp; pnpm test</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
+<div class="language-javascript codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-javascript codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span>< [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="usage-with-nextjs">Usage with Next.js<a href="#usage-with-nextjs" class="hash-link" aria-label="Direct link to Usage with Next.js" title="Direct link to Usage with Next.js">​</a></h2>
+<p>Config automatically be bundled by <a href="https://nextjs.org/docs/app/api-reference/config/next-config-js/serverExternalPackages">Next.js</a>.</p>
+<div class="language-javascript codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-javascript codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token doc-comment comment" style="color:#999988;font-style:italic">/** </span><span class="t [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="contributing">Contributing<a href="#contributing" class="hash-link" aria-label="Direct link to Contributing" title="Direct link to Contributing">​</a></h2>
+<ul>
+<li>Start with <a href="CONTRIBUTING.md">Contributing Guide</a>.</li>
+<li>Submit <a href="https://github.com/apache/opendal/issues/new">Issues</a> for bug report or feature requests.</li>
+<li>Asking questions in the <a href="https://github.com/apache/opendal/discussions/new?category=q-a">Discussions</a>.
+<ul>
+<li>Talk to community at <a href="https://opendal.apache.org/discord">Discord</a>.</li>
+</ul>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/nodejs.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" cla [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/ocaml/index.html b/bindings/ocaml/index.html
new file mode 100644
index 000000000..92ec87caf
--- /dev/null
+++ b/bindings/ocaml/index.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/ocaml" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">OCaml 🚧 | 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/bindings/ocaml/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/ocaml"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2>
+<ul>
+<li>OCaml version &gt; 4.03 and &lt; 5.0.0</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="contributing">Contributing<a href="#contributing" class="hash-link" aria-label="Direct link to Contributing" title="Direct link to Contributing">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="setup">Setup<a href="#setup" class="hash-link" aria-label="Direct link to Setup" title="Direct link to Setup">​</a></h3>
+<p>We recommend using <code>OPAM the OCaml Package Manager</code> to install and manage the OCaml environment.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="install-opam">Install OPAM<a href="#install-opam" class="hash-link" aria-label="Direct link to Install OPAM" title="Direct link to Install OPAM">​</a></h4>
+<p>The quickest way to get the latest opam up and working is to run this script:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">bash -c "sh &lt;(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/insta [...]
+<p>Similarly, you can also use your distribution's package manager to install</p>
+<h5 class="anchor anchorWithStickyNavbar_debX" id="arch">Arch<a href="#arch" class="hash-link" aria-label="Direct link to Arch" title="Direct link to Arch">​</a></h5>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">pacman -S opam</span><br></span></code></pre></div></div>
+<h5 class="anchor anchorWithStickyNavbar_debX" id="debian--ubuntu">Debian | Ubuntu<a href="#debian--ubuntu" class="hash-link" aria-label="Direct link to Debian | Ubuntu" title="Direct link to Debian | Ubuntu">​</a></h5>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">apt-get install opam</span><br></span></code></pre></div></div>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="macos">macOS<a href="#macos" class="hash-link" aria-label="Direct link to macOS" title="Direct link to macOS">​</a></h4>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">brew install opam</span><br></span></code></pre></div></div>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="init-opam">Init OPAM<a href="#init-opam" class="hash-link" aria-label="Direct link to Init OPAM" title="Direct link to Init OPAM">​</a></h4>
+<p><em>Do not put sudo in front of any opam commands. That would break your OCaml installation.</em></p>
+<p>After Installing OPAM, we need to initialize it</p>
+<p>For the general case, we can execute</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">opam init --bare -a -y</span><br></span></code></pre></div></div>
+<p>If you are using WSL1 on windows, run:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">opam init --bare -a -y --disable-sandboxing</span><br></span></code></pre></div></div>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="create-opam-switch">Create OPAM Switch<a href="#create-opam-switch" class="hash-link" aria-label="Direct link to Create OPAM Switch" title="Direct link to Create OPAM Switch">​</a></h4>
+<p>Using opam, we can have multiple versions of ocaml at the same time; this is called switch.</p>
+<p>Due to the upstream <code>ocaml-rs</code>, we currently do not support OCaml5, and recommend using the latest version of OCaml4
+We can create use this command:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">opam switch create opendal-ocaml4.14 ocaml-base-compiler.4.14.0</span><br></span><span clas [...]
+<h4 class="anchor anchorWithStickyNavbar_debX" id="install-opam-package">Install OPAM Package<a href="#install-opam-package" class="hash-link" aria-label="Direct link to Install OPAM Package" title="Direct link to Install OPAM Package">​</a></h4>
+<p>OpenDAL does not depend on opam package except <code>ounit2</code> for testing.
+However, to facilitate development in an IDE such as vscode, it is usually necessary to install the following content</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">opam install -y utop odoc ounit2 ocaml-lsp-server ocamlformat ocamlformat-rpc</span><br></s [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h3>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd bindings/ocaml</span><br></span><span class="token-line" style="color:#393A34"><span cla [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="test">Test<a href="#test" class="hash-link" aria-label="Direct link to Test" title="Direct link to Test">​</a></h3>
+<p>To execute unit tests, we can simply use the following command:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd bindings/ocaml</span><br></span><span class="token-line" style="color:#393A34"><span cla [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/ocaml.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" clas [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/php/index.html b/bindings/php/index.html
new file mode 100644
index 000000000..51c825640
--- /dev/null
+++ b/bindings/php/index.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/php" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">PHP 🚧 | 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/bindings/php/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/php/"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<div class="language-php codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-php codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">use OpenDAL\Operator;</span><br></span><span class="token-line" style="color:#393A34"><span c [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2>
+<ul>
+<li>PHP 8.1+</li>
+<li>Composer</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="install-extension">Install Extension<a href="#install-extension" class="hash-link" aria-label="Direct link to Install Extension" title="Direct link to Install Extension">​</a></h2>
+<p>We use <a href="https://github.com/davidcole1340/ext-php-rs">ext-php-rs</a> to build PHP extensions natively in Rust, it's different from the traditional PHP extension development and cannot be installed using <code>pecl</code> or <code>phpize</code>. Before installing the extension, it is necessary to install Rust and Cargo. For instructions on how to install them, please refer to <a href="https://www.rust-lang.org/tools/install">Rust's website</a>.</p>
+<ol>
+<li>Clone the repository</li>
+</ol>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">git clone git@github.com:apache/opendal.git</span><br></span></code></pre></div></div>
+<ol start="2">
+<li>Build the opendal-php extension</li>
+</ol>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd opendal/bindings/php</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<blockquote>
+<p>don't forget to add <code>--release</code> flag for production use.</p>
+</blockquote>
+<ol start="3">
+<li>Enable extension for PHP Manually</li>
+</ol>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd opendal</span><br></span><span class="token-line" style="color:#393A34"><span class="tok [...]
+<ol start="4">
+<li>Enable extension for PHP using cargo-php</li>
+</ol>
+<p>You can also use cargo-php directly to install the extension, see <a href="https://davidcole1340.github.io/ext-php-rs/getting-started/cargo-php.html">cargo-php</a> for more details.</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cargo install cargo-php</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<p>This command will automatically build the extension and copy it to the extension directory of the current PHP version.</p>
+<ol start="5">
+<li>Test</li>
+</ol>
+<p>use <code>php -m</code> to check if the extension is installed successfully.</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">php -m | grep opendal-php</span><br></span></code></pre></div></div>
+<p>Composer test:</p>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd opendal/bindings/php</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/php.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class= [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/python/index.html b/bindings/python/index.html
new file mode 100644
index 000000000..6ff47be2b
--- /dev/null
+++ b/bindings/python/index.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/python" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Python | 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/bindings/python/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://pypi.org/project/opendal/"><img decoding="async" loading="lazy" src="/img/external/6fc9234a805e6983d9cc27a62c8568aa.svg" alt="img" class="img_AUsV"></a>
+<a href="https://pypi.org/project/opendal/"><img decoding="async" loading="lazy" src="/img/external/121627affd80c128b185cc7476046df6.svg" alt="PyPI" class="img_AUsV"></a>
+<a href="https://opendal.apache.org/docs/python/"><img decoding="async" loading="lazy" src="/img/external/0331140e6c28f97a21906ae8f1b0117b.svg" alt="Website" class="img_AUsV"></a></p>
+<p>This package intends to build a native python binding for Apache OpenDAL.</p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="useful-links">Useful Links<a href="#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links">​</a></h2>
+<ul>
+<li><a href="https://opendal.apache.org/docs/python/">Documentation</a></li>
+<li><a href="https://github.com/apache/opendal/blob/main/bindings/python/docs/examples">Examples</a></li>
+<li><a href="https://github.com/apache/opendal/blob/main/bindings/python/upgrade.md">Upgrade Guide</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">pip install opendal</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2>
+<p>fs service example:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> opendal</span><br></spa [...]
+<p>Or using the async API:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> asyncio</span><br></spa [...]
+<p>s3 service example:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> opendal</span><br></spa [...]
+<p>Or using the async API:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> asyncio</span><br></spa [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="development">Development<a href="#development" class="hash-link" aria-label="Direct link to Development" title="Direct link to Development">​</a></h2>
+<p>Setup virtualenv:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">uv venv --python 3.11</span><br></span></code></pre></div></div>
+<p>Install all the dependencies:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">uv sync --all-groups --all-extras</span><br></span></code></pre></div></div>
+<p>Run some tests:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># To run `test_write.py` and use `fs` operator</span><br></span><span class="token-line"  [...]
+<p>Build API docs:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">uv run mkdocs build</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="used-by">Used by<a href="#used-by" class="hash-link" aria-label="Direct link to Used by" title="Direct link to Used by">​</a></h2>
+<p>Check out the <a href="https://github.com/apache/opendal/blob/main/bindings/python/users.md">users</a> list for more details on who is using OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/python.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" cla [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/ruby/index.html b/bindings/ruby/index.html
new file mode 100644
index 000000000..64e8b1f84
--- /dev/null
+++ b/bindings/ruby/index.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/ruby" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Ruby 🚧 | 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/bindings/ruby/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/ruby/"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p>This crate intends to build a native ruby binding.</p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="development">Development<a href="#development" class="hash-link" aria-label="Direct link to Development" title="Direct link to Development">​</a></h2>
+<p>Install gems:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">bundle</span><br></span></code></pre></div></div>
+<p>Build bindings:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">bundle exec rake compile</span><br></span></code></pre></div></div>
+<p>Run tests:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">bundle exec rake test</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/ruby.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/swift/index.html b/bindings/swift/index.html
new file mode 100644
index 000000000..bc4aea82f
--- /dev/null
+++ b/bindings/swift/index.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/swift" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Swift 🚧 | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/bindings/swift/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tru [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/swift/"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="using-the-package">Using the Package<a href="#using-the-package" class="hash-link" aria-label="Direct link to Using the Package" title="Direct link to Using the Package">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="build-c-dependencies">Build C Dependencies<a href="#build-c-dependencies" class="hash-link" aria-label="Direct link to Build C Dependencies" title="Direct link to Build C Dependencies">​</a></h3>
+<p>The Swift binding depends on the C binding to OpenDAL. Before using this package, you need to build the C library first:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd bindings/swift</span><br></span><span class="token-line" style="color:#393A34"><span cla [...]
+<p>To check whether the package is ready to use, simply run the test:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">make test</span><br></span></code></pre></div></div>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="add-dependency-to-your-project">Add Dependency to Your Project<a href="#add-dependency-to-your-project" class="hash-link" aria-label="Direct link to Add Dependency to Your Project" title="Direct link to Add Dependency to Your Project">​</a></h3>
+<p>The package manifest is not located at the root directory of its repository. To use it, add the path of this package to the <code>Package.swift</code> manifest of your project:</p>
+<div class="language-swift codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-swift codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// swift-tools-version:5.7</span><span class="t [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2>
+<p>The demo below shows how to write a key to the memory storage, and read it back:</p>
+<div class="language-swift codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-swift codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/swift.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" clas [...]
+
+</body></html>
\ No newline at end of file
diff --git a/bindings/zig/index.html b/bindings/zig/index.html
new file mode 100644
index 000000000..24a35106e
--- /dev/null
+++ b/bindings/zig/index.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-bindings/zig" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Zig 🚧 | 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/bindings/zig/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" n [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://opendal.apache.org/bindings/zig"><img decoding="async" loading="lazy" src="/img/external/552ab0d9376d217ab2e8b0ade233afb8.svg" alt="" class="img_AUsV"></a></p>
+<p><img decoding="async" loading="lazy" src="/img/external/9a183ec0ae8ab600b6baceb2c70a2367.jpg" alt="" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="build">Build<a href="#build" class="hash-link" aria-label="Direct link to Build" title="Direct link to Build">​</a></h2>
+<p>To compile OpenDAL Zig binding from source code, you need:</p>
+<ul>
+<li><a href="https://ziglang.org/download">Zig</a> 0.14.0 or higher</li>
+</ul>
+<div class="language-bash codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-bash codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># build libopendal_c (underneath call make -C ../c)</span><br></span><span class="token-lin [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/20-bindings/zig.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class= [...]
+
+</body></html>
\ No newline at end of file
diff --git a/blog/2024/09/09/apache-opendal-meetup-beijing-1st/index.html b/blog/2024/09/09/apache-opendal-meetup-beijing-1st/index.html
new file mode 100644
index 000000000..797bab290
--- /dev/null
+++ b/blog/2024/09/09/apache-opendal-meetup-beijing-1st/index.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL™ Beijing Meetup 1st | 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/2024/09/09/apache-opendal-meetup-beijing-1st/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" 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.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>On behalf of the OpenDAL community, I&#x27;m pleased to announce that the first Apache OpenDAL™ Beijing Meetup will be held on September 14th.</p>
+<p>You are welcome to register for this event at: <a href="https://docs.qq.com/form/page/DYnpJWFFsSWVFeGRj" target="_blank" rel="noopener noreferrer">https://docs.qq.com/form/page/DYnpJWFFsSWVFeGRj</a></p>
+<p>The event will take place at <a href="https://maps.app.goo.gl/4Tr7JCJ5HdCoVGdeA" target="_blank" rel="noopener noreferrer">北京市朝阳区北辰西路 8 号北辰世纪中心A座12层1215房间(国家会议中心西面的写字楼)</a> on the afternoon of September 14th.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="agenda">Agenda<a href="#agenda" class="hash-link" aria-label="Direct link to Agenda" title="Direct link to Agenda">​</a></h2>
+<ul>
+<li>12:00 - 13:00: Lunch / Networking (food provided)</li>
+<li>13:00 - 14:00: Welcome / Introductions</li>
+<li>14:00 - 15:00: Talks</li>
+<li>15:00 - 15:30: Coffee / Email Break</li>
+<li>15:30 - 16:30: Breakouts / Discussions</li>
+<li>16:30 - 17:00: Close / Conclusion</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="welcome">Welcome<a href="#welcome" class="hash-link" aria-label="Direct link to Welcome" title="Direct link to Welcome">​</a></h2>
+<p>Brief introductory remarks, thank to the sponsor, outline of the day, participant introductions (name, github handle, optional affiliation, optional reason you came to the meetup)</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="talks">Talks<a href="#talks" class="hash-link" aria-label="Direct link to Talks" title="Direct link to Talks">​</a></h2>
+<p>Five 10-15 minute talks about opendal.</p>
+<ul>
+<li><a href="https://github.com/tisonkun/" target="_blank" rel="noopener noreferrer">@tisonkun</a> about OpenDAL Community Growth</li>
+<li><a href="https://github.com/WenyXu/" target="_blank" rel="noopener noreferrer">@WenyXu</a> for using OpenDAL in <a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a></li>
+<li><a href="https://github.com/wcy-fdu/" target="_blank" rel="noopener noreferrer">@wcy-fdu</a> for using OpenDAL in <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a></li>
+<li><a href="https://github.com/wcy-fdu/" target="_blank" rel="noopener noreferrer">@drmingdrmer</a> for using OpenDAL in <a href="https://github.com/datafuselabs/openraft" target="_blank" rel="noopener noreferrer">OpenRaft</a></li>
+<li><a href="https://github.com/Xuanwo/" target="_blank" rel="noopener noreferrer">@Xuanwo</a> about OpenDAL Core 1.0</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="breakouts--discussions">Breakouts / Discussions<a href="#breakouts--discussions" class="hash-link" aria-label="Direct link to Breakouts / Discussions" title="Direct link to Breakouts / Discussions">​</a></h2>
+<p>The idea is that we will break into small groups for 3 x 20 minute sessions. I will ring a gong or something similar every 20 minutes and you should find a new group to discuss.</p>
+<p>Potential seed topics (but obviously feel free to discuss anything):</p>
+<ul>
+<li>How do we make it easier for people to build systems on OpenDAL? What are the current barriers to community growth as you see them?</li>
+<li>How do we make it easier for people to contribute back to OpenDAL? What are the current barriers to contribution</li>
+<li>What features would you like to see / not see</li>
+</ul>
+<p>Ideally, in each session, one or more people would volunteer to write up any insights they got from the discussions, and post them to the overall ticket.</p>
+<hr>
+<p>Looking forward to meet you in this meetup!</p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opend [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/2025/03/01/2025-roadmap/index.html b/blog/2025/03/01/2025-roadmap/index.html
new file mode 100644
index 000000000..25170e028
--- /dev/null
+++ b/blog/2025/03/01/2025-roadmap/index.html
@@ -0,0 +1,66 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL 2025 Roadmap: Perfecting Production Adoption | 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/2025/03/01/2025-roadmap/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-r [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>I hope this post serves as a guide for our development, encourages more people to contribute, and ultimately helps achieve the vision of OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-opendal">What&#x27;s OpenDAL?<a href="#whats-opendal" class="hash-link" aria-label="Direct link to What&#x27;s OpenDAL?" title="Direct link to What&#x27;s OpenDAL?">​</a></h2>
+<p>Apache OpenDAL (<code>/ˈoʊ.pən.dæl/</code>, pronounced &quot;OH-puhn-dal&quot;) is an Open Data Access Layer that enables seamless interaction with diverse storage services. Our VISION is <a href="https://opendal.apache.org/vision" target="_blank" rel="noopener noreferrer"><strong>One Layer, All Storage</strong></a>, and our core principles are Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture.</p>
+<p>We are building:</p>
+<ul>
+<li><a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">A core library built in Rust</a> that supports all services at zero cost and offers unified retry, concurrency, logging, tracing, metrics, timeout and more layers.</li>
+<li>Language bindings for <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">Python</a>, <a href="https://central.sonatype.com/artifact/org.apache.opendal/opendal" target="_blank" rel="noopener noreferrer">Java</a>, <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">Node.js</a>, C/C++, and more.</li>
+<li>Integrations with various frameworks, including <a href="https://crates.io/crates/parquet-opendal" target="_blank" rel="noopener noreferrer">Parquet</a>, <a href="https://crates.io/crates/fuse3_opendal" target="_blank" rel="noopener noreferrer">FUSE</a>, <a href="https://github.com/messense/dav-server-rs" target="_blank" rel="noopener noreferrer">DAV server</a>, and others.</li>
+<li>Binaries for different use cases, such as <a href="https://crates.io/crates/oli" target="_blank" rel="noopener noreferrer">CLI</a> and <a href="https://crates.io/crates/ofs" target="_blank" rel="noopener noreferrer">FUSE</a>.</li>
+</ul>
+<p>In short, through OpenDAL, users can access ALL storage services within ONE layer.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="wheres-opendal">Where&#x27;s OpenDAL?<a href="#wheres-opendal" class="hash-link" aria-label="Direct link to Where&#x27;s OpenDAL?" title="Direct link to Where&#x27;s OpenDAL?">​</a></h2>
+<p>OpenDAL&#x27;s rust core has already released 143 versions, has <a href="https://crates.io/crates/opendal/reverse_dependencies" target="_blank" rel="noopener noreferrer">67 reverse dependencies</a> listed on <a href="http://crates.io/" target="_blank" rel="noopener noreferrer">crates.io</a>, and is used by <a href="https://github.com/apache/opendal/network/dependents" target="_blank" rel="noopener noreferrer">612 projects</a> as recorded on GitHub.</p>
+<p>OpenDAL&#x27;s production users include databases such as <a href="https://github.com/databendlabs/databend" target="_blank" rel="noopener noreferrer">Databend</a>, <a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a>, and <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a>, as well as tools like <a href="https://loco.rs/" target="_blank" rel="noopener noreferrer">Loco< [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/opendal-rust-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png" width="1928" height="1300" class="img_AUsV"></p>
+<p>Apart from OpenDAL&#x27;s Rust core, its various language bindings have also seen significant growth over the past year. Take python binding as an example. <a href="https://github.com/langgenius/dify/" target="_blank" rel="noopener noreferrer">Dify</a>, an LLM app development platform, is using OpenDAL to access different storage services.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/opendal-python-downloads-c5d552b37aa69309d8b3c032b686dc98.png" width="2502" height="796" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-next-for-opendal">What&#x27;s next for OpenDAL?<a href="#whats-next-for-opendal" class="hash-link" aria-label="Direct link to What&#x27;s next for OpenDAL?" title="Direct link to What&#x27;s next for OpenDAL?">​</a></h2>
+<p>The following is the famous technology adoption lifecycle curve. If I were to indicate the position of OpenDAL, I would say it is at the end of the Innovators stage and moving toward the Early Adopters stage.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/adoption-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png" width="1200" height="720" class="img_AUsV">
+(picture from TechTarget <a href="https://www.techtarget.com/searchcio/definition/technology-adoption-lifecycle" target="_blank" rel="noopener noreferrer">technology adoption lifecycle</a>)</p>
+<p>Innovators are adopting OpenDAL. Projects like Databend, RisingWave, GreptimeDB, and sccache have been using OpenDAL in production for years. However, early adopters are still hesitant to use OpenDAL—and they have valid reasons.</p>
+<p>For examples:</p>
+<ul>
+<li>OpenDAL hasn&#x27;t reached version 1.0 yet and still introduces breaking changes from time to time, sometimes even requiring code modifications for an OpenDAL upgrade. This also creates a burden for libraries that depend on OpenDAL, as every breaking change affects them as well.</li>
+<li>OpenDAL lacks comprehensive documentation, particularly for its bindings in Python and Java. Users need to invest significant effort and love to integrate OpenDAL bindings into their projects.</li>
+<li>OpenDAL lacks some important features, such as checksum support, caching, metrics of underlying http requests and initialization from a URI.</li>
+</ul>
+<p>I believe we should perfect production adoption in 2025 to get OpenDAL ready for early adopters. Only in this way can we implement our vision: <strong>One Layer, All Storage.</strong></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-to-do-in-2025">What to do in 2025?<a href="#what-to-do-in-2025" class="hash-link" aria-label="Direct link to What to do in 2025?" title="Direct link to What to do in 2025?">​</a></h2>
+<p>Our plans for 2025 include the following:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="features-needed-in-production">Features Needed in Production<a href="#features-needed-in-production" class="hash-link" aria-label="Direct link to Features Needed in Production" title="Direct link to Features Needed in Production">​</a></h3>
+<p>In 2025, we plan to implement the following features that are importmant for production adoption:</p>
+<ul>
+<li><a href="https://github.com/apache/opendal/issues/5480" target="_blank" rel="noopener noreferrer">Context</a>: Introduce context in OpenDAL so that services and layers can share the same context. This enables users to gain deeper insights into OpenDAL&#x27;s internal operations by incorporating metrics, logging, and tracing into the underlying HTTP client we use.</li>
+<li><a href="https://github.com/apache/opendal/issues/2611" target="_blank" rel="noopener noreferrer">Versioning</a>: Introduce full file versioning support in OpenDAL, enabling users to read, write, delete, list, and restore versioned files. This functionality will allow users to recover mistakenly deleted files and facilitate disaster recovery.</li>
+<li><a href="https://github.com/apache/opendal/issues/5549" target="_blank" rel="noopener noreferrer">Checksum</a>: Introduce end-to-end checksum support in OpenDAL, enabling users to perform checksums during reading and writing without worrying about bit flips in memory or over the network.</li>
+<li><a href="https://github.com/apache/opendal/issues/5678" target="_blank" rel="noopener noreferrer">Caching</a>: Provide high-quality built-in cache support in OpenDAL while ensuring users have the flexibility to implement their own caching logic.</li>
+<li><a href="https://github.com/apache/opendal/issues/3022" target="_blank" rel="noopener noreferrer">Initialization From URI</a>: Allow users to initialize OpenDAL from a URI string, making it easier to configure and use OpenDAL in various environments.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="improvements-needed-for-production">Improvements Needed for Production<a href="#improvements-needed-for-production" class="hash-link" aria-label="Direct link to Improvements Needed for Production" title="Direct link to Improvements Needed for Production">​</a></h3>
+<p>In 2025, we plan to improve the following aspects of OpenDAL to ensure users can confidently use it in production.</p>
+<ul>
+<li>Documentation: Improve the documentation for OpenDAL, particularly for bindings like Python, Node.js, and Java. The first step is to generate well-structured documentation for the configuration values of each service.</li>
+<li>Communitation: Bring Back Our Community Meetings. OpenDAL used to hold regular tri-weekly meetings, but we have been unable to maintain them in the last year. We now plan to revive these meetings and encourage more face-to-face discussions in the coming years.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>2025 marks the third year of the OpenDAL community. A huge thanks to all OpenDAL contributors and users for helping us reach this milestone. There&#x27;s still a long way to go to achieve our vision, and we invite you all to join us on this incredible journey!</p>
+<p><a href="https://github.com/apache/opendal/discussions/5679" target="_blank" rel="noopener noreferrer">Discuss about this post here</a></p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div></div><div class="row margin-top--s [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/apache-opendal-graduated/index.html b/blog/apache-opendal-graduated/index.html
new file mode 100644
index 000000000..46a2f6e5d
--- /dev/null
+++ b/blog/apache-opendal-graduated/index.html
@@ -0,0 +1,100 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL™ is now Graduated | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/apache-opendal-graduated/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_ [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-apache-opendal">What&#x27;s Apache OpenDAL?<a href="#whats-apache-opendal" class="hash-link" aria-label="Direct link to What&#x27;s Apache OpenDAL?" title="Direct link to What&#x27;s Apache OpenDAL?">​</a></h2>
+<p><strong>Apache OpenDAL</strong> is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is <strong>access data freely</strong>.</p>
+<p>OpenDAL could be used as a <strong>better</strong> SDK for your storage services: A SDK with native integration of <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.RetryLayer.html" target="_blank" rel="noopener noreferrer">retry</a>, <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.LoggingLayer.html" target="_blank" rel="noopener noreferrer">logging</a>, <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.MetricsLayer.html" target= [...]
+<p>OpenDAL could be used as a <strong>super</strong> connector for your storage services: A connector that supports all kinds of storage services from Object Storage (s3, gcs, azblob), File Storage (fs, azdls, hdfs), Consumer Cloud Storage (gdrive, onedrive), Key-Value Storage (rocksdb, sled) to Cache Storage (memcached, moka).</p>
+<p>OpenDAL could be used as an <strong>elegant</strong> client for your storage services: A client with well designed API and  many language bindings: <a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">Rust</a>, C, Cpp, Dotnet, Go, Haskell, <a href="https://mvnrepository.com/artifact/org.apache.opendal/opendal-java" target="_blank" rel="noopener noreferrer">Java</a>, Lua, <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noref [...]
+<p>Need to access data? Give OpenDAL a try!</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token ke [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-the-asf">What&#x27;s the ASF?<a href="#whats-the-asf" class="hash-link" aria-label="Direct link to What&#x27;s the ASF?" title="Direct link to What&#x27;s the ASF?">​</a></h2>
+<p>The Apache Software Foundation (ASF) is a nonprofit corporation to support a number of open-source software projects. The Apache Software Foundation exists to provide software for the public good. We believe in the power of community over code, known as The Apache Way. Thousands of people around the world contribute to ASF open source projects every day.</p>
+<p>The OpenDAL Community believes <a href="https://www.apache.org/theapacheway/" target="_blank" rel="noopener noreferrer">the apache way</a> that:</p>
+<ul>
+<li><em>Earned Authority</em>: all individuals are given the opportunity to participate, but their influence is based on publicly earned merit – what they contribute to the community.</li>
+<li><em>Community of Peers</em>: individuals participate at the ASF, not organizations.</li>
+<li><em>Open Communications</em>: as a virtual organization, the ASF requires all communications related to code and decision-making to be publicly accessible to ensure asynchronous collaboration, as necessitated by a globally-distributed community.</li>
+<li><em>Consensus Decision Making</em>: Apache Projects are overseen by a self-selected team of active volunteers who are contributing to their respective projects.</li>
+<li><em>Responsible Oversight</em>: The ASF governance model is based on trust and delegated oversight.</li>
+</ul>
+<p>The original creators <a href="https://github.com/datafuselabs/databend/" target="_blank" rel="noopener noreferrer">Databend</a> chosen to contribute OpenDAL to the ASF, embracing the Apache way through <a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator" target="_blank" rel="noopener noreferrer">joining the incubator program</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-graduation">What&#x27;s graduation?<a href="#whats-graduation" class="hash-link" aria-label="Direct link to What&#x27;s graduation?" title="Direct link to What&#x27;s graduation?">​</a></h2>
+<p>In the <a href="https://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Apache Incubator</a>, the OpenDAL community is learning the Apache Way through daily development activities, growing its community and producing Apache releases.</p>
+<p>During the incubation, we:</p>
+<ul>
+<li>Consist of 19 committers, including mentors, with 12 serving as PPMC members.</li>
+<li>Boast 164 contributors.</li>
+<li>Made 9 releases—averaging at least one per month.</li>
+<li>Had 7 different release managers to date.</li>
+<li>Used by 10 known entities and is a dependency for 263 GitHub projects and 18 crates.io packages.</li>
+<li>Opened 1,200+ issues with 1,100+ successfully resolved.</li>
+<li>Submitted a total of 2,400+ PRs, most of them have been merged or closed.</li>
+</ul>
+<p>The graduation signifies that the OpenDAL Community is recognized as a <a href="https://opendal.apache.org/community/maturity" target="_blank" rel="noopener noreferrer">mature</a> community, which entails:</p>
+<ul>
+<li>CODE: OpenDAL is an <a href="https://github.com/apache/opendal/blob/main/LICENSE" target="_blank" rel="noopener noreferrer">Apache 2.0 licensed</a> open-source project with <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">accessible, buildable code</a> on GitHub, featuring <a href="https://github.com/apache/opendal/commits/main/" target="_blank" rel="noopener noreferrer">a traceable history and authenticated code provenance</a>.</li>
+<li>LICENSE: OpenDAL maintains <a href="https://github.com/apache/opendal/blob/main/DEPENDENCIES.md" target="_blank" rel="noopener noreferrer">open-source compliance</a> for all code and dependencies, requires contributor agreements, and clearly documents copyright ownership.</li>
+<li>Releases: OpenDAL offers standardized, committee-approved <a href="https://downloads.apache.org/opendal/" target="_blank" rel="noopener noreferrer">source code releases</a> with secure signatures, provides convenience binaries, and has <a href="https://opendal.apache.org/community/committers/release" target="_blank" rel="noopener noreferrer">a well-documented, repeatable release process</a>.</li>
+<li>Quality: OpenDAL is committed to code quality transparency, prioritizes security with quick issue responses, ensures backward compatibility with clear documentation, and actively addresses bug reports in a timely manner.</li>
+<li>Community: OpenDAL offers <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">a comprehensive homepage</a>, welcomes diverse contributions, promotes a meritocratic approach for active contributors, operates on community consensus, and ensures timely responses to user queries through various channels.</li>
+<li>Consensus: OpenDAL has a <a href="https://projects.apache.org/committee.html?opendal" target="_blank" rel="noopener noreferrer">public list of key decision-makers</a> and uses a consensus approach for decisions, documented on its <a href="https://lists.apache.org/list.html?dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">main communication channel</a>. It follows standard voting rules and records all important discussions in writing.</li>
+<li>Independence: OpenDAL is independent, with contributors from various companies acting on their own, not as representatives of any organization.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-next">What&#x27;s next?<a href="#whats-next" class="hash-link" aria-label="Direct link to What&#x27;s next?" title="Direct link to What&#x27;s next?">​</a></h2>
+<p>After graduation, OpenDAL Community will continue to focus on the following aspects under the VISION: <strong>access data freely</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-stable-services">More Stable Services<a href="#more-stable-services" class="hash-link" aria-label="Direct link to More Stable Services" title="Direct link to More Stable Services">​</a></h3>
+<p>OpenDAL now supports 59 services, although only some of them are <em>stable</em>.</p>
+<p><em>stable</em> for OpenDAL means that</p>
+<ul>
+<li>Have integration tests covered.</li>
+<li>Have at least one production user.</li>
+</ul>
+<p>The <em>stable</em> service established a feedback loop between the OpenDAL community and its users. Users can submit bug reports or feature requests to the OpenDAL community, which in turn can enhance the service using this feedback while ensuring existing features remain intact.</p>
+<p>After graduation, the OpenDAL community will focus on improving the stability of current services instead of just expanding our offerings.</p>
+<p>We plan to:</p>
+<ul>
+<li>Add features users wanted to services like <a href="https://github.com/apache/opendal/issues/2611" target="_blank" rel="noopener noreferrer">file version</a>, <a href="https://github.com/apache/opendal/issues/3977" target="_blank" rel="noopener noreferrer">concurrently list</a> and <a href="https://github.com/apache/opendal/issues/1251" target="_blank" rel="noopener noreferrer">glob pattern</a>.</li>
+<li>Add integration tests for newly added services.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-useful-documents">More Useful Documents<a href="#more-useful-documents" class="hash-link" aria-label="Direct link to More Useful Documents" title="Direct link to More Useful Documents">​</a></h3>
+<p>OpenDAL have good docs for its rust core, but not for other language bindings.</p>
+<p>The lack of comprehensive documentation makes OpenDAL challenging for users to operate in Java or Python. Without user feedback, the community is unable to enhance this documentation, leading to a detrimental cycle that must be broken.</p>
+<p>After graduation, the OpenDAL community will improve the documentation of other language bindings.</p>
+<p>We plan to:</p>
+<ul>
+<li>Introduce code generation to automatically create documentation for the service builder due to its numerous configurations.</li>
+<li>Add more API Docs and examples for other language bindings.</li>
+</ul>
+<p>OpenDAL have good docs for its public API, but not for its internal design.</p>
+<p>OpenDAL is proud of its elegant design, but it is not well documented. This makes it difficult for new contributors to understand the codebase and make contributions.</p>
+<p>After graduation, the OpenDAL community will improve the documentation of its internal design.</p>
+<p>We plan to:</p>
+<ul>
+<li>Optimize the codebase to make it easier to understand.</li>
+<li>Add more blog posts to explain the design of OpenDAL.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-production-users">More Production Users<a href="#more-production-users" class="hash-link" aria-label="Direct link to More Production Users" title="Direct link to More Production Users">​</a></h3>
+<p>OpenDAL requires more production users, as they are vital to the success of our project. Increased user production leads to more valuable feedback, a more engaged contributor base, and a stronger community. We&#x27;ve started the initial loop; let&#x27;s expand it!</p>
+<p>After graduation, the OpenDAL community will focus on attracting more production users.</p>
+<p>We plan to:</p>
+<ul>
+<li>Optimize the feature set for adoption like <a href="https://github.com/apache/opendal/issues/3022" target="_blank" rel="noopener noreferrer">uri initiation</a> and <a href="https://github.com/apache/opendal/issues/3240" target="_blank" rel="noopener noreferrer">config</a>.</li>
+<li>Expand more ways to use OpenDAL via <a href="https://github.com/apache/opendal/tree/main/bin/ofs" target="_blank" rel="noopener noreferrer">fuse</a>, <a href="https://github.com/apache/opendal/tree/main/bin/oli" target="_blank" rel="noopener noreferrer">cli</a>, <a href="https://github.com/apache/opendal/tree/main/bin/oli" target="_blank" rel="noopener noreferrer">S3/WebDAV API</a>, <a href="https://github.com/apache/opendal/tree/main/integrations/object_store" target="_blank" rel="n [...]
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>The OpenDAL Community aims to create a world where users can freely access data across any storage service in any manner they choose. Graduation is just the beginning—let&#x27;s work together to make our VISION a reality!</p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/t [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/apache-opendal-participates-in-gsoc-2024/index.html b/blog/apache-opendal-participates-in-gsoc-2024/index.html
new file mode 100644
index 000000000..27913e998
--- /dev/null
+++ b/blog/apache-opendal-participates-in-gsoc-2024/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL™ participates in Google Summer of Code 2024 | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/apache-opendal-participates-in-gsoc-2024/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content=" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>We&#x27;re writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code (GSoC) 2024</a>. If you&#x27;re not eligible or interested in participating in GSoC, then most of this post likely isn&#x27;t relevant to you; if you are, this should contain some useful information and links.</p>
+<p>Google Summer of Code (GSoC) is an annual global program organized by Google that aims to bring new contributors to the world of open-source. The program pairs organizations (such as the OpenDAL Project) with contributors (usually students), with the goal of helping the participants make meaningful open-source contributions under the guidance of experienced mentors.</p>
+<p>Google is sponsoring the <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">2024 Summer of Code</a> and <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">The Apache Software Foundation</a> (ASF) registered as a mentoring organization. The GSoC applicants now have several weeks to send project proposals to organizations that appeal to them. If their project proposal is accepted, they will embark on a 12-week journey during [...]
+<p>We have prepared <a href="https://github.com/apache/opendal/issues/4131" target="_blank" rel="noopener noreferrer">a list of project ideas</a> that can serve as inspiration for potential GSoC contributors that would like to send a project proposal to the OpenDAL project. However, applicants can also come up with their own project ideas. You can discuss project ideas or try to find mentors on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist [...]
+<p>You can start discussing the project ideas with OpenDAL Project maintainers immediately. The project proposal application period starts on March 18, 2024, and ends on April 2, 2024 at 18:00 UTC. Take note of that deadline, as there will be no extensions!</p>
+<p>If you are interested in contributing to the OpenDAL Project, we encourage you to check out our project idea list and send us a GSoC project proposal! Of course, you are also free to discuss these projects and/or try to move them forward even if you do not intend to (or cannot) participate in GSoC. We welcome all contributors to OpenDAL, as there is always enough work to do.</p>
+<p>We are excited about this event. Hoping you all feel the same way!</p>
+<blockquote>
+<p>This announcement is inspired a lot by the <a href="https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html" target="_blank" rel="noopener noreferrer">Rust participates in Google Summer of Code 2024</a>.</p>
+</blockquote></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/blog/2024-02-28- [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/apache-opendal-participates-in-ospp-2024/index.html b/blog/apache-opendal-participates-in-ospp-2024/index.html
new file mode 100644
index 000000000..67847d1b8
--- /dev/null
+++ b/blog/apache-opendal-participates-in-ospp-2024/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL™ participates in Open Source Promotion Plan 2024 | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/apache-opendal-participates-in-ospp-2024/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" cont [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>We&#x27;re writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summer-ospp.ac.cn/" target="_blank" rel="noopener noreferrer">Open Source Promotion Plan (OSPP) 2024</a>. If you&#x27;re not eligible or interested in participating in OSPP, then most of this post likely isn&#x27;t relevant to you; if you are, this should contain some useful information and links.</p>
+<p>Open Source Promotion Plan is a summer program organized by the Institute of Software Chinese Academy of Sciences and long-term supported by the Open Source Software Supply Chain Promotion Plan. It aims to encourage college students to actively participate in the maintenance and development of open source software, promote the vigorous development of open source software communities, and build the open source software supply chain together.</p>
+<p>The OSPP applicants now have several weeks to send project proposals to organizations that appeal to them. If their project proposal is accepted, they will embark on a 12-week journey during which they will try to complete their proposed project under the guidance of an assigned mentor.</p>
+<p>We have prepared <a href="https://github.com/apache/opendal/issues/4554" target="_blank" rel="noopener noreferrer">a list of project ideas</a> that can serve as inspiration for potential OSPP contributors that would like to send a project proposal to the OpenDAL project. You can try to find mentors on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist</a> or <a href="https://discord.gg/XQy8yGR2dg" target="_blank" rel="noopener noreferrer">Di [...]
+<p>You can start discussing the project ideas with OpenDAL Project maintainers immediately. The project proposal application period starts on April 30, 2024, and ends on June 4, 2024. Take note of that deadline, as there will be no extensions!</p>
+<p>If you are interested in contributing to the OpenDAL Project, we encourage you to check out our project idea list and send us a OSPP project proposal! Of course, you are also free to discuss these projects and/or try to move them forward even if you do not intend to (or cannot) participate in OSPP. We welcome all contributors to OpenDAL, as there is always enough work to do.</p>
+<p>We are excited about this event. Hoping you all feel the same way!</p>
+<blockquote>
+<p>This announcement is inspired a lot by the <a href="https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html" target="_blank" rel="noopener noreferrer">Rust participates in Google Summer of Code 2024</a>.</p>
+</blockquote></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/blog/2024-04-30- [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
new file mode 100644
index 000000000..3e4bbf242
--- /dev/null
+++ b/blog/archive/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Archive | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
new file mode 100644
index 000000000..3e4ee57cc
--- /dev/null
+++ b/blog/atom.xml
@@ -0,0 +1,593 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+    <id>https://opendal.apache.org/blog/</id>
+    <title>Apache OpenDAL™ Blog</title>
+    <updated>2025-03-01T00:00:00.000Z</updated>
+    <generator>https://github.com/jpmonette/feed</generator>
+    <link rel="alternate" href="https://opendal.apache.org/blog/"/>
+    <subtitle>Apache OpenDAL™ Blog</subtitle>
+    <icon>https://opendal.apache.org/img/favicon.ico</icon>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL 2025 Roadmap: Perfecting Production Adoption]]></title>
+        <id>https://opendal.apache.org/blog/2025/03/01/2025-roadmap/</id>
+        <link href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/"/>
+        <updated>2025-03-01T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[Hi everyone, long time no see. Although we have been actively developing OpenDAL and consistently releasing updates, we haven’t provided a clear overview of where OpenDAL is heading. This post aims to address that. Here, we will discuss OpenDAL's current position and the future directions we are moving toward.]]></summary>
+        <content type="html"><![CDATA[<p>Hi everyone, long time no see. Although we have been actively developing OpenDAL and consistently releasing updates, we haven’t provided a clear overview of where OpenDAL is heading. This post aims to address that. Here, we will discuss OpenDAL's current position and the future directions we are moving toward.</p>
+<p>I hope this post serves as a guide for our development, encourages more people to contribute, and ultimately helps achieve the vision of OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-opendal">What's OpenDAL?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#whats-opendal" class="hash-link" aria-label="Direct link to What's OpenDAL?" title="Direct link to What's OpenDAL?">​</a></h2>
+<p>Apache OpenDAL (<code>/ˈoʊ.pən.dæl/</code>, pronounced "OH-puhn-dal") is an Open Data Access Layer that enables seamless interaction with diverse storage services. Our VISION is <a href="https://opendal.apache.org/vision" target="_blank" rel="noopener noreferrer"><strong>One Layer, All Storage</strong></a>, and our core principles are Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture.</p>
+<p>We are building:</p>
+<ul>
+<li><a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">A core library built in Rust</a> that supports all services at zero cost and offers unified retry, concurrency, logging, tracing, metrics, timeout and more layers.</li>
+<li>Language bindings for <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">Python</a>, <a href="https://central.sonatype.com/artifact/org.apache.opendal/opendal" target="_blank" rel="noopener noreferrer">Java</a>, <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">Node.js</a>, C/C++, and more.</li>
+<li>Integrations with various frameworks, including <a href="https://crates.io/crates/parquet-opendal" target="_blank" rel="noopener noreferrer">Parquet</a>, <a href="https://crates.io/crates/fuse3_opendal" target="_blank" rel="noopener noreferrer">FUSE</a>, <a href="https://github.com/messense/dav-server-rs" target="_blank" rel="noopener noreferrer">DAV server</a>, and others.</li>
+<li>Binaries for different use cases, such as <a href="https://crates.io/crates/oli" target="_blank" rel="noopener noreferrer">CLI</a> and <a href="https://crates.io/crates/ofs" target="_blank" rel="noopener noreferrer">FUSE</a>.</li>
+</ul>
+<p>In short, through OpenDAL, users can access ALL storage services within ONE layer.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="wheres-opendal">Where's OpenDAL?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#wheres-opendal" class="hash-link" aria-label="Direct link to Where's OpenDAL?" title="Direct link to Where's OpenDAL?">​</a></h2>
+<p>OpenDAL's rust core has already released 143 versions, has <a href="https://crates.io/crates/opendal/reverse_dependencies" target="_blank" rel="noopener noreferrer">67 reverse dependencies</a> listed on <a href="http://crates.io/" target="_blank" rel="noopener noreferrer">crates.io</a>, and is used by <a href="https://github.com/apache/opendal/network/dependents" target="_blank" rel="noopener noreferrer">612 projects</a> as recorded on GitHub.</p>
+<p>OpenDAL's production users include databases such as <a href="https://github.com/databendlabs/databend" target="_blank" rel="noopener noreferrer">Databend</a>, <a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a>, and <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a>, as well as tools like <a href="https://loco.rs/" target="_blank" rel="noopener noreferrer">Loco</a>,  [...]
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/opendal-rust-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png" width="1928" height="1300" class="img_AUsV"></p>
+<p>Apart from OpenDAL's Rust core, its various language bindings have also seen significant growth over the past year. Take python binding as an example. <a href="https://github.com/langgenius/dify/" target="_blank" rel="noopener noreferrer">Dify</a>, an LLM app development platform, is using OpenDAL to access different storage services.</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/opendal-python-downloads-c5d552b37aa69309d8b3c032b686dc98.png" width="2502" height="796" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-next-for-opendal">What's next for OpenDAL?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#whats-next-for-opendal" class="hash-link" aria-label="Direct link to What's next for OpenDAL?" title="Direct link to What's next for OpenDAL?">​</a></h2>
+<p>The following is the famous technology adoption lifecycle curve. If I were to indicate the position of OpenDAL, I would say it is at the end of the Innovators stage and moving toward the Early Adopters stage.</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/adoption-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png" width="1200" height="720" class="img_AUsV">
+(picture from TechTarget <a href="https://www.techtarget.com/searchcio/definition/technology-adoption-lifecycle" target="_blank" rel="noopener noreferrer">technology adoption lifecycle</a>)</p>
+<p>Innovators are adopting OpenDAL. Projects like Databend, RisingWave, GreptimeDB, and sccache have been using OpenDAL in production for years. However, early adopters are still hesitant to use OpenDAL—and they have valid reasons.</p>
+<p>For examples:</p>
+<ul>
+<li>OpenDAL hasn't reached version 1.0 yet and still introduces breaking changes from time to time, sometimes even requiring code modifications for an OpenDAL upgrade. This also creates a burden for libraries that depend on OpenDAL, as every breaking change affects them as well.</li>
+<li>OpenDAL lacks comprehensive documentation, particularly for its bindings in Python and Java. Users need to invest significant effort and love to integrate OpenDAL bindings into their projects.</li>
+<li>OpenDAL lacks some important features, such as checksum support, caching, metrics of underlying http requests and initialization from a URI.</li>
+</ul>
+<p>I believe we should perfect production adoption in 2025 to get OpenDAL ready for early adopters. Only in this way can we implement our vision: <strong>One Layer, All Storage.</strong></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-to-do-in-2025">What to do in 2025?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#what-to-do-in-2025" class="hash-link" aria-label="Direct link to What to do in 2025?" title="Direct link to What to do in 2025?">​</a></h2>
+<p>Our plans for 2025 include the following:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="features-needed-in-production">Features Needed in Production<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#features-needed-in-production" class="hash-link" aria-label="Direct link to Features Needed in Production" title="Direct link to Features Needed in Production">​</a></h3>
+<p>In 2025, we plan to implement the following features that are importmant for production adoption:</p>
+<ul>
+<li><a href="https://github.com/apache/opendal/issues/5480" target="_blank" rel="noopener noreferrer">Context</a>: Introduce context in OpenDAL so that services and layers can share the same context. This enables users to gain deeper insights into OpenDAL's internal operations by incorporating metrics, logging, and tracing into the underlying HTTP client we use.</li>
+<li><a href="https://github.com/apache/opendal/issues/2611" target="_blank" rel="noopener noreferrer">Versioning</a>: Introduce full file versioning support in OpenDAL, enabling users to read, write, delete, list, and restore versioned files. This functionality will allow users to recover mistakenly deleted files and facilitate disaster recovery.</li>
+<li><a href="https://github.com/apache/opendal/issues/5549" target="_blank" rel="noopener noreferrer">Checksum</a>: Introduce end-to-end checksum support in OpenDAL, enabling users to perform checksums during reading and writing without worrying about bit flips in memory or over the network.</li>
+<li><a href="https://github.com/apache/opendal/issues/5678" target="_blank" rel="noopener noreferrer">Caching</a>: Provide high-quality built-in cache support in OpenDAL while ensuring users have the flexibility to implement their own caching logic.</li>
+<li><a href="https://github.com/apache/opendal/issues/3022" target="_blank" rel="noopener noreferrer">Initialization From URI</a>: Allow users to initialize OpenDAL from a URI string, making it easier to configure and use OpenDAL in various environments.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="improvements-needed-for-production">Improvements Needed for Production<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#improvements-needed-for-production" class="hash-link" aria-label="Direct link to Improvements Needed for Production" title="Direct link to Improvements Needed for Production">​</a></h3>
+<p>In 2025, we plan to improve the following aspects of OpenDAL to ensure users can confidently use it in production.</p>
+<ul>
+<li>Documentation: Improve the documentation for OpenDAL, particularly for bindings like Python, Node.js, and Java. The first step is to generate well-structured documentation for the configuration values of each service.</li>
+<li>Communitation: Bring Back Our Community Meetings. OpenDAL used to hold regular tri-weekly meetings, but we have been unable to maintain them in the last year. We now plan to revive these meetings and encourage more face-to-face discussions in the coming years.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>2025 marks the third year of the OpenDAL community. A huge thanks to all OpenDAL contributors and users for helping us reach this milestone. There's still a long way to go to achieve our vision, and we invite you all to join us on this incredible journey!</p>
+<p><a href="https://github.com/apache/opendal/discussions/5679" target="_blank" rel="noopener noreferrer">Discuss about this post here</a></p>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL™ Beijing Meetup 1st]]></title>
+        <id>https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/</id>
+        <link href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/"/>
+        <updated>2024-09-09T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[Hello, everyone!]]></summary>
+        <content type="html"><![CDATA[<p>Hello, everyone!</p>
+<p>On behalf of the OpenDAL community, I'm pleased to announce that the first Apache OpenDAL™ Beijing Meetup will be held on September 14th.</p>
+<p>You are welcome to register for this event at: <a href="https://docs.qq.com/form/page/DYnpJWFFsSWVFeGRj" target="_blank" rel="noopener noreferrer">https://docs.qq.com/form/page/DYnpJWFFsSWVFeGRj</a></p>
+<p>The event will take place at <a href="https://maps.app.goo.gl/4Tr7JCJ5HdCoVGdeA" target="_blank" rel="noopener noreferrer">北京市朝阳区北辰西路 8 号北辰世纪中心A座12层1215房间(国家会议中心西面的写字楼)</a> on the afternoon of September 14th.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="agenda">Agenda<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#agenda" class="hash-link" aria-label="Direct link to Agenda" title="Direct link to Agenda">​</a></h2>
+<ul>
+<li>12:00 - 13:00: Lunch / Networking (food provided)</li>
+<li>13:00 - 14:00: Welcome / Introductions</li>
+<li>14:00 - 15:00: Talks</li>
+<li>15:00 - 15:30: Coffee / Email Break</li>
+<li>15:30 - 16:30: Breakouts / Discussions</li>
+<li>16:30 - 17:00: Close / Conclusion</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="welcome">Welcome<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#welcome" class="hash-link" aria-label="Direct link to Welcome" title="Direct link to Welcome">​</a></h2>
+<p>Brief introductory remarks, thank to the sponsor, outline of the day, participant introductions (name, github handle, optional affiliation, optional reason you came to the meetup)</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="talks">Talks<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#talks" class="hash-link" aria-label="Direct link to Talks" title="Direct link to Talks">​</a></h2>
+<p>Five 10-15 minute talks about opendal.</p>
+<ul>
+<li><a href="https://github.com/tisonkun/" target="_blank" rel="noopener noreferrer">@tisonkun</a> about OpenDAL Community Growth</li>
+<li><a href="https://github.com/WenyXu/" target="_blank" rel="noopener noreferrer">@WenyXu</a> for using OpenDAL in <a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a></li>
+<li><a href="https://github.com/wcy-fdu/" target="_blank" rel="noopener noreferrer">@wcy-fdu</a> for using OpenDAL in <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a></li>
+<li><a href="https://github.com/wcy-fdu/" target="_blank" rel="noopener noreferrer">@drmingdrmer</a> for using OpenDAL in <a href="https://github.com/datafuselabs/openraft" target="_blank" rel="noopener noreferrer">OpenRaft</a></li>
+<li><a href="https://github.com/Xuanwo/" target="_blank" rel="noopener noreferrer">@Xuanwo</a> about OpenDAL Core 1.0</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="breakouts--discussions">Breakouts / Discussions<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#breakouts--discussions" class="hash-link" aria-label="Direct link to Breakouts / Discussions" title="Direct link to Breakouts / Discussions">​</a></h2>
+<p>The idea is that we will break into small groups for 3 x 20 minute sessions. I will ring a gong or something similar every 20 minutes and you should find a new group to discuss.</p>
+<p>Potential seed topics (but obviously feel free to discuss anything):</p>
+<ul>
+<li>How do we make it easier for people to build systems on OpenDAL? What are the current barriers to community growth as you see them?</li>
+<li>How do we make it easier for people to contribute back to OpenDAL? What are the current barriers to contribution</li>
+<li>What features would you like to see / not see</li>
+</ul>
+<p>Ideally, in each session, one or more people would volunteer to write up any insights they got from the discussions, and post them to the overall ticket.</p>
+<hr>
+<p>Looking forward to meet you in this meetup!</p>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL™ participates in Open Source Promotion Plan 2024]]></title>
+        <id>https://opendal.apache.org/blog/apache-opendal-participates-in-ospp-2024/</id>
+        <link href="https://opendal.apache.org/blog/apache-opendal-participates-in-ospp-2024/"/>
+        <updated>2024-04-30T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[Hello, everyone!]]></summary>
+        <content type="html"><![CDATA[<p>Hello, everyone!</p>
+<p>We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summer-ospp.ac.cn/" target="_blank" rel="noopener noreferrer">Open Source Promotion Plan (OSPP) 2024</a>. If you're not eligible or interested in participating in OSPP, then most of this post likely isn't relevant to you; if you are, this should contain some useful information and links.</p>
+<p>Open Source Promotion Plan is a summer program organized by the Institute of Software Chinese Academy of Sciences and long-term supported by the Open Source Software Supply Chain Promotion Plan. It aims to encourage college students to actively participate in the maintenance and development of open source software, promote the vigorous development of open source software communities, and build the open source software supply chain together.</p>
+<p>The OSPP applicants now have several weeks to send project proposals to organizations that appeal to them. If their project proposal is accepted, they will embark on a 12-week journey during which they will try to complete their proposed project under the guidance of an assigned mentor.</p>
+<p>We have prepared <a href="https://github.com/apache/opendal/issues/4554" target="_blank" rel="noopener noreferrer">a list of project ideas</a> that can serve as inspiration for potential OSPP contributors that would like to send a project proposal to the OpenDAL project. You can try to find mentors on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist</a> or <a href="https://discord.gg/XQy8yGR2dg" target="_blank" rel="noopener noreferrer">Di [...]
+<p>You can start discussing the project ideas with OpenDAL Project maintainers immediately. The project proposal application period starts on April 30, 2024, and ends on June 4, 2024. Take note of that deadline, as there will be no extensions!</p>
+<p>If you are interested in contributing to the OpenDAL Project, we encourage you to check out our project idea list and send us a OSPP project proposal! Of course, you are also free to discuss these projects and/or try to move them forward even if you do not intend to (or cannot) participate in OSPP. We welcome all contributors to OpenDAL, as there is always enough work to do.</p>
+<p>We are excited about this event. Hoping you all feel the same way!</p>
+<blockquote>
+<p>This announcement is inspired a lot by the <a href="https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html" target="_blank" rel="noopener noreferrer">Rust participates in Google Summer of Code 2024</a>.</p>
+</blockquote>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL™ participates in Google Summer of Code 2024]]></title>
+        <id>https://opendal.apache.org/blog/apache-opendal-participates-in-gsoc-2024/</id>
+        <link href="https://opendal.apache.org/blog/apache-opendal-participates-in-gsoc-2024/"/>
+        <updated>2024-02-28T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[Hello, everyone!]]></summary>
+        <content type="html"><![CDATA[<p>Hello, everyone!</p>
+<p>We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code (GSoC) 2024</a>. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful information and links.</p>
+<p>Google Summer of Code (GSoC) is an annual global program organized by Google that aims to bring new contributors to the world of open-source. The program pairs organizations (such as the OpenDAL Project) with contributors (usually students), with the goal of helping the participants make meaningful open-source contributions under the guidance of experienced mentors.</p>
+<p>Google is sponsoring the <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">2024 Summer of Code</a> and <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">The Apache Software Foundation</a> (ASF) registered as a mentoring organization. The GSoC applicants now have several weeks to send project proposals to organizations that appeal to them. If their project proposal is accepted, they will embark on a 12-week journey during [...]
+<p>We have prepared <a href="https://github.com/apache/opendal/issues/4131" target="_blank" rel="noopener noreferrer">a list of project ideas</a> that can serve as inspiration for potential GSoC contributors that would like to send a project proposal to the OpenDAL project. However, applicants can also come up with their own project ideas. You can discuss project ideas or try to find mentors on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist [...]
+<p>You can start discussing the project ideas with OpenDAL Project maintainers immediately. The project proposal application period starts on March 18, 2024, and ends on April 2, 2024 at 18:00 UTC. Take note of that deadline, as there will be no extensions!</p>
+<p>If you are interested in contributing to the OpenDAL Project, we encourage you to check out our project idea list and send us a GSoC project proposal! Of course, you are also free to discuss these projects and/or try to move them forward even if you do not intend to (or cannot) participate in GSoC. We welcome all contributors to OpenDAL, as there is always enough work to do.</p>
+<p>We are excited about this event. Hoping you all feel the same way!</p>
+<blockquote>
+<p>This announcement is inspired a lot by the <a href="https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html" target="_blank" rel="noopener noreferrer">Rust participates in Google Summer of Code 2024</a>.</p>
+</blockquote>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL™ is now Graduated]]></title>
+        <id>https://opendal.apache.org/blog/apache-opendal-graduated/</id>
+        <link href="https://opendal.apache.org/blog/apache-opendal-graduated/"/>
+        <updated>2024-01-22T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[Hello, everyone! I'm happy to announce that Apache OpenDAL™ has graduated from the Apache Incubator to become a Top-Level Project of the Apache Software Foundation.]]></summary>
+        <content type="html"><![CDATA[<p>Hello, everyone! I'm happy to announce that <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">Apache OpenDAL™</a> has graduated from the <a href="https://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Apache Incubator</a> to become a Top-Level Project of <a href="https://apache.org/" target="_blank" rel="noopener noreferrer">the Apache Software Foundation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-apache-opendal">What's Apache OpenDAL?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-apache-opendal" class="hash-link" aria-label="Direct link to What's Apache OpenDAL?" title="Direct link to What's Apache OpenDAL?">​</a></h2>
+<p><strong>Apache OpenDAL</strong> is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is <strong>access data freely</strong>.</p>
+<p>OpenDAL could be used as a <strong>better</strong> SDK for your storage services: A SDK with native integration of <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.RetryLayer.html" target="_blank" rel="noopener noreferrer">retry</a>, <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.LoggingLayer.html" target="_blank" rel="noopener noreferrer">logging</a>, <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.MetricsLayer.html" target= [...]
+<p>OpenDAL could be used as a <strong>super</strong> connector for your storage services: A connector that supports all kinds of storage services from Object Storage (s3, gcs, azblob), File Storage (fs, azdls, hdfs), Consumer Cloud Storage (gdrive, onedrive), Key-Value Storage (rocksdb, sled) to Cache Storage (memcached, moka).</p>
+<p>OpenDAL could be used as an <strong>elegant</strong> client for your storage services: A client with well designed API and  many language bindings: <a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">Rust</a>, C, Cpp, Dotnet, Go, Haskell, <a href="https://mvnrepository.com/artifact/org.apache.opendal/opendal-java" target="_blank" rel="noopener noreferrer">Java</a>, Lua, <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noref [...]
+<p>Need to access data? Give OpenDAL a try!</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token ke [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-the-asf">What's the ASF?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-the-asf" class="hash-link" aria-label="Direct link to What's the ASF?" title="Direct link to What's the ASF?">​</a></h2>
+<p>The Apache Software Foundation (ASF) is a nonprofit corporation to support a number of open-source software projects. The Apache Software Foundation exists to provide software for the public good. We believe in the power of community over code, known as The Apache Way. Thousands of people around the world contribute to ASF open source projects every day.</p>
+<p>The OpenDAL Community believes <a href="https://www.apache.org/theapacheway/" target="_blank" rel="noopener noreferrer">the apache way</a> that:</p>
+<ul>
+<li><em>Earned Authority</em>: all individuals are given the opportunity to participate, but their influence is based on publicly earned merit – what they contribute to the community.</li>
+<li><em>Community of Peers</em>: individuals participate at the ASF, not organizations.</li>
+<li><em>Open Communications</em>: as a virtual organization, the ASF requires all communications related to code and decision-making to be publicly accessible to ensure asynchronous collaboration, as necessitated by a globally-distributed community.</li>
+<li><em>Consensus Decision Making</em>: Apache Projects are overseen by a self-selected team of active volunteers who are contributing to their respective projects.</li>
+<li><em>Responsible Oversight</em>: The ASF governance model is based on trust and delegated oversight.</li>
+</ul>
+<p>The original creators <a href="https://github.com/datafuselabs/databend/" target="_blank" rel="noopener noreferrer">Databend</a> chosen to contribute OpenDAL to the ASF, embracing the Apache way through <a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator" target="_blank" rel="noopener noreferrer">joining the incubator program</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-graduation">What's graduation?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-graduation" class="hash-link" aria-label="Direct link to What's graduation?" title="Direct link to What's graduation?">​</a></h2>
+<p>In the <a href="https://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Apache Incubator</a>, the OpenDAL community is learning the Apache Way through daily development activities, growing its community and producing Apache releases.</p>
+<p>During the incubation, we:</p>
+<ul>
+<li>Consist of 19 committers, including mentors, with 12 serving as PPMC members.</li>
+<li>Boast 164 contributors.</li>
+<li>Made 9 releases—averaging at least one per month.</li>
+<li>Had 7 different release managers to date.</li>
+<li>Used by 10 known entities and is a dependency for 263 GitHub projects and 18 crates.io packages.</li>
+<li>Opened 1,200+ issues with 1,100+ successfully resolved.</li>
+<li>Submitted a total of 2,400+ PRs, most of them have been merged or closed.</li>
+</ul>
+<p>The graduation signifies that the OpenDAL Community is recognized as a <a href="https://opendal.apache.org/community/maturity" target="_blank" rel="noopener noreferrer">mature</a> community, which entails:</p>
+<ul>
+<li>CODE: OpenDAL is an <a href="https://github.com/apache/opendal/blob/main/LICENSE" target="_blank" rel="noopener noreferrer">Apache 2.0 licensed</a> open-source project with <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">accessible, buildable code</a> on GitHub, featuring <a href="https://github.com/apache/opendal/commits/main/" target="_blank" rel="noopener noreferrer">a traceable history and authenticated code provenance</a>.</li>
+<li>LICENSE: OpenDAL maintains <a href="https://github.com/apache/opendal/blob/main/DEPENDENCIES.md" target="_blank" rel="noopener noreferrer">open-source compliance</a> for all code and dependencies, requires contributor agreements, and clearly documents copyright ownership.</li>
+<li>Releases: OpenDAL offers standardized, committee-approved <a href="https://downloads.apache.org/opendal/" target="_blank" rel="noopener noreferrer">source code releases</a> with secure signatures, provides convenience binaries, and has <a href="https://opendal.apache.org/community/committers/release" target="_blank" rel="noopener noreferrer">a well-documented, repeatable release process</a>.</li>
+<li>Quality: OpenDAL is committed to code quality transparency, prioritizes security with quick issue responses, ensures backward compatibility with clear documentation, and actively addresses bug reports in a timely manner.</li>
+<li>Community: OpenDAL offers <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">a comprehensive homepage</a>, welcomes diverse contributions, promotes a meritocratic approach for active contributors, operates on community consensus, and ensures timely responses to user queries through various channels.</li>
+<li>Consensus: OpenDAL has a <a href="https://projects.apache.org/committee.html?opendal" target="_blank" rel="noopener noreferrer">public list of key decision-makers</a> and uses a consensus approach for decisions, documented on its <a href="https://lists.apache.org/list.html?dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">main communication channel</a>. It follows standard voting rules and records all important discussions in writing.</li>
+<li>Independence: OpenDAL is independent, with contributors from various companies acting on their own, not as representatives of any organization.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-next">What's next?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-next" class="hash-link" aria-label="Direct link to What's next?" title="Direct link to What's next?">​</a></h2>
+<p>After graduation, OpenDAL Community will continue to focus on the following aspects under the VISION: <strong>access data freely</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-stable-services">More Stable Services<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#more-stable-services" class="hash-link" aria-label="Direct link to More Stable Services" title="Direct link to More Stable Services">​</a></h3>
+<p>OpenDAL now supports 59 services, although only some of them are <em>stable</em>.</p>
+<p><em>stable</em> for OpenDAL means that</p>
+<ul>
+<li>Have integration tests covered.</li>
+<li>Have at least one production user.</li>
+</ul>
+<p>The <em>stable</em> service established a feedback loop between the OpenDAL community and its users. Users can submit bug reports or feature requests to the OpenDAL community, which in turn can enhance the service using this feedback while ensuring existing features remain intact.</p>
+<p>After graduation, the OpenDAL community will focus on improving the stability of current services instead of just expanding our offerings.</p>
+<p>We plan to:</p>
+<ul>
+<li>Add features users wanted to services like <a href="https://github.com/apache/opendal/issues/2611" target="_blank" rel="noopener noreferrer">file version</a>, <a href="https://github.com/apache/opendal/issues/3977" target="_blank" rel="noopener noreferrer">concurrently list</a> and <a href="https://github.com/apache/opendal/issues/1251" target="_blank" rel="noopener noreferrer">glob pattern</a>.</li>
+<li>Add integration tests for newly added services.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-useful-documents">More Useful Documents<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#more-useful-documents" class="hash-link" aria-label="Direct link to More Useful Documents" title="Direct link to More Useful Documents">​</a></h3>
+<p>OpenDAL have good docs for its rust core, but not for other language bindings.</p>
+<p>The lack of comprehensive documentation makes OpenDAL challenging for users to operate in Java or Python. Without user feedback, the community is unable to enhance this documentation, leading to a detrimental cycle that must be broken.</p>
+<p>After graduation, the OpenDAL community will improve the documentation of other language bindings.</p>
+<p>We plan to:</p>
+<ul>
+<li>Introduce code generation to automatically create documentation for the service builder due to its numerous configurations.</li>
+<li>Add more API Docs and examples for other language bindings.</li>
+</ul>
+<p>OpenDAL have good docs for its public API, but not for its internal design.</p>
+<p>OpenDAL is proud of its elegant design, but it is not well documented. This makes it difficult for new contributors to understand the codebase and make contributions.</p>
+<p>After graduation, the OpenDAL community will improve the documentation of its internal design.</p>
+<p>We plan to:</p>
+<ul>
+<li>Optimize the codebase to make it easier to understand.</li>
+<li>Add more blog posts to explain the design of OpenDAL.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-production-users">More Production Users<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#more-production-users" class="hash-link" aria-label="Direct link to More Production Users" title="Direct link to More Production Users">​</a></h3>
+<p>OpenDAL requires more production users, as they are vital to the success of our project. Increased user production leads to more valuable feedback, a more engaged contributor base, and a stronger community. We've started the initial loop; let's expand it!</p>
+<p>After graduation, the OpenDAL community will focus on attracting more production users.</p>
+<p>We plan to:</p>
+<ul>
+<li>Optimize the feature set for adoption like <a href="https://github.com/apache/opendal/issues/3022" target="_blank" rel="noopener noreferrer">uri initiation</a> and <a href="https://github.com/apache/opendal/issues/3240" target="_blank" rel="noopener noreferrer">config</a>.</li>
+<li>Expand more ways to use OpenDAL via <a href="https://github.com/apache/opendal/tree/main/bin/ofs" target="_blank" rel="noopener noreferrer">fuse</a>, <a href="https://github.com/apache/opendal/tree/main/bin/oli" target="_blank" rel="noopener noreferrer">cli</a>, <a href="https://github.com/apache/opendal/tree/main/bin/oli" target="_blank" rel="noopener noreferrer">S3/WebDAV API</a>, <a href="https://github.com/apache/opendal/tree/main/integrations/object_store" target="_blank" rel="n [...]
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>The OpenDAL Community aims to create a world where users can freely access data across any storage service in any manner they choose. Graduation is just the beginning—let's work together to make our VISION a reality!</p>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[OwO #1: The v0.40 Release]]></title>
+        <id>https://opendal.apache.org/blog/owo-1/</id>
+        <link href="https://opendal.apache.org/blog/owo-1/"/>
+        <updated>2023-09-15T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.]]></summary>
+        <content type="html"><![CDATA[<blockquote>
+<p>OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.</p>
+</blockquote>
+<p>Hello! It's been a while since our last update. We've been hard at work determining the optimal way to implement new features and improvements. We're thrilled to announce that we'll soon be releasing v0.40.</p>
+<p>This post is structured into three main sections:</p>
+<ul>
+<li>Outcome (1st <code>O</code> in <code>OwO</code>): Summarizes the key accomplishments in the v0.40 release.</li>
+<li>Working (the <code>w</code> in <code>OwO</code>): Provides an update on our current work.</li>
+<li>Outlook (2nd <code>O</code> in <code>OwO</code>): Discusses what lies ahead for OpenDAL.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="outcome">Outcome<a href="https://opendal.apache.org/blog/owo-1/#outcome" class="hash-link" aria-label="Direct link to Outcome" title="Direct link to Outcome">​</a></h2>
+<p>OpenDAL now comprises four primary components:</p>
+<ul>
+<li>Core: The core library written in Rust.</li>
+<li>Bindings: Language bindings powered by the OpenDAL Rust core.</li>
+<li>Applications: Applications built using the OpenDAL Rust core.</li>
+<li>Integrations: Collaborations with other projects.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="core">Core<a href="https://opendal.apache.org/blog/owo-1/#core" class="hash-link" aria-label="Direct link to Core" title="Direct link to Core">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="unifying-append-and-write-functions">Unifying Append and Write Functions<a href="https://opendal.apache.org/blog/owo-1/#unifying-append-and-write-functions" class="hash-link" aria-label="Direct link to Unifying Append and Write Functions" title="Direct link to Unifying Append and Write Functions">​</a></h4>
+<p>OpenDAL has supported <code>append</code> operations since <code>v0.36</code>. We've found, however, that this led to significant duplication between append and write. As a result, we've streamlined the two functionalities into a single write function. Our users can now:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token keyw [...]
+<p>This way, users can reuse the <code>Writer</code> in their own logic without handling <code>append</code> separately.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="new-lister-api">New Lister API<a href="https://opendal.apache.org/blog/owo-1/#new-lister-api" class="hash-link" aria-label="Direct link to New Lister API" title="Direct link to New Lister API">​</a></h4>
+<p>To improve API consistency, we've made some adjustments to our listing functions. We've added <code>list</code> and <code>list_with</code> methods that perform single operations and renamed the original <code>list</code> to <code>lister</code> and <code>lister_with</code>.</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Old API</span><span class="token plain"></span [...]
+<p>This brings uniformity to our API offerings.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="list-with-metakey">List With Metakey<a href="https://opendal.apache.org/blog/owo-1/#list-with-metakey" class="hash-link" aria-label="Direct link to List With Metakey" title="Direct link to List With Metakey">​</a></h4>
+<p>To speed up list operations, OpenDAL can now fetch and store metadata during the listing process. This eliminates the need for separate metadata calls:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> entries</span><span class="tok [...]
+<p>This makes metadata retrieval more intuitive.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="buffered-writer">Buffered Writer<a href="https://opendal.apache.org/blog/owo-1/#buffered-writer" class="hash-link" aria-label="Direct link to Buffered Writer" title="Direct link to Buffered Writer">​</a></h4>
+<p>We've added general buffer support to optimize writing operations.</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> w </span><span class="token op [...]
+<h4 class="anchor anchorWithStickyNavbar_debX" id="others">Others<a href="https://opendal.apache.org/blog/owo-1/#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others">​</a></h4>
+<p>Other improvements in the core library can be found in our <a href="https://github.com/apache/opendal/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">CHANGELOG</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="bindings">Bindings<a href="https://opendal.apache.org/blog/owo-1/#bindings" class="hash-link" aria-label="Direct link to Bindings" title="Direct link to Bindings">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="c">C++<a href="https://opendal.apache.org/blog/owo-1/#c" class="hash-link" aria-label="Direct link to C++" title="Direct link to C++">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/cpp" target="_blank" rel="noopener noreferrer"><code>opendal-cpp</code></a> is ready for its first release! Welcome to check it out and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="haskell">Haskell<a href="https://opendal.apache.org/blog/owo-1/#haskell" class="hash-link" aria-label="Direct link to Haskell" title="Direct link to Haskell">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/haskell" target="_blank" rel="noopener noreferrer"><code>opendal-hs</code></a> is ready for its first release! Welcome to check it out and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="java">Java<a href="https://opendal.apache.org/blog/owo-1/#java" class="hash-link" aria-label="Direct link to Java" title="Direct link to Java">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/java" target="_blank" rel="noopener noreferrer"><code>opendal-java</code></a> enabled more available services in this release, allowing user to visit services like <code>redis</code> that not enabled by default in rust core. And <code>opendal-java</code> enabled blocking layer to allow users visit services like <code>s3</code> in blocking way.</p>
+<p>Welcome to integrate <code>opendal-java</code> into your project and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="new-bindings">New bindings!<a href="https://opendal.apache.org/blog/owo-1/#new-bindings" class="hash-link" aria-label="Direct link to New bindings!" title="Direct link to New bindings!">​</a></h4>
+<ul>
+<li><a href="https://github.com/apache/opendal/tree/main/bindings/dotnet" target="_blank" rel="noopener noreferrer"><code>opendal-dotnet</code></a></li>
+<li><a href="https://github.com/apache/opendal/tree/main/bindings/php" target="_blank" rel="noopener noreferrer"><code>opendal-php</code></a></li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="applications">Applications<a href="https://opendal.apache.org/blog/owo-1/#applications" class="hash-link" aria-label="Direct link to Applications" title="Direct link to Applications">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="oay">oay<a href="https://opendal.apache.org/blog/owo-1/#oay" class="hash-link" aria-label="Direct link to oay" title="Direct link to oay">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bin/oay" target="_blank" rel="noopener noreferrer">oay</a> is OpenDAL Gateway that allows users to access OpenDAL services via existing protocols like <code>s3</code> and <code>webdav</code>. It works like a proxy that forwarding requests to OpenDAL services.</p>
+<p>In this release, we implement basic <code>webdav</code> support. Users can convert any storage services to a webdav server!</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="oli">oli<a href="https://opendal.apache.org/blog/owo-1/#oli" class="hash-link" aria-label="Direct link to oli" title="Direct link to oli">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bin/oay" target="_blank" rel="noopener noreferrer">oli</a> is OpenDAL CLI that allows users to access storage services via CLI like <code>s3cmd</code> and <code>gcloud</code> does.</p>
+<p>We fixed some experience issues in this release and improved some docs. Welcome to try it out and give us some feedback.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="integrations">Integrations<a href="https://opendal.apache.org/blog/owo-1/#integrations" class="hash-link" aria-label="Direct link to Integrations" title="Direct link to Integrations">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="object_store">object_store<a href="https://opendal.apache.org/blog/owo-1/#object_store" class="hash-link" aria-label="Direct link to object_store" title="Direct link to object_store">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/integrations/object_store" target="_blank" rel="noopener noreferrer">object_store</a> instead to implement <a href="https://github.com/apache/arrow-rs/tree/master/object_store" target="_blank" rel="noopener noreferrer"><code>object_store</code></a>'s trait over OpenDAL Operator so that users can use OpenDAL as a backend for <code>object_store</code>.</p>
+<p><code>object_store</code> is mostly functional, but there are some edge use cases that OpenDAL has yet to support.</p>
+<p>So far, this release hasn't seen progress in this area; we are awaiting the resolution of the issue <a href="https://github.com/apache/opendal/issues/2762" target="_blank" rel="noopener noreferrer">Allow list paths that do not end with <code>/</code></a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="working">Working<a href="https://opendal.apache.org/blog/owo-1/#working" class="hash-link" aria-label="Direct link to Working" title="Direct link to Working">​</a></h2>
+<p>We are working on the following things:</p>
+<ul>
+<li><code>object_store</code> support: Make <code>object_store</code> integration works and find a user for it.</li>
+<li>Remove the <code>/</code> limitation for path, so we can list a path without ending with <code>/</code>.</li>
+<li>Expand the <code>start-after</code> support to more services (Address <a href="https://github.com/apache/opendal/issues/2786" target="_blank" rel="noopener noreferrer">#2786</a>).</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="outlook">Outlook<a href="https://opendal.apache.org/blog/owo-1/#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook">​</a></h2>
+<p>We are exploring some innovative ideas:</p>
+<ul>
+<li><a href="https://github.com/apache/opendal/discussions/2951" target="_blank" rel="noopener noreferrer">OpenDAL REST/gRPC API</a>: A REST/gRPC Server for OpenDAL.</li>
+<li><a href="https://github.com/apache/opendal/discussions/2953" target="_blank" rel="noopener noreferrer">OpenDAL Cache</a>: OpenDAL native cache libs that allowing users to access data more efficiently.</li>
+<li><a href="https://github.com/apache/opendal/discussions/2952" target="_blank" rel="noopener noreferrer">OpenDAL File System</a>: A read-only file system that built upon OpenDAL in rust!</li>
+<li><a href="https://github.com/apache/opendal/discussions/3042" target="_blank" rel="noopener noreferrer">kio-opendal</a>: A kio plugin powered by OpenDAL that allows users to visit different storage services in <a href="https://apps.kde.org/dolphin/" target="_blank" rel="noopener noreferrer">KDE Dolphin</a>.</li>
+<li>gvfs-opendal: A gvfs plugin powered by OpenDAL that allows users to visit different storage services in <a href="https://wiki.gnome.org/Apps/Files" target="_blank" rel="noopener noreferrer">GNOME Files</a></li>
+</ul>
+<p>Feel free to join in the discussion!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="summary">Summary<a href="https://opendal.apache.org/blog/owo-1/#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2>
+<p>This marks our first OpenDAL <code>OwO</code> post. We welcome your feedback.</p>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="owo" term="owo"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL™ Internal: Data Reading]]></title>
+        <id>https://opendal.apache.org/blog/how-opendal-read-data/</id>
+        <link href="https://opendal.apache.org/blog/how-opendal-read-data/"/>
+        <updated>2023-08-15T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[The first article will discuss OpenDAL's most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL.]]></summary>
+        <content type="html"><![CDATA[<p>As the Apache OpenDAL™ community continues to grow, new abstractions are constantly being added, which has brought some burdens to new contributors participating in development. Many maintainers hope to have a deeper understanding of OpenDAL's internal implementation. At the same time, OpenDAL's core design has not changed significantly for a long time, making it possible to write a series on internal implementation. I believe now is the time to w [...]
+<p>The first article will discuss OpenDAL's most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL. Let's get started!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="overall-framework">Overall Framework<a href="https://opendal.apache.org/blog/how-opendal-read-data/#overall-framework" class="hash-link" aria-label="Direct link to Overall Framework" title="Direct link to Overall Framework">​</a></h2>
+<p>Before starting to introduce the specific OpenDAL interface, let's first get familiar with the OpenDAL project.</p>
+<p><a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> is an Apache Incubator project aimed at helping users access data from various storage services in a unified, convenient, and efficient way. Its project <a href="https://opendal.apache.org/vision" target="_blank" rel="noopener noreferrer">vision</a> is "free access to data":</p>
+<ul>
+<li>Free from services: Any service can be accessed freely through native interfaces</li>
+<li>Free from implementations: No matter how the underlying implementation is, it can be called in a unified way</li>
+<li>Free to integrate: Able to freely integrate with various services and languages</li>
+<li>Free to zero cost: Users don't have to pay for features they don't use</li>
+</ul>
+<p>On this philosophical foundation, OpenDAL Rust Core can be mainly divided into the following components:</p>
+<ul>
+<li>Operator: The outer interface exposed to users</li>
+<li>Layers: Specific implementation of different middleware</li>
+<li>Services: Specific implementation of different services</li>
+</ul>
+<p>From a macroscopic perspective, OpenDAL's data reading call stack would look like this:</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/1-0b02956a3da2b4329eab11ea4779711c.png" width="1238" height="968" class="img_AUsV"></p>
+<p>All Layers and Services have implemented a unified Accessor interface, erasing all type information when building the Operator. For the Operator, regardless of what services are used or how many middleware are added, all call logic is consistent. This design splits OpenDAL's API into Public API and Raw API, where the Public API is directly exposed to users, providing convenient top-level interfaces, and Raw API is provided to OpenDAL internal developers, maintaining a unified internal [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="operator">Operator<a href="https://opendal.apache.org/blog/how-opendal-read-data/#operator" class="hash-link" aria-label="Direct link to Operator" title="Direct link to Operator">​</a></h2>
+<p>OpenDAL's Operator API will adhere to a consistent calling paradigm as much as possible, reducing users' learning and usage costs. For example, OpenDAL offers the following APIs for <code>read</code>:</p>
+<ul>
+<li><code>op.read(path)</code>: Reads the entire content of the specified file</li>
+<li><code>op.reader(path)</code>: Creates a Reader for streaming reading</li>
+<li><code>op.read_with(path).range(1..1024)</code>: Reads file content using specified parameters, such as range</li>
+<li><code>op.reader_with(path).range(1..1024)</code>: Creates a Reader for streaming reading with specified parameters</li>
+</ul>
+<p>It's not hard to see that <code>read</code> is more like syntactic sugar, allowing users to quickly read files without considering various traits like <code>AsyncRead</code>. The <code>reader</code> provides more flexibility, implementing widely-used community traits like <code>AsyncSeek</code>, <code>AsyncRead</code>, allowing more flexible data reading. <code>read_with</code> and <code>reader_with</code> assist users in specifying various parameters in a more natural way through Fut [...]
+<p>The internal logic of the Operator would look like this:</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/2-3b83ca1ebfbdd77770566a80131846bd.png" width="1628" height="1006" class="img_AUsV"></p>
+<p>Its main job is to encapsulate the interface for the user:</p>
+<ul>
+<li>Completing the construction of <code>OpRead</code>: the args for read operation.</li>
+<li>Calling the <code>read</code> function provided by <code>Accessor</code></li>
+<li>Wrapping the returned value as <code>Reader</code> and implementing interfaces like <code>AsyncSeek</code>, <code>AsyncRead</code>, etc., based on <code>Reader</code></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="layers">Layers<a href="https://opendal.apache.org/blog/how-opendal-read-data/#layers" class="hash-link" aria-label="Direct link to Layers" title="Direct link to Layers">​</a></h2>
+<p>A little secret here is that OpenDAL will automatically apply some Layers to the Service to implement some internal logic. As of the completion of this article, OpenDAL's automatically added Layers include:</p>
+<ul>
+<li><code>ErrorContextLayer</code>: Injects context information, such as <code>scheme</code>, <code>path</code>, etc., into all returned errors of Operation</li>
+<li><code>CompleteLayer</code>: Adds necessary capabilities to services, such as adding seek support to s3</li>
+<li><code>TypeEraseLayer</code>: Implements type erasure, uniformly erasing associated types in <code>Accessor</code>, so users don't need to carry generic parameters when using it</li>
+</ul>
+<p>Here, <code>ErrorContextLayer</code> and <code>TypeEraseLayer</code> are relatively simple and won't be elaborated on. The focus is on <code>CompleteLayer</code>, aimed at adding <code>seek</code> or <code>next</code> support to OpenDAL's returned <code>Reader</code> in a zero-cost way, so users don't have to re-implement it. OpenDAL initially returned <code>Reader</code> and <code>SeekableReader</code> through different function calls in early versions, but the actual user feedback w [...]
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">pub</span><span class="token plain"> </span><span class="token keyw [...]
+<p>To implement a service's reading capability in OpenDAL, one needs to implement this trait, which is an internal interface and will not be directly exposed to users. Among them:</p>
+<ul>
+<li><code>poll_read</code> is the most basic requirement; all services must implement this interface.</li>
+<li>When the service natively supports <code>seek</code>, <code>poll_seek</code> can be implemented, and OpenDAL will correctly dispatch, such as local fs;</li>
+<li>When the service natively supports <code>next</code>, meaning it returns streaming Bytes, <code>poll_next</code> can be implemented, like HTTP-based services, where the underlying layer is a TCP Stream, and hyper will encapsulate it as a bytes stream.</li>
+</ul>
+<p>Through the <code>Read</code> trait, OpenDAL ensures that all services can expose their native support capabilities as much as possible, thereby achieving efficient reading for different services.</p>
+<p>Based on this trait, OpenDAL will complete according to the capabilities supported by each service:</p>
+<ul>
+<li>Both seek/next are supported: Direct return</li>
+<li>No support for next: Encapsulate using <code>StreamableReader</code> to simulate next support</li>
+<li>No support for seek: Encapsulate using <code>ByRangeSeekableReader</code> to simulate seek support</li>
+<li>Neither seek/next supported: Encapsulate using both methods</li>
+</ul>
+<blockquote>
+<p><code>ByRangeSeekableReader</code> mainly utilizes the service's ability to support range read, dropping the current reader when the user seeks and initiating a new request at the specified location.</p>
+</blockquote>
+<p>OpenDAL exposes a unified Reader implementation through <code>CompleteLayer</code>, so users don't have to worry about whether the underlying service supports seek; OpenDAL will always choose the optimal way to initiate the request.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="services">Services<a href="https://opendal.apache.org/blog/how-opendal-read-data/#services" class="hash-link" aria-label="Direct link to Services" title="Direct link to Services">​</a></h2>
+<p>After the completion of the Layers, it's time to call the specific implementation of the Service. Here, the most common services <code>fs</code> and <code>s3</code> are used as examples to explain how data is read.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="service-fs">Service fs<a href="https://opendal.apache.org/blog/how-opendal-read-data/#service-fs" class="hash-link" aria-label="Direct link to Service fs" title="Direct link to Service fs">​</a></h3>
+<p><code>tokio::fs::File</code> implements <code>tokio::AsyncRead</code> and <code>tokio::AsyncSeek</code>. Using <code>async_compat::Compat</code>, we have transformed it into <code>futures::AsyncRead</code> and <code>futures::AsyncSeek</code>. Based on this, we provide a built-in function <code>oio::into_read_from_file</code> to transform it into a type that implements <code>oio::Read</code>.</p>
+<p>There's nothing particularly complex in the implementation of <code>oio::into_read_from_file</code>; read and seek are mostly calling the functions provided by the incoming File type. The tricky part is about the correct handling of seek and range: seeking to the right side of the range is allowed, and this will not cause an error, and reading will only return empty, but seeking to the left side of the range is illegal, and the Reader must return <code>InvalidInput</code> for proper u [...]
+<blockquote>
+<p>Interesting history: there was <a href="https://github.com/apache/opendal/issues/2717" target="_blank" rel="noopener noreferrer">an issue</a> in the initial implementation of this part, discovered during fuzz testing.</p>
+</blockquote>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="services-s3">Services s3<a href="https://opendal.apache.org/blog/how-opendal-read-data/#services-s3" class="hash-link" aria-label="Direct link to Services s3" title="Direct link to Services s3">​</a></h3>
+<p>S3 is an HTTP-based service, and opendal provides a lot of HTTP-based wrappers to help developers reuse logic; they only need to build a request and return a well-constructed Body. OpenDAL Raw API encapsulates a set of reqwest-based interfaces, and the HTTP GET interface returns a <code>Response&lt;IncomingAsyncBody&gt;</code>:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/// IncomingAsyncBody carries the content returne [...]
+<p>The stream contained in this body is the bytes stream returned by reqwest, and opendal implements content length checks and read support on this basis.</p>
+<p>Here's an extra note about a small pitfall with reqwest/hyper: reqwest and hyper do not check the returned content length, so an illegal server may return a data volume that does not match the expected content length instead of an error, leading to unexpected data behavior. OpenDAL specifically added checks here, returning <code>ContentIncomplete</code> when data is insufficient and <code>ContentTruncated</code> when data exceeds expectations, avoiding users receiving illegal data.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="https://opendal.apache.org/blog/how-opendal-read-data/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>This article introduces from top to bottom how OpenDAL implements data reading:</p>
+<ul>
+<li>Operator is responsible for exposing user-friendly interfaces</li>
+<li>Layers are responsible for completing the capabilities of the services</li>
+<li>Services are responsible for the specific implementation of different services</li>
+</ul>
+<p>Throughout the entire chain, OpenDAL adheres as much as possible to the principle of zero cost, prioritizing the use of native service capabilities, then considering simulation through other methods, and finally returning unsupported errors. Through this three-tier design, users don't need to understand the details of the underlying service, nor do they need to integrate different service SDKs to easily call <code>op.read(path)</code> to access data in any storage service.</p>
+<p>This is: How <strong>OpenDAL</strong> read data freely!</p>]]></content>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="internal" term="internal"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Apache OpenDAL™: Access Data Freely]]></title>
+        <id>https://opendal.apache.org/blog/opendal-access-data-freely/</id>
+        <link href="https://opendal.apache.org/blog/opendal-access-data-freely/"/>
+        <updated>2023-07-07T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[If you're committed to building cloud-native, cross-cloud-first applications and services, or you want to support configurable storage backends to meet complex data access needs, or if you're tired of juggling various SDKs and hoping for a unified abstraction and development experience, Apache OpenDAL™ will be your perfect partner.]]></summary>
+        <content type="html"><![CDATA[<p>If you're committed to building cloud-native, cross-cloud-first applications and services, or you want to support configurable storage backends to meet complex data access needs, or if you're tired of juggling various SDKs and hoping for a unified abstraction and development experience, Apache OpenDAL™ will be your perfect partner.</p>
+<p><img decoding="async" loading="lazy" alt="OpenDAL Arch" src="https://opendal.apache.org/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png" width="3932" height="2662" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-is-opendal">What is OpenDAL?<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#what-is-opendal" class="hash-link" aria-label="Direct link to What is OpenDAL?" title="Direct link to What is OpenDAL?">​</a></h2>
+<p><strong>OpenDAL</strong> is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way.</p>
+<p><strong>Data Access Layer</strong> means: OpenDAL is in a critical position in the data read-write process. We shield the implementation details of different storage backends and provide a set of unified interface abstractions externally.</p>
+<p>Next, let's try to answer <em>"What OpenDAL is not"</em> and deconstruct OpenDAL from another perspective:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="opendal-is-not-a-proxy-service">Opendal Is Not a Proxy Service<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#opendal-is-not-a-proxy-service" class="hash-link" aria-label="Direct link to Opendal Is Not a Proxy Service" title="Direct link to Opendal Is Not a Proxy Service">​</a></h3>
+<p>OpenDAL is provided in the form of a library, not as a service or application that proxies various storage backends.</p>
+<p>If you want to integrate OpenDAL into an existing project, you need to call OpenDAL's interface directly through the bindings supported by OpenDAL to access the storage services.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="opendal-is-not-an-sdk-aggregator">Opendal Is Not an SDK Aggregator<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#opendal-is-not-an-sdk-aggregator" class="hash-link" aria-label="Direct link to Opendal Is Not an SDK Aggregator" title="Direct link to Opendal Is Not an SDK Aggregator">​</a></h3>
+<p>Although OpenDAL replaces various SDKs in the application architecture, it is not implemented as an SDK aggregator.</p>
+<p>In other words, OpenDAL does not simply call various storage service SDKs. We have developed our own docking with various storage services based on a unified Rust core to ensure that the differences between services are smoothed out.</p>
+<p>For example, for S3, OpenDAL manually constructs HTTP requests and parses HTTP responses to ensure that all behaviors comply with API specifications and are fully under the control of OpenDAL. Due to OpenDAL's native takeover of the data access process, we can easily implement unified retry and logging mechanisms for various storage backends and ensure behavioral consistency.</p>
+<p>For compatible services with S3, due to the limitations of native storage services and differences in API implementation, compatibility and behavioral details may differ from S3. For example, OSS needs to set an independent header to ensure consistent behavior for <code>Range</code>. In addition to docking with native storage services, OpenDAL will also perform targeted processing for compatible services to ensure users' data access experience.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="advantages-of-opendal">Advantages of OpenDAL<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#advantages-of-opendal" class="hash-link" aria-label="Direct link to Advantages of OpenDAL" title="Direct link to Advantages of OpenDAL">​</a></h2>
+<p>OpenDAL is not the only project dedicated to providing data access abstraction, but compared to other similar projects, OpenDAL has the following advantages:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="rich-service-support">Rich Service Support<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#rich-service-support" class="hash-link" aria-label="Direct link to Rich Service Support" title="Direct link to Rich Service Support">​</a></h3>
+<p>OpenDAL supports dozens of storage services, covering a wide range of scenarios and supporting on-demand selection:</p>
+<ul>
+<li>Standard Storage Protocols: FTP, HTTP, SFTP, WebDAV, etc.</li>
+<li>Object Storage Services: azblob, gcs, obs, oss, s3, etc.</li>
+<li>File Storage Services: fs, azdls, hdfs, webhdfs, ipfs, etc.</li>
+<li>Consumer Cloud Storage Service: Google Drive, OneDrive, Dropbox, etc.</li>
+<li>Key-Value Storage Service: Memory, Redis, Rocksdb, etc.</li>
+<li>Cache Storage Service: Ghac, Memcached, etc.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="complete-cross-language-bindings">Complete Cross-Language Bindings<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#complete-cross-language-bindings" class="hash-link" aria-label="Direct link to Complete Cross-Language Bindings" title="Direct link to Complete Cross-Language Bindings">​</a></h3>
+<p>With Rust as the core, OpenDAL now provides binding support for multiple languages such as Python/Node.js/Java/C and is also actively developing bindings for other languages.</p>
+<p>Cross-language bindings not only provide unified storage access abstractions for other languages but also follow naming conventions and development habits that are common in various languages as much as possible to pave the way for quick use.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="powerful-middleware-support">Powerful Middleware Support<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#powerful-middleware-support" class="hash-link" aria-label="Direct link to Powerful Middleware Support" title="Direct link to Powerful Middleware Support">​</a></h3>
+<p>OpenDAL offers native layer support, enabling users to implement middleware or intercept for all operations.</p>
+<ul>
+<li>Error Retry: OpenDAL supports fine-grained error retry capabilities. In addition to common request retries, it supports breakpoint resumable transmission without having to re-read the entire file.</li>
+<li>Observability: OpenDAL implements logging,tracing,and metrics support for all operations. Turning on middleware can directly obtain observability capabilities for storage.</li>
+<li>Concurrency control, flow control, fuzz testing, and more.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="easy-to-use">Easy to Use<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#easy-to-use" class="hash-link" aria-label="Direct link to Easy to Use" title="Direct link to Easy to Use">​</a></h3>
+<p>OpenDAL's API has been well designed and polished in actual use. The documentation covers everything and is easy to get started with. Here's an example of using Python bindings to access HDFS:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> opendal</span><br></spa [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="use-cases-of-opendal">Use Cases of OpenDAL<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#use-cases-of-opendal" class="hash-link" aria-label="Direct link to Use Cases of OpenDAL" title="Direct link to Use Cases of OpenDAL">​</a></h3>
+<p>Currently, OpenDAL is widely used in various scenarios that require cloud-native capabilities, including but not limited to databases, data pipelines, and caches. The main user cases include:</p>
+<ul>
+<li><a href="https://github.com/datafuselabs/databend/" target="_blank" rel="noopener noreferrer">Databend</a>: A modern Elasticity and Performance cloud data warehouse. Using OpenDAL to read and write persistent data (s3, azblob, gcs, hdfs, etc.) and cache data (fs, redis, rocksdb, moka, etc.).</li>
+<li><a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a>: An open-source, cloud-native, distributed time-series database. Using OpenDAL to read and write persistent data (s3, azblob, etc.).</li>
+<li><a href="https://github.com/mozilla/sccache/" target="_blank" rel="noopener noreferrer">mozilla/sccache</a>: <code>sccache</code> is <a href="https://github.com/ccache/ccache" target="_blank" rel="noopener noreferrer"><code>ccache</code></a> with cloud storage. Using OpenDAL to read and write cache data (s3 and ghac, etc.).</li>
+<li><a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a>: A Distributed SQL Database for Stream Processing. Using OpenDAL to read and write persistent data (s3, azblob, hdfs, etc.).</li>
+<li><a href="https://github.com/vectordotdev/vector" target="_blank" rel="noopener noreferrer">Vector</a>: A high-performance observability data pipeline. Using OpenDAL to write persistent data (currently mainly using hdfs).</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="future-plans-of-opendal">Future Plans of OpenDAL<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#future-plans-of-opendal" class="hash-link" aria-label="Direct link to Future Plans of OpenDAL" title="Direct link to Future Plans of OpenDAL">​</a></h2>
+<p>In addition to further meeting the needs of cloud-native data access, OpenDAL will continue to expand user scenarios and actively explore its use in data science and mobile applications. At the same time, OpenDAL will continue to polish its existing implementations and bindings to provide users with a better integration experience.</p>
+<p>OpenDAL will also explore how to improve users' workflows in data management and service integration:</p>
+<ul>
+<li>Polish the <code>oli</code> command-line tool to help users manage data painlessly.</li>
+<li>Implement the <code>oay</code> proxy service to provide users with high-quality compatible APIs.</li>
+</ul>
+<p>In addition, since OpenDAL is currently a cross-language project, we also plan to write a series of introductory tutorials to help everyone learn OpenDAL from scratch while learning the language.</p>]]></content>
+        <author>
+            <name>PsiACE</name>
+            <uri>https://github.com/PsiACE</uri>
+        </author>
+        <author>
+            <name>Xuanwo</name>
+            <uri>https://github.com/Xuanwo</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+    <entry>
+        <title type="html"><![CDATA[Way to Go: OpenDAL successfully entered Apache Incubator]]></title>
+        <id>https://opendal.apache.org/blog/opendal-entered-apache-incubator/</id>
+        <link href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/"/>
+        <updated>2023-03-16T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[On February 27th, 2023, the OpenDAL project achieved a milestone by winning the approval to join the incubator of the Apache Software Foundation (ASF), the world's leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.]]></summary>
+        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="OpenDAL successfully entered Apache Incubator" src="https://opendal.apache.org/assets/images/opendal-entered-apache-879d5165e27d370849e904ef8d65be25.png" width="1876" height="799" class="img_AUsV"></p>
+<p>On February 27th, 2023, the <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> project achieved a milestone by winning the approval to join the incubator of the <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a> (ASF), the world's leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.</p>
+<p>This is a significant moment for <a href="https://github.com/datafuselabs/databend" target="_blank" rel="noopener noreferrer">Databend</a>, as it means that OpenDAL's technology and vision have received wider recognition and support from the open source community.</p>
+<blockquote>
+<p>The Apache Incubator was established in October 2002 to provide a path for projects and codebases that aspire to become part of the Apache Software Foundation. Incubating projects need to follow ASF's governance and operational practices, and use ASF's infrastructure and resources. Incubating projects need to go through a series of stages and evaluations before they can graduate to become top-level projects (TLPs) of ASF.</p>
+</blockquote>
+<p><img decoding="async" loading="lazy" alt="Apache OpenDAL Project Incubation Status - Apache Incubator" src="https://opendal.apache.org/assets/images/incubator-project-opendal-095982818f2f177cfd4cd267c8f282c4.png" width="1373" height="1006" class="img_AUsV"></p>
+<p><em><a href="https://incubator.apache.org/projects/opendal.html" target="_blank" rel="noopener noreferrer">https://incubator.apache.org/projects/opendal.html</a></em></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-is-opendal">What is OpenDAL?<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#what-is-opendal" class="hash-link" aria-label="Direct link to What is OpenDAL?" title="Direct link to What is OpenDAL?">​</a></h2>
+<p>Data is one of the most important assets in the future, and data access is the key for realizing data value.</p>
+<p>There are various kinds of storage services in the market, each with its own unique interfaces and features, which bring a lot of complexity and inconvenience to data access.</p>
+<p>OpenDAL provides a unified, simple, efficient, reliable, and observable data access layer that allows developers to seamlessly use different storage services and enjoy the best user experience.</p>
+<p><img decoding="async" loading="lazy" alt="M*N to M+N with OpenDAL" src="https://opendal.apache.org/assets/images/opendal-power-549a25c15039d5ff165b082cf2fd7476.png" width="5724" height="1518" class="img_AUsV"></p>
+<p>OpenDAL simplifies the process of interfacing different storage services, and provides features such as automatic retry, request optimization, and observability. With OpenDAL, developers can directly access a bunch of storage services, without having to understand and master the details of specific SDKs.</p>
+<p>OpenDAL's features include but are not limited to:</p>
+<ul>
+<li>Support for dozens of storage services, including local file system, HDFS, S3, OSS, etc.</li>
+<li>Provide a unified data access interface, without worrying about the underlying storage details.</li>
+<li>Support for various common data operations, including <code>read</code>, <code>write</code>, <code>list</code>, etc.</li>
+<li>Support for automatic retry, request optimization, and observability mechanisms.</li>
+<li>Zero cost, directly mapped to API calls.</li>
+<li>Cross-language bindings: Python, Node.js, C (being worked on), etc.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="the-story-about-opendal">The Story about OpenDAL<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#the-story-about-opendal" class="hash-link" aria-label="Direct link to The Story about OpenDAL" title="Direct link to The Story about OpenDAL">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="born-for-universal-data-access">Born for Universal Data Access<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#born-for-universal-data-access" class="hash-link" aria-label="Direct link to Born for Universal Data Access" title="Direct link to Born for Universal Data Access">​</a></h3>
+<p>OpenDAL originated from the vision of creating a universal, unified and user-friendly data access layer. It came into being in late 2021, initially as a component of the Databend project.</p>
+<ul>
+<li>On December 21, 2021, <a href="http://github.com/Xuanwo" target="_blank" rel="noopener noreferrer">Xuanwo</a> embarked on the design and re-implementation of Databend's storage access layer, <a href="https://github.com/datafuselabs/databend/pull/3575" target="_blank" rel="noopener noreferrer">dal2: Add basic operations of <code>read</code>, <code>write</code>, <code>stat</code>, <code>delete</code></a>.</li>
+<li>On December 27, 2021, the <a href="https://github.com/datafuselabs/databend/discussions/3662" target="_blank" rel="noopener noreferrer">proposal: Vision of Databend DAL</a> was put forward and discussed. On December 29th, dal2's implementation was integrated into Databend.</li>
+<li>On February 14th 2022 , dal2 officially separated from Databend's code repository and became a standalone top-level project. It was formally renamed OpenDAL.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="from-one-to-multiple">From One to Multiple<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#from-one-to-multiple" class="hash-link" aria-label="Direct link to From One to Multiple" title="Direct link to From One to Multiple">​</a></h3>
+<p>Thanks to Xuanwo, <a href="https://github.com/ClSlaid" target="_blank" rel="noopener noreferrer">ClSlaid</a> and many other contributors, OpenDAL quickly became a data access layer that supports mainstream storage services such as AWS S3 / Azure Blob / GCS / HDFS, and provided cross-cloud native storage and access support for Databend's <code>COPY INTO</code>, Stage, Storage.</p>
+<p><a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a> was the first large-scale Rust database project to actively use OpenDAL after Databend. Later, with Xuanwo's efforts, <a href="https://github.com/mozilla/sccache" target="_blank" rel="noopener noreferrer">sccache</a> under Mozilla also tried to use OpenDAL to take over the storage layer. In order to provide more comprehensive support, OpenDAL soon added support for GitHub Acti [...]
+<p>Then, <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a> and <a href="https://github.com/vectordotdev/vector" target="_blank" rel="noopener noreferrer">Vector</a> were supported as well. The number of OpenDAL users started to grow. More and more users choose OpenDAL as their storage access layer.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="skys-the-limit">Sky's the Limit<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#skys-the-limit" class="hash-link" aria-label="Direct link to Sky's the Limit" title="Direct link to Sky's the Limit">​</a></h3>
+<p>OpenDAL has established a small community and formed a product matrix. In addition to the <a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">Rust - opendal</a>, it also provides <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">Python - opendal</a> and <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">Node.js - opendal</a> bindings.</p>
+<p>OpenDAL has released 99 versions since its open source, with 700+ GitHub stars, 349K downloads, and 48 developers. The project has been actively updated. We sincerely thank every contributor for their efforts and dedication.</p>
+<p>Being a part of Apache incubator is an important milestone in OpenDAL's development history. We hope to leverage ASF's platform and resources to let OpenDAL focus on providing a neutral, vendor-free, painless, and efficient storage access layer, and better serve the developers.</p>
+<p>We expect OpenDAL to be widely used in the following application scenarios:</p>
+<ul>
+<li>Data analysis: OpenDAL can help data analysts quickly read or write data from different storage services, and perform various format conversions and operations.</li>
+<li>Data science: OpenDAL can help data scientists easily get or save data from different storage services, and perform various preprocessing and postprocessing.</li>
+<li>Data engineering: OpenDAL can help data engineers efficiently build and manage data pipelines between different storage services, and perform various monitoring and tuning.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="acknowledgements">Acknowledgements<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#acknowledgements" class="hash-link" aria-label="Direct link to Acknowledgements" title="Direct link to Acknowledgements">​</a></h2>
+<p><strong><em>From Xuanwo</em></strong></p>
+<p>Hello everyone, I'm Xuanwo, the Committer of Apache OpenDAL.</p>
+<p>The OpenDAL project embodies my personal dream. Now it has entered the Apache incubator with the collaboration of the community. I feel very happy at this moment. Thank you all contributors for your contributions, thank Databend Labs for your support, thank Champion tison for your guidance, thank Mentors ningjiang, wusheng, tedliu and hexiaoqiao for your advice.</p>
+<p>Let us follow the guidance of Apache Way to build a community together and create value for users by providing free, painless and efficient data access experience!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="join-apache-opendal-community">Join Apache OpenDAL Community<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#join-apache-opendal-community" class="hash-link" aria-label="Direct link to Join Apache OpenDAL Community" title="Direct link to Join Apache OpenDAL Community">​</a></h2>
+<p>We welcome developers and users who are interested in participating in OpenDAL project to join OpenDAL community and follow OpenDAL's latest news. You can get more information through the following ways:</p>
+<ul>
+<li>Visit OpenDAL official website: <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">https://opendal.apache.org</a></li>
+<li>Explore OpenDAL GitHub repository: <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal</a></li>
+<li>Join OpenDAL Discord channel: <a href="https://opendal.apache.org/discord" target="_blank" rel="noopener noreferrer">https://opendal.apache.org/discord</a></li>
+<li>Subscribe to OpenDAL mailing list: <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a></li>
+</ul>]]></content>
+        <author>
+            <name>PsiACE</name>
+            <uri>https://github.com/PsiACE</uri>
+        </author>
+        <category label="announcement" term="announcement"/>
+    </entry>
+</feed>
\ No newline at end of file
diff --git a/blog/authors/index.html b/blog/authors/index.html
new file mode 100644
index 000000000..3d3517067
--- /dev/null
+++ b/blog/authors/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-authors-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Authors | 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/authors/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
new file mode 100644
index 000000000..703e6d6c5
--- /dev/null
+++ b/blog/how-opendal-read-data/index.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL™ Internal: Data Reading | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/how-opendal-read-data/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaur [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The first article will discuss OpenDAL&#x27;s most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL. Let&#x27;s get started!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="overall-framework">Overall Framework<a href="#overall-framework" class="hash-link" aria-label="Direct link to Overall Framework" title="Direct link to Overall Framework">​</a></h2>
+<p>Before starting to introduce the specific OpenDAL interface, let&#x27;s first get familiar with the OpenDAL project.</p>
+<p><a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> is an Apache Incubator project aimed at helping users access data from various storage services in a unified, convenient, and efficient way. Its project <a href="https://opendal.apache.org/vision" target="_blank" rel="noopener noreferrer">vision</a> is &quot;free access to data&quot;:</p>
+<ul>
+<li>Free from services: Any service can be accessed freely through native interfaces</li>
+<li>Free from implementations: No matter how the underlying implementation is, it can be called in a unified way</li>
+<li>Free to integrate: Able to freely integrate with various services and languages</li>
+<li>Free to zero cost: Users don&#x27;t have to pay for features they don&#x27;t use</li>
+</ul>
+<p>On this philosophical foundation, OpenDAL Rust Core can be mainly divided into the following components:</p>
+<ul>
+<li>Operator: The outer interface exposed to users</li>
+<li>Layers: Specific implementation of different middleware</li>
+<li>Services: Specific implementation of different services</li>
+</ul>
+<p>From a macroscopic perspective, OpenDAL&#x27;s data reading call stack would look like this:</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/1-0b02956a3da2b4329eab11ea4779711c.png" width="1238" height="968" class="img_AUsV"></p>
+<p>All Layers and Services have implemented a unified Accessor interface, erasing all type information when building the Operator. For the Operator, regardless of what services are used or how many middleware are added, all call logic is consistent. This design splits OpenDAL&#x27;s API into Public API and Raw API, where the Public API is directly exposed to users, providing convenient top-level interfaces, and Raw API is provided to OpenDAL internal developers, maintaining a unified int [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="operator">Operator<a href="#operator" class="hash-link" aria-label="Direct link to Operator" title="Direct link to Operator">​</a></h2>
+<p>OpenDAL&#x27;s Operator API will adhere to a consistent calling paradigm as much as possible, reducing users&#x27; learning and usage costs. For example, OpenDAL offers the following APIs for <code>read</code>:</p>
+<ul>
+<li><code>op.read(path)</code>: Reads the entire content of the specified file</li>
+<li><code>op.reader(path)</code>: Creates a Reader for streaming reading</li>
+<li><code>op.read_with(path).range(1..1024)</code>: Reads file content using specified parameters, such as range</li>
+<li><code>op.reader_with(path).range(1..1024)</code>: Creates a Reader for streaming reading with specified parameters</li>
+</ul>
+<p>It&#x27;s not hard to see that <code>read</code> is more like syntactic sugar, allowing users to quickly read files without considering various traits like <code>AsyncRead</code>. The <code>reader</code> provides more flexibility, implementing widely-used community traits like <code>AsyncSeek</code>, <code>AsyncRead</code>, allowing more flexible data reading. <code>read_with</code> and <code>reader_with</code> assist users in specifying various parameters in a more natural way throug [...]
+<p>The internal logic of the Operator would look like this:</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/2-3b83ca1ebfbdd77770566a80131846bd.png" width="1628" height="1006" class="img_AUsV"></p>
+<p>Its main job is to encapsulate the interface for the user:</p>
+<ul>
+<li>Completing the construction of <code>OpRead</code>: the args for read operation.</li>
+<li>Calling the <code>read</code> function provided by <code>Accessor</code></li>
+<li>Wrapping the returned value as <code>Reader</code> and implementing interfaces like <code>AsyncSeek</code>, <code>AsyncRead</code>, etc., based on <code>Reader</code></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="layers">Layers<a href="#layers" class="hash-link" aria-label="Direct link to Layers" title="Direct link to Layers">​</a></h2>
+<p>A little secret here is that OpenDAL will automatically apply some Layers to the Service to implement some internal logic. As of the completion of this article, OpenDAL&#x27;s automatically added Layers include:</p>
+<ul>
+<li><code>ErrorContextLayer</code>: Injects context information, such as <code>scheme</code>, <code>path</code>, etc., into all returned errors of Operation</li>
+<li><code>CompleteLayer</code>: Adds necessary capabilities to services, such as adding seek support to s3</li>
+<li><code>TypeEraseLayer</code>: Implements type erasure, uniformly erasing associated types in <code>Accessor</code>, so users don&#x27;t need to carry generic parameters when using it</li>
+</ul>
+<p>Here, <code>ErrorContextLayer</code> and <code>TypeEraseLayer</code> are relatively simple and won&#x27;t be elaborated on. The focus is on <code>CompleteLayer</code>, aimed at adding <code>seek</code> or <code>next</code> support to OpenDAL&#x27;s returned <code>Reader</code> in a zero-cost way, so users don&#x27;t have to re-implement it. OpenDAL initially returned <code>Reader</code> and <code>SeekableReader</code> through different function calls in early versions, but the actual  [...]
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">pub</span><span class="token plain"> </span><span class="token keyw [...]
+<p>To implement a service&#x27;s reading capability in OpenDAL, one needs to implement this trait, which is an internal interface and will not be directly exposed to users. Among them:</p>
+<ul>
+<li><code>poll_read</code> is the most basic requirement; all services must implement this interface.</li>
+<li>When the service natively supports <code>seek</code>, <code>poll_seek</code> can be implemented, and OpenDAL will correctly dispatch, such as local fs;</li>
+<li>When the service natively supports <code>next</code>, meaning it returns streaming Bytes, <code>poll_next</code> can be implemented, like HTTP-based services, where the underlying layer is a TCP Stream, and hyper will encapsulate it as a bytes stream.</li>
+</ul>
+<p>Through the <code>Read</code> trait, OpenDAL ensures that all services can expose their native support capabilities as much as possible, thereby achieving efficient reading for different services.</p>
+<p>Based on this trait, OpenDAL will complete according to the capabilities supported by each service:</p>
+<ul>
+<li>Both seek/next are supported: Direct return</li>
+<li>No support for next: Encapsulate using <code>StreamableReader</code> to simulate next support</li>
+<li>No support for seek: Encapsulate using <code>ByRangeSeekableReader</code> to simulate seek support</li>
+<li>Neither seek/next supported: Encapsulate using both methods</li>
+</ul>
+<blockquote>
+<p><code>ByRangeSeekableReader</code> mainly utilizes the service&#x27;s ability to support range read, dropping the current reader when the user seeks and initiating a new request at the specified location.</p>
+</blockquote>
+<p>OpenDAL exposes a unified Reader implementation through <code>CompleteLayer</code>, so users don&#x27;t have to worry about whether the underlying service supports seek; OpenDAL will always choose the optimal way to initiate the request.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="services">Services<a href="#services" class="hash-link" aria-label="Direct link to Services" title="Direct link to Services">​</a></h2>
+<p>After the completion of the Layers, it&#x27;s time to call the specific implementation of the Service. Here, the most common services <code>fs</code> and <code>s3</code> are used as examples to explain how data is read.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="service-fs">Service fs<a href="#service-fs" class="hash-link" aria-label="Direct link to Service fs" title="Direct link to Service fs">​</a></h3>
+<p><code>tokio::fs::File</code> implements <code>tokio::AsyncRead</code> and <code>tokio::AsyncSeek</code>. Using <code>async_compat::Compat</code>, we have transformed it into <code>futures::AsyncRead</code> and <code>futures::AsyncSeek</code>. Based on this, we provide a built-in function <code>oio::into_read_from_file</code> to transform it into a type that implements <code>oio::Read</code>.</p>
+<p>There&#x27;s nothing particularly complex in the implementation of <code>oio::into_read_from_file</code>; read and seek are mostly calling the functions provided by the incoming File type. The tricky part is about the correct handling of seek and range: seeking to the right side of the range is allowed, and this will not cause an error, and reading will only return empty, but seeking to the left side of the range is illegal, and the Reader must return <code>InvalidInput</code> for pro [...]
+<blockquote>
+<p>Interesting history: there was <a href="https://github.com/apache/opendal/issues/2717" target="_blank" rel="noopener noreferrer">an issue</a> in the initial implementation of this part, discovered during fuzz testing.</p>
+</blockquote>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="services-s3">Services s3<a href="#services-s3" class="hash-link" aria-label="Direct link to Services s3" title="Direct link to Services s3">​</a></h3>
+<p>S3 is an HTTP-based service, and opendal provides a lot of HTTP-based wrappers to help developers reuse logic; they only need to build a request and return a well-constructed Body. OpenDAL Raw API encapsulates a set of reqwest-based interfaces, and the HTTP GET interface returns a <code>Response&lt;IncomingAsyncBody&gt;</code>:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/// IncomingAsyncBody carries the content returne [...]
+<p>The stream contained in this body is the bytes stream returned by reqwest, and opendal implements content length checks and read support on this basis.</p>
+<p>Here&#x27;s an extra note about a small pitfall with reqwest/hyper: reqwest and hyper do not check the returned content length, so an illegal server may return a data volume that does not match the expected content length instead of an error, leading to unexpected data behavior. OpenDAL specifically added checks here, returning <code>ContentIncomplete</code> when data is insufficient and <code>ContentTruncated</code> when data exceeds expectations, avoiding users receiving illegal data.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>This article introduces from top to bottom how OpenDAL implements data reading:</p>
+<ul>
+<li>Operator is responsible for exposing user-friendly interfaces</li>
+<li>Layers are responsible for completing the capabilities of the services</li>
+<li>Services are responsible for the specific implementation of different services</li>
+</ul>
+<p>Throughout the entire chain, OpenDAL adheres as much as possible to the principle of zero cost, prioritizing the use of native service capabilities, then considering simulation through other methods, and finally returning unsupported errors. Through this three-tier design, users don&#x27;t need to understand the details of the underlying service, nor do they need to integrate different service SDKs to easily call <code>op.read(path)</code> to access data in any storage service.</p>
+<p>This is: How <strong>OpenDAL</strong> read data freely!</p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/internal/">internal</a></li></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/o [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
new file mode 100644
index 000000000..c21e44f45
--- /dev/null
+++ b/blog/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Blog | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property=" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>I hope this post serves as a guide for our development, encourages more people to contribute, and ultimately helps achieve the vision of OpenDAL.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Apache Open [...]
+<p>On behalf of the OpenDAL community, I&#x27;m pleased to announce that the first Apache OpenDAL™ Beijing Meetup will be held on September 14th.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Apache OpenDAL [...]
+<p>We&#x27;re writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summer-ospp.ac.cn/" target="_blank" rel="noopener noreferrer">Open Source Promotion Plan (OSPP) 2024</a>. If you&#x27;re not eligible or interested in participating in OSPP, then most of this post likely isn&#x27;t relevant to you; if you are, this should contain some useful information and links.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9" [...]
+<p>We&#x27;re writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code (GSoC) 2024</a>. If you&#x27;re not eligible or interested in participating in GSoC, then most of this post likely isn&#x27;t relevant to you; if you are, this should contain some useful information and links.</p></div><footer class="row docusaurus-mt-lg"><div class="col co [...]
+<p>OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.</p>
+</blockquote>
+<p>Hello! It&#x27;s been a while since our last update. We&#x27;ve been hard at work determining the optimal way to implement new features and improvements. We&#x27;re thrilled to announce that we&#x27;ll soon be releasing v0.40.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/owo/">owo</a></li></ul></div><div class="col [...]
+<p>The first article will discuss OpenDAL&#x27;s most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL. Let&#x27;s get started!</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/internal/">internal</a></li></ul></div><div c [...]
+<p><img decoding="async" loading="lazy" alt="OpenDAL Arch" src="/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png" width="3932" height="2662" class="img_AUsV"></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div><div class="col text--right col--3"><a aria-label="R [...]
+<p>On February 27th, 2023, the <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> project achieved a milestone by winning the approval to join the incubator of the <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a> (ASF), the world&#x27;s leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.</p></div>< [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
new file mode 100644
index 000000000..e231f7d25
--- /dev/null
+++ b/blog/opendal-access-data-freely/index.html
@@ -0,0 +1,72 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Apache OpenDAL™: Access Data Freely | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusa [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><img decoding="async" loading="lazy" alt="OpenDAL Arch" src="/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png" width="3932" height="2662" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-is-opendal">What is OpenDAL?<a href="#what-is-opendal" class="hash-link" aria-label="Direct link to What is OpenDAL?" title="Direct link to What is OpenDAL?">​</a></h2>
+<p><strong>OpenDAL</strong> is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way.</p>
+<p><strong>Data Access Layer</strong> means: OpenDAL is in a critical position in the data read-write process. We shield the implementation details of different storage backends and provide a set of unified interface abstractions externally.</p>
+<p>Next, let&#x27;s try to answer <em>&quot;What OpenDAL is not&quot;</em> and deconstruct OpenDAL from another perspective:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="opendal-is-not-a-proxy-service">Opendal Is Not a Proxy Service<a href="#opendal-is-not-a-proxy-service" class="hash-link" aria-label="Direct link to Opendal Is Not a Proxy Service" title="Direct link to Opendal Is Not a Proxy Service">​</a></h3>
+<p>OpenDAL is provided in the form of a library, not as a service or application that proxies various storage backends.</p>
+<p>If you want to integrate OpenDAL into an existing project, you need to call OpenDAL&#x27;s interface directly through the bindings supported by OpenDAL to access the storage services.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="opendal-is-not-an-sdk-aggregator">Opendal Is Not an SDK Aggregator<a href="#opendal-is-not-an-sdk-aggregator" class="hash-link" aria-label="Direct link to Opendal Is Not an SDK Aggregator" title="Direct link to Opendal Is Not an SDK Aggregator">​</a></h3>
+<p>Although OpenDAL replaces various SDKs in the application architecture, it is not implemented as an SDK aggregator.</p>
+<p>In other words, OpenDAL does not simply call various storage service SDKs. We have developed our own docking with various storage services based on a unified Rust core to ensure that the differences between services are smoothed out.</p>
+<p>For example, for S3, OpenDAL manually constructs HTTP requests and parses HTTP responses to ensure that all behaviors comply with API specifications and are fully under the control of OpenDAL. Due to OpenDAL&#x27;s native takeover of the data access process, we can easily implement unified retry and logging mechanisms for various storage backends and ensure behavioral consistency.</p>
+<p>For compatible services with S3, due to the limitations of native storage services and differences in API implementation, compatibility and behavioral details may differ from S3. For example, OSS needs to set an independent header to ensure consistent behavior for <code>Range</code>. In addition to docking with native storage services, OpenDAL will also perform targeted processing for compatible services to ensure users&#x27; data access experience.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="advantages-of-opendal">Advantages of OpenDAL<a href="#advantages-of-opendal" class="hash-link" aria-label="Direct link to Advantages of OpenDAL" title="Direct link to Advantages of OpenDAL">​</a></h2>
+<p>OpenDAL is not the only project dedicated to providing data access abstraction, but compared to other similar projects, OpenDAL has the following advantages:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="rich-service-support">Rich Service Support<a href="#rich-service-support" class="hash-link" aria-label="Direct link to Rich Service Support" title="Direct link to Rich Service Support">​</a></h3>
+<p>OpenDAL supports dozens of storage services, covering a wide range of scenarios and supporting on-demand selection:</p>
+<ul>
+<li>Standard Storage Protocols: FTP, HTTP, SFTP, WebDAV, etc.</li>
+<li>Object Storage Services: azblob, gcs, obs, oss, s3, etc.</li>
+<li>File Storage Services: fs, azdls, hdfs, webhdfs, ipfs, etc.</li>
+<li>Consumer Cloud Storage Service: Google Drive, OneDrive, Dropbox, etc.</li>
+<li>Key-Value Storage Service: Memory, Redis, Rocksdb, etc.</li>
+<li>Cache Storage Service: Ghac, Memcached, etc.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="complete-cross-language-bindings">Complete Cross-Language Bindings<a href="#complete-cross-language-bindings" class="hash-link" aria-label="Direct link to Complete Cross-Language Bindings" title="Direct link to Complete Cross-Language Bindings">​</a></h3>
+<p>With Rust as the core, OpenDAL now provides binding support for multiple languages such as Python/Node.js/Java/C and is also actively developing bindings for other languages.</p>
+<p>Cross-language bindings not only provide unified storage access abstractions for other languages but also follow naming conventions and development habits that are common in various languages as much as possible to pave the way for quick use.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="powerful-middleware-support">Powerful Middleware Support<a href="#powerful-middleware-support" class="hash-link" aria-label="Direct link to Powerful Middleware Support" title="Direct link to Powerful Middleware Support">​</a></h3>
+<p>OpenDAL offers native layer support, enabling users to implement middleware or intercept for all operations.</p>
+<ul>
+<li>Error Retry: OpenDAL supports fine-grained error retry capabilities. In addition to common request retries, it supports breakpoint resumable transmission without having to re-read the entire file.</li>
+<li>Observability: OpenDAL implements logging,tracing,and metrics support for all operations. Turning on middleware can directly obtain observability capabilities for storage.</li>
+<li>Concurrency control, flow control, fuzz testing, and more.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="easy-to-use">Easy to Use<a href="#easy-to-use" class="hash-link" aria-label="Direct link to Easy to Use" title="Direct link to Easy to Use">​</a></h3>
+<p>OpenDAL&#x27;s API has been well designed and polished in actual use. The documentation covers everything and is easy to get started with. Here&#x27;s an example of using Python bindings to access HDFS:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> opendal</span><br></spa [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="use-cases-of-opendal">Use Cases of OpenDAL<a href="#use-cases-of-opendal" class="hash-link" aria-label="Direct link to Use Cases of OpenDAL" title="Direct link to Use Cases of OpenDAL">​</a></h3>
+<p>Currently, OpenDAL is widely used in various scenarios that require cloud-native capabilities, including but not limited to databases, data pipelines, and caches. The main user cases include:</p>
+<ul>
+<li><a href="https://github.com/datafuselabs/databend/" target="_blank" rel="noopener noreferrer">Databend</a>: A modern Elasticity and Performance cloud data warehouse. Using OpenDAL to read and write persistent data (s3, azblob, gcs, hdfs, etc.) and cache data (fs, redis, rocksdb, moka, etc.).</li>
+<li><a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a>: An open-source, cloud-native, distributed time-series database. Using OpenDAL to read and write persistent data (s3, azblob, etc.).</li>
+<li><a href="https://github.com/mozilla/sccache/" target="_blank" rel="noopener noreferrer">mozilla/sccache</a>: <code>sccache</code> is <a href="https://github.com/ccache/ccache" target="_blank" rel="noopener noreferrer"><code>ccache</code></a> with cloud storage. Using OpenDAL to read and write cache data (s3 and ghac, etc.).</li>
+<li><a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a>: A Distributed SQL Database for Stream Processing. Using OpenDAL to read and write persistent data (s3, azblob, hdfs, etc.).</li>
+<li><a href="https://github.com/vectordotdev/vector" target="_blank" rel="noopener noreferrer">Vector</a>: A high-performance observability data pipeline. Using OpenDAL to write persistent data (currently mainly using hdfs).</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="future-plans-of-opendal">Future Plans of OpenDAL<a href="#future-plans-of-opendal" class="hash-link" aria-label="Direct link to Future Plans of OpenDAL" title="Direct link to Future Plans of OpenDAL">​</a></h2>
+<p>In addition to further meeting the needs of cloud-native data access, OpenDAL will continue to expand user scenarios and actively explore its use in data science and mobile applications. At the same time, OpenDAL will continue to polish its existing implementations and bindings to provide users with a better integration experience.</p>
+<p>OpenDAL will also explore how to improve users&#x27; workflows in data management and service integration:</p>
+<ul>
+<li>Polish the <code>oli</code> command-line tool to help users manage data painlessly.</li>
+<li>Implement the <code>oay</code> proxy service to provide users with high-quality compatible APIs.</li>
+</ul>
+<p>In addition, since OpenDAL is currently a cross-language project, we also plan to write a series of introductory tutorials to help everyone learn OpenDAL from scratch while learning the language.</p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announc [...]
+</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
new file mode 100644
index 000000000..16a597640
--- /dev/null
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -0,0 +1,74 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta  [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>On February 27th, 2023, the <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> project achieved a milestone by winning the approval to join the incubator of the <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a> (ASF), the world&#x27;s leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.</p>
+<p>This is a significant moment for <a href="https://github.com/datafuselabs/databend" target="_blank" rel="noopener noreferrer">Databend</a>, as it means that OpenDAL&#x27;s technology and vision have received wider recognition and support from the open source community.</p>
+<blockquote>
+<p>The Apache Incubator was established in October 2002 to provide a path for projects and codebases that aspire to become part of the Apache Software Foundation. Incubating projects need to follow ASF&#x27;s governance and operational practices, and use ASF&#x27;s infrastructure and resources. Incubating projects need to go through a series of stages and evaluations before they can graduate to become top-level projects (TLPs) of ASF.</p>
+</blockquote>
+<p><img decoding="async" loading="lazy" alt="Apache OpenDAL Project Incubation Status - Apache Incubator" src="/assets/images/incubator-project-opendal-095982818f2f177cfd4cd267c8f282c4.png" width="1373" height="1006" class="img_AUsV"></p>
+<p><em><a href="https://incubator.apache.org/projects/opendal.html" target="_blank" rel="noopener noreferrer">https://incubator.apache.org/projects/opendal.html</a></em></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-is-opendal">What is OpenDAL?<a href="#what-is-opendal" class="hash-link" aria-label="Direct link to What is OpenDAL?" title="Direct link to What is OpenDAL?">​</a></h2>
+<p>Data is one of the most important assets in the future, and data access is the key for realizing data value.</p>
+<p>There are various kinds of storage services in the market, each with its own unique interfaces and features, which bring a lot of complexity and inconvenience to data access.</p>
+<p>OpenDAL provides a unified, simple, efficient, reliable, and observable data access layer that allows developers to seamlessly use different storage services and enjoy the best user experience.</p>
+<p><img decoding="async" loading="lazy" alt="M*N to M+N with OpenDAL" src="/assets/images/opendal-power-549a25c15039d5ff165b082cf2fd7476.png" width="5724" height="1518" class="img_AUsV"></p>
+<p>OpenDAL simplifies the process of interfacing different storage services, and provides features such as automatic retry, request optimization, and observability. With OpenDAL, developers can directly access a bunch of storage services, without having to understand and master the details of specific SDKs.</p>
+<p>OpenDAL&#x27;s features include but are not limited to:</p>
+<ul>
+<li>Support for dozens of storage services, including local file system, HDFS, S3, OSS, etc.</li>
+<li>Provide a unified data access interface, without worrying about the underlying storage details.</li>
+<li>Support for various common data operations, including <code>read</code>, <code>write</code>, <code>list</code>, etc.</li>
+<li>Support for automatic retry, request optimization, and observability mechanisms.</li>
+<li>Zero cost, directly mapped to API calls.</li>
+<li>Cross-language bindings: Python, Node.js, C (being worked on), etc.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="the-story-about-opendal">The Story about OpenDAL<a href="#the-story-about-opendal" class="hash-link" aria-label="Direct link to The Story about OpenDAL" title="Direct link to The Story about OpenDAL">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="born-for-universal-data-access">Born for Universal Data Access<a href="#born-for-universal-data-access" class="hash-link" aria-label="Direct link to Born for Universal Data Access" title="Direct link to Born for Universal Data Access">​</a></h3>
+<p>OpenDAL originated from the vision of creating a universal, unified and user-friendly data access layer. It came into being in late 2021, initially as a component of the Databend project.</p>
+<ul>
+<li>On December 21, 2021, <a href="http://github.com/Xuanwo" target="_blank" rel="noopener noreferrer">Xuanwo</a> embarked on the design and re-implementation of Databend&#x27;s storage access layer, <a href="https://github.com/datafuselabs/databend/pull/3575" target="_blank" rel="noopener noreferrer">dal2: Add basic operations of <code>read</code>, <code>write</code>, <code>stat</code>, <code>delete</code></a>.</li>
+<li>On December 27, 2021, the <a href="https://github.com/datafuselabs/databend/discussions/3662" target="_blank" rel="noopener noreferrer">proposal: Vision of Databend DAL</a> was put forward and discussed. On December 29th, dal2&#x27;s implementation was integrated into Databend.</li>
+<li>On February 14th 2022 , dal2 officially separated from Databend&#x27;s code repository and became a standalone top-level project. It was formally renamed OpenDAL.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="from-one-to-multiple">From One to Multiple<a href="#from-one-to-multiple" class="hash-link" aria-label="Direct link to From One to Multiple" title="Direct link to From One to Multiple">​</a></h3>
+<p>Thanks to Xuanwo, <a href="https://github.com/ClSlaid" target="_blank" rel="noopener noreferrer">ClSlaid</a> and many other contributors, OpenDAL quickly became a data access layer that supports mainstream storage services such as AWS S3 / Azure Blob / GCS / HDFS, and provided cross-cloud native storage and access support for Databend&#x27;s <code>COPY INTO</code>, Stage, Storage.</p>
+<p><a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a> was the first large-scale Rust database project to actively use OpenDAL after Databend. Later, with Xuanwo&#x27;s efforts, <a href="https://github.com/mozilla/sccache" target="_blank" rel="noopener noreferrer">sccache</a> under Mozilla also tried to use OpenDAL to take over the storage layer. In order to provide more comprehensive support, OpenDAL soon added support for GitHub [...]
+<p>Then, <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a> and <a href="https://github.com/vectordotdev/vector" target="_blank" rel="noopener noreferrer">Vector</a> were supported as well. The number of OpenDAL users started to grow. More and more users choose OpenDAL as their storage access layer.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="skys-the-limit">Sky&#x27;s the Limit<a href="#skys-the-limit" class="hash-link" aria-label="Direct link to Sky&#x27;s the Limit" title="Direct link to Sky&#x27;s the Limit">​</a></h3>
+<p>OpenDAL has established a small community and formed a product matrix. In addition to the <a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">Rust - opendal</a>, it also provides <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">Python - opendal</a> and <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">Node.js - opendal</a> bindings.</p>
+<p>OpenDAL has released 99 versions since its open source, with 700+ GitHub stars, 349K downloads, and 48 developers. The project has been actively updated. We sincerely thank every contributor for their efforts and dedication.</p>
+<p>Being a part of Apache incubator is an important milestone in OpenDAL&#x27;s development history. We hope to leverage ASF&#x27;s platform and resources to let OpenDAL focus on providing a neutral, vendor-free, painless, and efficient storage access layer, and better serve the developers.</p>
+<p>We expect OpenDAL to be widely used in the following application scenarios:</p>
+<ul>
+<li>Data analysis: OpenDAL can help data analysts quickly read or write data from different storage services, and perform various format conversions and operations.</li>
+<li>Data science: OpenDAL can help data scientists easily get or save data from different storage services, and perform various preprocessing and postprocessing.</li>
+<li>Data engineering: OpenDAL can help data engineers efficiently build and manage data pipelines between different storage services, and perform various monitoring and tuning.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="acknowledgements">Acknowledgements<a href="#acknowledgements" class="hash-link" aria-label="Direct link to Acknowledgements" title="Direct link to Acknowledgements">​</a></h2>
+<p><strong><em>From Xuanwo</em></strong></p>
+<p>Hello everyone, I&#x27;m Xuanwo, the Committer of Apache OpenDAL.</p>
+<p>The OpenDAL project embodies my personal dream. Now it has entered the Apache incubator with the collaboration of the community. I feel very happy at this moment. Thank you all contributors for your contributions, thank Databend Labs for your support, thank Champion tison for your guidance, thank Mentors ningjiang, wusheng, tedliu and hexiaoqiao for your advice.</p>
+<p>Let us follow the guidance of Apache Way to build a community together and create value for users by providing free, painless and efficient data access experience!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="join-apache-opendal-community">Join Apache OpenDAL Community<a href="#join-apache-opendal-community" class="hash-link" aria-label="Direct link to Join Apache OpenDAL Community" title="Direct link to Join Apache OpenDAL Community">​</a></h2>
+<p>We welcome developers and users who are interested in participating in OpenDAL project to join OpenDAL community and follow OpenDAL&#x27;s latest news. You can get more information through the following ways:</p>
+<ul>
+<li>Visit OpenDAL official website: <a href="https://opendal.apache.org" target="_blank" rel="noopener noreferrer">https://opendal.apache.org</a></li>
+<li>Explore OpenDAL GitHub repository: <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal</a></li>
+<li>Join OpenDAL Discord channel: <a href="https://opendal.apache.org/discord" target="_blank" rel="noopener noreferrer">https://opendal.apache.org/discord</a></li>
+<li>Subscribe to OpenDAL mailing list: <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a></li>
+</ul></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/blog/2023-03-16-opendal- [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/owo-1/index.html b/blog/owo-1/index.html
new file mode 100644
index 000000000..7a69fbfea
--- /dev/null
+++ b/blog/owo-1/index.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">OwO #1: The v0.40 Release | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/owo-1/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><me [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.</p>
+</blockquote>
+<p>Hello! It&#x27;s been a while since our last update. We&#x27;ve been hard at work determining the optimal way to implement new features and improvements. We&#x27;re thrilled to announce that we&#x27;ll soon be releasing v0.40.</p>
+<p>This post is structured into three main sections:</p>
+<ul>
+<li>Outcome (1st <code>O</code> in <code>OwO</code>): Summarizes the key accomplishments in the v0.40 release.</li>
+<li>Working (the <code>w</code> in <code>OwO</code>): Provides an update on our current work.</li>
+<li>Outlook (2nd <code>O</code> in <code>OwO</code>): Discusses what lies ahead for OpenDAL.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="outcome">Outcome<a href="#outcome" class="hash-link" aria-label="Direct link to Outcome" title="Direct link to Outcome">​</a></h2>
+<p>OpenDAL now comprises four primary components:</p>
+<ul>
+<li>Core: The core library written in Rust.</li>
+<li>Bindings: Language bindings powered by the OpenDAL Rust core.</li>
+<li>Applications: Applications built using the OpenDAL Rust core.</li>
+<li>Integrations: Collaborations with other projects.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="core">Core<a href="#core" class="hash-link" aria-label="Direct link to Core" title="Direct link to Core">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="unifying-append-and-write-functions">Unifying Append and Write Functions<a href="#unifying-append-and-write-functions" class="hash-link" aria-label="Direct link to Unifying Append and Write Functions" title="Direct link to Unifying Append and Write Functions">​</a></h4>
+<p>OpenDAL has supported <code>append</code> operations since <code>v0.36</code>. We&#x27;ve found, however, that this led to significant duplication between append and write. As a result, we&#x27;ve streamlined the two functionalities into a single write function. Our users can now:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token keyw [...]
+<p>This way, users can reuse the <code>Writer</code> in their own logic without handling <code>append</code> separately.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="new-lister-api">New Lister API<a href="#new-lister-api" class="hash-link" aria-label="Direct link to New Lister API" title="Direct link to New Lister API">​</a></h4>
+<p>To improve API consistency, we&#x27;ve made some adjustments to our listing functions. We&#x27;ve added <code>list</code> and <code>list_with</code> methods that perform single operations and renamed the original <code>list</code> to <code>lister</code> and <code>lister_with</code>.</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Old API</span><span class="token plain"></span [...]
+<p>This brings uniformity to our API offerings.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="list-with-metakey">List With Metakey<a href="#list-with-metakey" class="hash-link" aria-label="Direct link to List With Metakey" title="Direct link to List With Metakey">​</a></h4>
+<p>To speed up list operations, OpenDAL can now fetch and store metadata during the listing process. This eliminates the need for separate metadata calls:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> entries</span><span class="tok [...]
+<p>This makes metadata retrieval more intuitive.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="buffered-writer">Buffered Writer<a href="#buffered-writer" class="hash-link" aria-label="Direct link to Buffered Writer" title="Direct link to Buffered Writer">​</a></h4>
+<p>We&#x27;ve added general buffer support to optimize writing operations.</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> w </span><span class="token op [...]
+<h4 class="anchor anchorWithStickyNavbar_debX" id="others">Others<a href="#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others">​</a></h4>
+<p>Other improvements in the core library can be found in our <a href="https://github.com/apache/opendal/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">CHANGELOG</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="bindings">Bindings<a href="#bindings" class="hash-link" aria-label="Direct link to Bindings" title="Direct link to Bindings">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="c">C++<a href="#c" class="hash-link" aria-label="Direct link to C++" title="Direct link to C++">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/cpp" target="_blank" rel="noopener noreferrer"><code>opendal-cpp</code></a> is ready for its first release! Welcome to check it out and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="haskell">Haskell<a href="#haskell" class="hash-link" aria-label="Direct link to Haskell" title="Direct link to Haskell">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/haskell" target="_blank" rel="noopener noreferrer"><code>opendal-hs</code></a> is ready for its first release! Welcome to check it out and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="java">Java<a href="#java" class="hash-link" aria-label="Direct link to Java" title="Direct link to Java">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/java" target="_blank" rel="noopener noreferrer"><code>opendal-java</code></a> enabled more available services in this release, allowing user to visit services like <code>redis</code> that not enabled by default in rust core. And <code>opendal-java</code> enabled blocking layer to allow users visit services like <code>s3</code> in blocking way.</p>
+<p>Welcome to integrate <code>opendal-java</code> into your project and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="new-bindings">New bindings!<a href="#new-bindings" class="hash-link" aria-label="Direct link to New bindings!" title="Direct link to New bindings!">​</a></h4>
+<ul>
+<li><a href="https://github.com/apache/opendal/tree/main/bindings/dotnet" target="_blank" rel="noopener noreferrer"><code>opendal-dotnet</code></a></li>
+<li><a href="https://github.com/apache/opendal/tree/main/bindings/php" target="_blank" rel="noopener noreferrer"><code>opendal-php</code></a></li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="applications">Applications<a href="#applications" class="hash-link" aria-label="Direct link to Applications" title="Direct link to Applications">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="oay">oay<a href="#oay" class="hash-link" aria-label="Direct link to oay" title="Direct link to oay">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bin/oay" target="_blank" rel="noopener noreferrer">oay</a> is OpenDAL Gateway that allows users to access OpenDAL services via existing protocols like <code>s3</code> and <code>webdav</code>. It works like a proxy that forwarding requests to OpenDAL services.</p>
+<p>In this release, we implement basic <code>webdav</code> support. Users can convert any storage services to a webdav server!</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="oli">oli<a href="#oli" class="hash-link" aria-label="Direct link to oli" title="Direct link to oli">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bin/oay" target="_blank" rel="noopener noreferrer">oli</a> is OpenDAL CLI that allows users to access storage services via CLI like <code>s3cmd</code> and <code>gcloud</code> does.</p>
+<p>We fixed some experience issues in this release and improved some docs. Welcome to try it out and give us some feedback.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="integrations">Integrations<a href="#integrations" class="hash-link" aria-label="Direct link to Integrations" title="Direct link to Integrations">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="object_store">object_store<a href="#object_store" class="hash-link" aria-label="Direct link to object_store" title="Direct link to object_store">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/integrations/object_store" target="_blank" rel="noopener noreferrer">object_store</a> instead to implement <a href="https://github.com/apache/arrow-rs/tree/master/object_store" target="_blank" rel="noopener noreferrer"><code>object_store</code></a>&#x27;s trait over OpenDAL Operator so that users can use OpenDAL as a backend for <code>object_store</code>.</p>
+<p><code>object_store</code> is mostly functional, but there are some edge use cases that OpenDAL has yet to support.</p>
+<p>So far, this release hasn&#x27;t seen progress in this area; we are awaiting the resolution of the issue <a href="https://github.com/apache/opendal/issues/2762" target="_blank" rel="noopener noreferrer">Allow list paths that do not end with <code>/</code></a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="working">Working<a href="#working" class="hash-link" aria-label="Direct link to Working" title="Direct link to Working">​</a></h2>
+<p>We are working on the following things:</p>
+<ul>
+<li><code>object_store</code> support: Make <code>object_store</code> integration works and find a user for it.</li>
+<li>Remove the <code>/</code> limitation for path, so we can list a path without ending with <code>/</code>.</li>
+<li>Expand the <code>start-after</code> support to more services (Address <a href="https://github.com/apache/opendal/issues/2786" target="_blank" rel="noopener noreferrer">#2786</a>).</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="outlook">Outlook<a href="#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook">​</a></h2>
+<p>We are exploring some innovative ideas:</p>
+<ul>
+<li><a href="https://github.com/apache/opendal/discussions/2951" target="_blank" rel="noopener noreferrer">OpenDAL REST/gRPC API</a>: A REST/gRPC Server for OpenDAL.</li>
+<li><a href="https://github.com/apache/opendal/discussions/2953" target="_blank" rel="noopener noreferrer">OpenDAL Cache</a>: OpenDAL native cache libs that allowing users to access data more efficiently.</li>
+<li><a href="https://github.com/apache/opendal/discussions/2952" target="_blank" rel="noopener noreferrer">OpenDAL File System</a>: A read-only file system that built upon OpenDAL in rust!</li>
+<li><a href="https://github.com/apache/opendal/discussions/3042" target="_blank" rel="noopener noreferrer">kio-opendal</a>: A kio plugin powered by OpenDAL that allows users to visit different storage services in <a href="https://apps.kde.org/dolphin/" target="_blank" rel="noopener noreferrer">KDE Dolphin</a>.</li>
+<li>gvfs-opendal: A gvfs plugin powered by OpenDAL that allows users to visit different storage services in <a href="https://wiki.gnome.org/Apps/Files" target="_blank" rel="noopener noreferrer">GNOME Files</a></li>
+</ul>
+<p>Feel free to join in the discussion!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="summary">Summary<a href="#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2>
+<p>This marks our first OpenDAL <code>OwO</code> post. We welcome your feedback.</p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/owo/">owo</a></li></ul></div></div><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><a href="https://github. [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/rss.xml b/blog/rss.xml
new file mode 100644
index 000000000..c880f1306
--- /dev/null
+++ b/blog/rss.xml
@@ -0,0 +1,555 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+    <channel>
+        <title>Apache OpenDAL™ Blog</title>
+        <link>https://opendal.apache.org/blog/</link>
+        <description>Apache OpenDAL™ Blog</description>
+        <lastBuildDate>Sat, 01 Mar 2025 00:00:00 GMT</lastBuildDate>
+        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
+        <generator>https://github.com/jpmonette/feed</generator>
+        <language>en</language>
+        <item>
+            <title><![CDATA[Apache OpenDAL 2025 Roadmap: Perfecting Production Adoption]]></title>
+            <link>https://opendal.apache.org/blog/2025/03/01/2025-roadmap/</link>
+            <guid>https://opendal.apache.org/blog/2025/03/01/2025-roadmap/</guid>
+            <pubDate>Sat, 01 Mar 2025 00:00:00 GMT</pubDate>
+            <description><![CDATA[Hi everyone, long time no see. Although we have been actively developing OpenDAL and consistently releasing updates, we haven’t provided a clear overview of where OpenDAL is heading. This post aims to address that. Here, we will discuss OpenDAL's current position and the future directions we are moving toward.]]></description>
+            <content:encoded><![CDATA[<p>Hi everyone, long time no see. Although we have been actively developing OpenDAL and consistently releasing updates, we haven’t provided a clear overview of where OpenDAL is heading. This post aims to address that. Here, we will discuss OpenDAL's current position and the future directions we are moving toward.</p>
+<p>I hope this post serves as a guide for our development, encourages more people to contribute, and ultimately helps achieve the vision of OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-opendal">What's OpenDAL?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#whats-opendal" class="hash-link" aria-label="Direct link to What's OpenDAL?" title="Direct link to What's OpenDAL?">​</a></h2>
+<p>Apache OpenDAL (<code>/ˈoʊ.pən.dæl/</code>, pronounced "OH-puhn-dal") is an Open Data Access Layer that enables seamless interaction with diverse storage services. Our VISION is <a href="https://opendal.apache.org/vision" target="_blank" rel="noopener noreferrer"><strong>One Layer, All Storage</strong></a>, and our core principles are Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture.</p>
+<p>We are building:</p>
+<ul>
+<li><a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">A core library built in Rust</a> that supports all services at zero cost and offers unified retry, concurrency, logging, tracing, metrics, timeout and more layers.</li>
+<li>Language bindings for <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">Python</a>, <a href="https://central.sonatype.com/artifact/org.apache.opendal/opendal" target="_blank" rel="noopener noreferrer">Java</a>, <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">Node.js</a>, C/C++, and more.</li>
+<li>Integrations with various frameworks, including <a href="https://crates.io/crates/parquet-opendal" target="_blank" rel="noopener noreferrer">Parquet</a>, <a href="https://crates.io/crates/fuse3_opendal" target="_blank" rel="noopener noreferrer">FUSE</a>, <a href="https://github.com/messense/dav-server-rs" target="_blank" rel="noopener noreferrer">DAV server</a>, and others.</li>
+<li>Binaries for different use cases, such as <a href="https://crates.io/crates/oli" target="_blank" rel="noopener noreferrer">CLI</a> and <a href="https://crates.io/crates/ofs" target="_blank" rel="noopener noreferrer">FUSE</a>.</li>
+</ul>
+<p>In short, through OpenDAL, users can access ALL storage services within ONE layer.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="wheres-opendal">Where's OpenDAL?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#wheres-opendal" class="hash-link" aria-label="Direct link to Where's OpenDAL?" title="Direct link to Where's OpenDAL?">​</a></h2>
+<p>OpenDAL's rust core has already released 143 versions, has <a href="https://crates.io/crates/opendal/reverse_dependencies" target="_blank" rel="noopener noreferrer">67 reverse dependencies</a> listed on <a href="http://crates.io/" target="_blank" rel="noopener noreferrer">crates.io</a>, and is used by <a href="https://github.com/apache/opendal/network/dependents" target="_blank" rel="noopener noreferrer">612 projects</a> as recorded on GitHub.</p>
+<p>OpenDAL's production users include databases such as <a href="https://github.com/databendlabs/databend" target="_blank" rel="noopener noreferrer">Databend</a>, <a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a>, and <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a>, as well as tools like <a href="https://loco.rs/" target="_blank" rel="noopener noreferrer">Loco</a>,  [...]
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/opendal-rust-downloads-8f5b499b4cd72f80bd63ad4f34500f78.png" width="1928" height="1300" class="img_AUsV"></p>
+<p>Apart from OpenDAL's Rust core, its various language bindings have also seen significant growth over the past year. Take python binding as an example. <a href="https://github.com/langgenius/dify/" target="_blank" rel="noopener noreferrer">Dify</a>, an LLM app development platform, is using OpenDAL to access different storage services.</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/opendal-python-downloads-c5d552b37aa69309d8b3c032b686dc98.png" width="2502" height="796" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-next-for-opendal">What's next for OpenDAL?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#whats-next-for-opendal" class="hash-link" aria-label="Direct link to What's next for OpenDAL?" title="Direct link to What's next for OpenDAL?">​</a></h2>
+<p>The following is the famous technology adoption lifecycle curve. If I were to indicate the position of OpenDAL, I would say it is at the end of the Innovators stage and moving toward the Early Adopters stage.</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/adoption-curve-d76b6c9b5a8c14661c9800fc4b4ec239.png" width="1200" height="720" class="img_AUsV">
+(picture from TechTarget <a href="https://www.techtarget.com/searchcio/definition/technology-adoption-lifecycle" target="_blank" rel="noopener noreferrer">technology adoption lifecycle</a>)</p>
+<p>Innovators are adopting OpenDAL. Projects like Databend, RisingWave, GreptimeDB, and sccache have been using OpenDAL in production for years. However, early adopters are still hesitant to use OpenDAL—and they have valid reasons.</p>
+<p>For examples:</p>
+<ul>
+<li>OpenDAL hasn't reached version 1.0 yet and still introduces breaking changes from time to time, sometimes even requiring code modifications for an OpenDAL upgrade. This also creates a burden for libraries that depend on OpenDAL, as every breaking change affects them as well.</li>
+<li>OpenDAL lacks comprehensive documentation, particularly for its bindings in Python and Java. Users need to invest significant effort and love to integrate OpenDAL bindings into their projects.</li>
+<li>OpenDAL lacks some important features, such as checksum support, caching, metrics of underlying http requests and initialization from a URI.</li>
+</ul>
+<p>I believe we should perfect production adoption in 2025 to get OpenDAL ready for early adopters. Only in this way can we implement our vision: <strong>One Layer, All Storage.</strong></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-to-do-in-2025">What to do in 2025?<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#what-to-do-in-2025" class="hash-link" aria-label="Direct link to What to do in 2025?" title="Direct link to What to do in 2025?">​</a></h2>
+<p>Our plans for 2025 include the following:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="features-needed-in-production">Features Needed in Production<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#features-needed-in-production" class="hash-link" aria-label="Direct link to Features Needed in Production" title="Direct link to Features Needed in Production">​</a></h3>
+<p>In 2025, we plan to implement the following features that are importmant for production adoption:</p>
+<ul>
+<li><a href="https://github.com/apache/opendal/issues/5480" target="_blank" rel="noopener noreferrer">Context</a>: Introduce context in OpenDAL so that services and layers can share the same context. This enables users to gain deeper insights into OpenDAL's internal operations by incorporating metrics, logging, and tracing into the underlying HTTP client we use.</li>
+<li><a href="https://github.com/apache/opendal/issues/2611" target="_blank" rel="noopener noreferrer">Versioning</a>: Introduce full file versioning support in OpenDAL, enabling users to read, write, delete, list, and restore versioned files. This functionality will allow users to recover mistakenly deleted files and facilitate disaster recovery.</li>
+<li><a href="https://github.com/apache/opendal/issues/5549" target="_blank" rel="noopener noreferrer">Checksum</a>: Introduce end-to-end checksum support in OpenDAL, enabling users to perform checksums during reading and writing without worrying about bit flips in memory or over the network.</li>
+<li><a href="https://github.com/apache/opendal/issues/5678" target="_blank" rel="noopener noreferrer">Caching</a>: Provide high-quality built-in cache support in OpenDAL while ensuring users have the flexibility to implement their own caching logic.</li>
+<li><a href="https://github.com/apache/opendal/issues/3022" target="_blank" rel="noopener noreferrer">Initialization From URI</a>: Allow users to initialize OpenDAL from a URI string, making it easier to configure and use OpenDAL in various environments.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="improvements-needed-for-production">Improvements Needed for Production<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#improvements-needed-for-production" class="hash-link" aria-label="Direct link to Improvements Needed for Production" title="Direct link to Improvements Needed for Production">​</a></h3>
+<p>In 2025, we plan to improve the following aspects of OpenDAL to ensure users can confidently use it in production.</p>
+<ul>
+<li>Documentation: Improve the documentation for OpenDAL, particularly for bindings like Python, Node.js, and Java. The first step is to generate well-structured documentation for the configuration values of each service.</li>
+<li>Communitation: Bring Back Our Community Meetings. OpenDAL used to hold regular tri-weekly meetings, but we have been unable to maintain them in the last year. We now plan to revive these meetings and encourage more face-to-face discussions in the coming years.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="https://opendal.apache.org/blog/2025/03/01/2025-roadmap/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>2025 marks the third year of the OpenDAL community. A huge thanks to all OpenDAL contributors and users for helping us reach this milestone. There's still a long way to go to achieve our vision, and we invite you all to join us on this incredible journey!</p>
+<p><a href="https://github.com/apache/opendal/discussions/5679" target="_blank" rel="noopener noreferrer">Discuss about this post here</a></p>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+        <item>
+            <title><![CDATA[Apache OpenDAL™ Beijing Meetup 1st]]></title>
+            <link>https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/</link>
+            <guid>https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/</guid>
+            <pubDate>Mon, 09 Sep 2024 00:00:00 GMT</pubDate>
+            <description><![CDATA[Hello, everyone!]]></description>
+            <content:encoded><![CDATA[<p>Hello, everyone!</p>
+<p>On behalf of the OpenDAL community, I'm pleased to announce that the first Apache OpenDAL™ Beijing Meetup will be held on September 14th.</p>
+<p>You are welcome to register for this event at: <a href="https://docs.qq.com/form/page/DYnpJWFFsSWVFeGRj" target="_blank" rel="noopener noreferrer">https://docs.qq.com/form/page/DYnpJWFFsSWVFeGRj</a></p>
+<p>The event will take place at <a href="https://maps.app.goo.gl/4Tr7JCJ5HdCoVGdeA" target="_blank" rel="noopener noreferrer">北京市朝阳区北辰西路 8 号北辰世纪中心A座12层1215房间(国家会议中心西面的写字楼)</a> on the afternoon of September 14th.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="agenda">Agenda<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#agenda" class="hash-link" aria-label="Direct link to Agenda" title="Direct link to Agenda">​</a></h2>
+<ul>
+<li>12:00 - 13:00: Lunch / Networking (food provided)</li>
+<li>13:00 - 14:00: Welcome / Introductions</li>
+<li>14:00 - 15:00: Talks</li>
+<li>15:00 - 15:30: Coffee / Email Break</li>
+<li>15:30 - 16:30: Breakouts / Discussions</li>
+<li>16:30 - 17:00: Close / Conclusion</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="welcome">Welcome<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#welcome" class="hash-link" aria-label="Direct link to Welcome" title="Direct link to Welcome">​</a></h2>
+<p>Brief introductory remarks, thank to the sponsor, outline of the day, participant introductions (name, github handle, optional affiliation, optional reason you came to the meetup)</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="talks">Talks<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#talks" class="hash-link" aria-label="Direct link to Talks" title="Direct link to Talks">​</a></h2>
+<p>Five 10-15 minute talks about opendal.</p>
+<ul>
+<li><a href="https://github.com/tisonkun/" target="_blank" rel="noopener noreferrer">@tisonkun</a> about OpenDAL Community Growth</li>
+<li><a href="https://github.com/WenyXu/" target="_blank" rel="noopener noreferrer">@WenyXu</a> for using OpenDAL in <a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a></li>
+<li><a href="https://github.com/wcy-fdu/" target="_blank" rel="noopener noreferrer">@wcy-fdu</a> for using OpenDAL in <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a></li>
+<li><a href="https://github.com/wcy-fdu/" target="_blank" rel="noopener noreferrer">@drmingdrmer</a> for using OpenDAL in <a href="https://github.com/datafuselabs/openraft" target="_blank" rel="noopener noreferrer">OpenRaft</a></li>
+<li><a href="https://github.com/Xuanwo/" target="_blank" rel="noopener noreferrer">@Xuanwo</a> about OpenDAL Core 1.0</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="breakouts--discussions">Breakouts / Discussions<a href="https://opendal.apache.org/blog/2024/09/09/apache-opendal-meetup-beijing-1st/#breakouts--discussions" class="hash-link" aria-label="Direct link to Breakouts / Discussions" title="Direct link to Breakouts / Discussions">​</a></h2>
+<p>The idea is that we will break into small groups for 3 x 20 minute sessions. I will ring a gong or something similar every 20 minutes and you should find a new group to discuss.</p>
+<p>Potential seed topics (but obviously feel free to discuss anything):</p>
+<ul>
+<li>How do we make it easier for people to build systems on OpenDAL? What are the current barriers to community growth as you see them?</li>
+<li>How do we make it easier for people to contribute back to OpenDAL? What are the current barriers to contribution</li>
+<li>What features would you like to see / not see</li>
+</ul>
+<p>Ideally, in each session, one or more people would volunteer to write up any insights they got from the discussions, and post them to the overall ticket.</p>
+<hr>
+<p>Looking forward to meet you in this meetup!</p>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+        <item>
+            <title><![CDATA[Apache OpenDAL™ participates in Open Source Promotion Plan 2024]]></title>
+            <link>https://opendal.apache.org/blog/apache-opendal-participates-in-ospp-2024/</link>
+            <guid>https://opendal.apache.org/blog/apache-opendal-participates-in-ospp-2024/</guid>
+            <pubDate>Tue, 30 Apr 2024 00:00:00 GMT</pubDate>
+            <description><![CDATA[Hello, everyone!]]></description>
+            <content:encoded><![CDATA[<p>Hello, everyone!</p>
+<p>We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summer-ospp.ac.cn/" target="_blank" rel="noopener noreferrer">Open Source Promotion Plan (OSPP) 2024</a>. If you're not eligible or interested in participating in OSPP, then most of this post likely isn't relevant to you; if you are, this should contain some useful information and links.</p>
+<p>Open Source Promotion Plan is a summer program organized by the Institute of Software Chinese Academy of Sciences and long-term supported by the Open Source Software Supply Chain Promotion Plan. It aims to encourage college students to actively participate in the maintenance and development of open source software, promote the vigorous development of open source software communities, and build the open source software supply chain together.</p>
+<p>The OSPP applicants now have several weeks to send project proposals to organizations that appeal to them. If their project proposal is accepted, they will embark on a 12-week journey during which they will try to complete their proposed project under the guidance of an assigned mentor.</p>
+<p>We have prepared <a href="https://github.com/apache/opendal/issues/4554" target="_blank" rel="noopener noreferrer">a list of project ideas</a> that can serve as inspiration for potential OSPP contributors that would like to send a project proposal to the OpenDAL project. You can try to find mentors on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist</a> or <a href="https://discord.gg/XQy8yGR2dg" target="_blank" rel="noopener noreferrer">Di [...]
+<p>You can start discussing the project ideas with OpenDAL Project maintainers immediately. The project proposal application period starts on April 30, 2024, and ends on June 4, 2024. Take note of that deadline, as there will be no extensions!</p>
+<p>If you are interested in contributing to the OpenDAL Project, we encourage you to check out our project idea list and send us a OSPP project proposal! Of course, you are also free to discuss these projects and/or try to move them forward even if you do not intend to (or cannot) participate in OSPP. We welcome all contributors to OpenDAL, as there is always enough work to do.</p>
+<p>We are excited about this event. Hoping you all feel the same way!</p>
+<blockquote>
+<p>This announcement is inspired a lot by the <a href="https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html" target="_blank" rel="noopener noreferrer">Rust participates in Google Summer of Code 2024</a>.</p>
+</blockquote>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+        <item>
+            <title><![CDATA[Apache OpenDAL™ participates in Google Summer of Code 2024]]></title>
+            <link>https://opendal.apache.org/blog/apache-opendal-participates-in-gsoc-2024/</link>
+            <guid>https://opendal.apache.org/blog/apache-opendal-participates-in-gsoc-2024/</guid>
+            <pubDate>Wed, 28 Feb 2024 00:00:00 GMT</pubDate>
+            <description><![CDATA[Hello, everyone!]]></description>
+            <content:encoded><![CDATA[<p>Hello, everyone!</p>
+<p>We're writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code (GSoC) 2024</a>. If you're not eligible or interested in participating in GSoC, then most of this post likely isn't relevant to you; if you are, this should contain some useful information and links.</p>
+<p>Google Summer of Code (GSoC) is an annual global program organized by Google that aims to bring new contributors to the world of open-source. The program pairs organizations (such as the OpenDAL Project) with contributors (usually students), with the goal of helping the participants make meaningful open-source contributions under the guidance of experienced mentors.</p>
+<p>Google is sponsoring the <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">2024 Summer of Code</a> and <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">The Apache Software Foundation</a> (ASF) registered as a mentoring organization. The GSoC applicants now have several weeks to send project proposals to organizations that appeal to them. If their project proposal is accepted, they will embark on a 12-week journey during [...]
+<p>We have prepared <a href="https://github.com/apache/opendal/issues/4131" target="_blank" rel="noopener noreferrer">a list of project ideas</a> that can serve as inspiration for potential GSoC contributors that would like to send a project proposal to the OpenDAL project. However, applicants can also come up with their own project ideas. You can discuss project ideas or try to find mentors on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist [...]
+<p>You can start discussing the project ideas with OpenDAL Project maintainers immediately. The project proposal application period starts on March 18, 2024, and ends on April 2, 2024 at 18:00 UTC. Take note of that deadline, as there will be no extensions!</p>
+<p>If you are interested in contributing to the OpenDAL Project, we encourage you to check out our project idea list and send us a GSoC project proposal! Of course, you are also free to discuss these projects and/or try to move them forward even if you do not intend to (or cannot) participate in GSoC. We welcome all contributors to OpenDAL, as there is always enough work to do.</p>
+<p>We are excited about this event. Hoping you all feel the same way!</p>
+<blockquote>
+<p>This announcement is inspired a lot by the <a href="https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html" target="_blank" rel="noopener noreferrer">Rust participates in Google Summer of Code 2024</a>.</p>
+</blockquote>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+        <item>
+            <title><![CDATA[Apache OpenDAL™ is now Graduated]]></title>
+            <link>https://opendal.apache.org/blog/apache-opendal-graduated/</link>
+            <guid>https://opendal.apache.org/blog/apache-opendal-graduated/</guid>
+            <pubDate>Mon, 22 Jan 2024 00:00:00 GMT</pubDate>
+            <description><![CDATA[Hello, everyone! I'm happy to announce that Apache OpenDAL™ has graduated from the Apache Incubator to become a Top-Level Project of the Apache Software Foundation.]]></description>
+            <content:encoded><![CDATA[<p>Hello, everyone! I'm happy to announce that <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">Apache OpenDAL™</a> has graduated from the <a href="https://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Apache Incubator</a> to become a Top-Level Project of <a href="https://apache.org/" target="_blank" rel="noopener noreferrer">the Apache Software Foundation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-apache-opendal">What's Apache OpenDAL?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-apache-opendal" class="hash-link" aria-label="Direct link to What's Apache OpenDAL?" title="Direct link to What's Apache OpenDAL?">​</a></h2>
+<p><strong>Apache OpenDAL</strong> is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way. Our VISION is <strong>access data freely</strong>.</p>
+<p>OpenDAL could be used as a <strong>better</strong> SDK for your storage services: A SDK with native integration of <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.RetryLayer.html" target="_blank" rel="noopener noreferrer">retry</a>, <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.LoggingLayer.html" target="_blank" rel="noopener noreferrer">logging</a>, <a href="https://opendal.apache.org/docs/rust/opendal/layers/struct.MetricsLayer.html" target= [...]
+<p>OpenDAL could be used as a <strong>super</strong> connector for your storage services: A connector that supports all kinds of storage services from Object Storage (s3, gcs, azblob), File Storage (fs, azdls, hdfs), Consumer Cloud Storage (gdrive, onedrive), Key-Value Storage (rocksdb, sled) to Cache Storage (memcached, moka).</p>
+<p>OpenDAL could be used as an <strong>elegant</strong> client for your storage services: A client with well designed API and  many language bindings: <a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">Rust</a>, C, Cpp, Dotnet, Go, Haskell, <a href="https://mvnrepository.com/artifact/org.apache.opendal/opendal-java" target="_blank" rel="noopener noreferrer">Java</a>, Lua, <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noref [...]
+<p>Need to access data? Give OpenDAL a try!</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token ke [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-the-asf">What's the ASF?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-the-asf" class="hash-link" aria-label="Direct link to What's the ASF?" title="Direct link to What's the ASF?">​</a></h2>
+<p>The Apache Software Foundation (ASF) is a nonprofit corporation to support a number of open-source software projects. The Apache Software Foundation exists to provide software for the public good. We believe in the power of community over code, known as The Apache Way. Thousands of people around the world contribute to ASF open source projects every day.</p>
+<p>The OpenDAL Community believes <a href="https://www.apache.org/theapacheway/" target="_blank" rel="noopener noreferrer">the apache way</a> that:</p>
+<ul>
+<li><em>Earned Authority</em>: all individuals are given the opportunity to participate, but their influence is based on publicly earned merit – what they contribute to the community.</li>
+<li><em>Community of Peers</em>: individuals participate at the ASF, not organizations.</li>
+<li><em>Open Communications</em>: as a virtual organization, the ASF requires all communications related to code and decision-making to be publicly accessible to ensure asynchronous collaboration, as necessitated by a globally-distributed community.</li>
+<li><em>Consensus Decision Making</em>: Apache Projects are overseen by a self-selected team of active volunteers who are contributing to their respective projects.</li>
+<li><em>Responsible Oversight</em>: The ASF governance model is based on trust and delegated oversight.</li>
+</ul>
+<p>The original creators <a href="https://github.com/datafuselabs/databend/" target="_blank" rel="noopener noreferrer">Databend</a> chosen to contribute OpenDAL to the ASF, embracing the Apache way through <a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator" target="_blank" rel="noopener noreferrer">joining the incubator program</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-graduation">What's graduation?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-graduation" class="hash-link" aria-label="Direct link to What's graduation?" title="Direct link to What's graduation?">​</a></h2>
+<p>In the <a href="https://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Apache Incubator</a>, the OpenDAL community is learning the Apache Way through daily development activities, growing its community and producing Apache releases.</p>
+<p>During the incubation, we:</p>
+<ul>
+<li>Consist of 19 committers, including mentors, with 12 serving as PPMC members.</li>
+<li>Boast 164 contributors.</li>
+<li>Made 9 releases—averaging at least one per month.</li>
+<li>Had 7 different release managers to date.</li>
+<li>Used by 10 known entities and is a dependency for 263 GitHub projects and 18 crates.io packages.</li>
+<li>Opened 1,200+ issues with 1,100+ successfully resolved.</li>
+<li>Submitted a total of 2,400+ PRs, most of them have been merged or closed.</li>
+</ul>
+<p>The graduation signifies that the OpenDAL Community is recognized as a <a href="https://opendal.apache.org/community/maturity" target="_blank" rel="noopener noreferrer">mature</a> community, which entails:</p>
+<ul>
+<li>CODE: OpenDAL is an <a href="https://github.com/apache/opendal/blob/main/LICENSE" target="_blank" rel="noopener noreferrer">Apache 2.0 licensed</a> open-source project with <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">accessible, buildable code</a> on GitHub, featuring <a href="https://github.com/apache/opendal/commits/main/" target="_blank" rel="noopener noreferrer">a traceable history and authenticated code provenance</a>.</li>
+<li>LICENSE: OpenDAL maintains <a href="https://github.com/apache/opendal/blob/main/DEPENDENCIES.md" target="_blank" rel="noopener noreferrer">open-source compliance</a> for all code and dependencies, requires contributor agreements, and clearly documents copyright ownership.</li>
+<li>Releases: OpenDAL offers standardized, committee-approved <a href="https://downloads.apache.org/opendal/" target="_blank" rel="noopener noreferrer">source code releases</a> with secure signatures, provides convenience binaries, and has <a href="https://opendal.apache.org/community/committers/release" target="_blank" rel="noopener noreferrer">a well-documented, repeatable release process</a>.</li>
+<li>Quality: OpenDAL is committed to code quality transparency, prioritizes security with quick issue responses, ensures backward compatibility with clear documentation, and actively addresses bug reports in a timely manner.</li>
+<li>Community: OpenDAL offers <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">a comprehensive homepage</a>, welcomes diverse contributions, promotes a meritocratic approach for active contributors, operates on community consensus, and ensures timely responses to user queries through various channels.</li>
+<li>Consensus: OpenDAL has a <a href="https://projects.apache.org/committee.html?opendal" target="_blank" rel="noopener noreferrer">public list of key decision-makers</a> and uses a consensus approach for decisions, documented on its <a href="https://lists.apache.org/list.html?dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">main communication channel</a>. It follows standard voting rules and records all important discussions in writing.</li>
+<li>Independence: OpenDAL is independent, with contributors from various companies acting on their own, not as representatives of any organization.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="whats-next">What's next?<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#whats-next" class="hash-link" aria-label="Direct link to What's next?" title="Direct link to What's next?">​</a></h2>
+<p>After graduation, OpenDAL Community will continue to focus on the following aspects under the VISION: <strong>access data freely</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-stable-services">More Stable Services<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#more-stable-services" class="hash-link" aria-label="Direct link to More Stable Services" title="Direct link to More Stable Services">​</a></h3>
+<p>OpenDAL now supports 59 services, although only some of them are <em>stable</em>.</p>
+<p><em>stable</em> for OpenDAL means that</p>
+<ul>
+<li>Have integration tests covered.</li>
+<li>Have at least one production user.</li>
+</ul>
+<p>The <em>stable</em> service established a feedback loop between the OpenDAL community and its users. Users can submit bug reports or feature requests to the OpenDAL community, which in turn can enhance the service using this feedback while ensuring existing features remain intact.</p>
+<p>After graduation, the OpenDAL community will focus on improving the stability of current services instead of just expanding our offerings.</p>
+<p>We plan to:</p>
+<ul>
+<li>Add features users wanted to services like <a href="https://github.com/apache/opendal/issues/2611" target="_blank" rel="noopener noreferrer">file version</a>, <a href="https://github.com/apache/opendal/issues/3977" target="_blank" rel="noopener noreferrer">concurrently list</a> and <a href="https://github.com/apache/opendal/issues/1251" target="_blank" rel="noopener noreferrer">glob pattern</a>.</li>
+<li>Add integration tests for newly added services.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-useful-documents">More Useful Documents<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#more-useful-documents" class="hash-link" aria-label="Direct link to More Useful Documents" title="Direct link to More Useful Documents">​</a></h3>
+<p>OpenDAL have good docs for its rust core, but not for other language bindings.</p>
+<p>The lack of comprehensive documentation makes OpenDAL challenging for users to operate in Java or Python. Without user feedback, the community is unable to enhance this documentation, leading to a detrimental cycle that must be broken.</p>
+<p>After graduation, the OpenDAL community will improve the documentation of other language bindings.</p>
+<p>We plan to:</p>
+<ul>
+<li>Introduce code generation to automatically create documentation for the service builder due to its numerous configurations.</li>
+<li>Add more API Docs and examples for other language bindings.</li>
+</ul>
+<p>OpenDAL have good docs for its public API, but not for its internal design.</p>
+<p>OpenDAL is proud of its elegant design, but it is not well documented. This makes it difficult for new contributors to understand the codebase and make contributions.</p>
+<p>After graduation, the OpenDAL community will improve the documentation of its internal design.</p>
+<p>We plan to:</p>
+<ul>
+<li>Optimize the codebase to make it easier to understand.</li>
+<li>Add more blog posts to explain the design of OpenDAL.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="more-production-users">More Production Users<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#more-production-users" class="hash-link" aria-label="Direct link to More Production Users" title="Direct link to More Production Users">​</a></h3>
+<p>OpenDAL requires more production users, as they are vital to the success of our project. Increased user production leads to more valuable feedback, a more engaged contributor base, and a stronger community. We've started the initial loop; let's expand it!</p>
+<p>After graduation, the OpenDAL community will focus on attracting more production users.</p>
+<p>We plan to:</p>
+<ul>
+<li>Optimize the feature set for adoption like <a href="https://github.com/apache/opendal/issues/3022" target="_blank" rel="noopener noreferrer">uri initiation</a> and <a href="https://github.com/apache/opendal/issues/3240" target="_blank" rel="noopener noreferrer">config</a>.</li>
+<li>Expand more ways to use OpenDAL via <a href="https://github.com/apache/opendal/tree/main/bin/ofs" target="_blank" rel="noopener noreferrer">fuse</a>, <a href="https://github.com/apache/opendal/tree/main/bin/oli" target="_blank" rel="noopener noreferrer">cli</a>, <a href="https://github.com/apache/opendal/tree/main/bin/oli" target="_blank" rel="noopener noreferrer">S3/WebDAV API</a>, <a href="https://github.com/apache/opendal/tree/main/integrations/object_store" target="_blank" rel="n [...]
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="https://opendal.apache.org/blog/apache-opendal-graduated/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>The OpenDAL Community aims to create a world where users can freely access data across any storage service in any manner they choose. Graduation is just the beginning—let's work together to make our VISION a reality!</p>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+        <item>
+            <title><![CDATA[OwO #1: The v0.40 Release]]></title>
+            <link>https://opendal.apache.org/blog/owo-1/</link>
+            <guid>https://opendal.apache.org/blog/owo-1/</guid>
+            <pubDate>Fri, 15 Sep 2023 00:00:00 GMT</pubDate>
+            <description><![CDATA[OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.]]></description>
+            <content:encoded><![CDATA[<blockquote>
+<p>OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.</p>
+</blockquote>
+<p>Hello! It's been a while since our last update. We've been hard at work determining the optimal way to implement new features and improvements. We're thrilled to announce that we'll soon be releasing v0.40.</p>
+<p>This post is structured into three main sections:</p>
+<ul>
+<li>Outcome (1st <code>O</code> in <code>OwO</code>): Summarizes the key accomplishments in the v0.40 release.</li>
+<li>Working (the <code>w</code> in <code>OwO</code>): Provides an update on our current work.</li>
+<li>Outlook (2nd <code>O</code> in <code>OwO</code>): Discusses what lies ahead for OpenDAL.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="outcome">Outcome<a href="https://opendal.apache.org/blog/owo-1/#outcome" class="hash-link" aria-label="Direct link to Outcome" title="Direct link to Outcome">​</a></h2>
+<p>OpenDAL now comprises four primary components:</p>
+<ul>
+<li>Core: The core library written in Rust.</li>
+<li>Bindings: Language bindings powered by the OpenDAL Rust core.</li>
+<li>Applications: Applications built using the OpenDAL Rust core.</li>
+<li>Integrations: Collaborations with other projects.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="core">Core<a href="https://opendal.apache.org/blog/owo-1/#core" class="hash-link" aria-label="Direct link to Core" title="Direct link to Core">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="unifying-append-and-write-functions">Unifying Append and Write Functions<a href="https://opendal.apache.org/blog/owo-1/#unifying-append-and-write-functions" class="hash-link" aria-label="Direct link to Unifying Append and Write Functions" title="Direct link to Unifying Append and Write Functions">​</a></h4>
+<p>OpenDAL has supported <code>append</code> operations since <code>v0.36</code>. We've found, however, that this led to significant duplication between append and write. As a result, we've streamlined the two functionalities into a single write function. Our users can now:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token keyw [...]
+<p>This way, users can reuse the <code>Writer</code> in their own logic without handling <code>append</code> separately.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="new-lister-api">New Lister API<a href="https://opendal.apache.org/blog/owo-1/#new-lister-api" class="hash-link" aria-label="Direct link to New Lister API" title="Direct link to New Lister API">​</a></h4>
+<p>To improve API consistency, we've made some adjustments to our listing functions. We've added <code>list</code> and <code>list_with</code> methods that perform single operations and renamed the original <code>list</code> to <code>lister</code> and <code>lister_with</code>.</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Old API</span><span class="token plain"></span [...]
+<p>This brings uniformity to our API offerings.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="list-with-metakey">List With Metakey<a href="https://opendal.apache.org/blog/owo-1/#list-with-metakey" class="hash-link" aria-label="Direct link to List With Metakey" title="Direct link to List With Metakey">​</a></h4>
+<p>To speed up list operations, OpenDAL can now fetch and store metadata during the listing process. This eliminates the need for separate metadata calls:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> entries</span><span class="tok [...]
+<p>This makes metadata retrieval more intuitive.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="buffered-writer">Buffered Writer<a href="https://opendal.apache.org/blog/owo-1/#buffered-writer" class="hash-link" aria-label="Direct link to Buffered Writer" title="Direct link to Buffered Writer">​</a></h4>
+<p>We've added general buffer support to optimize writing operations.</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> w </span><span class="token op [...]
+<h4 class="anchor anchorWithStickyNavbar_debX" id="others">Others<a href="https://opendal.apache.org/blog/owo-1/#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others">​</a></h4>
+<p>Other improvements in the core library can be found in our <a href="https://github.com/apache/opendal/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">CHANGELOG</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="bindings">Bindings<a href="https://opendal.apache.org/blog/owo-1/#bindings" class="hash-link" aria-label="Direct link to Bindings" title="Direct link to Bindings">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="c">C++<a href="https://opendal.apache.org/blog/owo-1/#c" class="hash-link" aria-label="Direct link to C++" title="Direct link to C++">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/cpp" target="_blank" rel="noopener noreferrer"><code>opendal-cpp</code></a> is ready for its first release! Welcome to check it out and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="haskell">Haskell<a href="https://opendal.apache.org/blog/owo-1/#haskell" class="hash-link" aria-label="Direct link to Haskell" title="Direct link to Haskell">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/haskell" target="_blank" rel="noopener noreferrer"><code>opendal-hs</code></a> is ready for its first release! Welcome to check it out and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="java">Java<a href="https://opendal.apache.org/blog/owo-1/#java" class="hash-link" aria-label="Direct link to Java" title="Direct link to Java">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bindings/java" target="_blank" rel="noopener noreferrer"><code>opendal-java</code></a> enabled more available services in this release, allowing user to visit services like <code>redis</code> that not enabled by default in rust core. And <code>opendal-java</code> enabled blocking layer to allow users visit services like <code>s3</code> in blocking way.</p>
+<p>Welcome to integrate <code>opendal-java</code> into your project and give us some feedback.</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="new-bindings">New bindings!<a href="https://opendal.apache.org/blog/owo-1/#new-bindings" class="hash-link" aria-label="Direct link to New bindings!" title="Direct link to New bindings!">​</a></h4>
+<ul>
+<li><a href="https://github.com/apache/opendal/tree/main/bindings/dotnet" target="_blank" rel="noopener noreferrer"><code>opendal-dotnet</code></a></li>
+<li><a href="https://github.com/apache/opendal/tree/main/bindings/php" target="_blank" rel="noopener noreferrer"><code>opendal-php</code></a></li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="applications">Applications<a href="https://opendal.apache.org/blog/owo-1/#applications" class="hash-link" aria-label="Direct link to Applications" title="Direct link to Applications">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="oay">oay<a href="https://opendal.apache.org/blog/owo-1/#oay" class="hash-link" aria-label="Direct link to oay" title="Direct link to oay">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bin/oay" target="_blank" rel="noopener noreferrer">oay</a> is OpenDAL Gateway that allows users to access OpenDAL services via existing protocols like <code>s3</code> and <code>webdav</code>. It works like a proxy that forwarding requests to OpenDAL services.</p>
+<p>In this release, we implement basic <code>webdav</code> support. Users can convert any storage services to a webdav server!</p>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="oli">oli<a href="https://opendal.apache.org/blog/owo-1/#oli" class="hash-link" aria-label="Direct link to oli" title="Direct link to oli">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/bin/oay" target="_blank" rel="noopener noreferrer">oli</a> is OpenDAL CLI that allows users to access storage services via CLI like <code>s3cmd</code> and <code>gcloud</code> does.</p>
+<p>We fixed some experience issues in this release and improved some docs. Welcome to try it out and give us some feedback.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="integrations">Integrations<a href="https://opendal.apache.org/blog/owo-1/#integrations" class="hash-link" aria-label="Direct link to Integrations" title="Direct link to Integrations">​</a></h3>
+<h4 class="anchor anchorWithStickyNavbar_debX" id="object_store">object_store<a href="https://opendal.apache.org/blog/owo-1/#object_store" class="hash-link" aria-label="Direct link to object_store" title="Direct link to object_store">​</a></h4>
+<p><a href="https://github.com/apache/opendal/tree/main/integrations/object_store" target="_blank" rel="noopener noreferrer">object_store</a> instead to implement <a href="https://github.com/apache/arrow-rs/tree/master/object_store" target="_blank" rel="noopener noreferrer"><code>object_store</code></a>'s trait over OpenDAL Operator so that users can use OpenDAL as a backend for <code>object_store</code>.</p>
+<p><code>object_store</code> is mostly functional, but there are some edge use cases that OpenDAL has yet to support.</p>
+<p>So far, this release hasn't seen progress in this area; we are awaiting the resolution of the issue <a href="https://github.com/apache/opendal/issues/2762" target="_blank" rel="noopener noreferrer">Allow list paths that do not end with <code>/</code></a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="working">Working<a href="https://opendal.apache.org/blog/owo-1/#working" class="hash-link" aria-label="Direct link to Working" title="Direct link to Working">​</a></h2>
+<p>We are working on the following things:</p>
+<ul>
+<li><code>object_store</code> support: Make <code>object_store</code> integration works and find a user for it.</li>
+<li>Remove the <code>/</code> limitation for path, so we can list a path without ending with <code>/</code>.</li>
+<li>Expand the <code>start-after</code> support to more services (Address <a href="https://github.com/apache/opendal/issues/2786" target="_blank" rel="noopener noreferrer">#2786</a>).</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="outlook">Outlook<a href="https://opendal.apache.org/blog/owo-1/#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook">​</a></h2>
+<p>We are exploring some innovative ideas:</p>
+<ul>
+<li><a href="https://github.com/apache/opendal/discussions/2951" target="_blank" rel="noopener noreferrer">OpenDAL REST/gRPC API</a>: A REST/gRPC Server for OpenDAL.</li>
+<li><a href="https://github.com/apache/opendal/discussions/2953" target="_blank" rel="noopener noreferrer">OpenDAL Cache</a>: OpenDAL native cache libs that allowing users to access data more efficiently.</li>
+<li><a href="https://github.com/apache/opendal/discussions/2952" target="_blank" rel="noopener noreferrer">OpenDAL File System</a>: A read-only file system that built upon OpenDAL in rust!</li>
+<li><a href="https://github.com/apache/opendal/discussions/3042" target="_blank" rel="noopener noreferrer">kio-opendal</a>: A kio plugin powered by OpenDAL that allows users to visit different storage services in <a href="https://apps.kde.org/dolphin/" target="_blank" rel="noopener noreferrer">KDE Dolphin</a>.</li>
+<li>gvfs-opendal: A gvfs plugin powered by OpenDAL that allows users to visit different storage services in <a href="https://wiki.gnome.org/Apps/Files" target="_blank" rel="noopener noreferrer">GNOME Files</a></li>
+</ul>
+<p>Feel free to join in the discussion!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="summary">Summary<a href="https://opendal.apache.org/blog/owo-1/#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary">​</a></h2>
+<p>This marks our first OpenDAL <code>OwO</code> post. We welcome your feedback.</p>]]></content:encoded>
+            <category>owo</category>
+        </item>
+        <item>
+            <title><![CDATA[Apache OpenDAL™ Internal: Data Reading]]></title>
+            <link>https://opendal.apache.org/blog/how-opendal-read-data/</link>
+            <guid>https://opendal.apache.org/blog/how-opendal-read-data/</guid>
+            <pubDate>Tue, 15 Aug 2023 00:00:00 GMT</pubDate>
+            <description><![CDATA[The first article will discuss OpenDAL's most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL.]]></description>
+            <content:encoded><![CDATA[<p>As the Apache OpenDAL™ community continues to grow, new abstractions are constantly being added, which has brought some burdens to new contributors participating in development. Many maintainers hope to have a deeper understanding of OpenDAL's internal implementation. At the same time, OpenDAL's core design has not changed significantly for a long time, making it possible to write a series on internal implementation. I believe now is the time to w [...]
+<p>The first article will discuss OpenDAL's most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL. Let's get started!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="overall-framework">Overall Framework<a href="https://opendal.apache.org/blog/how-opendal-read-data/#overall-framework" class="hash-link" aria-label="Direct link to Overall Framework" title="Direct link to Overall Framework">​</a></h2>
+<p>Before starting to introduce the specific OpenDAL interface, let's first get familiar with the OpenDAL project.</p>
+<p><a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> is an Apache Incubator project aimed at helping users access data from various storage services in a unified, convenient, and efficient way. Its project <a href="https://opendal.apache.org/vision" target="_blank" rel="noopener noreferrer">vision</a> is "free access to data":</p>
+<ul>
+<li>Free from services: Any service can be accessed freely through native interfaces</li>
+<li>Free from implementations: No matter how the underlying implementation is, it can be called in a unified way</li>
+<li>Free to integrate: Able to freely integrate with various services and languages</li>
+<li>Free to zero cost: Users don't have to pay for features they don't use</li>
+</ul>
+<p>On this philosophical foundation, OpenDAL Rust Core can be mainly divided into the following components:</p>
+<ul>
+<li>Operator: The outer interface exposed to users</li>
+<li>Layers: Specific implementation of different middleware</li>
+<li>Services: Specific implementation of different services</li>
+</ul>
+<p>From a macroscopic perspective, OpenDAL's data reading call stack would look like this:</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/1-0b02956a3da2b4329eab11ea4779711c.png" width="1238" height="968" class="img_AUsV"></p>
+<p>All Layers and Services have implemented a unified Accessor interface, erasing all type information when building the Operator. For the Operator, regardless of what services are used or how many middleware are added, all call logic is consistent. This design splits OpenDAL's API into Public API and Raw API, where the Public API is directly exposed to users, providing convenient top-level interfaces, and Raw API is provided to OpenDAL internal developers, maintaining a unified internal [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="operator">Operator<a href="https://opendal.apache.org/blog/how-opendal-read-data/#operator" class="hash-link" aria-label="Direct link to Operator" title="Direct link to Operator">​</a></h2>
+<p>OpenDAL's Operator API will adhere to a consistent calling paradigm as much as possible, reducing users' learning and usage costs. For example, OpenDAL offers the following APIs for <code>read</code>:</p>
+<ul>
+<li><code>op.read(path)</code>: Reads the entire content of the specified file</li>
+<li><code>op.reader(path)</code>: Creates a Reader for streaming reading</li>
+<li><code>op.read_with(path).range(1..1024)</code>: Reads file content using specified parameters, such as range</li>
+<li><code>op.reader_with(path).range(1..1024)</code>: Creates a Reader for streaming reading with specified parameters</li>
+</ul>
+<p>It's not hard to see that <code>read</code> is more like syntactic sugar, allowing users to quickly read files without considering various traits like <code>AsyncRead</code>. The <code>reader</code> provides more flexibility, implementing widely-used community traits like <code>AsyncSeek</code>, <code>AsyncRead</code>, allowing more flexible data reading. <code>read_with</code> and <code>reader_with</code> assist users in specifying various parameters in a more natural way through Fut [...]
+<p>The internal logic of the Operator would look like this:</p>
+<p><img decoding="async" loading="lazy" src="https://opendal.apache.org/assets/images/2-3b83ca1ebfbdd77770566a80131846bd.png" width="1628" height="1006" class="img_AUsV"></p>
+<p>Its main job is to encapsulate the interface for the user:</p>
+<ul>
+<li>Completing the construction of <code>OpRead</code>: the args for read operation.</li>
+<li>Calling the <code>read</code> function provided by <code>Accessor</code></li>
+<li>Wrapping the returned value as <code>Reader</code> and implementing interfaces like <code>AsyncSeek</code>, <code>AsyncRead</code>, etc., based on <code>Reader</code></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="layers">Layers<a href="https://opendal.apache.org/blog/how-opendal-read-data/#layers" class="hash-link" aria-label="Direct link to Layers" title="Direct link to Layers">​</a></h2>
+<p>A little secret here is that OpenDAL will automatically apply some Layers to the Service to implement some internal logic. As of the completion of this article, OpenDAL's automatically added Layers include:</p>
+<ul>
+<li><code>ErrorContextLayer</code>: Injects context information, such as <code>scheme</code>, <code>path</code>, etc., into all returned errors of Operation</li>
+<li><code>CompleteLayer</code>: Adds necessary capabilities to services, such as adding seek support to s3</li>
+<li><code>TypeEraseLayer</code>: Implements type erasure, uniformly erasing associated types in <code>Accessor</code>, so users don't need to carry generic parameters when using it</li>
+</ul>
+<p>Here, <code>ErrorContextLayer</code> and <code>TypeEraseLayer</code> are relatively simple and won't be elaborated on. The focus is on <code>CompleteLayer</code>, aimed at adding <code>seek</code> or <code>next</code> support to OpenDAL's returned <code>Reader</code> in a zero-cost way, so users don't have to re-implement it. OpenDAL initially returned <code>Reader</code> and <code>SeekableReader</code> through different function calls in early versions, but the actual user feedback w [...]
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">pub</span><span class="token plain"> </span><span class="token keyw [...]
+<p>To implement a service's reading capability in OpenDAL, one needs to implement this trait, which is an internal interface and will not be directly exposed to users. Among them:</p>
+<ul>
+<li><code>poll_read</code> is the most basic requirement; all services must implement this interface.</li>
+<li>When the service natively supports <code>seek</code>, <code>poll_seek</code> can be implemented, and OpenDAL will correctly dispatch, such as local fs;</li>
+<li>When the service natively supports <code>next</code>, meaning it returns streaming Bytes, <code>poll_next</code> can be implemented, like HTTP-based services, where the underlying layer is a TCP Stream, and hyper will encapsulate it as a bytes stream.</li>
+</ul>
+<p>Through the <code>Read</code> trait, OpenDAL ensures that all services can expose their native support capabilities as much as possible, thereby achieving efficient reading for different services.</p>
+<p>Based on this trait, OpenDAL will complete according to the capabilities supported by each service:</p>
+<ul>
+<li>Both seek/next are supported: Direct return</li>
+<li>No support for next: Encapsulate using <code>StreamableReader</code> to simulate next support</li>
+<li>No support for seek: Encapsulate using <code>ByRangeSeekableReader</code> to simulate seek support</li>
+<li>Neither seek/next supported: Encapsulate using both methods</li>
+</ul>
+<blockquote>
+<p><code>ByRangeSeekableReader</code> mainly utilizes the service's ability to support range read, dropping the current reader when the user seeks and initiating a new request at the specified location.</p>
+</blockquote>
+<p>OpenDAL exposes a unified Reader implementation through <code>CompleteLayer</code>, so users don't have to worry about whether the underlying service supports seek; OpenDAL will always choose the optimal way to initiate the request.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="services">Services<a href="https://opendal.apache.org/blog/how-opendal-read-data/#services" class="hash-link" aria-label="Direct link to Services" title="Direct link to Services">​</a></h2>
+<p>After the completion of the Layers, it's time to call the specific implementation of the Service. Here, the most common services <code>fs</code> and <code>s3</code> are used as examples to explain how data is read.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="service-fs">Service fs<a href="https://opendal.apache.org/blog/how-opendal-read-data/#service-fs" class="hash-link" aria-label="Direct link to Service fs" title="Direct link to Service fs">​</a></h3>
+<p><code>tokio::fs::File</code> implements <code>tokio::AsyncRead</code> and <code>tokio::AsyncSeek</code>. Using <code>async_compat::Compat</code>, we have transformed it into <code>futures::AsyncRead</code> and <code>futures::AsyncSeek</code>. Based on this, we provide a built-in function <code>oio::into_read_from_file</code> to transform it into a type that implements <code>oio::Read</code>.</p>
+<p>There's nothing particularly complex in the implementation of <code>oio::into_read_from_file</code>; read and seek are mostly calling the functions provided by the incoming File type. The tricky part is about the correct handling of seek and range: seeking to the right side of the range is allowed, and this will not cause an error, and reading will only return empty, but seeking to the left side of the range is illegal, and the Reader must return <code>InvalidInput</code> for proper u [...]
+<blockquote>
+<p>Interesting history: there was <a href="https://github.com/apache/opendal/issues/2717" target="_blank" rel="noopener noreferrer">an issue</a> in the initial implementation of this part, discovered during fuzz testing.</p>
+</blockquote>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="services-s3">Services s3<a href="https://opendal.apache.org/blog/how-opendal-read-data/#services-s3" class="hash-link" aria-label="Direct link to Services s3" title="Direct link to Services s3">​</a></h3>
+<p>S3 is an HTTP-based service, and opendal provides a lot of HTTP-based wrappers to help developers reuse logic; they only need to build a request and return a well-constructed Body. OpenDAL Raw API encapsulates a set of reqwest-based interfaces, and the HTTP GET interface returns a <code>Response&lt;IncomingAsyncBody&gt;</code>:</p>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">/// IncomingAsyncBody carries the content returne [...]
+<p>The stream contained in this body is the bytes stream returned by reqwest, and opendal implements content length checks and read support on this basis.</p>
+<p>Here's an extra note about a small pitfall with reqwest/hyper: reqwest and hyper do not check the returned content length, so an illegal server may return a data volume that does not match the expected content length instead of an error, leading to unexpected data behavior. OpenDAL specifically added checks here, returning <code>ContentIncomplete</code> when data is insufficient and <code>ContentTruncated</code> when data exceeds expectations, avoiding users receiving illegal data.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="conclusion">Conclusion<a href="https://opendal.apache.org/blog/how-opendal-read-data/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
+<p>This article introduces from top to bottom how OpenDAL implements data reading:</p>
+<ul>
+<li>Operator is responsible for exposing user-friendly interfaces</li>
+<li>Layers are responsible for completing the capabilities of the services</li>
+<li>Services are responsible for the specific implementation of different services</li>
+</ul>
+<p>Throughout the entire chain, OpenDAL adheres as much as possible to the principle of zero cost, prioritizing the use of native service capabilities, then considering simulation through other methods, and finally returning unsupported errors. Through this three-tier design, users don't need to understand the details of the underlying service, nor do they need to integrate different service SDKs to easily call <code>op.read(path)</code> to access data in any storage service.</p>
+<p>This is: How <strong>OpenDAL</strong> read data freely!</p>]]></content:encoded>
+            <category>internal</category>
+        </item>
+        <item>
+            <title><![CDATA[Apache OpenDAL™: Access Data Freely]]></title>
+            <link>https://opendal.apache.org/blog/opendal-access-data-freely/</link>
+            <guid>https://opendal.apache.org/blog/opendal-access-data-freely/</guid>
+            <pubDate>Fri, 07 Jul 2023 00:00:00 GMT</pubDate>
+            <description><![CDATA[If you're committed to building cloud-native, cross-cloud-first applications and services, or you want to support configurable storage backends to meet complex data access needs, or if you're tired of juggling various SDKs and hoping for a unified abstraction and development experience, Apache OpenDAL™ will be your perfect partner.]]></description>
+            <content:encoded><![CDATA[<p>If you're committed to building cloud-native, cross-cloud-first applications and services, or you want to support configurable storage backends to meet complex data access needs, or if you're tired of juggling various SDKs and hoping for a unified abstraction and development experience, Apache OpenDAL™ will be your perfect partner.</p>
+<p><img decoding="async" loading="lazy" alt="OpenDAL Arch" src="https://opendal.apache.org/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png" width="3932" height="2662" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-is-opendal">What is OpenDAL?<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#what-is-opendal" class="hash-link" aria-label="Direct link to What is OpenDAL?" title="Direct link to What is OpenDAL?">​</a></h2>
+<p><strong>OpenDAL</strong> is a data access layer that allows users to easily and efficiently retrieve data from various storage services in a unified way.</p>
+<p><strong>Data Access Layer</strong> means: OpenDAL is in a critical position in the data read-write process. We shield the implementation details of different storage backends and provide a set of unified interface abstractions externally.</p>
+<p>Next, let's try to answer <em>"What OpenDAL is not"</em> and deconstruct OpenDAL from another perspective:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="opendal-is-not-a-proxy-service">Opendal Is Not a Proxy Service<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#opendal-is-not-a-proxy-service" class="hash-link" aria-label="Direct link to Opendal Is Not a Proxy Service" title="Direct link to Opendal Is Not a Proxy Service">​</a></h3>
+<p>OpenDAL is provided in the form of a library, not as a service or application that proxies various storage backends.</p>
+<p>If you want to integrate OpenDAL into an existing project, you need to call OpenDAL's interface directly through the bindings supported by OpenDAL to access the storage services.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="opendal-is-not-an-sdk-aggregator">Opendal Is Not an SDK Aggregator<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#opendal-is-not-an-sdk-aggregator" class="hash-link" aria-label="Direct link to Opendal Is Not an SDK Aggregator" title="Direct link to Opendal Is Not an SDK Aggregator">​</a></h3>
+<p>Although OpenDAL replaces various SDKs in the application architecture, it is not implemented as an SDK aggregator.</p>
+<p>In other words, OpenDAL does not simply call various storage service SDKs. We have developed our own docking with various storage services based on a unified Rust core to ensure that the differences between services are smoothed out.</p>
+<p>For example, for S3, OpenDAL manually constructs HTTP requests and parses HTTP responses to ensure that all behaviors comply with API specifications and are fully under the control of OpenDAL. Due to OpenDAL's native takeover of the data access process, we can easily implement unified retry and logging mechanisms for various storage backends and ensure behavioral consistency.</p>
+<p>For compatible services with S3, due to the limitations of native storage services and differences in API implementation, compatibility and behavioral details may differ from S3. For example, OSS needs to set an independent header to ensure consistent behavior for <code>Range</code>. In addition to docking with native storage services, OpenDAL will also perform targeted processing for compatible services to ensure users' data access experience.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="advantages-of-opendal">Advantages of OpenDAL<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#advantages-of-opendal" class="hash-link" aria-label="Direct link to Advantages of OpenDAL" title="Direct link to Advantages of OpenDAL">​</a></h2>
+<p>OpenDAL is not the only project dedicated to providing data access abstraction, but compared to other similar projects, OpenDAL has the following advantages:</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="rich-service-support">Rich Service Support<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#rich-service-support" class="hash-link" aria-label="Direct link to Rich Service Support" title="Direct link to Rich Service Support">​</a></h3>
+<p>OpenDAL supports dozens of storage services, covering a wide range of scenarios and supporting on-demand selection:</p>
+<ul>
+<li>Standard Storage Protocols: FTP, HTTP, SFTP, WebDAV, etc.</li>
+<li>Object Storage Services: azblob, gcs, obs, oss, s3, etc.</li>
+<li>File Storage Services: fs, azdls, hdfs, webhdfs, ipfs, etc.</li>
+<li>Consumer Cloud Storage Service: Google Drive, OneDrive, Dropbox, etc.</li>
+<li>Key-Value Storage Service: Memory, Redis, Rocksdb, etc.</li>
+<li>Cache Storage Service: Ghac, Memcached, etc.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="complete-cross-language-bindings">Complete Cross-Language Bindings<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#complete-cross-language-bindings" class="hash-link" aria-label="Direct link to Complete Cross-Language Bindings" title="Direct link to Complete Cross-Language Bindings">​</a></h3>
+<p>With Rust as the core, OpenDAL now provides binding support for multiple languages such as Python/Node.js/Java/C and is also actively developing bindings for other languages.</p>
+<p>Cross-language bindings not only provide unified storage access abstractions for other languages but also follow naming conventions and development habits that are common in various languages as much as possible to pave the way for quick use.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="powerful-middleware-support">Powerful Middleware Support<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#powerful-middleware-support" class="hash-link" aria-label="Direct link to Powerful Middleware Support" title="Direct link to Powerful Middleware Support">​</a></h3>
+<p>OpenDAL offers native layer support, enabling users to implement middleware or intercept for all operations.</p>
+<ul>
+<li>Error Retry: OpenDAL supports fine-grained error retry capabilities. In addition to common request retries, it supports breakpoint resumable transmission without having to re-read the entire file.</li>
+<li>Observability: OpenDAL implements logging,tracing,and metrics support for all operations. Turning on middleware can directly obtain observability capabilities for storage.</li>
+<li>Concurrency control, flow control, fuzz testing, and more.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="easy-to-use">Easy to Use<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#easy-to-use" class="hash-link" aria-label="Direct link to Easy to Use" title="Direct link to Easy to Use">​</a></h3>
+<p>OpenDAL's API has been well designed and polished in actual use. The documentation covers everything and is easy to get started with. Here's an example of using Python bindings to access HDFS:</p>
+<div class="language-python codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-python codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> opendal</span><br></spa [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="use-cases-of-opendal">Use Cases of OpenDAL<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#use-cases-of-opendal" class="hash-link" aria-label="Direct link to Use Cases of OpenDAL" title="Direct link to Use Cases of OpenDAL">​</a></h3>
+<p>Currently, OpenDAL is widely used in various scenarios that require cloud-native capabilities, including but not limited to databases, data pipelines, and caches. The main user cases include:</p>
+<ul>
+<li><a href="https://github.com/datafuselabs/databend/" target="_blank" rel="noopener noreferrer">Databend</a>: A modern Elasticity and Performance cloud data warehouse. Using OpenDAL to read and write persistent data (s3, azblob, gcs, hdfs, etc.) and cache data (fs, redis, rocksdb, moka, etc.).</li>
+<li><a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a>: An open-source, cloud-native, distributed time-series database. Using OpenDAL to read and write persistent data (s3, azblob, etc.).</li>
+<li><a href="https://github.com/mozilla/sccache/" target="_blank" rel="noopener noreferrer">mozilla/sccache</a>: <code>sccache</code> is <a href="https://github.com/ccache/ccache" target="_blank" rel="noopener noreferrer"><code>ccache</code></a> with cloud storage. Using OpenDAL to read and write cache data (s3 and ghac, etc.).</li>
+<li><a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a>: A Distributed SQL Database for Stream Processing. Using OpenDAL to read and write persistent data (s3, azblob, hdfs, etc.).</li>
+<li><a href="https://github.com/vectordotdev/vector" target="_blank" rel="noopener noreferrer">Vector</a>: A high-performance observability data pipeline. Using OpenDAL to write persistent data (currently mainly using hdfs).</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="future-plans-of-opendal">Future Plans of OpenDAL<a href="https://opendal.apache.org/blog/opendal-access-data-freely/#future-plans-of-opendal" class="hash-link" aria-label="Direct link to Future Plans of OpenDAL" title="Direct link to Future Plans of OpenDAL">​</a></h2>
+<p>In addition to further meeting the needs of cloud-native data access, OpenDAL will continue to expand user scenarios and actively explore its use in data science and mobile applications. At the same time, OpenDAL will continue to polish its existing implementations and bindings to provide users with a better integration experience.</p>
+<p>OpenDAL will also explore how to improve users' workflows in data management and service integration:</p>
+<ul>
+<li>Polish the <code>oli</code> command-line tool to help users manage data painlessly.</li>
+<li>Implement the <code>oay</code> proxy service to provide users with high-quality compatible APIs.</li>
+</ul>
+<p>In addition, since OpenDAL is currently a cross-language project, we also plan to write a series of introductory tutorials to help everyone learn OpenDAL from scratch while learning the language.</p>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+        <item>
+            <title><![CDATA[Way to Go: OpenDAL successfully entered Apache Incubator]]></title>
+            <link>https://opendal.apache.org/blog/opendal-entered-apache-incubator/</link>
+            <guid>https://opendal.apache.org/blog/opendal-entered-apache-incubator/</guid>
+            <pubDate>Thu, 16 Mar 2023 00:00:00 GMT</pubDate>
+            <description><![CDATA[On February 27th, 2023, the OpenDAL project achieved a milestone by winning the approval to join the incubator of the Apache Software Foundation (ASF), the world's leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.]]></description>
+            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="OpenDAL successfully entered Apache Incubator" src="https://opendal.apache.org/assets/images/opendal-entered-apache-879d5165e27d370849e904ef8d65be25.png" width="1876" height="799" class="img_AUsV"></p>
+<p>On February 27th, 2023, the <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> project achieved a milestone by winning the approval to join the incubator of the <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a> (ASF), the world's leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.</p>
+<p>This is a significant moment for <a href="https://github.com/datafuselabs/databend" target="_blank" rel="noopener noreferrer">Databend</a>, as it means that OpenDAL's technology and vision have received wider recognition and support from the open source community.</p>
+<blockquote>
+<p>The Apache Incubator was established in October 2002 to provide a path for projects and codebases that aspire to become part of the Apache Software Foundation. Incubating projects need to follow ASF's governance and operational practices, and use ASF's infrastructure and resources. Incubating projects need to go through a series of stages and evaluations before they can graduate to become top-level projects (TLPs) of ASF.</p>
+</blockquote>
+<p><img decoding="async" loading="lazy" alt="Apache OpenDAL Project Incubation Status - Apache Incubator" src="https://opendal.apache.org/assets/images/incubator-project-opendal-095982818f2f177cfd4cd267c8f282c4.png" width="1373" height="1006" class="img_AUsV"></p>
+<p><em><a href="https://incubator.apache.org/projects/opendal.html" target="_blank" rel="noopener noreferrer">https://incubator.apache.org/projects/opendal.html</a></em></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="what-is-opendal">What is OpenDAL?<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#what-is-opendal" class="hash-link" aria-label="Direct link to What is OpenDAL?" title="Direct link to What is OpenDAL?">​</a></h2>
+<p>Data is one of the most important assets in the future, and data access is the key for realizing data value.</p>
+<p>There are various kinds of storage services in the market, each with its own unique interfaces and features, which bring a lot of complexity and inconvenience to data access.</p>
+<p>OpenDAL provides a unified, simple, efficient, reliable, and observable data access layer that allows developers to seamlessly use different storage services and enjoy the best user experience.</p>
+<p><img decoding="async" loading="lazy" alt="M*N to M+N with OpenDAL" src="https://opendal.apache.org/assets/images/opendal-power-549a25c15039d5ff165b082cf2fd7476.png" width="5724" height="1518" class="img_AUsV"></p>
+<p>OpenDAL simplifies the process of interfacing different storage services, and provides features such as automatic retry, request optimization, and observability. With OpenDAL, developers can directly access a bunch of storage services, without having to understand and master the details of specific SDKs.</p>
+<p>OpenDAL's features include but are not limited to:</p>
+<ul>
+<li>Support for dozens of storage services, including local file system, HDFS, S3, OSS, etc.</li>
+<li>Provide a unified data access interface, without worrying about the underlying storage details.</li>
+<li>Support for various common data operations, including <code>read</code>, <code>write</code>, <code>list</code>, etc.</li>
+<li>Support for automatic retry, request optimization, and observability mechanisms.</li>
+<li>Zero cost, directly mapped to API calls.</li>
+<li>Cross-language bindings: Python, Node.js, C (being worked on), etc.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="the-story-about-opendal">The Story about OpenDAL<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#the-story-about-opendal" class="hash-link" aria-label="Direct link to The Story about OpenDAL" title="Direct link to The Story about OpenDAL">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="born-for-universal-data-access">Born for Universal Data Access<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#born-for-universal-data-access" class="hash-link" aria-label="Direct link to Born for Universal Data Access" title="Direct link to Born for Universal Data Access">​</a></h3>
+<p>OpenDAL originated from the vision of creating a universal, unified and user-friendly data access layer. It came into being in late 2021, initially as a component of the Databend project.</p>
+<ul>
+<li>On December 21, 2021, <a href="http://github.com/Xuanwo" target="_blank" rel="noopener noreferrer">Xuanwo</a> embarked on the design and re-implementation of Databend's storage access layer, <a href="https://github.com/datafuselabs/databend/pull/3575" target="_blank" rel="noopener noreferrer">dal2: Add basic operations of <code>read</code>, <code>write</code>, <code>stat</code>, <code>delete</code></a>.</li>
+<li>On December 27, 2021, the <a href="https://github.com/datafuselabs/databend/discussions/3662" target="_blank" rel="noopener noreferrer">proposal: Vision of Databend DAL</a> was put forward and discussed. On December 29th, dal2's implementation was integrated into Databend.</li>
+<li>On February 14th 2022 , dal2 officially separated from Databend's code repository and became a standalone top-level project. It was formally renamed OpenDAL.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="from-one-to-multiple">From One to Multiple<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#from-one-to-multiple" class="hash-link" aria-label="Direct link to From One to Multiple" title="Direct link to From One to Multiple">​</a></h3>
+<p>Thanks to Xuanwo, <a href="https://github.com/ClSlaid" target="_blank" rel="noopener noreferrer">ClSlaid</a> and many other contributors, OpenDAL quickly became a data access layer that supports mainstream storage services such as AWS S3 / Azure Blob / GCS / HDFS, and provided cross-cloud native storage and access support for Databend's <code>COPY INTO</code>, Stage, Storage.</p>
+<p><a href="https://github.com/GreptimeTeam/greptimedb" target="_blank" rel="noopener noreferrer">GreptimeDB</a> was the first large-scale Rust database project to actively use OpenDAL after Databend. Later, with Xuanwo's efforts, <a href="https://github.com/mozilla/sccache" target="_blank" rel="noopener noreferrer">sccache</a> under Mozilla also tried to use OpenDAL to take over the storage layer. In order to provide more comprehensive support, OpenDAL soon added support for GitHub Acti [...]
+<p>Then, <a href="https://github.com/risingwavelabs/risingwave" target="_blank" rel="noopener noreferrer">RisingWave</a> and <a href="https://github.com/vectordotdev/vector" target="_blank" rel="noopener noreferrer">Vector</a> were supported as well. The number of OpenDAL users started to grow. More and more users choose OpenDAL as their storage access layer.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="skys-the-limit">Sky's the Limit<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#skys-the-limit" class="hash-link" aria-label="Direct link to Sky's the Limit" title="Direct link to Sky's the Limit">​</a></h3>
+<p>OpenDAL has established a small community and formed a product matrix. In addition to the <a href="https://crates.io/crates/opendal" target="_blank" rel="noopener noreferrer">Rust - opendal</a>, it also provides <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">Python - opendal</a> and <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">Node.js - opendal</a> bindings.</p>
+<p>OpenDAL has released 99 versions since its open source, with 700+ GitHub stars, 349K downloads, and 48 developers. The project has been actively updated. We sincerely thank every contributor for their efforts and dedication.</p>
+<p>Being a part of Apache incubator is an important milestone in OpenDAL's development history. We hope to leverage ASF's platform and resources to let OpenDAL focus on providing a neutral, vendor-free, painless, and efficient storage access layer, and better serve the developers.</p>
+<p>We expect OpenDAL to be widely used in the following application scenarios:</p>
+<ul>
+<li>Data analysis: OpenDAL can help data analysts quickly read or write data from different storage services, and perform various format conversions and operations.</li>
+<li>Data science: OpenDAL can help data scientists easily get or save data from different storage services, and perform various preprocessing and postprocessing.</li>
+<li>Data engineering: OpenDAL can help data engineers efficiently build and manage data pipelines between different storage services, and perform various monitoring and tuning.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="acknowledgements">Acknowledgements<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#acknowledgements" class="hash-link" aria-label="Direct link to Acknowledgements" title="Direct link to Acknowledgements">​</a></h2>
+<p><strong><em>From Xuanwo</em></strong></p>
+<p>Hello everyone, I'm Xuanwo, the Committer of Apache OpenDAL.</p>
+<p>The OpenDAL project embodies my personal dream. Now it has entered the Apache incubator with the collaboration of the community. I feel very happy at this moment. Thank you all contributors for your contributions, thank Databend Labs for your support, thank Champion tison for your guidance, thank Mentors ningjiang, wusheng, tedliu and hexiaoqiao for your advice.</p>
+<p>Let us follow the guidance of Apache Way to build a community together and create value for users by providing free, painless and efficient data access experience!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="join-apache-opendal-community">Join Apache OpenDAL Community<a href="https://opendal.apache.org/blog/opendal-entered-apache-incubator/#join-apache-opendal-community" class="hash-link" aria-label="Direct link to Join Apache OpenDAL Community" title="Direct link to Join Apache OpenDAL Community">​</a></h2>
+<p>We welcome developers and users who are interested in participating in OpenDAL project to join OpenDAL community and follow OpenDAL's latest news. You can get more information through the following ways:</p>
+<ul>
+<li>Visit OpenDAL official website: <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">https://opendal.apache.org</a></li>
+<li>Explore OpenDAL GitHub repository: <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal</a></li>
+<li>Join OpenDAL Discord channel: <a href="https://opendal.apache.org/discord" target="_blank" rel="noopener noreferrer">https://opendal.apache.org/discord</a></li>
+<li>Subscribe to OpenDAL mailing list: <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a></li>
+</ul>]]></content:encoded>
+            <category>announcement</category>
+        </item>
+    </channel>
+</rss>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
new file mode 100644
index 000000000..8aeda6ca6
--- /dev/null
+++ b/blog/tags/announcement/index.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">7 posts tagged with &quot;announcement&quot; | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsea [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>I hope this post serves as a guide for our development, encourages more people to contribute, and ultimately helps achieve the vision of OpenDAL.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Apache Open [...]
+<p>On behalf of the OpenDAL community, I&#x27;m pleased to announce that the first Apache OpenDAL™ Beijing Meetup will be held on September 14th.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Apache OpenDAL [...]
+<p>We&#x27;re writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summer-ospp.ac.cn/" target="_blank" rel="noopener noreferrer">Open Source Promotion Plan (OSPP) 2024</a>. If you&#x27;re not eligible or interested in participating in OSPP, then most of this post likely isn&#x27;t relevant to you; if you are, this should contain some useful information and links.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9" [...]
+<p>We&#x27;re writing this blog post to announce that the Apache OpenDAL™ Project will be participating in <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code (GSoC) 2024</a>. If you&#x27;re not eligible or interested in participating in GSoC, then most of this post likely isn&#x27;t relevant to you; if you are, this should contain some useful information and links.</p></div><footer class="row docusaurus-mt-lg"><div class="col co [...]
+<p><img decoding="async" loading="lazy" alt="OpenDAL Arch" src="/assets/images/opendal-arch-a614dff17a53ecef1fdbedb43be31c13.png" width="3932" height="2662" class="img_AUsV"></p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/announcement/">announcement</a></li></ul></div><div class="col text--right col--3"><a aria-label="R [...]
+<p>On February 27th, 2023, the <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">OpenDAL</a> project achieved a milestone by winning the approval to join the incubator of the <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a> (ASF), the world&#x27;s leading open source software organization. On March 15th, the OpenDAL project was officially transferred to the Apache Software Foundation.</p></div>< [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
new file mode 100644
index 000000000..83350451f
--- /dev/null
+++ b/blog/tags/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-tags-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Tags | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" prope [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
new file mode 100644
index 000000000..d964c4b03
--- /dev/null
+++ b/blog/tags/internal/index.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">One post tagged with &quot;internal&quot; | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/internal/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lan [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The first article will discuss OpenDAL&#x27;s most commonly used data reading function. I will start from the outermost interface and then gradually unfold according to the calling sequence of OpenDAL. Let&#x27;s get started!</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/internal/">internal</a></li></ul></div><div c [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tags/owo/index.html b/blog/tags/owo/index.html
new file mode 100644
index 000000000..a7831aaf0
--- /dev/null
+++ b/blog/tags/owo/index.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">One post tagged with &quot;owo&quot; | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/owo/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" con [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>OwO (Outcome, Working, Outlook) is an Apache OpenDAL™ release blog series, where we share the current work status and future plans.</p>
+</blockquote>
+<p>Hello! It&#x27;s been a while since our last update. We&#x27;ve been hard at work determining the optimal way to implement new features and improvements. We&#x27;re thrilled to announce that we&#x27;ll soon be releasing v0.40.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_wWOc padding--none margin-left--sm"><li class="tag_SGXR"><a rel="tag" class="tag_pAIo tagRegular_kD8B" href="/blog/tags/owo/">owo</a></li></ul></div><div class="col [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/category/applications/index.html b/category/applications/index.html
new file mode 100644
index 000000000..25660ff0f
--- /dev/null
+++ b/category/applications/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Applications 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/category/applications/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="e [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/category/bindings/index.html b/category/bindings/index.html
new file mode 100644
index 000000000..4d4d2d282
--- /dev/null
+++ b/category/bindings/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Bindings 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/category/bindings/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/category/integrations/index.html b/category/integrations/index.html
new file mode 100644
index 000000000..0347230eb
--- /dev/null
+++ b/category/integrations/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Integrations 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/category/integrations/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="e [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/category/committers/index.html b/community/category/committers/index.html
new file mode 100644
index 000000000..19bca6a5d
--- /dev/null
+++ b/community/category/committers/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Committers | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/committers/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"> [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/category/events/index.html b/community/category/events/index.html
new file mode 100644
index 000000000..0a2ca50dc
--- /dev/null
+++ b/community/category/events/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Events | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/events/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta da [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/category/pmc-members/index.html b/community/category/pmc-members/index.html
new file mode 100644
index 000000000..e226e3ac5
--- /dev/null
+++ b/community/category/pmc-members/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Committers | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/pmc-members/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/category/reference/index.html b/community/category/reference/index.html
new file mode 100644
index 000000000..d16430808
--- /dev/null
+++ b/community/category/reference/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Reference | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/reference/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><m [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/category/release/index.html b/community/category/release/index.html
new file mode 100644
index 000000000..75704f635
--- /dev/null
+++ b/community/category/release/index.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Release | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/release/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta  [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/committers/onboarding/index.html b/community/committers/onboarding/index.html
new file mode 100644
index 000000000..1bc491784
--- /dev/null
+++ b/community/committers/onboarding/index.html
@@ -0,0 +1,87 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-committers/onboarding" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Onboarding | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/onboarding/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Upon receiving an invitation email from OpenDAL PMC, a new committer should consider whether accepting.
+If they decide in favor, they should select &quot;Reply All&quot; and express their decision.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="submit-cla">Submit CLA<a href="#submit-cla" class="hash-link" aria-label="Direct link to Submit CLA" title="Direct link to Submit CLA">​</a></h2>
+<ol>
+<li>Download the ICLA from <a href="https://www.apache.org/licenses/contributor-agreements.html#clas" target="_blank" rel="noopener noreferrer">https://www.apache.org/licenses/contributor-agreements.html#clas</a>. If a corporation assigns employees to work on an Apache project, please download the CCLA.</li>
+<li>Complete the ICLA based on your particulars. Please note:
+<ul>
+<li>The address field should be filled out accurately and in detail.</li>
+<li>You need to choose a unique ApacheID that hasn&#x27;t been taken. Check <a href="https://people.apache.org/committer-index.html" target="_blank" rel="noopener noreferrer">https://people.apache.org/committer-index.html</a> to see which IDs are still available.</li>
+</ul>
+</li>
+<li>Sign the document by hand or by electronic signature
+<ul>
+<li>Manually sign a printed copy, then scan it to produce a pdf.</li>
+<li>Digitally draw a signature on the document: <a href="https://www.apache.org/licenses/cla-faq.html#printer" target="_blank" rel="noopener noreferrer">Detail Instruction</a>.</li>
+<li>Sign the document using PGP: <a href="https://www.apache.org/licenses/contributor-agreements.html#submitting" target="_blank" rel="noopener noreferrer">Detail Instruction</a>.</li>
+</ul>
+</li>
+<li>Send your icla.pdf (and icla.pdf.asc if PGP-signed) to <a href="mailto:secretary@apache.org" target="_blank" rel="noopener noreferrer">secretary@apache.org</a>.</li>
+</ol>
+<p>After waiting for some time, you will receive an email notifying you that your CLA has been successfully recorded.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="setup-asf-account">Setup ASF Account<a href="#setup-asf-account" class="hash-link" aria-label="Direct link to Setup ASF Account" title="Direct link to Setup ASF Account">​</a></h2>
+<p>When receiving an email with the subject &quot;Welcome to the Apache Software Foundation&quot; from <a href="mailto:root@apache.org" target="_blank" rel="noopener noreferrer">root@apache.org</a>, we can begin setting up an ASF account.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="setup-ldap-password">Setup LDAP Password<a href="#setup-ldap-password" class="hash-link" aria-label="Direct link to Setup LDAP Password" title="Direct link to Setup LDAP Password">​</a></h3>
+<ol>
+<li>Go to <a href="https://id.apache.org/reset/enter" target="_blank" rel="noopener noreferrer">https://id.apache.org/reset/enter</a> and enter your ApacheID.</li>
+<li>Check your email and click the provided link to reset your password.</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="link-asf-account-to-github">Link ASF Account to GitHub<a href="#link-asf-account-to-github" class="hash-link" aria-label="Direct link to Link ASF Account to GitHub" title="Direct link to Link ASF Account to GitHub">​</a></h3>
+<ol>
+<li>Navigate to <a href="https://gitbox.apache.org/boxer/" target="_blank" rel="noopener noreferrer">https://gitbox.apache.org/boxer/</a> and enter your ApacheID and password.</li>
+<li>Click &quot;Authenticate with GitHub&quot; and follow the given instructions to link your ASF account to GitHub.</li>
+<li>Check your email titled &quot;[GitHub] @asfgit has invited you to join the @apache organization&quot; and accept the invitation.</li>
+<li>Wait momentarily, and the website will refresh on its own.</li>
+<li>(If you do not enable 2FA on GitHub) Please follow the <a href="https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication" target="_blank" rel="noopener noreferrer">instruction</a>.</li>
+</ol>
+<p>Your ApacheID and GitHub ID will now both appear on <a href="https://gitbox.apache.org/boxer/" target="_blank" rel="noopener noreferrer">https://gitbox.apache.org/boxer/</a>. Congrats on successfully linking your ASF account to GitHub!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="email-settings">Email Settings<a href="#email-settings" class="hash-link" aria-label="Direct link to Email Settings" title="Direct link to Email Settings">​</a></h2>
+<p>Note: Apache does not provide a mailbox directly.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="receive-email">Receive Email<a href="#receive-email" class="hash-link" aria-label="Direct link to Receive Email" title="Direct link to Receive Email">​</a></h3>
+<p>You can change your forwarding email address at <a href="https://id.apache.org/" target="_blank" rel="noopener noreferrer">Apache Account Utility Platform</a></p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="send-email">Send Email<a href="#send-email" class="hash-link" aria-label="Direct link to Send Email" title="Direct link to Send Email">​</a></h3>
+<p>To send emails using your apache.org address, configure your email client to leverage the <code>mail-relay</code> service. For specifics, refer to <a href="https://infra.apache.org/committer-email.html" target="_blank" rel="noopener noreferrer">this guide</a>.</p>
+<p>Here&#x27;s an illustration for Gmail users:</p>
+<ol>
+<li>Open Gmail settings and select &quot;See all settings&quot;.</li>
+<li>Navigate to &quot;Accounts and Import&quot;, then locate &quot;Send mail as&quot;.</li>
+<li>Click &quot;Add another email address&quot; and enter your name and apache.org email address.</li>
+<li>Input the SMTP server information:
+<ul>
+<li>SMTP Server: mail-relay.apache.org</li>
+<li>Port: 587</li>
+<li>Username: your apacheID</li>
+<li>Password: your apacheID password</li>
+<li>Secured connection using TLS</li>
+</ul>
+</li>
+<li>Click &quot;Add account&quot; and you will receive an email from Gmail that need to confirm.</li>
+</ol>
+<p><img decoding="async" loading="lazy" alt="Gmail Settings" src="/assets/images/gmail-smtp-setting-395a35a58111a24514d710547fb9e278.jpg" width="1540" height="1184" class="img_AUsV"></p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="subscribe-to-mailing-list">Subscribe to Mailing List<a href="#subscribe-to-mailing-list" class="hash-link" aria-label="Direct link to Subscribe to Mailing List" title="Direct link to Subscribe to Mailing List">​</a></h3>
+<ol>
+<li>Send email to <a href="mailto:dev-subscribe@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev-subscribe@opendal.apache.org</a></li>
+<li>You will receive an email with the subject &quot;confirm subscribe to <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a>&quot;</li>
+<li>Reply to the email with &quot;Confirm&quot; in the body</li>
+</ol>
+<p>If you receive an email with the subject &quot;WELCOME to <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a>&quot;, you have successfully subscribed to the mailing list.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="setup-1password">Setup 1password<a href="#setup-1password" class="hash-link" aria-label="Direct link to Setup 1password" title="Direct link to Setup 1password">​</a></h2>
+<p>OpenDAL offers a 1Password open-source team license for conducting local integration tests (Thanks to 1Password!). Once you have been added to OpenDAL&#x27;s committer list, one of the PMC members will invite you to join the team.</p>
+<p>Please download your preferred clients to begin using it. You can create your own vault that is accessible only by yourself. Neither the 1password team nor OpenDAL PMC members can access it unless you choose to share it.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/committers/onboarding.md" target="_blank" rel="noopener no [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/committers/request_for_adding_secrets/index.html b/community/committers/request_for_adding_secrets/index.html
new file mode 100644
index 000000000..af2433981
--- /dev/null
+++ b/community/committers/request_for_adding_secrets/index.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-committers/request_for_adding_secrets" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Request for adding secrets | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/request_for_adding_secrets/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name= [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>OpenDAL&#x27;s behavior tests depend on the secrets stored in 1password.</p>
+<p>If you want to sponsor any service,
+please email <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a> with the subject line <code>Request to Add Secrets for &lt;service&gt;</code>.
+Our PMC will review the request and reply to you.</p>
+<p>After the request is approved,
+you can use the secrets in the behavior tests when they are running on the GitHub Actions
+(You need to be a committer of OpenDAL).</p>
+<p>The email should also include the following information:</p>
+<ul>
+<li>The name of the service</li>
+<li>The secrets in key-value pairs</li>
+</ul>
+<p>If the secrets have expiration dates, please also include the expiration dates.
+We may need you to update the secrets in the future.</p>
+<p>If the secrets are not under your control, please also include the contact information of the owner of the secrets.</p>
+<p>And finally, thank you for your support!</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/committers/request_for_adding_secrets.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_M1a8" aria-hidden="true"><g><path d="m34. [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/events/gsoc-proposal-guide/index.html b/community/events/gsoc-proposal-guide/index.html
new file mode 100644
index 000000000..b5be41408
--- /dev/null
+++ b/community/events/gsoc-proposal-guide/index.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-events/gsoc-proposal-guide" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">GSoC Project Proposal Guidance | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/events/gsoc-proposal-guide/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsea [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="choosing-a-project">Choosing a project<a href="#choosing-a-project" class="hash-link" aria-label="Direct link to Choosing a project" title="Direct link to Choosing a project">​</a></h2>
+<p>You should start by deciding on which project do you want to work on. You can use our <a href="https://github.com/apache/opendal/issues/4131" target="_blank" rel="noopener noreferrer">list of project ideas</a>
+as an inspiration, or you can come up with your own project idea. However, you should keep in mind that each GSoC project needs at least one mentor available. Therefore, if you come up with a completely new project idea, you should also try to find someone from the OpenDAL community who could mentor you on the project.</p>
+<p>If you decide to propose your own project idea, you&#x27;re most likely to be able to find a mentor if you can describe clearly the utility of the project to OpenDAL community.</p>
+<p>We encourage you to think of your own interesting project ideas! There are plenty of things that can be done within the OpenDAL project and contributors are generally happy to discuss and help you narrow down your thoughts into a concrete proposal. Don&#x27;t be shy!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="interacting-with-the-opendal-community">Interacting with the OpenDAL community<a href="#interacting-with-the-opendal-community" class="hash-link" aria-label="Direct link to Interacting with the OpenDAL community" title="Direct link to Interacting with the OpenDAL community">​</a></h2>
+<p>If you want to discuss our suggested project ideas or your own idea, you can do so on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist</a> or <a href="https://opendal.apache.org/discord" target="_blank" rel="noopener noreferrer">Discord</a>. Make sure to listen to the feedback of the mentors, and try to incorporate it in your project proposal.</p>
+<p>When communicating on the OpenDAL mail list or discord (and when interacting with the OpenDAL community in general), please remember to be polite and uphold the <a href="https://www.apache.org/foundation/policies/conduct" target="_blank" rel="noopener noreferrer">ASF Code of Conduct</a>. Keep in mind that most OpenDAL contributors (and GSoC OpenDAL project mentors) are volunteers, and work on OpenDAL in their free time, so please treat them with respect and avoid spamming.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="creating-the-project-proposal">Creating the project proposal<a href="#creating-the-project-proposal" class="hash-link" aria-label="Direct link to Creating the project proposal" title="Direct link to Creating the project proposal">​</a></h2>
+<p>Ultimately, the project proposal is the main deciding factor on whether your project will be accepted or not, so make sure that you put energy into making it as good as possible.</p>
+<p>The proposal should contain (at least) the following things:</p>
+<ol>
+<li>A descriptive title of the project that you want to work on</li>
+<li>Information about yourself, including:</li>
+</ol>
+<ul>
+<li>Description of your programming experience, attained education, university and study programme that you&#x27;re currently studying, etc. (a short CV would be ideal)</li>
+<li>Link to a portfolio of projects that you have worked on (e.g. a GitHub profile or a personal website)</li>
+<li>Your knowledge of OpenDAL, since most projects will probably require at least some OpenDAL knowledge</li>
+<li>Your existing open-source contribution experience. If you have already contributed to some open-source repositories, make sure to include a link to these contributions in your proposal!</li>
+<li>Your preferred time zone (for communicating with the mentor(s))</li>
+<li>Contact information</li>
+</ul>
+<ol start="3">
+<li><strong>Information about your proposed project</strong>. This should be as detailed as possible, see more details <a href="#project-information-and-timeline">below</a>.</li>
+<li>Information about other commitments that might affect your ability to work on the project during the GSoC period. These can include vacations, exams, other jobs or internships etc. It&#x27;s not necessarily an issue to have other commitments, but it would be great to know about them in advance, if possible.</li>
+</ol>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="project-information-and-timeline">Project information and timeline<a href="#project-information-and-timeline" class="hash-link" aria-label="Direct link to Project information and timeline" title="Direct link to Project information and timeline">​</a></h2>
+<p>This is the most important part of your project proposal. You should include an abstract that explains your project in one or two paragraphs, and then a very detailed description that explains what exactly do you want to achieve in the proposed project. The proposal should also clearly state the designated mentor(s) for your project (you should get in touch with them before submitting the proposal).</p>
+<p>In addition to describing what do you intend to work on in the project, you should also specify the size of the project, according to the GSoC <a href="https://google.github.io/gsocguides/student/time-management-for-students" target="_blank" rel="noopener noreferrer">documentation</a>:</p>
+<ul>
+<li>Small: ~90 hours</li>
+<li>Medium: ~175 hours</li>
+<li>Large: ~350 hours</li>
+</ul>
+<p>You should also create an approximate weekly plan of work and a list of deliverables. Recall that the default project duration is 12 weeks, but it can be <a href="https://google.github.io/gsocguides/student/time-management-for-students" target="_blank" rel="noopener noreferrer">extended</a> (for medium and large projects) by up to 22 weeks.</p>
+<ul>
+<li>Describe a brief outline of the work that you plan to do, and try to estimate how will the work be split in the individual weeks of the project.</li>
+<li>Define milestones that you intend to achieve in specific weeks (e.g. finish X in week 4, deliver Y in the middle of the project, have a final version prepared one week before the end of the project, etc.).
+<ul>
+<li>You should focus specifically on the midterm point (week 6), because your mentor(s) will evaluate your progress at this time. You should be slightly more than half done at this moment, and have something reasonable to show.</li>
+<li>In week 11 (one week before the end of the project), you should consider doing a &quot;code freeze&quot;, and spend the last week to polish tests and documentation.</li>
+</ul>
+</li>
+</ul>
+<p>Of course, it is quite difficult to predict this timeline exactly in advance, and it is not a problem to modify it while the project runs, but try to guesstimate it to the best of your ability.</p>
+<p>Furthermore, let us know what is your intended time commitment for working on the project. How many hours per day can you work on it? Are there specific days of the week when you can work on it? Is there some period of time from May to August where you know in advance that you won&#x27;t be able to work on it? Please include this information in the proposal.</p>
+<p>There is a <a href="https://google.github.io/gsocguides/student/how-gsoc-works" target="_blank" rel="noopener noreferrer">Community bonding</a> period before the contributors start working on their projects. It is designed to help you learn about the community that you&#x27;re going to contribute to, and to start familiarizing yourself with the code and/or technology of your project. Please include a short description of preparatory work that you intend to work on during this communit [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="how-to-increase-your-chance-of-being-accepted">How to increase your chance of being accepted?<a href="#how-to-increase-your-chance-of-being-accepted" class="hash-link" aria-label="Direct link to How to increase your chance of being accepted?" title="Direct link to How to increase your chance of being accepted?">​</a></h2>
+<p>You can demonstrate your dedication (and ability) to work on the selected project proposal by contributing something related to it before your proposal is evaluated. This can encompass e.g. sending a pull request to the relevant repository, fixing a bug, writing documentation, etc. There is no specific template for these kinds of contributions, and it might not be possible to do for all types of projects. You can coordinate with the project mentors to find out if they can suggest some [...]
+<p>You can also tell us more about your motivation in your proposal. Why did you choose OpenDAL for a GSoC project specifically? Do you like the OpenDAL language? Is the specific project that you want to work on sympathetic to you for some reason? We would like to know!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="dont-forget-to-submit">Don&#x27;t forget to submit!<a href="#dont-forget-to-submit" class="hash-link" aria-label="Direct link to Don&#x27;t forget to submit!" title="Direct link to Don&#x27;t forget to submit!">​</a></h2>
+<p>You will need to submit your project proposal through the <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code</a> website. Please keep the <strong>deadline</strong> (<strong>2nd April 2024</strong>) in mind, as there will be no extensions!</p>
+<p>Good luck! :)</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="how-to-decrease-your-chance-of-being-accepted">How to decrease your chance of being accepted?<a href="#how-to-decrease-your-chance-of-being-accepted" class="hash-link" aria-label="Direct link to How to decrease your chance of being accepted?" title="Direct link to How to decrease your chance of being accepted?">​</a></h2>
+<p>There are some actions and behaviours that will make it much less likely that your application will be considered, so you should avoid these. For example:</p>
+<ul>
+<li>Spamming or harassing mentors or other members of the OpenDAL community.</li>
+<li>Letting AI automatically generate your project proposal (you should put effort in it, don&#x27;t be lazy!).</li>
+<li>Suggesting unreasonably grandiose project proposals, e.g. adding a garbage collector to OpenDAL.</li>
+<li>Suggesting unreasonably trivial project proposals, e.g. fixing a typo in the OpenDAL documentation. Remember that even the smallest <a href="https://google.github.io/gsocguides/student/time-management-for-students" target="_blank" rel="noopener noreferrer">project size</a> should take about 90 hours!</li>
+</ul>
+<blockquote>
+<p>This guide was inspired by <a href="https://github.com/rust-lang/google-summer-of-code/blob/main/proposal-guide.md" target="_blank" rel="noopener noreferrer">https://github.com/rust-lang/google-summer-of-code/blob/main/proposal-guide.md</a>.</p>
+</blockquote></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/events/gsoc-proposal-guide.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_M1a8" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1 [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/events/ospp-proposal-guide/index.html b/community/events/ospp-proposal-guide/index.html
new file mode 100644
index 000000000..05a010427
--- /dev/null
+++ b/community/events/ospp-proposal-guide/index.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-events/ospp-proposal-guide" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">OSPP Project Proposal Guidance | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/events/ospp-proposal-guide/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsea [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="choosing-a-project">Choosing a project<a href="#choosing-a-project" class="hash-link" aria-label="Direct link to Choosing a project" title="Direct link to Choosing a project">​</a></h2>
+<p>You should start by deciding on which project do you want to work on. You can use our <a href="https://github.com/apache/opendal/issues/4554" target="_blank" rel="noopener noreferrer">list of project ideas</a> as an inspiration.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="interacting-with-the-opendal-community">Interacting with the OpenDAL community<a href="#interacting-with-the-opendal-community" class="hash-link" aria-label="Direct link to Interacting with the OpenDAL community" title="Direct link to Interacting with the OpenDAL community">​</a></h2>
+<p>If you want to discuss our suggested project ideas, you can do so on the <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">maillist</a> or <a href="https://opendal.apache.org/discord" target="_blank" rel="noopener noreferrer">Discord</a>. Make sure to listen to the feedback of the mentors, and try to incorporate it in your project proposal.</p>
+<p>When communicating on the OpenDAL mail list or discord (and when interacting with the OpenDAL community in general), please remember to be polite and uphold the <a href="https://www.apache.org/foundation/policies/conduct" target="_blank" rel="noopener noreferrer">ASF Code of Conduct</a>. Keep in mind that most OpenDAL contributors (and OSPP OpenDAL project mentors) are volunteers, and work on OpenDAL in their free time, so please treat them with respect and avoid spamming.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="creating-the-project-proposal">Creating the project proposal<a href="#creating-the-project-proposal" class="hash-link" aria-label="Direct link to Creating the project proposal" title="Direct link to Creating the project proposal">​</a></h2>
+<p>Ultimately, the project proposal is the main deciding factor on whether your project will be accepted or not, so make sure that you put energy into making it as good as possible.</p>
+<ul>
+<li>Please carefully read the <a href="https://summer-ospp.ac.cn/help/en/proj_apply/" target="_blank" rel="noopener noreferrer">Project Application Suggestions</a>.</li>
+<li>Prepare relevant materials based on the project requirements and refer to the <a href="https://summer-ospp.ac.cn/help/en/assets/Project-Application-Template.pdf" target="_blank" rel="noopener noreferrer">Project Application Template</a>.</li>
+<li>The quality of the project application is the primary criterion for the committee to evaluate whether the student&#x27;s application is approved or not.</li>
+<li>This is the time to understand the project details and to become familiar with the community operation and etiquette.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="project-information-and-timeline">Project information and timeline<a href="#project-information-and-timeline" class="hash-link" aria-label="Direct link to Project information and timeline" title="Direct link to Project information and timeline">​</a></h2>
+<p>This is the most important part of your project proposal. You should include an abstract that explains your project in one or two paragraphs, and then a very detailed description that explains what exactly do you want to achieve in the proposed project. The proposal should also clearly state the designated mentor(s) for your project (you should get in touch with them before submitting the proposal).</p>
+<ul>
+<li>Describe a brief outline of the work that you plan to do, and try to estimate how will the work be split in the individual weeks of the project.</li>
+<li>Define milestones that you intend to achieve in specific weeks (e.g. finish X in week 4, deliver Y in the middle of the project, have a final version prepared one week before the end of the project, etc.).
+<ul>
+<li>You should focus specifically on the midterm point (week 6), because your mentor(s) will evaluate your progress at this time. You should be slightly more than half done at this moment, and have something reasonable to show.</li>
+<li>In week 11 (one week before the end of the project), you should consider doing a &quot;code freeze&quot;, and spend the last week to polish tests and documentation.</li>
+</ul>
+</li>
+</ul>
+<p>Of course, it is quite difficult to predict this timeline exactly in advance, and it is not a problem to modify it while the project runs, but try to guesstimate it to the best of your ability.</p>
+<p>Furthermore, let us know what is your intended time commitment for working on the project. How many hours per day can you work on it? Are there specific days of the week when you can work on it? Is there some period of time from May to August where you know in advance that you won&#x27;t be able to work on it? Please include this information in the proposal.</p>
+<p>There is a Community bonding period before the contributors start working on their projects. It is designed to help you learn about the community that you&#x27;re going to contribute to, and to start familiarizing yourself with the code and/or technology of your project. Please include a short description of preparatory work that you intend to work on during this community bonding period (should your project be accepted).</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="how-to-increase-your-chance-of-being-accepted">How to increase your chance of being accepted?<a href="#how-to-increase-your-chance-of-being-accepted" class="hash-link" aria-label="Direct link to How to increase your chance of being accepted?" title="Direct link to How to increase your chance of being accepted?">​</a></h2>
+<p>You can demonstrate your dedication (and ability) to work on the selected project proposal by contributing something related to it before your proposal is evaluated. This can encompass e.g. sending a pull request to the relevant repository, fixing a bug, writing documentation, etc. There is no specific template for these kinds of contributions, and it might not be possible to do for all types of projects. You can coordinate with the project mentors to find out if they can suggest some [...]
+<p>You can also tell us more about your motivation in your proposal. Why did you choose OpenDAL for a OSPP project specifically? Do you like the OpenDAL language? Is the specific project that you want to work on sympathetic to you for some reason? We would like to know!</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="dont-forget-to-submit">Don&#x27;t forget to submit!<a href="#dont-forget-to-submit" class="hash-link" aria-label="Direct link to Don&#x27;t forget to submit!" title="Direct link to Don&#x27;t forget to submit!">​</a></h2>
+<p>You will need to submit your project proposal through the <a href="https://summer-ospp.ac.cn/" target="_blank" rel="noopener noreferrer">Open Source Promotion Plan</a> website. Please keep the <strong>deadline</strong> (<strong>4th Jun 2024</strong>) in mind, as there will be no extensions!</p>
+<p>Good luck! :)</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="how-to-decrease-your-chance-of-being-accepted">How to decrease your chance of being accepted?<a href="#how-to-decrease-your-chance-of-being-accepted" class="hash-link" aria-label="Direct link to How to decrease your chance of being accepted?" title="Direct link to How to decrease your chance of being accepted?">​</a></h2>
+<p>There are some actions and behaviours that will make it much less likely that your application will be considered, so you should avoid these. For example:</p>
+<ul>
+<li>Spamming or harassing mentors or other members of the OpenDAL community.</li>
+<li>Letting AI automatically generate your project proposal (you should put effort in it, don&#x27;t be lazy!).</li>
+<li>Suggesting unreasonably grandiose project proposals, e.g. adding a garbage collector to OpenDAL.</li>
+<li>Suggesting unreasonably trivial project proposals, e.g. fixing a typo in the OpenDAL documentation.</li>
+</ul>
+<blockquote>
+<p>This guide was inspired by <a href="https://github.com/rust-lang/google-summer-of-code/blob/main/proposal-guide.md" target="_blank" rel="noopener noreferrer">https://github.com/rust-lang/google-summer-of-code/blob/main/proposal-guide.md</a>.</p>
+</blockquote></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/events/ospp-proposal-guide.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_M1a8" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1 [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
new file mode 100644
index 000000000..af9265659
--- /dev/null
+++ b/community/index.html
@@ -0,0 +1,85 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-community" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Community | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true"  [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Welcome to the Apache OpenDAL™ community!</p>
+<p>Every volunteer project obtains its strength from the people involved in it. We invite you to participate as much or as little as you choose.</p>
+<p>You can:</p>
+<ul>
+<li>Use our project and provide feedback.</li>
+<li>Provide us with the use-cases.</li>
+<li>Report bugs and submit patches.</li>
+<li>Contribute code, documentation.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="mailing-list">Mailing list<a href="#mailing-list" class="hash-link" aria-label="Direct link to Mailing list" title="Direct link to Mailing list">​</a></h2>
+<table><thead><tr><th>Name</th><th>Desc</th><th>Subscribe</th><th>Unsubscribe</th><th>Post</th><th>Archive</th></tr></thead><tbody><tr><td><a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a></td><td>Development related discussions</td><td><a href="mailto:dev-subscribe@opendal.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></td><td><a href="mailto:dev-unsubscribe@opendal.apache.org" target="_blank" rel="noopener  [...]
+<p>Please make sure you are subscribed to the mailing list you are posting to!</p>
+<p>If you are not subscribed to the mailing list, your message will either be rejected or you won&#x27;t receive the response.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="how-to-subscribe-to-a-mailing-list">How to subscribe to a mailing list<a href="#how-to-subscribe-to-a-mailing-list" class="hash-link" aria-label="Direct link to How to subscribe to a mailing list" title="Direct link to How to subscribe to a mailing list">​</a></h3>
+<p>Before you can post a message to a mailing list, you need to subscribe to the list first.</p>
+<ol>
+<li>Send an email without any contents or subject to <a href="mailto:listname-subscribe@opendal.apache.org" target="_blank" rel="noopener noreferrer">listname-subscribe@opendal.apache.org</a>. (replace listname with dev or user)</li>
+<li>Wait till you receive an email with the subject &quot;confirm subscribe to <a href="mailto:listname@opendal.apache.org" target="_blank" rel="noopener noreferrer">listname@opendal.apache.org</a>&quot;. Reply to that email, without editing the subject or including any contents.</li>
+<li>Wait till you receive an email with the subject &quot;WELCOME to <a href="mailto:listname@opendal.apache.org" target="_blank" rel="noopener noreferrer">listname@opendal.apache.org</a>&quot;.</li>
+</ol>
+<p>If you email us with a code snippet, make sure that:</p>
+<ul>
+<li>you do not link to files in external services as such files can change, get deleted or the link might break and thus make an archived email thread useless</li>
+<li>you paste text instead of screenshots of text</li>
+<li>you keep formatting when pasting code to keep the code readable</li>
+<li>there are enough import statements to avoid ambiguities</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="issue-tracker">Issue tracker<a href="#issue-tracker" class="hash-link" aria-label="Direct link to Issue tracker" title="Direct link to Issue tracker">​</a></h2>
+<p>We use GitHub Issues to track all code related issues: <a href="https://github.com/apache/opendal/issues" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal/issues</a></p>
+<p>You must have a <a href="https://github.com/signup" target="_blank" rel="noopener noreferrer">GitHub account</a> to log cases and issues.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="bug-reports">Bug reports<a href="#bug-reports" class="hash-link" aria-label="Direct link to Bug reports" title="Direct link to Bug reports">​</a></h3>
+<p>Found bug? Enter an issue in the issue tracker.</p>
+<p>Before submitting an issue, please:</p>
+<ul>
+<li>Verify that the bug does in fact exist.</li>
+<li>Search the issue tracker to verify there is no existing issue reporting the bug you&#x27;ve found.</li>
+<li>Consider tracking down the bug yourself in the source code of OpenDAL and submitting a patch along with your bug report. This is a great time saver for the OpenDAL developers and helps ensure the bug will be fixed quickly.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="enhancement">Enhancement<a href="#enhancement" class="hash-link" aria-label="Direct link to Enhancement" title="Direct link to Enhancement">​</a></h3>
+<p>Enhancements or new feature proposals are also welcome. The more concrete and rationale the proposal is, the greater the chance it will be incorporated into future releases.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="source-code">Source code<a href="#source-code" class="hash-link" aria-label="Direct link to Source code" title="Direct link to Source code">​</a></h2>
+<ul>
+<li>OpenDAL core repository: <a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="upcoming-community-events">Upcoming Community Events<a href="#upcoming-community-events" class="hash-link" aria-label="Direct link to Upcoming Community Events" title="Direct link to Upcoming Community Events">​</a></h2>
+<p>For now, we have a single community event known as the Community Sync Meeting.
+This meeting is open to everyone.</p>
+<p>During the meeting, we will cover various topics including project status,
+roadmap updates, and other relevant discussions.
+We will also have a Q&amp;A session at the end of the meeting.</p>
+<p>Attending the meeting presents a valuable opportunity
+for you to meet fellow community members and gain deeper insights into the project.
+Moreover, it provides an excellent chance for active involvement in the project&#x27;s activities.</p>
+<p>We currently organize the community sync meeting every three weeks,
+with one scheduled at 09:00 UTC+8 and the other at 19:00 UTC+8.
+These two meeting times alternate between each three-week cycle.</p>
+<p>The following is the calendar of the community events:</p>
+<p>Click here to view the calendar in a new tab: <a href="https://calendar.google.com/calendar/embed?src=d32a8b1c08fc40d4230e3ce89145fd0e9a1ea4a374893a23ec7bd28ca646db45%40group.calendar.google.com&amp;ctz=Asia%2FShanghai" target="_blank" rel="noopener noreferrer">Community Events Calendar</a>.</p>
+<p>If you prefer to add these events to your personal calendar, please use this iCal link:
+<a href="https://calendar.google.com/calendar/ical/d32a8b1c08fc40d4230e3ce89145fd0e9a1ea4a374893a23ec7bd28ca646db45%40group.calendar.google.com/public/basic.ics" target="_blank" rel="noopener noreferrer">Add to your calendar</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="people">People<a href="#people" class="hash-link" aria-label="Direct link to People" title="Direct link to People">​</a></h2>
+<p>Thank you to all the contributors for your selfless dedication and expertise
+in making this project more comprehensive and valuable.
+We sincerely appreciate your support and efforts!</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="pmc-members-and-committers">PMC members and Committers<a href="#pmc-members-and-committers" class="hash-link" aria-label="Direct link to PMC members and Committers" title="Direct link to PMC members and Committers">​</a></h3>
+<p>The committers list could be found <a href="https://people.apache.org/phonebook.html?project=opendal" target="_blank" rel="noopener noreferrer">here</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="contributors">Contributors<a href="#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors">​</a></h3>
+<p>The contributor list could be found <a href="https://github.com/apache/opendal/graphs/contributors/" target="_blank" rel="noopener noreferrer">here</a>.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/index.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width=" [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/maturity/index.html b/community/maturity/index.html
new file mode 100644
index 000000000..71f7edde8
--- /dev/null
+++ b/community/maturity/index.html
@@ -0,0 +1,277 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-maturity" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Maturity | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/maturity/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The goals of this maturity model are to describe how Apache projects operate in a concise and high-level way, and to provide a basic framework that projects may choose to use to evaluate themselves.</p>
+<p>More details can be found <a href="https://community.apache.org/apache-way/apache-project-maturity-model.html" target="_blank" rel="noopener noreferrer">here</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="status-of-this-assessment">Status of this assessment<a href="#status-of-this-assessment" class="hash-link" aria-label="Direct link to Status of this assessment" title="Direct link to Status of this assessment">​</a></h2>
+<p>This assessment is evaluated during OpenDAL&#x27;s graduation, which is finished on 2024-01-18.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="maturity-model-assessment">Maturity model assessment<a href="#maturity-model-assessment" class="hash-link" aria-label="Direct link to Maturity model assessment" title="Direct link to Maturity model assessment">​</a></h2>
+<p>The following table is filled according to the <a href="https://community.apache.org/apache-way/apache-project-maturity-model.html" target="_blank" rel="noopener noreferrer">Apache Maturity Model</a>. Mentors and community members are welcome to comment and modify it.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="code">CODE<a href="#code" class="hash-link" aria-label="Direct link to CODE" title="Direct link to CODE">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>CD10</strong></td><td>The project produces Open Source software for distribution to the public, at no charge.</td><td><strong>YES</strong> The project source code is licensed under the <code>Apache License 2.0</code>.</td></tr><tr><td><strong>CD20</strong></td><td>Anyone can easily discover and access the project&#x27;s code..</td><td><str [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="license">LICENSE<a href="#license" class="hash-link" aria-label="Direct link to LICENSE" title="Direct link to LICENSE">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>LC10</strong></td><td>The Apache License, version 2.0, covers the released code.</td><td><strong>YES</strong> The <a href="https://github.com/apache/opendal/blob/main/LICENSE" target="_blank" rel="noopener noreferrer">LICENSE</a> is in GitHub repository. And all source files are with APLv2 header, checked by <code>korandoru/hawkeye@v3.6.0< [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="releases">Releases<a href="#releases" class="hash-link" aria-label="Direct link to Releases" title="Direct link to Releases">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>RE10</strong></td><td>Releases consist of source code, distributed using standard and open archive formats that are expected to stay readable in the long term.</td><td><strong>YES</strong> Source release is distributed via <a href="https://dist.apache.org/repos/dist/release/opendal/" target="_blank" rel="noopener noreferrer">dist.apache.or [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="quality">Quality<a href="#quality" class="hash-link" aria-label="Direct link to Quality" title="Direct link to Quality">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>QU10</strong></td><td>The project is open and honest about the quality of its code. Various levels of quality and maturity for various modules are natural and acceptable as long as they are clearly communicated.</td><td><strong>YES</strong> We encourage user to <a href="https://github.com/apache/opendal/issues" target="_blank" rel="noopene [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="community">Community<a href="#community" class="hash-link" aria-label="Direct link to Community" title="Direct link to Community">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>CO10</strong></td><td>The project has a well-known homepage that points to all the information required to operate according to this maturity model.</td><td><strong>YES</strong> The <a href="https://opendal.apache.org/" target="_blank" rel="noopener noreferrer">official website</a> includes all information user need to run Apache OpenDAL.< [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="consensus">Consensus<a href="#consensus" class="hash-link" aria-label="Direct link to Consensus" title="Direct link to Consensus">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>CS10</strong></td><td>The project maintains a public list of its contributors who have decision power. The project&#x27;s PPMC (Project Management Committee) consists of those contributors.</td><td><strong>Yes</strong> See <a href="https://opendal.apache.org/community/#people" target="_blank" rel="noopener noreferrer">members</a> with all  [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="independence">Independence<a href="#independence" class="hash-link" aria-label="Direct link to Independence" title="Direct link to Independence">​</a></h3>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th><strong>ID</strong></th><th><strong>Description</strong></th><th><strong>Status</strong></th></tr></thead><tbody><tr><td><strong>IN10</strong></td><td>The project is independent from any corporate or organizational influence.</td><td><strong>YES</strong>  The PPMC members and committer of Apache OpenDAL are from several different companies, and majority of them are NOT From the company that donated this project.</td></tr><tr><td><strong>IN20</strong></td><td>Contrib [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/pmc_members/board-reporting/index.html b/community/pmc_members/board-reporting/index.html
new file mode 100644
index 000000000..901856424
--- /dev/null
+++ b/community/pmc_members/board-reporting/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc_members/board-reporting" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Board reporting | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/board-reporting/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language"  [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="frequency-of-reporting">Frequency of Reporting<a href="#frequency-of-reporting" class="hash-link" aria-label="Direct link to Frequency of Reporting" title="Direct link to Frequency of Reporting">​</a></h3>
+<p>New graduates from the Apache Incubator are required to report monthly for the first three months, then quarterly.</p>
+<p><strong>The current reporting frequency for Apache OpenDAL™ is once per quarter.</strong></p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="report-preparation">Report Preparation<a href="#report-preparation" class="hash-link" aria-label="Direct link to Report Preparation" title="Direct link to Report Preparation">​</a></h3>
+<p>It&#x27;s recommended to discuss the report on <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a> (<a href="mailto:dev-subscribe@opendal.apache.org" target="_blank" rel="noopener noreferrer">subscribe</a>), inviting all members to contribute. Here are the critical points your report should address:</p>
+<ul>
+<li>Any concerns that require the attention of the ASF Board.</li>
+<li>Legal, infrastructure, cross-project, or personal issues that need addressing.</li>
+<li>Achievements (releases, milestones, etc.) since the last report.</li>
+<li>Any other significant points or thoughts you think should be included.</li>
+</ul>
+<p>You can discuss the issues based on the template or refer to <a href="https://hackmd.io/@opendal/asf-board-report-2024-04" target="_blank" rel="noopener noreferrer">previous reports</a> for preparation.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="report-writing-and-submission">Report Writing and Submission<a href="#report-writing-and-submission" class="hash-link" aria-label="Direct link to Report Writing and Submission" title="Direct link to Report Writing and Submission">​</a></h3>
+<p>The report should be written in Markdown format and submitted to the Apache Board of Directors via the <a href="https://reporter.apache.org/" target="_blank" rel="noopener noreferrer">Board Reporting Service</a>.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/pmc_members/board-reporting.md" target="_blank" rel="noopener nore [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/pmc_members/nominate-committer/index.html b/community/pmc_members/nominate-committer/index.html
new file mode 100644
index 000000000..c66c0a413
--- /dev/null
+++ b/community/pmc_members/nominate-committer/index.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc_members/nominate-committer" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Nominate Committer | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/nominate-committer/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:lang [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="start-vote-about-the-candidate">Start vote about the candidate<a href="#start-vote-about-the-candidate" class="hash-link" aria-label="Direct link to Start vote about the candidate" title="Direct link to Start vote about the candidate">​</a></h2>
+<p>Start a vote about the candidate via sending email to: <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>:</p>
+<ul>
+<li>candidate_name: The full name of the candidate.</li>
+<li>candidate_github_id: The GitHub id of the candidate.</li>
+</ul>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[VOTE] Add candidate ${candidate_name} as a new committer</span><br></span></code></pre></d [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hi, All OpenDAL PMC members.</span><br></span><span class="token-line" style="color:#393A34 [...]
+<p>Example: <a href="https://lists.apache.org/thread/j16lvkyrmvg8wyf3z4gqpjky5m594jhy" target="_blank" rel="noopener noreferrer">https://lists.apache.org/thread/j16lvkyrmvg8wyf3z4gqpjky5m594jhy</a> (Private Link)</p>
+<p>After at least 3 <code>+1</code> binding vote and no veto, claim the vote result:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[RESULT][VOTE] Add candidate ${candidate_name} as a new committer</span><br></span></code>< [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hi, all:</span><br></span><span class="token-line" style="color:#393A34"><span class="token [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="send-invitation-to-the-candidate">Send invitation to the candidate<a href="#send-invitation-to-the-candidate" class="hash-link" aria-label="Direct link to Send invitation to the candidate" title="Direct link to Send invitation to the candidate">​</a></h2>
+<p>Send an invitation to the candidate and cc <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Invitation to become OpenDAL Committer: ${candidate_name}</span><br></span></code></pre></d [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hello ${candidate_name},</span><br></span><span class="token-line" style="color:#393A34"><s [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="add-the-candidate-to-the-committer-list">Add the candidate to the committer list<a href="#add-the-candidate-to-the-committer-list" class="hash-link" aria-label="Direct link to Add the candidate to the committer list" title="Direct link to Add the candidate to the committer list">​</a></h2>
+<p>After the candidate accepts the invitation and the iCLA is recorded, add the candidate to the committer list by <a href="https://whimsy.apache.org/roster/committee/opendal" target="_blank" rel="noopener noreferrer">whimsy roster tools</a></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/roster-add-committer-a544b022d22a3bfffef5accc9d825942.png" width="1598" height="494" class="img_AUsV"></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="announcement">Announcement<a href="#announcement" class="hash-link" aria-label="Direct link to Announcement" title="Direct link to Announcement">​</a></h2>
+<p>Once the nominee accepts the invitation and the commit bit is granted, it&#x27;s encouraged to send an announcement email to <a href="mailto:dev@opendal.apache.org" target="_blank" rel="noopener noreferrer">dev@opendal.apache.org</a> to welcome the new committers. Here is an email template:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hello, everyone</span><br></span><span class="token-line" style="color:#393A34"><span class [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/pmc_members/nominate-pmc-member/index.html b/community/pmc_members/nominate-pmc-member/index.html
new file mode 100644
index 000000000..8771a0284
--- /dev/null
+++ b/community/pmc_members/nominate-pmc-member/index.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc_members/nominate-pmc-member" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Nominate PMC Member | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/nominate-pmc-member/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:la [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="start-vote-about-the-candidate">Start vote about the candidate<a href="#start-vote-about-the-candidate" class="hash-link" aria-label="Direct link to Start vote about the candidate" title="Direct link to Start vote about the candidate">​</a></h2>
+<p>Start a vote about the candidate via sending email to: <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>:</p>
+<ul>
+<li>candidate_name: The full name of the candidate.</li>
+<li>candidate_github_id: The GitHub id of the candidate.</li>
+</ul>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[VOTE] Add candidate ${candidate_name} as a new PMC member</span><br></span></code></pre></ [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hi, All OpenDAL PMC members.</span><br></span><span class="token-line" style="color:#393A34 [...]
+<p>Example: <a href="https://lists.apache.org/thread/yg2gz2tof3cvbrgp1wxzk6mf9o858h7t" target="_blank" rel="noopener noreferrer">https://lists.apache.org/thread/yg2gz2tof3cvbrgp1wxzk6mf9o858h7t</a> (Private Link)</p>
+<p>After at least 3 <code>+1</code> binding vote and no veto, claim the vote result:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[RESULT][VOTE] Add candidate ${candidate_name} as a new PMC member</span><br></span></code> [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hi, all:</span><br></span><span class="token-line" style="color:#393A34"><span class="token [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="send-notice-to-board-after-vote-passed">Send NOTICE to Board after VOTE PASSED<a href="#send-notice-to-board-after-vote-passed" class="hash-link" aria-label="Direct link to Send NOTICE to Board after VOTE PASSED" title="Direct link to Send NOTICE to Board after VOTE PASSED">​</a></h2>
+<p>The nominating PMC member should send a message to the Board <a href="mailto:board@apache.org" target="_blank" rel="noopener noreferrer">board@apache.org</a> with a reference to the vote result in the following form:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[NOTICE] ${candidate_name} for Apache OpenDAL PMC</span><br></span></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">${candidate_name} has been voted as a new member of the Apache OpenDAL PMC. the vote thread [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="send-invitation-to-the-candidate">Send invitation to the candidate<a href="#send-invitation-to-the-candidate" class="hash-link" aria-label="Direct link to Send invitation to the candidate" title="Direct link to Send invitation to the candidate">​</a></h2>
+<p>Send an invitation to the candidate and cc <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Invitation to become Apache OpenDAL PMC Member: ${candidate_name}</span><br></span></code>< [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hello ${candidate_name},</span><br></span><span class="token-line" style="color:#393A34"><s [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="add-the-candidate-to-the-pmc-member-list">Add the candidate to the PMC member list<a href="#add-the-candidate-to-the-pmc-member-list" class="hash-link" aria-label="Direct link to Add the candidate to the PMC member list" title="Direct link to Add the candidate to the PMC member list">​</a></h2>
+<p>After the candidate accepts the invitation, add the candidate to the PMC member list by <a href="https://whimsy.apache.org/roster/committee/opendal" target="_blank" rel="noopener noreferrer">whimsy roster tools</a></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/roster-add-pmc-member-e054bc1c41af11ec5a6bf37ae926636d.png" width="1248" height="924" class="img_AUsV"></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/pmc_members/nominate-pmc-member.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill=" [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/pmc_members/onboarding/index.html b/community/pmc_members/onboarding/index.html
new file mode 100644
index 000000000..a3b6da4ec
--- /dev/null
+++ b/community/pmc_members/onboarding/index.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-pmc_members/onboarding" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Onboarding | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/pmc_members/onboarding/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="e [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Upon receiving an invitation email from OpenDAL PMC, a new PMC member should consider whether accepting.
+If they decide in favor, they should select &quot;Reply All&quot; and express their decision.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="subscribe-to-private-mailing-list">Subscribe to Private Mailing List<a href="#subscribe-to-private-mailing-list" class="hash-link" aria-label="Direct link to Subscribe to Private Mailing List" title="Direct link to Subscribe to Private Mailing List">​</a></h2>
+<ol>
+<li>Send email to <a href="mailto:private-subscribe@opendal.apache.org" target="_blank" rel="noopener noreferrer">private-subscribe@opendal.apache.org</a></li>
+<li>You will receive an email with the subject &quot;confirm subscribe to <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>&quot;</li>
+<li>Reply to the email with &quot;Confirm&quot; in the body</li>
+</ol>
+<p>If you receive an email with the subject &quot;WELCOME to <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>&quot;, you have successfully subscribed to the private mailing list.</p>
+<p>It&#x27;s required for PMC members to subscribe the private mailing list. The private list is only for confidential discussions that should not be made public, such as the suitability of a particular individual to become a committer or a member of the PMC.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="setup-1password-secrets-access">Setup 1Password Secrets Access<a href="#setup-1password-secrets-access" class="hash-link" aria-label="Direct link to Setup 1Password Secrets Access" title="Direct link to Setup 1Password Secrets Access">​</a></h2>
+<p>Once you have been added to OpenDAL&#x27;s PMC member list, you will gain the access to all OpenDAL&#x27;s secrets.</p>
+<ul>
+<li>Please refrain from modifying secrets in the <code>Services</code> vault as this could disrupt our integration tests.</li>
+<li>Ensure that you keep all secrets secure and avoid sharing them with others or making them public. Do not commit them anywhere else.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="read-pmc-member-guide">Read PMC Member Guide<a href="#read-pmc-member-guide" class="hash-link" aria-label="Direct link to Read PMC Member Guide" title="Direct link to Read PMC Member Guide">​</a></h2>
+<p>Please read <a href="https://www.apache.org/dev/pmc.html" target="_blank" rel="noopener noreferrer">PMC GUIDE</a> to know about the general responsibilities of Project Management Committee (PMC) members in managing our project and common how-to procedures for day to day maintenance.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/commu [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/release/index.html b/community/release/index.html
new file mode 100644
index 000000000..95d1dfd7d
--- /dev/null
+++ b/community/release/index.html
@@ -0,0 +1,214 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-release/release" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Create a release | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/release/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta  [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+releases a new version of Apache OpenDAL™ in accordance with the Apache requirements.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2>
+<p><code>Source Release</code> is the key point which Apache values, and is also necessary for an ASF release.</p>
+<p>Please remember that publishing software has legal consequences.</p>
+<p>This guide complements the foundation-wide policies and guides:</p>
+<ul>
+<li><a href="https://www.apache.org/legal/release-policy.html" target="_blank" rel="noopener noreferrer">Release Policy</a></li>
+<li><a href="https://infra.apache.org/release-distribution" target="_blank" rel="noopener noreferrer">Release Distribution Policy</a></li>
+<li><a href="https://infra.apache.org/release-publishing.html" target="_blank" rel="noopener noreferrer">Release Creation Process</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="some-terminology-of-release">Some Terminology of release<a href="#some-terminology-of-release" class="hash-link" aria-label="Direct link to Some Terminology of release" title="Direct link to Some Terminology of release">​</a></h2>
+<p>In the context of our release, we use several terms to describe different stages of the release process.</p>
+<p>Here&#x27;s an explanation of these terms:</p>
+<ul>
+<li><code>opendal_version</code>: the version of OpenDAL to be released, like <code>0.46.0</code>.</li>
+<li><code>release_version</code>: the version of release candidate, like <code>0.46.0-rc.1</code>.</li>
+<li><code>rc_version</code>: the minor version for voting round, like <code>rc.1</code>.</li>
+<li><code>maven_artifact_number</code>: the number for Maven staging artifacts, like <code>1010</code>. The number can be found by searching &quot;opendal&quot; on <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>. And the Maven staging artifacts will be created automatically when we push a git tag to GitHub for now.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="preparation">Preparation<a href="#preparation" class="hash-link" aria-label="Direct link to Preparation" title="Direct link to Preparation">​</a></h2>
+<div class="theme-admonition theme-admonition-caution admonition_NGYd alert alert--warning"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</ [...]
+<p>Refer to <a href="/community/release/reference/setup_gpg/">Setup GPG Key</a> to make sure the GPG key has been set up.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="start-discussion-about-the-next-release">Start discussion about the next release<a href="#start-discussion-about-the-next-release" class="hash-link" aria-label="Direct link to Start discussion about the next release" title="Direct link to Start discussion about the next release">​</a></h2>
+<p>Start a discussion at <a href="https://github.com/apache/opendal/discussions/categories/general" target="_blank" rel="noopener noreferrer">OpenDAL Discussion General</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[DISCUSS] Release Apache OpenDAL ${release_version}</span><br></span></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hello, Apache OpenDAL Community,</span><br></span><span class="token-line" style="color:#39 [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="start-a-tracking-issue-about-the-next-release">Start a tracking issue about the next release<a href="#start-a-tracking-issue-about-the-next-release" class="hash-link" aria-label="Direct link to Start a tracking issue about the next release" title="Direct link to Start a tracking issue about the next release">​</a></h2>
+<p>Start a <a href="https://github.com/apache/opendal/issues/new?template=3-new-release.md" target="_blank" rel="noopener noreferrer">tracking issue on GitHub</a> for the upcoming release to track all tasks that need to be completed.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="release-list">Release List<a href="#release-list" class="hash-link" aria-label="Direct link to Release List" title="Direct link to Release List">​</a></h2>
+<p>Update the version list in the <code>dev/src/release/package.rs</code> file.</p>
+<p>For example:</p>
+<ul>
+<li>If there is any breaking change, please bump the <code>minor</code> version instead of the <code>patch</code> version.</li>
+<li>If this package is not ready for release, please skip.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="github-side">GitHub Side<a href="#github-side" class="hash-link" aria-label="Direct link to GitHub Side" title="Direct link to GitHub Side">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="bump-version-in-project">Bump version in project<a href="#bump-version-in-project" class="hash-link" aria-label="Direct link to Bump version in project" title="Direct link to Bump version in project">​</a></h3>
+<p>Run <code>just update-version</code> to bump the version in the project.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="update-docs">Update docs<a href="#update-docs" class="hash-link" aria-label="Direct link to Update docs" title="Direct link to Update docs">​</a></h3>
+<ul>
+<li>Update <code>CHANGELOG.md</code>, refer to <a href="/community/release/reference/generate_release_note/">Generate Release Note</a> for more information.</li>
+<li>Update <code>core/src/docs/upgrade.md</code> if there are breaking changes in <code>core</code></li>
+<li>Make sure every released bindings&#x27; <code>upgrade.md</code> has been updated.
+<ul>
+<li>java: <code>bindings/java/upgrade.md</code></li>
+<li>node.js: <code>bindings/nodejs/upgrade.md</code></li>
+<li>python: <code>bindings/python/upgrade.md</code></li>
+</ul>
+</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="generate-dependencies-list">Generate dependencies list<a href="#generate-dependencies-list" class="hash-link" aria-label="Direct link to Generate dependencies list" title="Direct link to Generate dependencies list">​</a></h3>
+<p>Download and setup <code>cargo-deny</code>. You can refer to <a href="https://embarkstudios.github.io/cargo-deny/cli/index.html" target="_blank" rel="noopener noreferrer">cargo-deny</a>.</p>
+<p>Running <code>python3 ./scripts/dependencies.py generate</code> to update the dependency list of every package.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="push-release-candidate-tag">Push release candidate tag<a href="#push-release-candidate-tag" class="hash-link" aria-label="Direct link to Push release candidate tag" title="Direct link to Push release candidate tag">​</a></h3>
+<p>After bump version PR gets merged, we can create a GitHub release for the release candidate:</p>
+<ul>
+<li>Create a tag at <code>main</code> branch on the <code>Bump Version</code> / <code>Patch up version</code> commit: <code>git tag -s &quot;v0.46.0-rc.1&quot;</code>, please correctly check out the corresponding commit instead of directly tagging on the main branch.</li>
+<li>Push tags to GitHub: <code>git push --tags</code>.</li>
+</ul>
+<div class="theme-admonition theme-admonition-note admonition_NGYd alert alert--secondary"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="check-the-github-action-status">Check the GitHub action status<a href="#check-the-github-action-status" class="hash-link" aria-label="Direct link to Check the GitHub action status" title="Direct link to Check the GitHub action status">​</a></h3>
+<p>After pushing the tag, we need to check the GitHub action status to make sure the release candidate is created successfully.</p>
+<ul>
+<li>Python: <a href="https://github.com/apache/opendal/actions/workflows/bindings_python.yml" target="_blank" rel="noopener noreferrer">Bindings Python CI</a></li>
+<li>Java: <a href="https://github.com/apache/opendal/actions/workflows/bindings_java.yml" target="_blank" rel="noopener noreferrer">Bindings Java CI</a> and <a href="https://github.com/apache/opendal/actions/workflows/release_java.yml" target="_blank" rel="noopener noreferrer">Bindings Java Release</a></li>
+<li>Node.js: <a href="https://github.com/apache/opendal/actions/workflows/bindings_nodejs.yml" target="_blank" rel="noopener noreferrer">Bindings Node.js CI</a></li>
+</ul>
+<p>In the most cases, it would be great to rerun the failed workflow directly when you find some failures. But if a new code patch is needed to fix the failure, you should create a new release candidate tag, increase the rc number and push it to GitHub.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="asf-side">ASF Side<a href="#asf-side" class="hash-link" aria-label="Direct link to ASF Side" title="Direct link to ASF Side">​</a></h2>
+<p>If any step in the ASF Release process fails and requires code changes,
+we will abandon that version and prepare for the next one.
+Our release page will only display ASF releases instead of GitHub Releases.</p>
+<p>Additionally, we should also drop the staging Maven artifacts on <a href="https://repository.apache.org" target="_blank" rel="noopener noreferrer">https://repository.apache.org</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="create-an-asf-release">Create an ASF Release<a href="#create-an-asf-release" class="hash-link" aria-label="Direct link to Create an ASF Release" title="Direct link to Create an ASF Release">​</a></h3>
+<p>After GitHub Release has been created, we can start to create ASF Release.</p>
+<ul>
+<li>Checkout to released tag. (e.g. <code>git checkout v0.46.0-rc.1</code>, tag is created in the previous step)</li>
+<li>Use the release script to create a new release: <code>just release</code>
+<ul>
+<li>This script will generate the release candidate artifacts under <code>dist</code>, including:
+<ul>
+<li><code>apache-opendal-{package}-{version}-src.tar.gz</code></li>
+<li><code>apache-opendal-{package}-{version}-src.tar.gz.asc</code></li>
+<li><code>apache-opendal-{package}-{version}-src.tar.gz.sha512</code></li>
+</ul>
+</li>
+</ul>
+</li>
+<li>Push the newly created branch to GitHub</li>
+</ul>
+<p>This script will create a new release under <code>dist</code>.</p>
+<p>For example:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">dist</span><br></span><span class="token-line" style="color:#393A34"><span class="token p [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="upload-artifacts-to-the-svn-dist-repo">Upload artifacts to the SVN dist repo<a href="#upload-artifacts-to-the-svn-dist-repo" class="hash-link" aria-label="Direct link to Upload artifacts to the SVN dist repo" title="Direct link to Upload artifacts to the SVN dist repo">​</a></h3>
+<div class="theme-admonition theme-admonition-info admonition_NGYd alert alert--info"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_LOU5"><p>SVN is required for this step.</p [...]
+<p>The svn repository of the dev branch is: <a href="https://dist.apache.org/repos/dist/dev/opendal" target="_blank" rel="noopener noreferrer">https://dist.apache.org/repos/dist/dev/opendal</a></p>
+<p>First, checkout OpenDAL to local directory:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># As this step will copy all the versions, it will take some time. If the network is brok [...]
+<p>Then, upload the artifacts:</p>
+<blockquote>
+<p>The <code>${release_version}</code> here should be like <code>0.46.0-rc.1</code></p>
+</blockquote>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">cd opendal-dist-dev</span><br></span><span class="token-line" style="color:#393A34"><span [...]
+<p>Visit <a href="https://dist.apache.org/repos/dist/dev/opendal/" target="_blank" rel="noopener noreferrer">https://dist.apache.org/repos/dist/dev/opendal/</a> to make sure the artifacts are uploaded correctly.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="close-the-nexus-staging-repo">Close the Nexus staging repo<a href="#close-the-nexus-staging-repo" class="hash-link" aria-label="Direct link to Close the Nexus staging repo" title="Direct link to Close the Nexus staging repo">​</a></h3>
+<p>To verify the Maven staging artifacts in the next step, close the Nexus staging repo as below.</p>
+<ol>
+<li>Open <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a> with your Apache ID login.</li>
+<li>Find the artifact <code>orgapacheopendal-${maven_artifact_number}</code>, click the &quot;Close&quot; button.</li>
+</ol>
+<p>The <code>close</code> operation means that the artifacts are ready for voting.</p>
+<div class="theme-admonition theme-admonition-caution admonition_NGYd alert alert--warning"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</ [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="rescue">Rescue<a href="#rescue" class="hash-link" aria-label="Direct link to Rescue" title="Direct link to Rescue">​</a></h3>
+<p>If you accidentally published wrong or unexpected artifacts, like wrong signature files, wrong sha256 files,
+please cancel the release for the current <code>release_version</code>,
+<em>increase th RC counting</em> and re-initiate a release with the new <code>release_version</code>.
+And remember to delete the wrong artifacts from the SVN dist repo.
+Additionally, you should also drop the staging Maven artifacts on <a href="https://repository.apache.org" target="_blank" rel="noopener noreferrer">https://repository.apache.org</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2>
+<p>OpenDAL requires votes from both the OpenDAL Community.</p>
+<p>Start a VOTE at <a href="https://github.com/apache/opendal/discussions/categories/general" target="_blank" rel="noopener noreferrer">OpenDAL Discussion General</a>:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[VOTE] Release Apache OpenDAL ${release_version} - Vote Round 1</span><br></span></code></p [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hello, Apache OpenDAL Community,</span><br></span><span class="token-line" style="color:#39 [...]
+<p>Example: <a href="https://github.com/apache/opendal/discussions/5211" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal/discussions/5211</a></p>
+<p>The vote should be open for <strong>at least 72 hours</strong> except the following cases:</p>
+<ol>
+<li>Security issues</li>
+<li>The wild user affected bug fixes</li>
+<li>Any other emergency cases</li>
+</ol>
+<p>The Release manager should claim the emergency cases in the vote email if he wants to vote it rapidly.</p>
+<blockquote>
+<p>Tips: The 72 hours is the minimum time for voting, so we can ensure that community members from various time zones can participate in the verification process.</p>
+</blockquote>
+<p>After at least 3 <code>+1</code> binding vote (<a href="https://people.apache.org/phonebook.html?project=opendal" target="_blank" rel="noopener noreferrer">from OpenDAL PMC member</a>) and more +1 bindings than -1 bindings, claim the vote result:</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[RESULT][VOTE] Release Apache OpenDAL ${release_version} - Vote Round 1</span><br></span></ [...]
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hello, Apache OpenDAL Community,</span><br></span><span class="token-line" style="color:#39 [...]
+<p>It&#x27;s better to use the real name or the public name which is displayed on the voters&#x27; profile page,
+or Apache ID of the voter, to show who voted in the vote result email,
+and avoid using nicknames, it will make the vote result hard for others to track the voter.
+We should make sure the binding votes are from the people who have the right to vote the binding one.</p>
+<p>Example: <a href="https://lists.apache.org/thread/xk5myl10mztcfotn59oo59s4ckvojds6" target="_blank" rel="noopener noreferrer">https://lists.apache.org/thread/xk5myl10mztcfotn59oo59s4ckvojds6</a></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="official-release">Official Release<a href="#official-release" class="hash-link" aria-label="Direct link to Official Release" title="Direct link to Official Release">​</a></h2>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="push-the-release-git-tag">Push the release git tag<a href="#push-the-release-git-tag" class="hash-link" aria-label="Direct link to Push the release git tag" title="Direct link to Push the release git tag">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># Checkout the tags that passed VOTE</span><br></span><span class="token-line" style="col [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="publish-artifacts-to-svn-release-branch">Publish artifacts to SVN RELEASE branch<a href="#publish-artifacts-to-svn-release-branch" class="hash-link" aria-label="Direct link to Publish artifacts to SVN RELEASE branch" title="Direct link to Publish artifacts to SVN RELEASE branch">​</a></h3>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">svn mv https://dist.apache.org/repos/dist/dev/opendal/${release_version} https://dist.apa [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="release-maven-artifacts">Release Maven artifacts<a href="#release-maven-artifacts" class="hash-link" aria-label="Direct link to Release Maven artifacts" title="Direct link to Release Maven artifacts">​</a></h3>
+<ol>
+<li>Open <a href="https://repository.apache.org/#stagingRepositories" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#stagingRepositories</a>.</li>
+<li>Find the artifact <code>orgapacheopendal-${maven_artifact_number}</code>, click the &quot;Release&quot; button.</li>
+</ol>
+<p>It will take some time to sync the Maven artifacts to the Maven Central.</p>
+<div class="theme-admonition theme-admonition-caution admonition_NGYd alert alert--warning"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</ [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="check-the-language-binding-artifacts">Check the language binding artifacts<a href="#check-the-language-binding-artifacts" class="hash-link" aria-label="Direct link to Check the language binding artifacts" title="Direct link to Check the language binding artifacts">​</a></h3>
+<p>We need to check the language binding artifacts in the language package repo to make sure they are released successfully.</p>
+<ul>
+<li>Python: <a href="https://pypi.org/project/opendal/" target="_blank" rel="noopener noreferrer">https://pypi.org/project/opendal/</a></li>
+<li>Java: <a href="https://repository.apache.org/#nexus-search;quick~opendal" target="_blank" rel="noopener noreferrer">https://repository.apache.org/#nexus-search;quick~opendal</a></li>
+<li>Node.js: <a href="https://www.npmjs.com/package/opendal" target="_blank" rel="noopener noreferrer">https://www.npmjs.com/package/opendal</a></li>
+</ul>
+<p>For Java binding, if we cannot find the latest version of artifacts in the repo,
+we need to check the <code>orgapacheopendal-${maven_artifact_number}</code> artifact status in staging repo.</p>
+<p>For non-Java bindings, if we cannot find the latest version of artifacts in the repo,
+we need to check the GitHub action status.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="create-a-github-release">Create a GitHub Release<a href="#create-a-github-release" class="hash-link" aria-label="Direct link to Create a GitHub Release" title="Direct link to Create a GitHub Release">​</a></h3>
+<ul>
+<li>Click <a href="https://github.com/apache/opendal/releases/new" target="_blank" rel="noopener noreferrer">here</a> to create a new release.</li>
+<li>Pick the git tag of this release version from the dropdown menu.</li>
+<li>Make sure the branch target is <code>main</code>.</li>
+<li>Generate the release note by clicking the <code>Generate release notes</code> button.</li>
+<li>Add the release note from every component&#x27;s <code>upgrade.md</code> if there are breaking changes before the content generated by GitHub. Check them carefully.</li>
+<li>Publish the release.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="send-the-announcement">Send the announcement<a href="#send-the-announcement" class="hash-link" aria-label="Direct link to Send the announcement" title="Direct link to Send the announcement">​</a></h3>
+<p>Start an announcement to <a href="https://github.com/apache/opendal/discussions/categories/announcements" target="_blank" rel="noopener noreferrer">OpenDAL Discussion Announcements</a> and send the same content to <code>announce@apache.org</code>.</p>
+<blockquote>
+<p>Tips: Please follow the <a href="https://infra.apache.org/committer-email.html" target="_blank" rel="noopener noreferrer">Committer Email</a> guide to make sure you have already set up the email SMTP. Otherwise, your email cannot be sent to the announcement mailing list.</p>
+</blockquote>
+<p>Instead of adding breaking changes, let&#x27;s include the new features as &quot;notable changes&quot; in the announcement.</p>
+<p>Title:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">[ANNOUNCE] Release Apache OpenDAL ${opendal_version}</span><br></span></code></pre></div></div>
+<p>Content:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Hi all,</span><br></span><span class="token-line" style="color:#393A34"><span class="token  [...]
+<p>Example: <a href="https://lists.apache.org/thread/oy77n55brvk72tnlb2bjzfs9nz3cfd0s" target="_blank" rel="noopener noreferrer">https://lists.apache.org/thread/oy77n55brvk72tnlb2bjzfs9nz3cfd0s</a></p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="post-release">Post release<a href="#post-release" class="hash-link" aria-label="Direct link to Post release" title="Direct link to Post release">​</a></h2>
+<p>After the official release out, you may perform a few post-actions.</p>
+<h3 class="anchor anchorWithStickyNavbar_debX" id="remove-the-old-releases">Remove the old releases<a href="#remove-the-old-releases" class="hash-link" aria-label="Direct link to Remove the old releases" title="Direct link to Remove the old releases">​</a></h3>
+<p>Remove the old releases if any. You only need the latest release there, and older releases are available through the Apache archive.</p>
+<p>To clean up old releases, run:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain"># 1. Get the list of releases</span><br></span><span class="token-line" style="color:#393 [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/release/reference/generate_release_note/index.html b/community/release/reference/generate_release_note/index.html
new file mode 100644
index 000000000..bcdc83ed1
--- /dev/null
+++ b/community/release/reference/generate_release_note/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-release/reference/generate_release_note" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Generate release note | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/release/reference/generate_release_note/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="do [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<ol>
+<li>Go to <a href="https://github.com/apache/opendal/releases/new" target="_blank" rel="noopener noreferrer">https://github.com/apache/opendal/releases/new</a> to start a new release.</li>
+<li>Fill the tag with <code>draft</code>.</li>
+<li>Click on <code>Generate release notes</code> to generate them.</li>
+<li>Copy the generated content and close the page.</li>
+</ol>
+<p>Please note that we only use this feature to generate release notes, so please do not click on <code>Publish Release</code> or <code>Save draft</code>. We will publish it after creating the tag.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/release/reference/generate_release_note.md" target="_blank" rel="noopener noreferrer [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/release/reference/setup_gpg/index.html b/community/release/reference/setup_gpg/index.html
new file mode 100644
index 000000000..a10e1a625
--- /dev/null
+++ b/community/release/reference/setup_gpg/index.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-release/reference/setup_gpg" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Setup GPG key | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/release/reference/setup_gpg/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" co [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="install-gpg">Install GPG<a href="#install-gpg" class="hash-link" aria-label="Direct link to Install GPG" title="Direct link to Install GPG">​</a></h2>
+<p>For more details, please refer to <a href="https://www.gnupg.org/download/index.html" target="_blank" rel="noopener noreferrer">GPG official website</a>. Here shows one approach to install GPG with <code>apt</code>:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">sudo apt install gnupg2</span><br></span></code></pre></div></div>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="generate-gpg-key">Generate GPG Key<a href="#generate-gpg-key" class="hash-link" aria-label="Direct link to Generate GPG Key" title="Direct link to Generate GPG Key">​</a></h2>
+<p>Attentions:</p>
+<ul>
+<li>Name is best to keep consistent with your full name of Apache ID;</li>
+<li>Email should be the Apache email;</li>
+<li>Name is best to only use English to avoid garbled.</li>
+</ul>
+<p>Run <code>gpg --full-gen-key</code> and complete the generation interactively:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.</span><br></span><s [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="upload-your-key-to-public-gpg-keyserver">Upload your key to public GPG keyserver<a href="#upload-your-key-to-public-gpg-keyserver" class="hash-link" aria-label="Direct link to Upload your key to public GPG keyserver" title="Direct link to Upload your key to public GPG keyserver">​</a></h2>
+<p>Firstly, list your key:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">gpg --list-keys</span><br></span></code></pre></div></div>
+<p>The output is like:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">-------------------------------</span><br></span><span class="token-line" style="color:#3 [...]
+<p>Then, send your key id to key server:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">gpg --keyserver keys.openpgp.org --send-key &lt;key-id&gt; # e.g., F77B887A4F25A9468C513E [...]
+<p>Among them, <code>keys.openpgp.org</code> is a randomly selected keyserver, you can use <code>keyserver.ubuntu.com</code> or any other full-featured keyserver.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="check-whether-the-key-is-created-successfully">Check whether the key is created successfully<a href="#check-whether-the-key-is-created-successfully" class="hash-link" aria-label="Direct link to Check whether the key is created successfully" title="Direct link to Check whether the key is created successfully">​</a></h2>
+<p>Uploading takes about one minute; after that, you can check by your email at the corresponding keyserver.</p>
+<p>Uploading keys to the keyserver is mainly for joining a <a href="https://infra.apache.org/release-signing.html#web-of-trust" target="_blank" rel="noopener noreferrer">Web of Trust</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="add-your-gpg-public-key-to-the-keys-document">Add your GPG public key to the KEYS document<a href="#add-your-gpg-public-key-to-the-keys-document" class="hash-link" aria-label="Direct link to Add your GPG public key to the KEYS document" title="Direct link to Add your GPG public key to the KEYS document">​</a></h2>
+<div class="theme-admonition theme-admonition-info admonition_NGYd alert alert--info"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_LOU5"><p><code>SVN</code> is required for  [...]
+<p>The svn repository of the release branch is: <a href="https://dist.apache.org/repos/dist/release/opendal" target="_blank" rel="noopener noreferrer">https://dist.apache.org/repos/dist/release/opendal</a></p>
+<p>Please always add the public key to KEYS in the release branch:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">svn co https://dist.apache.org/repos/dist/release/opendal opendal-dist</span><br></span>< [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="upload-the-gpg-public-key-to-your-github-account">Upload the GPG public key to your GitHub account<a href="#upload-the-gpg-public-key-to-your-github-account" class="hash-link" aria-label="Direct link to Upload the GPG public key to your GitHub account" title="Direct link to Upload the GPG public key to your GitHub account">​</a></h2>
+<ul>
+<li>Enter <a href="https://github.com/settings/keys" target="_blank" rel="noopener noreferrer">https://github.com/settings/keys</a> to add your GPG key.</li>
+<li>Please remember to bind the email address used in the GPG key to your GitHub account (<a href="https://github.com/settings/emails" target="_blank" rel="noopener noreferrer">https://github.com/settings/emails</a>) if you find &quot;unverified&quot; after adding it.</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/release/reference/setup_gpg.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_M1a8" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/release/verify/index.html b/community/release/verify/index.html
new file mode 100644
index 000000000..eacd05a62
--- /dev/null
+++ b/community/release/verify/index.html
@@ -0,0 +1,72 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-release/verify" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Verify a release candidate | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/release/verify/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" co [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<ul class="contains-task-list containsTaskList_RROW">
+<li class="task-list-item"><input type="checkbox" disabled=""> Download links are valid.</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> Checksums and signatures.</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> LICENSE/NOTICE files exist.</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> No unexpected binary files.</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> All source files have ASF headers.</li>
+<li class="task-list-item"><input type="checkbox" disabled=""> Can compile from source.</li>
+</ul>
+<div class="theme-admonition theme-admonition-note admonition_NGYd alert alert--secondary"><div class="admonitionHeading_hx_a"><span class="admonitionIcon_n04r"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="download-links-are-valid">Download links are valid<a href="#download-links-are-valid" class="hash-link" aria-label="Direct link to Download links are valid" title="Direct link to Download links are valid">​</a></h2>
+<p>To verify the release candidate, you need to download the release candidate from the <a href="https://dist.apache.org/repos/dist/dev/opendal/" target="_blank" rel="noopener noreferrer">dist</a> directory.</p>
+<p>Our current distribution contains many files, which we recommend downloading using svn.</p>
+<p>Use the following command to download all artifacts, replace &quot;${release_version}-${rc_version}&quot; with the version ID of the version to be released:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">svn co https://dist.apache.org/repos/dist/dev/opendal/${release_version}-${rc_version}/</ [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="checksums-and-signatures">Checksums and signatures<a href="#checksums-and-signatures" class="hash-link" aria-label="Direct link to Checksums and signatures" title="Direct link to Checksums and signatures">​</a></h2>
+<p>Every file in a release candidate should have a checksum and signature file.</p>
+<p>For example, if the release candidate is <code>0.46.0-rc1</code>, the checksum and signature file should be like:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">https://dist.apache.org/repos/dist/dev/opendal/0.46.0-rc1/apache-opendal-core-0.46.0-rc1-sr [...]
+<h3 class="anchor anchorWithStickyNavbar_debX" id="verify-checksums-and-signatures">Verify checksums and signatures<a href="#verify-checksums-and-signatures" class="hash-link" aria-label="Direct link to Verify checksums and signatures" title="Direct link to Verify checksums and signatures">​</a></h3>
+<p>GnuPG is recommended here. It can be installed with the following command:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">apt-get install gnupg</span><br></span><span class="token-line" style="color:#393A34"><sp [...]
+<p>Firstly, import the OpenDAL release manager&#x27;s public key:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">curl https://downloads.apache.org/opendal/KEYS &gt; KEYS # Download KEYS</span><br></span [...]
+<p>Then, trust the public key:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">gpg --edit-key &lt;KEY-used-in-this-version&gt; # Edit the key</span><br></span></code></ [...]
+<p>It will enter the interactive mode, use the following command to trust the key:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">gpg&gt; trust</span><br></span></code></pre></div></div>
+<p>And then, select the level of trust, for example:</p>
+<div class="language-text codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-text codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">Please decide how far you trust this user to correctly verify other users&#x27; keys</span> [...]
+<p>Select <code>5</code> to trust the key ultimately.</p>
+<p>Now, we could start the verification.</p>
+<p>We&#x27;ve provided a script to verify the checksum and signature of the release candidate.</p>
+<p>The script is in the <code>scripts</code> directory of our repository.
+You can download it directly from <a href="https://raw.githubusercontent.com/apache/opendal/main/scripts/verify.py" target="_blank" rel="noopener noreferrer">here</a>.
+Please put it in the same directory as the release candidate.</p>
+<p>Run the script in a specific release candidate&#x27;s folder:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">python ./verify.py</span><br></span></code></pre></div></div>
+<p>You will see the following output if the verification is successful:</p>
+<div class="language-shell codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-shell codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token plain">$ python ./verify.py</span><br></span><span class="token-line" style="color:#393A34"><spa [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="check-the-file-content-of-the-source-package">Check the file content of the source package<a href="#check-the-file-content-of-the-source-package" class="hash-link" aria-label="Direct link to Check the file content of the source package" title="Direct link to Check the file content of the source package">​</a></h2>
+<p>Unzip <code>apache-opendal-${release_version}-${rc_version}-src.tar.gz</code> and check the follows:</p>
+<ul>
+<li>LICENSE and NOTICE files are correct for the repository.</li>
+<li>All files have ASF license headers if necessary.</li>
+<li>Building is OK.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="check-the-maven-artifacts-of-opendal-java">Check the Maven artifacts of opendal-java<a href="#check-the-maven-artifacts-of-opendal-java" class="hash-link" aria-label="Direct link to Check the Maven artifacts of opendal-java" title="Direct link to Check the Maven artifacts of opendal-java">​</a></h2>
+<p>Download the artifacts from <code>https://repository.apache.org/content/repositories/orgapacheopendal-${maven_artifact_number}/</code>.</p>
+<p>You can check the follows:</p>
+<ul>
+<li>Checksum of JARs matches the bundled checksum file.</li>
+<li>Signature of JARs matches the bundled signature file.</li>
+<li>JARs are reproducible locally. This means you can build the JARs on your machine and verify the checksum is the same with the bundled one.</li>
+</ul>
+<p>The reproducibility requires the same JDK distribution and the same Maven distribution. You should use <a href="https://adoptium.net/temurin/releases/?version=8" target="_blank" rel="noopener noreferrer">Eclipse Temurin JDK 8</a> and the bundled Maven Wrapper to make the same artifacts.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/c [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/community/security/index.html b/community/security/index.html
new file mode 100644
index 000000000..841e30a91
--- /dev/null
+++ b/community/security/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-security" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Security | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/security/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The Apache Software Foundation takes a rigorous stance on eliminating security issues in its software projects. Likewise, Apache OpenDAL™ is also vigilant and takes security issues related to its features and functionality into the highest consideration.</p>
+<p>If you have any concerns regarding OpenDAL&#x27;s security,
+or you discover a vulnerability or potential threat,
+please do not hesitate to get in touch with the Apache Security Team by dropping an email at <a href="mailto:private@opendal.apache.org" target="_blank" rel="noopener noreferrer">private@opendal.apache.org</a>.</p>
+<p>Please specify the project name as &quot;OpenDAL&quot; in the email, and provide a description of the relevant problem or potential threat. You are also urged to recommend how to reproduce and replicate the issue.</p>
+<p>The Apache Security Team and the OpenDAL community will get back to you after assessing and analyzing the findings.</p>
+<p>Please note that the security issue should be reported on the security email first, before disclosing it on any public domain.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/community/security.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40"  [...]
+</body>
+</html>
\ No newline at end of file
diff --git a/core/index.html b/core/index.html
new file mode 100644
index 000000000..1f77e7ad7
--- /dev/null
+++ b/core/index.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-core" data-has-hydrated="false"><head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Core | 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/core/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docu [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.0481e4aa.css">
+<script src="/assets/js/runtime~main.01b42c7d.js" defer="defer"></script>
+<script src="/assets/js/main.aef16f6b.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p><a href="https://github.com/apache/opendal/actions?query=branch%3Amain"><img decoding="async" loading="lazy" src="/img/external/d72b608ed149e7c35843c1cf675575a4.svg" alt="Build Status" class="img_AUsV"></a> <a href="https://crates.io/crates/opendal"><img decoding="async" loading="lazy" src="/img/external/588af842932c40a78cc2afe70ce679e1.svg" alt="Latest Version" class="img_AUsV"></a> <a href="https://crates.io/crates/opendal"><img decoding="async" loading="lazy" src="/img/external/3f7 [...]
+<p>Apache OpenDAL™ is an Open Data Access Layer that enables seamless interaction with diverse storage services.</p>
+<img decoding="async" loading="lazy" src="/img/external/e90fb803e25e12f621eafa3d092fe628.png" alt="OpenDAL Architectural" width="61.8%" class="img_AUsV">
+<h2 class="anchor anchorWithStickyNavbar_debX" id="useful-links">Useful Links<a href="#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links">​</a></h2>
+<ul>
+<li>Documentation: <a href="https://docs.rs/opendal/">release</a> | <a href="https://opendal.apache.org/docs/rust/opendal/">dev</a></li>
+<li><a href="https://github.com/apache/opendal/blob/main/core/examples">Examples</a></li>
+<li><a href="https://docs.rs/opendal/latest/opendal/docs/changelog/index.html">Release Notes</a></li>
+<li><a href="https://docs.rs/opendal/latest/opendal/docs/upgrade/index.html">Upgrade Guide</a></li>
+<li><a href="https://docs.rs/opendal/latest/opendal/docs/rfcs/index.html">RFC List</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="services">Services<a href="#services" class="hash-link" aria-label="Direct link to Services" title="Direct link to Services">​</a></h2>
+<p>OpenDAL supports the following storage <a href="https://docs.rs/opendal/latest/opendal/services/index.html">services</a>:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Type</th><th>Services</th></tr></thead><tbody><tr><td>Standard Storage Protocols</td><td>ftp http <a href="https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-02">sftp</a> <a href="https://datatracker.ietf.org/doc/html/rfc4918">webdav</a></td></tr><tr><td>Object Storage Services</td><td><a href="https://azure.microsoft.com/en-us/services/storage/blobs/">azblob</a> <a href="https://www.tencentcloud.com/products/cos">cos</a> <a href="https://cloud.google.c [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="layers">Layers<a href="#layers" class="hash-link" aria-label="Direct link to Layers" title="Direct link to Layers">​</a></h2>
+<p>OpenDAL supports the following storage <a href="https://docs.rs/opendal/latest/opendal/layers/index.html">layers</a> to extend the behavior:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name</th><th>Depends</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.AsyncBacktraceLayer.html"><code>AsyncBacktraceLayer</code></a></td><td><a href="https://github.com/tokio-rs/async-backtrace">async-backtrace</a></td><td>Add Efficient, logical 'stack' traces of async functions for the underlying services.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.AwaitTreeLayer.ht [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="quickstart">Quickstart<a href="#quickstart" class="hash-link" aria-label="Direct link to Quickstart" title="Direct link to Quickstart">​</a></h2>
+<div class="language-rust codeBlockContainer_tyQ7 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nOVm"><pre tabindex="0" class="prism-code language-rust codeBlock__bzz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_b1Li"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token name [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples">​</a></h2>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://github.com/apache/opendal/blob/main/core/examples/basic">Basic</a></td><td>Show how to use opendal to operate storage service.</td></tr><tr><td><a href="https://github.com/apache/opendal/blob/main/core/examples/concurrent-upload">Concurrent Upload</a></td><td>Show how to perform upload concurrently to a storage service.</td></tr><tr><td><a href="https://github.com/apache/opendal/blob/main/core [...]
+<h2 class="anchor anchorWithStickyNavbar_debX" id="contributing">Contributing<a href="#contributing" class="hash-link" aria-label="Direct link to Contributing" title="Direct link to Contributing">​</a></h2>
+<p>Check out the <a href="https://github.com/apache/opendal/blob/main/core/CONTRIBUTING.md">CONTRIBUTING</a> guide for more details on getting started with contributing to this project.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="used-by">Used by<a href="#used-by" class="hash-link" aria-label="Direct link to Used by" title="Direct link to Used by">​</a></h2>
+<p>Check out the <a href="https://github.com/apache/opendal/blob/main/core/users.md">users</a> list for more details on who is using OpenDAL.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="branding">Branding<a href="#branding" class="hash-link" aria-label="Direct link to Branding" title="Direct link to Branding">​</a></h2>
+<p>The first and most prominent mentions must use the full form: <strong>Apache OpenDAL™</strong> of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.</p>
+<p>For more details, see the <a href="https://www.apache.org/foundation/marks/guide">Apache Product Name Usage Guide</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_debX" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2>
+<p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
+<p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/10-core.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdi [...]
+
+</body></html>
\ No newline at end of file
diff --git a/discord/index.html b/discord/index.html
new file mode 100644
index 000000000..611d88da7
--- /dev/null
+++ b/discord/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=https://discord.com/invite/XQy8yGR2dg/">
+    <link rel="canonical" href="https://discord.com/invite/XQy8yGR2dg/" />
+  </head>
+  <script>
+    window.location.href = 'https://discord.com/invite/XQy8yGR2dg/' + window.location.search + window.location.hash;
+  </script>
+</html>
\ No newline at end of file
diff --git a/docs/.gitkeep b/docs/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/docs/c/README_8md.html b/docs/c/README_8md.html
new file mode 100644
index 000000000..c9f544039
--- /dev/null
+++ b/docs/c/README_8md.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.8"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Apache OpenDAL™ C Binding: README.md File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">Apache OpenDAL™ C Binding
+   </div>
+   <div id="projectbrief">The C binding for Apache OpenDAL™</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.8 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle"><div class="title">README.md File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+</small></address>
+</body>
+</html>
diff --git a/docs/c/annotated.html b/docs/c/annotated.html
new file mode 100644
index 000000000..fcb21a613
--- /dev/null
+++ b/docs/c/annotated.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.8"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Apache OpenDAL™ C Binding: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">Apache OpenDAL™ C Binding
+   </div>
+   <div id="projectbrief">The C binding for Apache OpenDAL™</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.8 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">Class List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__bytes.html" target="_self">opendal_bytes</a></td><td class="desc">Opendal_bytes carries raw-bytes with its length </td></tr>
+<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__capability.html" target="_self">opendal_capability</a></td><td class="desc">Capability is used to describe what operations are supported by current Operator </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__entry.html" target="_self">opendal_entry</a></td><td class="desc">Opendal_list_entry is the entry under a path, which is listed from the <a class="el" href="structopendal__lister.html" title="BlockingLister is designed to list entries at given path in a blocking manner.">opendal_lister</a> </td></tr>
+<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__error.html" target="_self">opendal_error</a></td><td class="desc">The opendal error type for C binding, containing an error code and corresponding error message </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__lister.html" target="_self">opendal_lister</a></td><td class="desc">BlockingLister is designed to list entries at given path in a blocking manner </td></tr>
+<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__metadata.html" target="_self">opendal_metadata</a></td><td class="desc">Carries all metadata associated with a <b>path</b> </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator.html" target="_self">opendal_operator</a></td><td class="desc">Used to access almost all OpenDAL APIs. It represents an operator that provides the unified interfaces provided by OpenDAL </td></tr>
+<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator__info.html" target="_self">opendal_operator_info</a></td><td class="desc">Metadata for <b>operator</b>, users can use this metadata to get information of operator </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__operator__options.html" target="_self">opendal_operator_options</a></td><td class="desc">The configuration for the initialization of <a class="el" href="structopendal__operator.html" title="Used to access almost all OpenDAL APIs. It represents an operator that provides the unified interface..."> [...]
+<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__reader.html" target="_self">opendal_reader</a></td><td class="desc">The result type returned by opendal's reader operation </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__exists.html" target="_self">opendal_result_exists</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a5e8bb640f996b81e38727a84f901fc63" title="Check whether the path exists.">opendal_operator_exists()</a> </td></tr>
+<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__is__exist.html" target="_self">opendal_result_is_exist</a></td><td class="desc">The result type returned by opendal_operator_is_exist() </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__list.html" target="_self">opendal_result_list</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#af8f2888ef406d9fc81af0015a904af9c" title="Blocking list the objects in path.">opendal_operator_list()</a> </td></tr>
+<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__lister__next.html" target="_self">opendal_result_lister_next</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a3d105a912b92cb887662419851569329" title="Return the next object to be listed.">opendal_lister_next()</a>. The list entry is the list resu [...]
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__operator__new.html" target="_self">opendal_result_operator_new</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a3b32f655689a122d2b6feff169fac442" title="Construct an operator based on scheme and options">opendal_operator_new()</a> operation </td></tr>
+<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__operator__reader.html" target="_self">opendal_result_operator_reader</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#aca8d6d56223c55277146afe9ca226944" title="Blocking read the data from path.">opendal_operator_reader()</a>. The result type for <a [...]
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__operator__writer.html" target="_self">opendal_result_operator_writer</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#aed9807cca465a78730a7829da34e347f" title="Blocking create a writer for the specified path.">opendal_operator_writer()</a>. The re [...]
+<tr id="row_17_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__read.html" target="_self">opendal_result_read</a></td><td class="desc">The result type returned by opendal's read operation </td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__reader__read.html" target="_self">opendal_result_reader_read</a></td><td class="desc">The is the result type returned by <a class="el" href="opendal_8h.html#a3a545abe828d76ad772403935bc9a0a1" title="Read data from the reader.">opendal_reader_read()</a>. The result type contains a size f [...]
+<tr id="row_19_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__reader__seek.html" target="_self">opendal_result_reader_seek</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a2074c4d49978775a9ceff9ca2ff942a9" title="Seek to an offset, in bytes, in a stream.">opendal_reader_seek()</a>. The result type contains a [...]
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__stat.html" target="_self">opendal_result_stat</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a8d6a3d830761b215c3d03960b6153582" title="Stat the path, return its metadata.">opendal_operator_stat()</a> </td></tr>
+<tr id="row_21_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__result__writer__write.html" target="_self">opendal_result_writer_write</a></td><td class="desc">The result type returned by <a class="el" href="opendal_8h.html#a690230e446bbf3184725e3c10ae11056" title="Write data to the writer.">opendal_writer_write()</a>. The result type contains a size field,  [...]
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structopendal__writer.html" target="_self">opendal_writer</a></td><td class="desc">The result type returned by opendal's writer operation </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+</small></address>
+</body>
+</html>
diff --git a/docs/c/bc_s.png b/docs/c/bc_s.png
new file mode 100644
index 000000000..224b29aa9
Binary files /dev/null and b/docs/c/bc_s.png differ
diff --git a/docs/c/bc_sd.png b/docs/c/bc_sd.png
new file mode 100644
index 000000000..31ca888dc
Binary files /dev/null and b/docs/c/bc_sd.png differ
diff --git a/docs/c/classes.html b/docs/c/classes.html
new file mode 100644
index 000000000..bde6d1a6f
--- /dev/null
+++ b/docs/c/classes.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.8"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Apache OpenDAL™ C Binding: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">Apache OpenDAL™ C Binding
+   </div>
+   <div id="projectbrief">The C binding for Apache OpenDAL™</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.8 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div class="header">
+  <div class="headertitle"><div class="title">Class Index</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_O">O</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_O" name="letter_O">O</a></dt>
+<dd><a class="el" href="structopendal__bytes.html">opendal_bytes</a></dd><dd><a class="el" href="structopendal__capability.html">opendal_capability</a></dd><dd><a class="el" href="structopendal__entry.html">opendal_entry</a></dd><dd><a class="el" href="structopendal__error.html">opendal_error</a></dd><dd><a class="el" href="structopendal__lister.html">opendal_lister</a></dd><dd><a class="el" href="structopendal__metadata.html">opendal_metadata</a></dd><dd><a class="el" href="structopenda [...]
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+</small></address>
+</body>
+</html>
diff --git a/docs/c/closed.png b/docs/c/closed.png
new file mode 100644
index 000000000..98cc2c909
Binary files /dev/null and b/docs/c/closed.png differ
diff --git a/docs/c/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/c/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 000000000..902e75779
--- /dev/null
+++ b/docs/c/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.8"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Apache OpenDAL™ C Binding: include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">Apache OpenDAL™ C Binding
+   </div>
+   <div id="projectbrief">The C binding for Apache OpenDAL™</div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.8 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search');
+  $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle"><div class="title">include Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="opendal_8h_source.html"><span class="icondoc"></span></a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="opendal_8h.html">opendal.h</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+</small></address>
+</body>
+</html>
diff --git a/docs/c/doc.svg b/docs/c/doc.svg
new file mode 100644
index 000000000..0b928a531
--- /dev/null
+++ b/docs/c/doc.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
+<g style="fill:#4665A2">
+<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.85546 [...]
+</g>
+<g style="fill:#D8DFEE;stroke-width:0">
+<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
+<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
+</g>
+</svg>
diff --git a/docs/c/docd.svg b/docs/c/docd.svg
new file mode 100644
index 000000000..ac18b2755
--- /dev/null
+++ b/docs/c/docd.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
+<g style="fill:#C4CFE5">
+<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.85546 [...]
+</g>
+<g style="fill:#4665A2;stroke-width:0">
+<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
+<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
+</g>
+</svg>
diff --git a/docs/c/doxygen-awesome.css b/docs/c/doxygen-awesome.css
new file mode 100644
index 000000000..e492e9d3e
--- /dev/null
+++ b/docs/c/doxygen-awesome.css
@@ -0,0 +1,8 @@
+/**
+ * Minified by jsDelivr using clean-css v5.3.2.
+ * Original file: /gh/jothepro/doxygen-awesome-css@2.2.1/doxygen-awesome.css
+ *
+ * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
+ */
+html{--primary-color:#1779c4;--primary-dark-color:#335c80;--primary-light-color:#70b1e9;--page-background-color:#ffffff;--page-foreground-color:#2f4153;--page-secondary-foreground-color:#6f7e8e;--separator-color:#dedede;--border-radius-large:8px;--border-radius-small:4px;--border-radius-medium:6px;--spacing-small:5px;--spacing-medium:10px;--spacing-large:16px;--box-shadow:0 2px 8px 0 rgba(0,0,0,.075);--odd-color:rgba(0,0,0,.028);--font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Rob [...]
+/*# sourceMappingURL=/sm/f613e9de24f93a8fc62f2c3e796fdbb2c9c0b8cce1dcd49fd3f543eee5404cf2.map */
\ No newline at end of file
diff --git a/docs/c/doxygen.css b/docs/c/doxygen.css
new file mode 100644
index 000000000..8cff99ebb
--- /dev/null
+++ b/docs/c/doxygen.css
@@ -0,0 +1,1685 @@
+/* The standard CSS for doxygen 1.9.8*/
+
+body {
+    background-color: white;
+    color: black;
+}
+
+body, table, div, p, dl {
+	font-weight: 400;
+	font-size: 14px;
+	font-family: Roboto,sans-serif;
+	line-height: 22px;
+}
+
+/* @group Heading Levels */
+
+.title {
+	font-weight: 400;
+	font-size: 14px;
+	font-family: Roboto,sans-serif;
+	line-height: 28px;
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #879ECB;
+	color: #354C7B;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+p.startli, p.startdd {
+	margin-top: 2px;
+}
+
+th p.starttd, th p.intertd, th p.endtd {
+        font-size: 100%;
+        font-weight: 700;
+}
+
+p.starttd {
+	margin-top: 0px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+	font-size: 70%;
+	text-align: center;
+}
+
+h3.version {
+	font-size: 90%;
+	text-align: center;
+}
+
+div.navtab {
+	padding-right: 15px;
+	text-align: right;
+	line-height: 110%;
+}
+
+div.navtab table {
+	border-spacing: 0;
+}
+
+td.navtab {
+	padding-right: 6px;
+	padding-left: 6px;
+}
+
+td.navtabHL {
+	background-image: url('tab_a.png');
+	background-repeat:repeat-x;
+	padding-right: 6px;
+	padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+	color: white;
+	text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+	font-weight: bold;
+}
+
+div.qindex{
+	text-align: center;
+	width: 100%;
+	line-height: 140%;
+	font-size: 130%;
+	color: #A0A0A0;
+}
+
+#main-menu a:focus {
+	outline: auto;
+	z-index: 10;
+	position: relative;
+}
+
+dt.alphachar{
+	font-size: 180%;
+	font-weight: bold;
+}
+
+.alphachar a{
+	color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+	text-decoration: none;
+}
+
+.classindex dl {
+	padding: 25px;
+	column-count:1
+}
+
+.classindex dd {
+	display:inline-block;
+	margin-left: 50px;
+	width: 90%;
+	line-height: 1.15em;
+}
+
+.classindex dl.even {
+	background-color: white;
+}
+
+.classindex dl.odd {
+	background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+	.classindex dl {
+		column-count:2
+	}
+}
+
+@media(min-width: 1320px) {
+	.classindex dl {
+		column-count:3
+	}
+}
+
+
+/* @group Link Styling */
+
+a {
+	color: #3D578C;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4665A2;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+	color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+	color: #4665A2;
+}
+
+a.code.hl_class { /* style for links to class names in code snippets */ }
+a.code.hl_struct { /* style for links to struct names in code snippets */ }
+a.code.hl_union { /* style for links to union names in code snippets */ }
+a.code.hl_interface { /* style for links to interface names in code snippets */ }
+a.code.hl_protocol { /* style for links to protocol names in code snippets */ }
+a.code.hl_category { /* style for links to category names in code snippets */ }
+a.code.hl_exception { /* style for links to exception names in code snippets */ }
+a.code.hl_service { /* style for links to service names in code snippets */ }
+a.code.hl_singleton { /* style for links to singleton names in code snippets */ }
+a.code.hl_concept { /* style for links to concept names in code snippets */ }
+a.code.hl_namespace { /* style for links to namespace names in code snippets */ }
+a.code.hl_package { /* style for links to package names in code snippets */ }
+a.code.hl_define { /* style for links to macro names in code snippets */ }
+a.code.hl_function { /* style for links to function names in code snippets */ }
+a.code.hl_variable { /* style for links to variable names in code snippets */ }
+a.code.hl_typedef { /* style for links to typedef names in code snippets */ }
+a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ }
+a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ }
+a.code.hl_signal { /* style for links to Qt signal names in code snippets */ }
+a.code.hl_slot { /* style for links to Qt slot names in code snippets */ }
+a.code.hl_friend { /* style for links to friend names in code snippets */ }
+a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ }
+a.code.hl_property { /* style for links to property names in code snippets */ }
+a.code.hl_event { /* style for links to event names in code snippets */ }
+a.code.hl_sequence { /* style for links to sequence names in code snippets */ }
+a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ }
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+ul {
+  overflow: visible;
+}
+
+ul.multicol {
+        -moz-column-gap: 1em;
+        -webkit-column-gap: 1em;
+        column-gap: 1em;
+        -moz-column-count: 3;
+        -webkit-column-count: 3;
+        column-count: 3;
+        list-style-type: none;
+}
+
+#side-nav ul {
+  overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+  overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+  text-align: left;
+  direction: ltr;
+  overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+  overflow-y: hidden;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+	color: black;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+	padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+	margin: 4px 8px 4px 2px;
+	color: black;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
+	font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.2;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line:after {
+    content:"\000A";
+    white-space: pre;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+span.fold {
+        margin-left: 5px;
+        margin-right: 1px;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+	display: inline-block;
+	width: 12px;
+	height: 12px;
+	background-repeat:no-repeat;
+        background-position:center;
+}
+
+span.lineno {
+	padding-right: 4px;
+        margin-right: 9px;
+	text-align: right;
+	border-right: 2px solid #00FF00;
+	color: black;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a, span.lineno a:visited {
+	color: #4665A2;
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	color: #4665A2;
+	background-color: #C8C8C8;
+}
+
+.lineno {
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+div.classindex ul {
+        list-style: none;
+        padding-left: 0;
+}
+
+div.classindex span.ai {
+        display: inline-block;
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.dark-mode-visible {
+	display: none;
+}
+img.light-mode-visible {
+	display: none;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl, img.inline {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+	width: 104px;
+}
+
+.compoundTemplParams {
+	color: #4665A2;
+	font-size: 80%;
+	line-height: 120%;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000;
+}
+
+span.keywordtype {
+	color: #604020;
+}
+
+span.keywordflow {
+	color: #E08000;
+}
+
+span.comment {
+	color: #800000;
+}
+
+span.preprocessor {
+	color: #806020;
+}
+
+span.stringliteral {
+	color: #002080;
+}
+
+span.charliteral {
+	color: #008080;
+}
+
+span.xmlcdata {
+	color: black;
+}
+
+span.vhdldigit { 
+	color: #FF00FF;
+}
+
+span.vhdlchar { 
+	color: #000000;
+}
+
+span.vhdlkeyword { 
+	color: #700070;
+}
+
+span.vhdllogic { 
+	color: #FF0000;
+}
+
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #2D4068;
+}
+
+th.dirtab {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #F9FAFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4665A2;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+	padding: 8px;
+	border-top: 1px solid #A8B8D9;
+	border-left: 1px solid #A8B8D9;
+	border-right: 1px solid #A8B8D9;
+	border-top-right-radius: 4px;
+	border-top-left-radius: 4px;
+	margin-bottom: -1px;
+	background-image: url('nav_f.png');
+	background-repeat: repeat-x;
+	background-color: #E2E8F2;
+	line-height: 1.25;
+	font-weight: 300;
+	float:left;
+}
+
+.permalink
+{
+        font-size: 65%;
+        display: inline-block;
+        vertical-align: middle;
+}
+
+.memtemplate {
+	font-size: 80%;
+	color: #4665A2;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: 400;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-color: #DFE5F1;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+}
+
+.overload {
+        font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed;
... 319287 lines suppressed ...