You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by ti...@apache.org on 2024/06/07 14:50:20 UTC

(opendal) branch real-docs created (now 8d1a89661b)

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

tison pushed a change to branch real-docs
in repository https://gitbox.apache.org/repos/asf/opendal.git


      at 8d1a89661b docs: keep docs updated and tidy

This branch includes the following new commits:

     new 8d1a89661b docs: keep docs updated and tidy

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.



(opendal) 01/01: docs: keep docs updated and tidy

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

tison pushed a commit to branch real-docs
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit 8d1a89661b3b13e1cce28d2dcad912e75cbba6e6
Author: tison <wa...@gmail.com>
AuthorDate: Fri Jun 7 22:48:50 2024 +0800

    docs: keep docs updated and tidy
    
    Signed-off-by: tison <wa...@gmail.com>
---
 website/docs/binding-java.md                       |  8 +++
 website/docs/binding-nodejs.md                     |  8 +++
 website/docs/binding-python.md                     |  8 +++
 website/docs/dav-server.md                         |  8 +++
 website/docs/integrations/_category_.yml           | 24 -------
 website/docs/integrations/dav-server-opendalfs.mdx |  7 --
 website/docs/integrations/object_store_opendal.mdx |  9 ---
 website/docs/object-store.md                       |  8 +++
 website/docs/quickstart.md                         |  4 +-
 website/docs/rust-core.md                          | 18 +++++
 website/docs/services/_category_.yml               | 24 -------
 website/docs/services/atomicserver.mdx             | 69 ------------------
 website/docs/services/azblob.mdx                   | 72 -------------------
 website/docs/services/azdls.mdx                    | 73 -------------------
 website/docs/services/cacache.mdx                  | 60 ----------------
 website/docs/services/cos.mdx                      | 70 ------------------
 website/docs/services/d1.mdx                       | 78 --------------------
 website/docs/services/dashmap.mdx                  |  9 ---
 website/docs/services/dropbox.mdx                  | 66 -----------------
 website/docs/services/etcd.mdx                     | 72 -------------------
 website/docs/services/foundationdb.mdx             | 66 -----------------
 website/docs/services/fs.mdx                       | 62 ----------------
 website/docs/services/ftp.mdx                      | 62 ----------------
 website/docs/services/gcs.mdx                      | 70 ------------------
 website/docs/services/gdrive.mdx                   | 65 -----------------
 website/docs/services/ghac.mdx                     | 60 ----------------
 website/docs/services/gridfs.mdx                   | 68 ------------------
 website/docs/services/hdfs.mdx                     | 65 -----------------
 website/docs/services/http.mdx                     | 58 ---------------
 website/docs/services/huggingface.mdx              | 76 --------------------
 website/docs/services/ipfs.mdx                     | 66 -----------------
 website/docs/services/ipmfs.mdx                    |  9 ---
 website/docs/services/libsql.mdx                   | 75 -------------------
 website/docs/services/memcached.mdx                | 58 ---------------
 website/docs/services/memory.mdx                   | 63 ----------------
 website/docs/services/moka.mdx                     | 63 ----------------
 website/docs/services/mongodb.mdx                  | 75 -------------------
 website/docs/services/mysql.mdx                    | 69 ------------------
 website/docs/services/obs.mdx                      | 67 -----------------
 website/docs/services/onedrive.mdx                 | 65 -----------------
 website/docs/services/oss.mdx                      | 74 -------------------
 website/docs/services/persy.mdx                    | 69 ------------------
 website/docs/services/postgresql.mdx               | 69 ------------------
 website/docs/services/redb.mdx                     | 63 ----------------
 website/docs/services/redis.mdx                    | 75 -------------------
 website/docs/services/rocksdb.mdx                  | 62 ----------------
 website/docs/services/s3.mdx                       | 84 ----------------------
 website/docs/services/sftp.mdx                     | 77 --------------------
 website/docs/services/sled.mdx                     | 63 ----------------
 website/docs/services/sqlite.mdx                   | 69 ------------------
 website/docs/services/supabase.mdx                 | 67 -----------------
 website/docs/services/swift.mdx                    | 77 --------------------
 website/docs/services/tikv.mdx                     | 63 ----------------
 website/docs/services/vercel_artifacts.mdx         | 60 ----------------
 website/docs/services/webdav.mdx                   | 64 -----------------
 website/docs/services/webhdfs.mdx                  | 69 ------------------
 website/docusaurus.config.js                       | 30 --------
 57 files changed, 60 insertions(+), 3032 deletions(-)

diff --git a/website/docs/binding-java.md b/website/docs/binding-java.md
new file mode 100644
index 0000000000..5c680736d8
--- /dev/null
+++ b/website/docs/binding-java.md
@@ -0,0 +1,8 @@
+---
+title: Java API
+sidebar_position: 4
+---
+
+Read the nightly version of Java API docs at [here](pathname:///docs/java/).
+
+Read the latest stable version instead at https://javadoc.io/doc/org.apache.opendal/opendal-java/latest/index.html.
diff --git a/website/docs/binding-nodejs.md b/website/docs/binding-nodejs.md
new file mode 100644
index 0000000000..5676c786d5
--- /dev/null
+++ b/website/docs/binding-nodejs.md
@@ -0,0 +1,8 @@
+---
+title: Node.js API
+sidebar_position: 6
+---
+
+Read the nightly version of Node.js API docs at [here](pathname:///docs/nodejs/).
+
+Read the README of latest stable version instead at https://www.npmjs.com/package/opendal.
diff --git a/website/docs/binding-python.md b/website/docs/binding-python.md
new file mode 100644
index 0000000000..1ecef1bcea
--- /dev/null
+++ b/website/docs/binding-python.md
@@ -0,0 +1,8 @@
+---
+title: Python API
+sidebar_position: 5
+---
+
+Read the nightly version of Python API docs at [here](pathname:///docs/python/).
+
+Read the README of latest stable version instead at https://pypi.org/project/opendal/.
diff --git a/website/docs/dav-server.md b/website/docs/dav-server.md
new file mode 100644
index 0000000000..25ee30f44c
--- /dev/null
+++ b/website/docs/dav-server.md
@@ -0,0 +1,8 @@
+---
+title: WebDAV Integration
+sidebar_position: 8
+---
+
+Read the nightly version of the API docs at [here](pathname:///docs/dav-server-opendalfs/dav_server_opendalfs).
+
+Read the latest stable version instead at https://docs.rs/dav-server-opendalfs/latest/dav_server_opendalfs/index.html.
diff --git a/website/docs/integrations/_category_.yml b/website/docs/integrations/_category_.yml
deleted file mode 100644
index d0564dc61a..0000000000
--- a/website/docs/integrations/_category_.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-# 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.
-
-position: 5
-label: 'Integrations'
-collapsible: true
-collapsed: true
-link:
-  type: generated-index
-  title: Integrations
diff --git a/website/docs/integrations/dav-server-opendalfs.mdx b/website/docs/integrations/dav-server-opendalfs.mdx
deleted file mode 100644
index 6c0c8d03ae..0000000000
--- a/website/docs/integrations/dav-server-opendalfs.mdx
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: dav-server-opendalfs
----
-
-import Docs from '../../../integrations/dav-server/README.md'
-
-<Docs components={props.components} />
diff --git a/website/docs/integrations/object_store_opendal.mdx b/website/docs/integrations/object_store_opendal.mdx
deleted file mode 100644
index 28f1c47483..0000000000
--- a/website/docs/integrations/object_store_opendal.mdx
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: object_store_opendal
----
-
-[`object_store_opendal`](https://crates.io/crates/object_store_opendal) is an integration which uses OpenDAL as a backend for the [object_store](https://docs.rs/object_store/latest/object_store/).
-
-import Docs from '../../../integrations/object_store/README.md'
-
-<Docs components={props.components} />
diff --git a/website/docs/object-store.md b/website/docs/object-store.md
new file mode 100644
index 0000000000..1678ef9f7b
--- /dev/null
+++ b/website/docs/object-store.md
@@ -0,0 +1,8 @@
+---
+title: object_store Integration
+sidebar_position: 7
+---
+
+Read the nightly version of the API docs at [here](pathname:///docs/object-store-opendal/object_store_opendal).
+
+Read the latest stable version instead at https://docs.rs/object_store_opendal/latest/object_store_opendal/index.html.
diff --git a/website/docs/quickstart.md b/website/docs/quickstart.md
index ee1397df29..b79320cb63 100644
--- a/website/docs/quickstart.md
+++ b/website/docs/quickstart.md
@@ -1,6 +1,6 @@
 ---
 title: Quickstart
-sidebar_position: 3
+sidebar_position: 2
 ---
 
 Apache OpenDAL™ can be easily integrated into different software with its Rust core and multilingual bindings.
@@ -20,7 +20,7 @@ cargo add opendal
 Or add the following line to your Cargo.toml:
 
 ```shell
-opendal = "0.40.0"
+opendal = "0.46.0"
 ```
 
 ### Demo
diff --git a/website/docs/rust-core.md b/website/docs/rust-core.md
new file mode 100644
index 0000000000..e1b5c37307
--- /dev/null
+++ b/website/docs/rust-core.md
@@ -0,0 +1,18 @@
+---
+title: Rust Core
+sidebar_position: 3
+---
+
+Read the nightly version of Rust API docs at [here](pathname:///docs/rust/opendal/).
+
+Read the latest stable version instead at https://docs.rs/opendal/latest/opendal/index.html.
+
+Below are selected docs you should read:
+
+| Topic    | Link                                                            |
+| -------- | --------------------------------------------------------------- |
+| Usage    | https://docs.rs/opendal/latest/opendal/index.html               |
+| Concepts | https://docs.rs/opendal/latest/opendal/docs/concepts/index.html |
+| Services | https://docs.rs/opendal/latest/opendal/services/index.html      |
+| Layers   | https://docs.rs/opendal/latest/opendal/layers/index.html        |
+| Upgrade  | https://docs.rs/opendal/latest/opendal/docs/upgrade/index.html  |
diff --git a/website/docs/services/_category_.yml b/website/docs/services/_category_.yml
deleted file mode 100644
index 4c79c1c6d4..0000000000
--- a/website/docs/services/_category_.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-# 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.
-
-position: 4
-label: 'Services'
-collapsible: true
-collapsed: true
-link:
-  type: generated-index
-  title: Services
diff --git a/website/docs/services/atomicserver.mdx b/website/docs/services/atomicserver.mdx
deleted file mode 100644
index f2b65d503f..0000000000
--- a/website/docs/services/atomicserver.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: AtomicServer
----
-
-[Atomic-Server](https://docs.atomicdata.dev/) services support.
-
-import Docs from '../../../core/src/services/atomicserver/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::services::Sqlite;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    
-    let mut map = HashMap::new();
-    map.insert("endpoint".to_string(), "http://localhost:9883".to_string());
-    map.insert("private_key".to_string(), "your_private_key".to_string());
-    map.insert("public_key".to_string(), "your_public_key".to_string());
-    map.insert("parent_resource_id".to_string(), "your_resource_id".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Atomicserver, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from  require('opendal');
-
-async function main() {
-    const op = new Operator("atomicserver", {
-        endpoint: 'http://localhost:9883',
-        private_key: 'your_private_key',
-        public_key: 'your_public_key',
-        parent_resource_id: 'your_resource_id',
-    });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("atomicserver", {
-    "connection_string": "http://localhost:9883",
-    "private_key": "your_private_key",
-    "public_key": "your_public_key",
-    "parent_resource_id": "your_resource_id",
-})
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/azblob.mdx b/website/docs/services/azblob.mdx
deleted file mode 100644
index 53ebe3ce8a..0000000000
--- a/website/docs/services/azblob.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Azblob
----
-
-Azure Storage Blob services support.
-
-import Docs from '../../../core/src/services/azblob/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("container".to_string(), "test".to_string());
-    map.insert("endpoint".to_string(), "http://127.0.0.1:10000/devstoreaccount1".to_string());
-    map.insert("account_name".to_string(), "devstoreaccount1".to_string());
-    map.insert("account_key".to_string(), "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Azblob, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("azblob", {
-    root: "/path/to/dir",
-    container: "test",
-    endpoint: "http://127.0.0.1:10000/devstoreaccount1",
-    account_name: "devstoreaccount1",
-    account_key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("azblob",
-    root="/path/to/dir",
-    container="test",
-    endpoint="http://127.0.0.1:10000/devstoreaccount1",
-    account_name="devstoreaccount1",
-    account_key="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
-)
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/azdls.mdx b/website/docs/services/azdls.mdx
deleted file mode 100644
index 92555b2f64..0000000000
--- a/website/docs/services/azdls.mdx
+++ /dev/null
@@ -1,73 +0,0 @@
----
-title: Azdls
----
-
-Azure Data Lake Storage Gen2 Support.
-
-import Docs from '../../../core/src/services/azdls/docs.md'
-
-<Docs components={props.components} />
-
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("filesystem".to_string(), "test".to_string());
-    map.insert("endpoint".to_string(), "https://accountname.dfs.core.windows.net".to_string());
-    map.insert("account_name".to_string(), "account_name".to_string());
-    map.insert("account_key".to_string(), "account_key".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Azdls, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("azdls", {
-    root: "/path/to/dir",
-    filesystem: "test",
-    endpoint: "https://accountname.dfs.core.windows.net",
-    account_name: "account_name",
-    account_key: "account_key",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("azdls",
-    root="/path/to/dir",
-    filesystem="test",
-    endpoint="https://accountname.dfs.core.windows.net",
-    account_name="account_name",
-    account_key="account_key",
-)
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/cacache.mdx b/website/docs/services/cacache.mdx
deleted file mode 100644
index d3262cbf6d..0000000000
--- a/website/docs/services/cacache.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: Cacache
----
-
-[Cacache](https://github.com/zkat/cacache-rs) services support.
-
-import Docs from '../../../core/src/services/cacache/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::services::Cacache;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    
-    let mut map = HashMap::new();
-    map.insert("datadir".to_string(), "/tmp/opendal/cacache".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Cacache, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from  require('opendal');
-
-async function main() {
-    const op = new Operator("cacache", {
-        datadir: '/tmp/opendal/cacache'
-    });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("cacache", {
-    "datadir": "/tmp/opendal/cacache"
-})
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/cos.mdx b/website/docs/services/cos.mdx
deleted file mode 100644
index d2b9d25c5c..0000000000
--- a/website/docs/services/cos.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: COS
----
-
-Tencent Cloud COS services support.
-
-import Docs from '../../../core/src/services/cos/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("bucket".to_string(), "test".to_string());
-    map.insert("endpoint".to_string(), "https://cos.ap-singapore.myqcloud.com".to_string());
-    map.insert("secret_id".to_string(), "secret_id".to_string());
-    map.insert("secret_key".to_string(), "secret_access_key".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Cos, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("cos", {
-    bucket: "test",
-    endpoint: "https://cos.ap-singapore.myqcloud.com",
-    secret_id: "secret_id",
-    secret_key: "secret_access_key",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("cos",
-    bucket="test",
-    endpoint="https://cos.ap-singapore.myqcloud.com",
-    secret_id="secret_id",
-    secret_key="secret_access_key",
-)
-```
-
-  </TabItem>
-</Tabs>
-
diff --git a/website/docs/services/d1.mdx b/website/docs/services/d1.mdx
deleted file mode 100644
index b7c3a1a415..0000000000
--- a/website/docs/services/d1.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: D1
----
-
-[D1](https://developers.cloudflare.com/d1/) services support.
-
-import Docs from '../../../core/src/services/d1/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("token".to_string(), "token".to_string());
-    map.insert("account_id".to_string(), "account_id".to_string());
-    map.insert("database_id".to_string(), "database_id".to_string());
-    map.insert("table".to_string(), "table".to_string());
-    map.insert("key_field".to_string(), "key_field".to_string());
-    map.insert("value_field".to_string(), "value_field".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::D1, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-    const config = {
-        token: "token",
-        account_id: "account_id",
-        database_id: "database_id",
-        table: "table",
-        key_field: "key_field",
-        value_field: "value_field"
-    };
-    const op = new Operator("d1", config);
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-config = {
-    "token": "token",
-    "account_id": "account_id",
-    "database_id": "database_id",
-    "table": "table",
-    "key_field": "key_field",
-    "value_field": "value_field"
-}
-
-op = opendal.Operator("d1", **config)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/dashmap.mdx b/website/docs/services/dashmap.mdx
deleted file mode 100644
index 952acb1152..0000000000
--- a/website/docs/services/dashmap.mdx
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: DashMap
----
-
-[dashmap](https://github.com/xacrimon/dashmap) backend support.
-
-import Docs from '../../../core/src/services/dashmap/docs.md'
-
-<Docs components={props.components} />
diff --git a/website/docs/services/dropbox.mdx b/website/docs/services/dropbox.mdx
deleted file mode 100644
index 6b04605aa5..0000000000
--- a/website/docs/services/dropbox.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: Dropbox
----
-
-[Dropbox](https://www.dropbox.com/) services support.
-
-import Docs from '../../../core/src/services/dropbox/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("access_token".to_string(), "your_access_token".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Dropbox, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("dropbox", {
-    root: "/path/to/dir",
-    access_token: "your_access_token",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("dropbox",
-  root="/path/to/dir",
-  access_token="your_access_token",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/etcd.mdx b/website/docs/services/etcd.mdx
deleted file mode 100644
index e0ca963a74..0000000000
--- a/website/docs/services/etcd.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Etcd
----
-
-[Etcd](https://etcd.io/) services support.
-
-import Docs from '../../../core/src/services/etcd/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("endpoints".to_string(), "http://127.0.0.1:2379".to_string());
-    map.insert("username".to_string(), "your_username".to_string());
-    map.insert("password".to_string(), "your_password".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Etcd, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("etcd", {
-    root: "/path/to/dir",
-    endpoint: "http://127.0.0.1:2379",
-    username: "your_username",
-    password: "your_password",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("etcd",
-  root="/path/to/dir",
-  endpoint="http://127.0.0.1:2379",
-  username="your_username",
-  password="your_password",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/foundationdb.mdx b/website/docs/services/foundationdb.mdx
deleted file mode 100644
index b148ec2ed2..0000000000
--- a/website/docs/services/foundationdb.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: FoundationDB
----
-
-[FoundationDB](https://www.foundationdb.org/) services support.
-
-import Docs from '../../../core/src/services/foundationdb/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("config_path".to_string(), "/path/to/config".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Foundationdb, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("foundationdb", {
-    root: "/path/to/dir",
-    config_path: "/path/to/config",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("foundationdb",
-  root="/path/to/dir",
-  config_path="/path/to/config",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/fs.mdx b/website/docs/services/fs.mdx
deleted file mode 100644
index 46707cbd36..0000000000
--- a/website/docs/services/fs.mdx
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: Fs
----
-
-POSIX file system support.
-
-import Docs from '../../../core/src/services/fs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-  let mut map = HashMap::new();
-  map.insert("root".to_string(), "/path/to/dir".to_string());
-
-  let op: Operator = Operator::via_map(Scheme::Fs, map)?;
-  Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("fs", {
-    root: "/path/to/dir",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("fs",
-    root="/path/to/dir",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/ftp.mdx b/website/docs/services/ftp.mdx
deleted file mode 100644
index 6bb870dbef..0000000000
--- a/website/docs/services/ftp.mdx
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: FTP
----
-
-FTP and FTPS services support.
-
-import Docs from '../../../core/src/services/ftp/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-  let mut map = HashMap::new();
-  map.insert("endpoint".to_string(), "127.0.0.1".to_string());
-
-  let op: Operator = Operator::via_map(Scheme::Ftp, map)?;
-  Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("ftp", {
-    endpoint: "127.0.0.1",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("ftp",
-    endpoint="127.0.0.1",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/gcs.mdx b/website/docs/services/gcs.mdx
deleted file mode 100644
index 3a84d4bfaa..0000000000
--- a/website/docs/services/gcs.mdx
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: Gcs
----
-
-Google Cloud Storage Support
-
-import Docs from '../../../core/src/services/gcs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("bucket".to_string(), "test".to_string());
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("credential".to_string(), "authentication token".to_string());
-    map.insert("predefined_acl".to_string(), "publicRead".to_string());
-    map.insert("default_storage_class".to_string(), "STANDARD".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Gcs, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-async function main() {
-  const op = new Operator("gcs", {
-    bucket: "test",
-    root: "/path/to/dir",
-    credential: "authentication token",
-    predefined_acl: "publicRead",
-    default_storage_class: "STANDARD",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-op = opendal.Operator("gcs",
-    bucket="test",
-    root="/path/to/dir",
-    credential="authentication token",
-    predefined_acl="publicRead",
-    default_storage_class="STANDARD",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/gdrive.mdx b/website/docs/services/gdrive.mdx
deleted file mode 100644
index bff0af362e..0000000000
--- a/website/docs/services/gdrive.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: Gdrive
----
-
-[Google Drive](https://drive.google.com) services support.
-
-import Docs from '../../../core/src/services/gdrive/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("access_token".to_string(), "your_access_token".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Gdrive, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("gdrive", {
-    root: "/path/to/dir",
-    access_token: "your_access_token",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("gdrive",
-  root="/path/to/dir",
-  access_token="your_access_token",
-)
-```
-
-  </TabItem>
-</Tabs>
-
diff --git a/website/docs/services/ghac.mdx b/website/docs/services/ghac.mdx
deleted file mode 100644
index f71dfb1db4..0000000000
--- a/website/docs/services/ghac.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: GHAC
----
-
-[GitHub Action Cache](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) service support
-
-import Docs from '../../../core/src/services/ghac/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::services::Ghac;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Ghac, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from  require('opendal');
-
-async function main() {
-    const op = new Operator("ghac", {
-        root: '/path/to/dir'
-    });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("ghac", {
-    "root": "/path/to/dir"
-})
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/gridfs.mdx b/website/docs/services/gridfs.mdx
deleted file mode 100644
index d33137f751..0000000000
--- a/website/docs/services/gridfs.mdx
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: Gridfs
----
-
-[Gridfs](https://www.mongodb.com/docs/manual/core/gridfs/) services support.
-
-import Docs from '../../../core/src/services/gridfs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("connection_string".to_string(), "connection_string".to_string());
-    map.insert("database".to_string(), "database".to_string());
-    map.insert("bucket".to_string(), "bucket".to_string());
-    let op: Operator = Operator::via_map(Scheme::Gridfs, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-    const config = {
-        connection_string: "connection_string",
-        database: "database",
-        bucket: "bucket",
-    };
-    const op = new Operator("gridfs", config);
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-config = {
-    "connection_string": "connection_string",
-    "database": "database",
-    "bucket": "bucket",
-}
-
-op = opendal.Operator("gridfs", **config)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/hdfs.mdx b/website/docs/services/hdfs.mdx
deleted file mode 100644
index c8125898a3..0000000000
--- a/website/docs/services/hdfs.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: HDFS
----
-
-[Hadoop Distributed File System (HDFS™)](https://hadoop.apache.org/) support.
-
-import Docs from '../../../core/src/services/hdfs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-  let mut map = HashMap::new();
-  map.insert("name_node".to_string(), "hdfs://127.0.0.1:9000".to_string());
-  map.insert("root".to_string(), "/tmp".to_string());
-
-  let op: Operator = Operator::via_map(Scheme::Hdfs, map)?;
-  Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("hdfs", {
-    name_node: "hdfs://127.0.0.1:9000",
-    root: "/tmp",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("hdfs",
-    name_node="hdfs://127.0.0.1:9000",
-    root="/tmp",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/http.mdx b/website/docs/services/http.mdx
deleted file mode 100644
index 522da54fd2..0000000000
--- a/website/docs/services/http.mdx
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: HTTP
----
-
-HTTP Read-only service support like [Nginx](https://www.nginx.com/) and [Caddy](https://caddyserver.com/).
-
-import Docs from '../../../core/src/services/http/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("endpoint".to_string(), "127.0.0.1".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Http, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-async function main() {
-  const op = new Operator("http", {
-    endpoint: "127.0.0.1",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-op = opendal.Operator("http",
-    endpoint="127.0.0.1",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/huggingface.mdx b/website/docs/services/huggingface.mdx
deleted file mode 100644
index 93b1eee3b0..0000000000
--- a/website/docs/services/huggingface.mdx
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: Hugging Face
----
-
-[Hugging Face](https://huggingface.co/docs/huggingface_hub/main/en/package_reference/hf_api#huggingface_hub.HfApi) services support.
-
-import Docs from '../../../core/src/services/huggingface/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-
-    map.insert("repo_type".to_string(), "dataset".to_string());
-    map.insert("repo_id".to_string(), "databricks/databricks-dolly-15k".to_string());
-    map.insert("revision".to_string(), "main".to_string());
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("token".to_string(), "access_token".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Huggingface, map)?;
-
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  // Use `huggingface` or `hf` for scheme name
-  const op = new Operator("huggingface", {
-    repo_type: "dataset",
-    repo_id: "databricks/databricks-dolly-15k",
-    revision: "main",
-    root: "/path/to/dir",
-    token: "access_token",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-# Use `huggingface` or `hf` for scheme name
-op = opendal.Operator("huggingface",
-    repo_type="dataset",
-    repo_id="databricks/databricks-dolly-15k",
-    revision="main",
-    root: "/path/to/dir",
-    token: "access_token",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/ipfs.mdx b/website/docs/services/ipfs.mdx
deleted file mode 100644
index b858b7a0fe..0000000000
--- a/website/docs/services/ipfs.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: IPFS
----
-
-IPFS file system support based on [IPFS HTTP Gateway](https://docs.ipfs.tech/concepts/ipfs-gateway/).
-
-
-import Docs from '../../../core/src/services/ipfs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-  let mut map = HashMap::new();
-  map.insert("endpoint".to_string(), "https://ipfs.io".to_string());
-  map.insert("root".to_string(), "/ipfs/QmPpCt1aYGb9JWJRmXRUnmJtVgeFFTJGzWFYEEX7bo9zGJ".to_string());
-
-  let op: Operator = Operator::via_map(Scheme::Ipfs, map)?;
-  Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("ipfs", {
-    endpoint: "https://ipfs.io",
-    root: "/ipfs/QmPpCt1aYGb9JWJRmXRUnmJtVgeFFTJGzWFYEEX7bo9zGJ",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("ipfs",
-    endpoint="https://ipfs.io",
-    root="/ipfs/QmPpCt1aYGb9JWJRmXRUnmJtVgeFFTJGzWFYEEX7bo9zGJ",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/ipmfs.mdx b/website/docs/services/ipmfs.mdx
deleted file mode 100644
index 8b7ac6c36f..0000000000
--- a/website/docs/services/ipmfs.mdx
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: IPMFS
----
-
-IPFS Mutable File System (IPMFS) support
-
-import Docs from "../../../core/src/services/ipmfs/docs.md"
-
-<Docs components={props.components} />
diff --git a/website/docs/services/libsql.mdx b/website/docs/services/libsql.mdx
deleted file mode 100644
index b9a042e905..0000000000
--- a/website/docs/services/libsql.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: LibSQL
----
-
-[libSQL](https://github.com/tursodatabase/libsql) service support.
-
-import Docs from '../../../core/src/services/libsql/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/".to_string());
-    map.insert("connection_string".to_string(), "https://example.com/db".to_string());
-    map.insert("auth_token".to_string(), "secret".to_string());
-    map.insert("table".to_string(), "your_table".to_string());
-    map.insert("key_field".to_string(), "key".to_string());
-    map.insert("value_field".to_string(), "value".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Libsql, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("libsql", {
-    root: "/",
-    connection_string: "https://example.com/db",
-    auth_token: "secret",
-    table: "your_table",
-    key_field: "key",
-    value_field: "value",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("libsql",
-    root="/",
-    connection_string="https://example.com/db",
-    auth_token="secret",
-    table="your_table",
-    key_field="key",
-    value_field="value"
-)
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/memcached.mdx b/website/docs/services/memcached.mdx
deleted file mode 100644
index 8e3a1d98ad..0000000000
--- a/website/docs/services/memcached.mdx
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Memcached
----
-
-[Memcached](https://memcached.org/) service support.
-
-import Docs from '../../../core/src/services/memcached/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("endpoint".to_string(), "tcp://127.0.0.1:11211".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Memcached, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-async function main() {
-  const op = new Operator("memcached", {
-    endpoint: "tcp://127.0.0.1:11211",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-op = opendal.Operator("memcached",
-    endpoint="tcp://127.0.0.1:11211",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/memory.mdx b/website/docs/services/memory.mdx
deleted file mode 100644
index aff2e14651..0000000000
--- a/website/docs/services/memory.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Memory
----
-
-In memory service support. (BTreeMap Based)
-
-import Docs from '../../../core/src/services/memory/docs.md'
-
-<Docs components={props.components} />
-
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Memory, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("memory", {
-    root: "/path/to/dir",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("memory",
-  root="/path/to/dir",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/moka.mdx b/website/docs/services/moka.mdx
deleted file mode 100644
index 8c8f42850b..0000000000
--- a/website/docs/services/moka.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Moka
----
-
-[Moka](https://github.com/moka-rs/moka) services support.
-
-import Docs from '../../../core/src/services/moka/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("name".to_string(), "your_cache_name".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Moka, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("moka", {
-    name: "your_cache_name",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("moka",
-  name="your_cache_name",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/mongodb.mdx b/website/docs/services/mongodb.mdx
deleted file mode 100644
index 0bac8e0f58..0000000000
--- a/website/docs/services/mongodb.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: MongoDB
----
-
-[MongoDB](https://www.mongodb.com/) services support.
-
-import Docs from '../../../core/src/services/mongodb/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/".to_string());
-    map.insert("connection_string".to_string(), "mongodb://myUser:myPassword@localhost:27017/myAuthDB".to_string());
-    map.insert("database".to_string(), "your_database".to_string());
-    map.insert("collection".to_string(), "your_collection".to_string());
-    map.insert("key_field".to_string(), "key".to_string());
-    map.insert("value_field".to_string(), "value".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Mongodb, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("mongodb", {
-    root: "/",
-    connection_string: "mongodb://myUser:myPassword@localhost:27017/myAuthDB",
-    database: "your_database",
-    collection: "your_collection",
-    key_field: "key",
-    value_field: "value"
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("mongodb",
-    root="/",
-    connection_string="mongodb://myUser:myPassword@localhost:27017/myAuthDB",
-    database="your_database",
-    collection="your_collection",
-    key_field="key",
-    value_field="value"
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/mysql.mdx b/website/docs/services/mysql.mdx
deleted file mode 100644
index a6fb7bc5bb..0000000000
--- a/website/docs/services/mysql.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: MySQL
----
-
-[MySQL](https://www.mysql.com/) services support.
-
-import Docs from '../../../core/src/services/mysql/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::services::Mysql;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    
-    let mut map = HashMap::new();
-    map.insert("connection_string".to_string(), "mysql://you_username:your_password@127.0.0.1:5432/your_database".to_string());
-    map.insert("table".to_string(), "your_table".to_string());
-    map.insert("key_field".to_string(), "your_key_field".to_string());
-    map.insert("value_field".to_string(), "your_value_field".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Mysql, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from  require('opendal');
-
-async function main() {
-    const op = new Operator("mysql", {
-        connection_string: 'mysql://you_username:your_password@127.0.0.1:5432/your_database',
-        table: 'your_table',
-        key_field: 'your_key_field',
-        value_field: 'your_value_field',
-    });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("mysql", {
-    "connection_string": "mysql://you_username:your_password@127.0.0.1:5432/your_database",
-    "table": "your_table",
-    "key_field": "your_key_field",
-    "value_field": "your_value_field",
-})
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/obs.mdx b/website/docs/services/obs.mdx
deleted file mode 100644
index 5b02fa5909..0000000000
--- a/website/docs/services/obs.mdx
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: Obs
----
-
-Huawei-Cloud Object Storage Service (OBS) support
-
-import Docs from '../../../core/src/services/obs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("bucket".to_string(), "test".to_string());
-    map.insert("endpoint".to_string(), "obs.cn-north-1.myhuaweicloud.com".to_string());
-    map.insert("access_key_id".to_string(), "access_key_id".to_string());
-    map.insert("secret_access_key".to_string(), "secret_access_key".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Obs, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-async function main() {
-  const op = new Operator("obs", {
-    bucket: "test",
-    endpoint: "obs.cn-north-1.myhuaweicloud.com",
-    access_key_id: "access_key_id",
-    secret_access_key: "secret_access_key",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-op = opendal.Operator("obs",
-    bucket="test",
-    endpoint="obs.cn-north-1.myhuaweicloud.com",
-    access_key_id="access_key_id",
-    secret_access_key="secret_access_key",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/onedrive.mdx b/website/docs/services/onedrive.mdx
deleted file mode 100644
index 61ab439434..0000000000
--- a/website/docs/services/onedrive.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: OneDrive
----
-
-[OneDrive](https://onedrive.com) services support.
-
-import Docs from '../../../core/src/services/onedrive/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("access_token".to_string(), "your_access_token".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Onedrive, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("onedrive", {
-    root: "/path/to/dir",
-    access_token: "your_access_token",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("onedrive",
-  root="/path/to/dir",
-  access_token="your_access_token",
-)
-```
-
-  </TabItem>
-</Tabs>
-
diff --git a/website/docs/services/oss.mdx b/website/docs/services/oss.mdx
deleted file mode 100644
index 24575f58af..0000000000
--- a/website/docs/services/oss.mdx
+++ /dev/null
@@ -1,74 +0,0 @@
----
-title: OSS
----
-
-Aliyun Object Storage Service (OSS) support.
-
-import Docs from '../../../core/src/services/oss/docs.md'
-
-<Docs components={props.components} />
-
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("bucket".to_string(), "test".to_string());
-    map.insert("endpoint".to_string(), "https://oss-cn-beijing.aliyuncs.com".to_string());
-    map.insert("access_key_id".to_string(), "access_key_id".to_string());
-    map.insert("access_key_secret".to_string(), "access_key_secret".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Oss, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("oss", {
-    root: "/path/to/dir",
-    bucket: "test",
-    endpoint: "https://oss-cn-beijing.aliyuncs.com",
-    access_key_id: "access_key_id",
-    access_key_secret: "access_key_secret",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("oss",
-    root="/path/to/dir",
-    bucket="test",
-    endpoint="https://oss-cn-beijing.aliyuncs.com",
-    access_key_id="access_key_id",
-    access_key_secret="access_key_secret",
-)
-```
-
-  </TabItem>
-</Tabs>
-
diff --git a/website/docs/services/persy.mdx b/website/docs/services/persy.mdx
deleted file mode 100644
index 15ffd92e57..0000000000
--- a/website/docs/services/persy.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: Persy
----
-
-[Persy](https://persy.rs/) service support.
-
-import Docs from '../../../core/src/services/persy/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut config = HashMap::new();
-    config.insert("datafile".to_string(), "./test.persy".to_string());
-    config.insert("segment".to_string(), "data".to_string());
-    config.insert("index".to_string(), "index".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Persy, config)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-    const config = {
-        datafile: "./test.persy",
-        segment: "data",
-        index: "index"
-    };
-    const op = new Operator("persy", config);
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-config = {
-    "datafile": "./test.persy",
-    "segment": "data",
-    "index": "index"
-}
-
-op = opendal.Operator("persy", **config)
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/postgresql.mdx b/website/docs/services/postgresql.mdx
deleted file mode 100644
index 3f9605f50a..0000000000
--- a/website/docs/services/postgresql.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: PostgreSQL
----
-
-[PostgreSQL](https://www.postgresql.org/) services support.
-
-import Docs from '../../../core/src/services/postgresql/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::services::Postgresql;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    
-    let mut map = HashMap::new();
-    map.insert("connection_string".to_string(), "postgresql://you_username:your_password@127.0.0.1:5432/your_database".to_string());
-    map.insert("table".to_string(), "your_table".to_string());
-    map.insert("key_field".to_string(), "your_key_field".to_string());
-    map.insert("value_field".to_string(), "your_value_field".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Postgresql, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from  require('opendal');
-
-async function main() {
-    const op = new Operator("postgresql", {
-        connection_string: 'postgresql://you_username:your_password@127.0.0.1:5432/your_database',
-        table: 'your_table',
-        key_field: 'your_key_field',
-        value_field: 'your_value_field',
-    });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("postgresql", {
-    "connection_string": "postgresql://you_username:your_password@127.0.0.1:5432/your_database",
-    "table": "your_table",
-    "key_field": "your_key_field",
-    "value_field": "your_value_field",
-})
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/redb.mdx b/website/docs/services/redb.mdx
deleted file mode 100644
index 008b3b9067..0000000000
--- a/website/docs/services/redb.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Redb
----
-
-[Redb](https://github.com/cberner/redb) services support.
-
-import Docs from '../../../core/src/services/redb/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut config = HashMap::new();
-    config.insert("datadir".to_string(), "/tmp/opendal/redb".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Redb, config)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-    const config = {
-        datadir: "/tmp/opendal/redb",
-    };
-    const op = new Operator("redb", config);
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-config = {
-    "datadir": "/tmp/opendal/redb",
-}
-
-op = opendal.Operator("redb", **config)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/redis.mdx b/website/docs/services/redis.mdx
deleted file mode 100644
index 5e4fad2f62..0000000000
--- a/website/docs/services/redis.mdx
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: Redis
----
-
-[Redis](https://redis.io/) services support.
-
-import Docs from '../../../core/src/services/redis/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("endpoint".to_string(), "tcp://127.0.0.1:6379".to_string());
-    map.insert("username".to_string(), "your_username".to_string());
-    map.insert("password".to_string(), "your_password".to_string());
-    map.insert("db".to_string(), "0".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Redis, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("redis", {
-    root: "/path/to/dir",
-    endpoint: "tcp://127.0.0.1:6379",
-    username: "your_username",
-    password: "your_password",
-    db: "0",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("redis",
-  root="/path/to/dir",
-  endpoint="tcp://127.0.0.1:6379",
-  username="your_username",
-  password="your_password",
-  db="0",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/rocksdb.mdx b/website/docs/services/rocksdb.mdx
deleted file mode 100644
index 13ddde5946..0000000000
--- a/website/docs/services/rocksdb.mdx
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: RocksDB
----
-
-RocksDB service support.
-
-import Docs from '../../../core/src/services/rocksdb/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("datadir".to_string(), "/tmp/opendal/rocksdb".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Rocksdb, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("rocksdb", {
-    datadir: "/tmp/opendal/rocksdb",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("rocksdb",
-  datadir="/tmp/opendal/rocksdb",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/s3.mdx b/website/docs/services/s3.mdx
deleted file mode 100644
index f2915a5bef..0000000000
--- a/website/docs/services/s3.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: S3
----
-
-Aws S3 and compatible services (including minio, digitalocean space, Tencent Cloud Object Storage(COS) and so on) support.
-
-For more information about s3-compatible services, refer to [Compatible Services](#compatible-services).
-
-import Docs from '../../../core/src/services/s3/docs.md'
-
-<Docs components={props.components} />
-
-## Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-
-    map.insert("root".to_string(), "/path/to/dir".to_string());
-    map.insert("bucket".to_string(), "test".to_string());
-    map.insert("region".to_string(), "us-east-1".to_string());
-    map.insert("endpoint".to_string(), "https://s3.amazonaws.com".to_string());
-    map.insert("access_key_id".to_string(), "access_key_id".to_string());
-    map.insert("secret_access_key".to_string(), "secret_access_key".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::S3, map)?;
-
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("s3", {
-    root: "/path/to/dir",
-    bucket: "test",
-    region: "us-east-1",
-    endpoint: "https://s3.amazonaws.com",
-    access_key_id: "access_key_id",
-    secret_access_key: "secret_access_key",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("s3",
-    root="/path/to/dir",
-    bucket="test",
-    region="us-east-1",
-    endpoint="https://s3.amazonaws.com",
-    access_key_id="access_key_id",
-    secret_access_key="secret_access_key",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
-import CompatibleServices from '../../../core/src/services/s3/compatible_services.md'
-
-<CompatibleServices components={props.components} />
diff --git a/website/docs/services/sftp.mdx b/website/docs/services/sftp.mdx
deleted file mode 100644
index 55f70ef10c..0000000000
--- a/website/docs/services/sftp.mdx
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: SFTP
----
-
-SFTP services support. (only works on unix)
-
-:::caution
-
-Maximum number of file holdings is depending on the remote system configuration.
-
-For example, the default value is 255 in macOS, and 1024 in linux. If you want to open
-lots of files, you should pay attention to close the file after using it.
-
-:::
-
-import Docs from '../../../core/src/services/sftp/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("endpoint".to_string(), "127.0.0.1".to_string());
-    map.insert("user".to_string(), "test".to_string());
-    map.insert("key".to_string(), "test_key".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Sftp, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("sftp", {
-    endpoint: "127.0.0.1",
-    user: "test",
-    key: "test_key",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("sftp",
-    endpoint="127.0.0.1",
-    user="test",
-    key="test_key",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/sled.mdx b/website/docs/services/sled.mdx
deleted file mode 100644
index 8feec4daab..0000000000
--- a/website/docs/services/sled.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Sled
----
-
-Sled service support.
-
-import Docs from '../../../core/src/services/sled/docs.md'
-
-<Docs components={props.components} />
-
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("datadir".to_string(), "/tmp/opendal/sled".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Sled, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("sled", {
-    datadir: "/tmp/opendal/sled",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("sled",
-  datadir="/tmp/opendal/sled",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docs/services/sqlite.mdx b/website/docs/services/sqlite.mdx
deleted file mode 100644
index dc8801d9e3..0000000000
--- a/website/docs/services/sqlite.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: Sqlite
----
-
-[Sqlite](https://www.sqlite.org/) services support.
-
-import Docs from '../../../core/src/services/sqlite/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::services::Sqlite;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    
-    let mut map = HashMap::new();
-    map.insert("connection_string".to_string(), "file//abc.db".to_string());
-    map.insert("table".to_string(), "your_table".to_string());
-    map.insert("key_field".to_string(), "your_key_field".to_string());
-    map.insert("value_field".to_string(), "your_value_field".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Sqlite, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from  require('opendal');
-
-async function main() {
-    const op = new Operator("sqlite", {
-        connection_string: 'file//abc.db',
-        table: 'your_table',
-        key_field: 'your_key_field',
-        value_field: 'your_value_field',
-    });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("sqlite", {
-    "connection_string": "file//abc.db",
-    "table": "your_table",
-    "key_field": "your_key_field",
-    "value_field": "your_value_field",
-})
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/supabase.mdx b/website/docs/services/supabase.mdx
deleted file mode 100644
index 447f74d38a..0000000000
--- a/website/docs/services/supabase.mdx
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: Supabase
----
-
-[Supabase](https://supabase.com/) service support.
-
-import Docs from '../../../core/src/services/supabase/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("root".to_string(), "/".to_string());
-    map.insert("bucket".to_string(), "test_bucket".to_string());
-    map.insert("endpoint".to_string(), "http://127.0.0.1:54321".to_string());
-    map.insert("key".to_string(), "some_anon_key".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Supabase, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-async function main() {
-  const op = new Operator("supabase", {
-    root: "/",
-    bucket: "test_bucket",
-    endpoint: "http://127.0.0.1:54321",
-    key: "some_anon_key",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-op = opendal.Operator("supabase",
-    root="/",
-    bucket="test_bucket",
-    endpoint="http://127.0.0.1:54321",
-    key="some_anon_key",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/swift.mdx b/website/docs/services/swift.mdx
deleted file mode 100644
index 29973994cf..0000000000
--- a/website/docs/services/swift.mdx
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: Swift
----
-
-[OpenStack Swift](https://docs.openstack.org/api-ref/object-store/) and compatible services support.
-
-For more information about swift-compatible services, refer to [Compatible Services](#compatible-services).
-
-import Docs from '../../../core/src/services/swift/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-
-    map.insert("endpoint".to_string(), "http://127.0.0.1:8080/v1/AUTH_test".to_string());
-    map.insert("container".to_string(), "test_container".to_string());
-    map.insert("token".to_string(), "test_token".to_string());
-    map.insert("root".to_string(), "/".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Swift, map)?;
-
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("swift", {
-    endpoint: "http://127.0.0.1:8080/v1/AUTH_test",
-    container: "test_container",
-    token: "test_token",
-    root: "/",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("swift",
-    endpoint="http://127.0.0.1:8080/v1/AUTH_test"
-    container="test_container",
-    token="test_token",
-    root="/",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-import CompatibleServices from '../../../core/src/services/swift/compatible_services.md'
-
-<CompatibleServices components={props.components} />
diff --git a/website/docs/services/tikv.mdx b/website/docs/services/tikv.mdx
deleted file mode 100644
index 4ac7ffc4c1..0000000000
--- a/website/docs/services/tikv.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: TiKV
----
-
-[TiKV](https://tikv.org/) services support.
-
-import Docs from '../../../core/src/services/tikv/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut config = HashMap::new();
-    config.insert("endpoints".to_string(), "127.0.0.1:2379".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::TiKV, config)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-    const config = {
-        endpoints: "127.0.0.1:2379",
-    };
-    const op = new Operator("tikv", config);
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-config = {
-    "endpoints": "127.0.0.1:2379",
-}
-
-op = opendal.Operator("tikv", **config)
-```
-
-  </TabItem>
-</Tabs>
diff --git a/website/docs/services/vercel_artifacts.mdx b/website/docs/services/vercel_artifacts.mdx
deleted file mode 100644
index d000360294..0000000000
--- a/website/docs/services/vercel_artifacts.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-title: Vercel Artifacts
----
-
-[Vercel Cache](https://vercel.com/docs/concepts/monorepos/remote-caching) service support.
-
-import Docs from '../../../core/src/services/vercel_artifacts/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("access_token".to_string(), "your_access_token".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::VercelArtifacts, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("vercel_artifacts", {
-    access_token: "your_access_token",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("vercel_artifacts",
-    access_token="your_access_token",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/webdav.mdx b/website/docs/services/webdav.mdx
deleted file mode 100644
index ce0cd2c6f8..0000000000
--- a/website/docs/services/webdav.mdx
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: WebDAV
----
-
-[WebDAV](https://datatracker.ietf.org/doc/html/rfc4918) backend support.
-
-import Docs from '../../../core/src/services/webdav/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    let mut map = HashMap::new();
-    map.insert("endpoint".to_string(), "127.0.0.1".to_string());
-    map.insert("username".to_string(), "xxx".to_string());
-    map.insert("password".to_string(), "xxx".to_string());
-
-    let op: Operator = Operator::via_map(Scheme::Webdav, map)?;
-    Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-async function main() {
-  const op = new Operator("webdav", {
-    endpoint: "127.0.0.1",
-    username: "xxx",
-    password: "xxx",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-op = opendal.Operator("webdav",
-    endpoint="127.0.0.1",
-    username="xxx",
-    password="xxx",
-)
-```
-
-  </TabItem>
-</Tabs>
\ No newline at end of file
diff --git a/website/docs/services/webhdfs.mdx b/website/docs/services/webhdfs.mdx
deleted file mode 100644
index 1a1f251f8e..0000000000
--- a/website/docs/services/webhdfs.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: WebHDFS
----
-
-[WebHDFS](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html)'s REST API support.
-
-
-import Docs from '../../../core/src/services/webhdfs/docs.md'
-
-<Docs components={props.components} />
-
-### Via Config
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-<Tabs>
-  <TabItem value="rust" label="Rust" default>
-
-```rust
-use anyhow::Result;
-use opendal::Operator;
-use opendal::Scheme;
-use std::collections::HashMap;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-  let mut map = HashMap::new();
-  map.insert("endpoint".to_string(), "http://127.0.0.1:9870".to_string());
-  map.insert("root".to_string(), "/path/to/dir".to_string());
-  map.insert("delegation".to_string(), "delegation_token".to_string());
-
-  let op: Operator = Operator::via_map(Scheme::Webhdfs, map)?;
-  Ok(())
-}
-```
-
-  </TabItem>
-  <TabItem value="node.js" label="Node.js">
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("webhdfs", {
-    endpoint: "http://127.0.0.1:9870",
-    root: "/path/to/dir",
-    delegation: "delegation_token",
-  });
-}
-```
-
-  </TabItem>
-  <TabItem value="python" label="Python">
-
-```python
-import opendal
-
-op = opendal.Operator("webhdfs",
-    endpoint="http://127.0.0.1:9870",
-    root="/path/to/dir",
-    delegation="delegation_token",
-)
-```
-
-  </TabItem>
-</Tabs>
-
-
diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js
index 4dfbb36038..2582676023 100644
--- a/website/docusaurus.config.js
+++ b/website/docusaurus.config.js
@@ -152,36 +152,6 @@ const config = {
             position: 'right',
             label: 'Docs',
           },
-          {
-            position: 'right',
-            label: 'API',
-            items: [
-              {
-                label: 'Rust Core',
-                to: 'pathname:///docs/rust/opendal/'
-              },
-              {
-                label: 'Node.js Binding',
-                to: 'pathname:///docs/nodejs/'
-              },
-              {
-                label: 'Python Binding',
-                to: 'pathname:///docs/python/'
-              },
-              {
-                label: 'Java Binding',
-                to: 'pathname:///docs/java/'
-              },
-              {
-                label: 'object-store-opendal',
-                to: 'pathname:///docs/object-store-opendal/object_store_opendal'
-              },
-              {
-                label: 'dav-server-opendalfs',
-                to: 'pathname:///docs/dav-server-opendalfs/dav_server_opendalfs'
-              }
-            ]
-          },
           {
             to: '/blog',
             label: 'Blog',