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

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new b92ec31c2 website(refactor): Use project readme in website directly 
(#5723)
b92ec31c2 is described below

commit b92ec31c268e10085a34a3a6863f1e970ad84907
Author: Xuanwo <[email protected]>
AuthorDate: Mon Mar 10 18:15:25 2025 +0800

    website(refactor): Use project readme in website directly (#5723)
    
    * website(refactor): Use project readme in website directly
    
    Signed-off-by: Xuanwo <[email protected]>
    
    * Fix license
    
    Signed-off-by: Xuanwo <[email protected]>
    
    ---------
    
    Signed-off-by: Xuanwo <[email protected]>
---
 bindings/c/README.md                          |   2 +-
 core/README.md                                |   4 +-
 website/components/GitHubReadme.js            | 105 +++++++++++++
 website/docs/01-overview.md                   |  10 ++
 website/docs/{vision.md => 02-vision.md}      |   1 -
 website/docs/10-core.mdx                      |  11 ++
 website/docs/20-bindings/_category_.yml       |  23 +++
 website/docs/20-bindings/c.mdx                |  10 ++
 website/docs/20-bindings/cpp.mdx              |  10 ++
 website/docs/20-bindings/d.mdx                |  10 ++
 website/docs/20-bindings/dart.mdx             |  10 ++
 website/docs/20-bindings/dotnet.mdx           |  10 ++
 website/docs/20-bindings/go.mdx               |  10 ++
 website/docs/20-bindings/haskell.mdx          |  10 ++
 website/docs/20-bindings/java.mdx             |  10 ++
 website/docs/20-bindings/lua.mdx              |  10 ++
 website/docs/20-bindings/nodejs.mdx           |  10 ++
 website/docs/20-bindings/ocaml.mdx            |  10 ++
 website/docs/20-bindings/php.mdx              |  10 ++
 website/docs/20-bindings/python.mdx           |  10 ++
 website/docs/20-bindings/ruby.mdx             |  10 ++
 website/docs/20-bindings/swift.mdx            |  10 ++
 website/docs/20-bindings/zig.mdx              |  10 ++
 website/docs/30-integrations/_category_.yml   |  23 +++
 website/docs/30-integrations/cloud_filter.mdx |  10 ++
 website/docs/30-integrations/dav_server.mdx   |  10 ++
 website/docs/30-integrations/fuse3.mdx        |  10 ++
 website/docs/30-integrations/object_store.mdx |  10 ++
 website/docs/30-integrations/parquet.mdx      |  10 ++
 website/docs/30-integrations/spring.mdx       |  10 ++
 website/docs/30-integrations/unftp_sbe.mdx    |  10 ++
 website/docs/30-integrations/virtiofs.mdx     |  10 ++
 website/docs/40-apps/_category_.yml           |  23 +++
 website/docs/40-apps/oay.mdx                  |  10 ++
 website/docs/40-apps/ofs.mdx                  |  10 ++
 website/docs/40-apps/oli.mdx                  |  10 ++
 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/object-store.md                  |   8 -
 website/docs/overview.md                      |  17 ---
 website/docs/quickstart.md                    | 203 --------------------------
 website/docs/rust-core.md                     |  18 ---
 44 files changed, 468 insertions(+), 282 deletions(-)

diff --git a/bindings/c/README.md b/bindings/c/README.md
index db7d37366..561d53e89 100644
--- a/bindings/c/README.md
+++ b/bindings/c/README.md
@@ -131,7 +131,7 @@ make doc
 
 ## Used by
 
-Check out the [users](users.md) list for more details on who is using OpenDAL.
+Check out the [users](./users.md) list for more details on who is using 
OpenDAL.
 
 ## License and Trademarks
 
diff --git a/core/README.md b/core/README.md
index 4d3b1ab3d..b75972806 100644
--- a/core/README.md
+++ b/core/README.md
@@ -212,11 +212,11 @@ async fn main() -> Result<()> {
 
 ## Contributing
 
-Check out the [CONTRIBUTING](CONTRIBUTING.md) guide for more details on 
getting started with contributing to this project.
+Check out the [CONTRIBUTING](./CONTRIBUTING.md) guide for more details on 
getting started with contributing to this project.
 
 ## Used by
 
-Check out the [users](users.md) list for more details on who is using OpenDAL.
+Check out the [users](./users.md) list for more details on who is using 
OpenDAL.
 
 ## Branding
 
diff --git a/website/components/GitHubReadme.js 
b/website/components/GitHubReadme.js
new file mode 100644
index 000000000..89d559128
--- /dev/null
+++ b/website/components/GitHubReadme.js
@@ -0,0 +1,105 @@
+/*
+ * 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.
+ */
+
+import React from "react";
+
+/**
+ * GitHub README Component: parse all `./xxx` into `GITHUB_URL/xxx`
+ */
+export default function GitHubReadme({
+  children,
+  owner = "apache",
+  repo = "opendal",
+  branch = "main",
+  basePath = "",
+  components = {},
+}) {
+  const createGitHubUrl = (path) => {
+    const cleanPath = path.replace(/^\.\//, "");
+    return 
`https://github.com/${owner}/${repo}/blob/${branch}/${basePath}${cleanPath}`;
+  };
+
+  const CustomLink = (props) => {
+    const { href, ...restProps } = props;
+
+    if (href && href.startsWith("./")) {
+      return <a {...restProps} href={createGitHubUrl(href)} />;
+    }
+
+    return <a {...props} />;
+  };
+
+  const CustomParagraph = (props) => {
+    const { children } = props;
+
+    if (typeof children === "string") {
+      const pattern = /\[(.*?)\]:\s*(\.\/[^\s]+)/g;
+
+      if (pattern.test(children)) {
+        const processedText = children.replace(
+          pattern,
+          (match, label, path) => {
+            return `[${label}]: ${createGitHubUrl(path)}`;
+          },
+        );
+
+        return <p>{processedText}</p>;
+      }
+    }
+
+    return <p {...props} />;
+  };
+
+  const mergedComponents = {
+    ...components,
+    a: CustomLink,
+    p: CustomParagraph,
+  };
+
+  const processRawMarkdown = (content) => {
+    if (typeof content !== "string") return content;
+
+    let processed = content.replace(
+      /\[(.*?)\]\((\.\/[^)]+)\)/g,
+      (match, text, path) => `[${text}](${createGitHubUrl(path)})`,
+    );
+
+    processed = processed.replace(
+      /\[(.*?)\]:\s*(\.\/[^\s]+)/g,
+      (match, label, path) => `[${label}]: ${createGitHubUrl(path)}`,
+    );
+
+    return processed;
+  };
+
+  if (typeof children === "string") {
+    return processRawMarkdown(children);
+  }
+
+  if (React.isValidElement(children)) {
+    return React.cloneElement(children, {
+      components: {
+        ...(children.props.components || {}),
+        ...mergedComponents,
+      },
+    });
+  }
+
+  return children;
+}
diff --git a/website/docs/01-overview.md b/website/docs/01-overview.md
new file mode 100644
index 000000000..2cdd55833
--- /dev/null
+++ b/website/docs/01-overview.md
@@ -0,0 +1,10 @@
+---
+sidebar_label: Overview
+slug: /
+---
+
+# Welcome to Apache OpenDALâ„¢
+
+OpenDAL represents **Open** **D**ata **A**ccess **L**ayer. Our vision is 
[**One Layer, All Storage.**](./02-vision.md)
+
+![](https://opendal.apache.org/img/architectural.png)
diff --git a/website/docs/vision.md b/website/docs/02-vision.md
similarity index 99%
rename from website/docs/vision.md
rename to website/docs/02-vision.md
index 089e9483c..5b79ad1cc 100644
--- a/website/docs/vision.md
+++ b/website/docs/02-vision.md
@@ -1,7 +1,6 @@
 ---
 title: Vision
 sidebar_label: Vision
-sidebar_position: 2
 ---
 
 ## Charter
diff --git a/website/docs/10-core.mdx b/website/docs/10-core.mdx
new file mode 100644
index 000000000..5c2d7dad8
--- /dev/null
+++ b/website/docs/10-core.mdx
@@ -0,0 +1,11 @@
+---
+title: Core
+sidebar_position: 4
+---
+
+import GitHubReadme from '../components/GitHubReadme';
+import Content from '../../core/README.md';
+
+<GitHubReadme basePath="core/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/_category_.yml 
b/website/docs/20-bindings/_category_.yml
new file mode 100644
index 000000000..f22424ab5
--- /dev/null
+++ b/website/docs/20-bindings/_category_.yml
@@ -0,0 +1,23 @@
+# 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.
+
+label: "Bindings"
+collapsible: true
+collapsed: false
+link:
+  type: generated-index
+  title: Bindings Overview
diff --git a/website/docs/20-bindings/c.mdx b/website/docs/20-bindings/c.mdx
new file mode 100644
index 000000000..29c67f44b
--- /dev/null
+++ b/website/docs/20-bindings/c.mdx
@@ -0,0 +1,10 @@
+---
+title: C
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/c/README.md';
+
+<GitHubReadme basePath="bindings/c/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/cpp.mdx b/website/docs/20-bindings/cpp.mdx
new file mode 100644
index 000000000..3f60287e2
--- /dev/null
+++ b/website/docs/20-bindings/cpp.mdx
@@ -0,0 +1,10 @@
+---
+title: Cpp
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/cpp/README.md';
+
+<GitHubReadme basePath="bindings/cpp/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/d.mdx b/website/docs/20-bindings/d.mdx
new file mode 100644
index 000000000..27a7fda36
--- /dev/null
+++ b/website/docs/20-bindings/d.mdx
@@ -0,0 +1,10 @@
+---
+title: D
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/d/README.md';
+
+<GitHubReadme basePath="bindings/d/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/dart.mdx 
b/website/docs/20-bindings/dart.mdx
new file mode 100644
index 000000000..21d745cfc
--- /dev/null
+++ b/website/docs/20-bindings/dart.mdx
@@ -0,0 +1,10 @@
+---
+title: Dart
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/dart/README.md';
+
+<GitHubReadme basePath="bindings/dart/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/dotnet.mdx 
b/website/docs/20-bindings/dotnet.mdx
new file mode 100644
index 000000000..c2054ce21
--- /dev/null
+++ b/website/docs/20-bindings/dotnet.mdx
@@ -0,0 +1,10 @@
+---
+title: Dotnet
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/dotnet/README.md';
+
+<GitHubReadme basePath="bindings/dotnet/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/go.mdx b/website/docs/20-bindings/go.mdx
new file mode 100644
index 000000000..7fcf59508
--- /dev/null
+++ b/website/docs/20-bindings/go.mdx
@@ -0,0 +1,10 @@
+---
+title: Go
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/go/README.md';
+
+<GitHubReadme basePath="bindings/go/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/haskell.mdx 
b/website/docs/20-bindings/haskell.mdx
new file mode 100644
index 000000000..d6aeee26b
--- /dev/null
+++ b/website/docs/20-bindings/haskell.mdx
@@ -0,0 +1,10 @@
+---
+title: Haskell
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/haskell/README.md';
+
+<GitHubReadme basePath="bindings/haskell/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/java.mdx 
b/website/docs/20-bindings/java.mdx
new file mode 100644
index 000000000..fd9415b93
--- /dev/null
+++ b/website/docs/20-bindings/java.mdx
@@ -0,0 +1,10 @@
+---
+title: Java
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/java/README.md';
+
+<GitHubReadme basePath="bindings/java/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/lua.mdx b/website/docs/20-bindings/lua.mdx
new file mode 100644
index 000000000..b8eb0e287
--- /dev/null
+++ b/website/docs/20-bindings/lua.mdx
@@ -0,0 +1,10 @@
+---
+title: Lua
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/lua/README.md';
+
+<GitHubReadme basePath="bindings/lua/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/nodejs.mdx 
b/website/docs/20-bindings/nodejs.mdx
new file mode 100644
index 000000000..c55128fb5
--- /dev/null
+++ b/website/docs/20-bindings/nodejs.mdx
@@ -0,0 +1,10 @@
+---
+title: Node.js
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/nodejs/README.md';
+
+<GitHubReadme basePath="bindings/nodejs/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/ocaml.mdx 
b/website/docs/20-bindings/ocaml.mdx
new file mode 100644
index 000000000..97263aafd
--- /dev/null
+++ b/website/docs/20-bindings/ocaml.mdx
@@ -0,0 +1,10 @@
+---
+title: Ocaml
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/ocaml/README.md';
+
+<GitHubReadme basePath="bindings/ocaml/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/php.mdx b/website/docs/20-bindings/php.mdx
new file mode 100644
index 000000000..f4f46e904
--- /dev/null
+++ b/website/docs/20-bindings/php.mdx
@@ -0,0 +1,10 @@
+---
+title: PHP
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/php/README.md';
+
+<GitHubReadme basePath="bindings/php/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/python.mdx 
b/website/docs/20-bindings/python.mdx
new file mode 100644
index 000000000..a81da0e9d
--- /dev/null
+++ b/website/docs/20-bindings/python.mdx
@@ -0,0 +1,10 @@
+---
+title: Python
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/python/README.md';
+
+<GitHubReadme basePath="bindings/python/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/ruby.mdx 
b/website/docs/20-bindings/ruby.mdx
new file mode 100644
index 000000000..64ccc80c0
--- /dev/null
+++ b/website/docs/20-bindings/ruby.mdx
@@ -0,0 +1,10 @@
+---
+title: Ruby
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/ruby/README.md';
+
+<GitHubReadme basePath="bindings/ruby/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/swift.mdx 
b/website/docs/20-bindings/swift.mdx
new file mode 100644
index 000000000..d18b52005
--- /dev/null
+++ b/website/docs/20-bindings/swift.mdx
@@ -0,0 +1,10 @@
+---
+title: Swift
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/swift/README.md';
+
+<GitHubReadme basePath="bindings/swift/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/20-bindings/zig.mdx b/website/docs/20-bindings/zig.mdx
new file mode 100644
index 000000000..e26a7fbb6
--- /dev/null
+++ b/website/docs/20-bindings/zig.mdx
@@ -0,0 +1,10 @@
+---
+title: Zig
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bindings/zig/README.md';
+
+<GitHubReadme basePath="bindings/zig/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/_category_.yml 
b/website/docs/30-integrations/_category_.yml
new file mode 100644
index 000000000..43020a279
--- /dev/null
+++ b/website/docs/30-integrations/_category_.yml
@@ -0,0 +1,23 @@
+# 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.
+
+label: "Integrations"
+collapsible: true
+collapsed: false
+link:
+  type: generated-index
+  title: Integrations Overview
diff --git a/website/docs/30-integrations/cloud_filter.mdx 
b/website/docs/30-integrations/cloud_filter.mdx
new file mode 100644
index 000000000..549ad41ee
--- /dev/null
+++ b/website/docs/30-integrations/cloud_filter.mdx
@@ -0,0 +1,10 @@
+---
+title: Cloud Filter
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/cloud_filter/README.md';
+
+<GitHubReadme basePath="integrations/cloud_filter/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/dav_server.mdx 
b/website/docs/30-integrations/dav_server.mdx
new file mode 100644
index 000000000..d3f17ee0b
--- /dev/null
+++ b/website/docs/30-integrations/dav_server.mdx
@@ -0,0 +1,10 @@
+---
+title: Dav Server
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/dav-server/README.md';
+
+<GitHubReadme basePath="integrations/dav-server/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/fuse3.mdx 
b/website/docs/30-integrations/fuse3.mdx
new file mode 100644
index 000000000..e07e2a19c
--- /dev/null
+++ b/website/docs/30-integrations/fuse3.mdx
@@ -0,0 +1,10 @@
+---
+title: Fuse3
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/fuse3/README.md';
+
+<GitHubReadme basePath="integrations/fuse3/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/object_store.mdx 
b/website/docs/30-integrations/object_store.mdx
new file mode 100644
index 000000000..aab800dea
--- /dev/null
+++ b/website/docs/30-integrations/object_store.mdx
@@ -0,0 +1,10 @@
+---
+title: Object Store
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/object_store/README.md';
+
+<GitHubReadme basePath="integrations/object_store/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/parquet.mdx 
b/website/docs/30-integrations/parquet.mdx
new file mode 100644
index 000000000..734d165cc
--- /dev/null
+++ b/website/docs/30-integrations/parquet.mdx
@@ -0,0 +1,10 @@
+---
+title: Parquet
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/parquet/README.md';
+
+<GitHubReadme basePath="integrations/parquet/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/spring.mdx 
b/website/docs/30-integrations/spring.mdx
new file mode 100644
index 000000000..f86314206
--- /dev/null
+++ b/website/docs/30-integrations/spring.mdx
@@ -0,0 +1,10 @@
+---
+title: Spring
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/spring/README.md';
+
+<GitHubReadme basePath="integrations/spring/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/unftp_sbe.mdx 
b/website/docs/30-integrations/unftp_sbe.mdx
new file mode 100644
index 000000000..acc0d3e94
--- /dev/null
+++ b/website/docs/30-integrations/unftp_sbe.mdx
@@ -0,0 +1,10 @@
+---
+title: Unftp Sbe
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/unftp-sbe/README.md';
+
+<GitHubReadme basePath="integrations/unftp-sbe/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/30-integrations/virtiofs.mdx 
b/website/docs/30-integrations/virtiofs.mdx
new file mode 100644
index 000000000..e7ecd117b
--- /dev/null
+++ b/website/docs/30-integrations/virtiofs.mdx
@@ -0,0 +1,10 @@
+---
+title: Virtiofs
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../integrations/virtiofs/README.md';
+
+<GitHubReadme basePath="integrations/virtiofs/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/40-apps/_category_.yml 
b/website/docs/40-apps/_category_.yml
new file mode 100644
index 000000000..53551e617
--- /dev/null
+++ b/website/docs/40-apps/_category_.yml
@@ -0,0 +1,23 @@
+# 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.
+
+label: "Applications"
+collapsible: true
+collapsed: false
+link:
+  type: generated-index
+  title: Applications Overview
diff --git a/website/docs/40-apps/oay.mdx b/website/docs/40-apps/oay.mdx
new file mode 100644
index 000000000..109b06ae9
--- /dev/null
+++ b/website/docs/40-apps/oay.mdx
@@ -0,0 +1,10 @@
+---
+title: Oay
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bin/oay/README.md';
+
+<GitHubReadme basePath="bin/oay/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/40-apps/ofs.mdx b/website/docs/40-apps/ofs.mdx
new file mode 100644
index 000000000..99e92fa83
--- /dev/null
+++ b/website/docs/40-apps/ofs.mdx
@@ -0,0 +1,10 @@
+---
+title: Ofs
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bin/ofs/README.md';
+
+<GitHubReadme basePath="bin/ofs/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/40-apps/oli.mdx b/website/docs/40-apps/oli.mdx
new file mode 100644
index 000000000..b3fe3fb69
--- /dev/null
+++ b/website/docs/40-apps/oli.mdx
@@ -0,0 +1,10 @@
+---
+title: Oli
+---
+
+import GitHubReadme from '@site/components/GitHubReadme';
+import Content from '../../../bin/oli/README.md';
+
+<GitHubReadme basePath="bin/oli/">
+  <Content components={{ h1: 'h2' }} />
+</GitHubReadme>
diff --git a/website/docs/binding-java.md b/website/docs/binding-java.md
deleted file mode 100644
index b97b5117c..000000000
--- a/website/docs/binding-java.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Java API
-sidebar_position: 5
----
-
-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/latest/index.html.
diff --git a/website/docs/binding-nodejs.md b/website/docs/binding-nodejs.md
deleted file mode 100644
index 003ccd4d6..000000000
--- a/website/docs/binding-nodejs.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Node.js API
-sidebar_position: 7
----
-
-Read the nightly version of Node.js API docs at 
[here](pathname:///docs/nodejs/).
-
-Read the README of the 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
deleted file mode 100644
index f664265f2..000000000
--- a/website/docs/binding-python.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Python API
-sidebar_position: 6
----
-
-Read the nightly version of Python API docs at 
[here](pathname:///docs/python/).
-
-Read the README of the latest stable version instead at 
https://pypi.org/project/opendal/.
diff --git a/website/docs/dav-server.md b/website/docs/dav-server.md
deleted file mode 100644
index ad9a0ea31..000000000
--- a/website/docs/dav-server.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: WebDAV Integration
-sidebar_position: 9
----
-
-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/object-store.md b/website/docs/object-store.md
deleted file mode 100644
index 11caac25f..000000000
--- a/website/docs/object-store.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: object_store Integration
-sidebar_position: 8
----
-
-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/overview.md b/website/docs/overview.md
deleted file mode 100644
index d83c6b99f..000000000
--- a/website/docs/overview.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-sidebar_label: Overview
-sidebar_position: 1
-slug: /
----
-
-# Welcome to Apache OpenDALâ„¢
-
-OpenDAL represents **Open** **D**ata **A**ccess **L**ayer. Our vision is 
[**One Layer, All Storage.**](./vision.md)
-
-## What does OpenDAL do?
-
-![](https://opendal.apache.org/img/architectural.png)
-
-## Getting started
-
-See the page for quick start with multiple languages: 
[Quickstart](quickstart.md).
diff --git a/website/docs/quickstart.md b/website/docs/quickstart.md
deleted file mode 100644
index 7a0193787..000000000
--- a/website/docs/quickstart.md
+++ /dev/null
@@ -1,203 +0,0 @@
----
-title: Quickstart
-sidebar_position: 3
----
-
-Apache OpenDALâ„¢ can be easily integrated into different software with its Rust 
core and multilingual bindings.
-
-## Rust core
-
-OpenDAL's core is implemented in Rust programming language. The most 
convenient way to use OpenDAL in your Rust program add the OpenDAL Cargo crate 
as a dependency.
-
-### Install
-
-Run the following Cargo command in your project directory:
-
-```shell
-cargo add opendal
-```
-
-Or add the following line to your Cargo.toml:
-
-```shell
-opendal = "0.46.0"
-```
-
-### Demo
-
-Try it out:
-
-```rust
-use opendal::Result;
-use opendal::layers::LoggingLayer;
-use opendal::services;
-use opendal::Operator;
-
-#[tokio::main]
-async fn main() -> Result<()> {
-    // Pick a builder and configure it.
-    let mut builder = services::S3::default();
-    builder.bucket("test");
-
-    // Init an operator
-    let op = Operator::new(builder)?
-        // Init with logging layer enabled.
-        .layer(LoggingLayer::default())
-        .finish();
-
-    // Write data
-    op.write("hello.txt", "Hello, World!").await?;
-
-    // Read data
-    let bs = op.read("hello.txt").await?;
-
-    // Fetch metadata
-    let meta = op.stat("hello.txt").await?;
-    let mode = meta.mode();
-    let length = meta.content_length();
-
-    // Delete
-    op.delete("hello.txt").await?;
-
-    Ok(())
-}
-```
-
-## Java binding
-
-OpenDAL's Java binding is released to Maven central as 
[`org.apache.opendal:opendal-java:${version}`](https://central.sonatype.com/artifact/org.apache.opendal/opendal-java).
-
-### Install
-
-#### Maven
-
-Generally, you can first add the `os-maven-plugin` for automatically detect 
the classifier based on your platform:
-
-```xml
-<build>
-<extensions>
-  <extension>
-    <groupId>kr.motd.maven</groupId>
-    <artifactId>os-maven-plugin</artifactId>
-    <version>1.7.0</version>
-  </extension>
-</extensions>
-</build>
-```
-
-Then add the dependency to opendal-java as following:
-
-```xml
-<dependencies>
-<dependency>
-  <groupId>org.apache.opendal</groupId>
-  <artifactId>opendal-java</artifactId>
-  <version>${opendal.version}</version>
-</dependency>
-<dependency>
-  <groupId>org.apache.opendal</groupId>
-  <artifactId>opendal-java</artifactId>
-  <version>${opendal.version}</version>
-  <classifier>${os.detected.classifier}</classifier>
-</dependency>
-</dependencies>
-```
-
-#### Gradle
-
-For Gradle, you can first add the `com.google.osdetector` for automatically 
detect the classifier based on your platform:
-
-```groovy
-plugins {
-    id "com.google.osdetector" version "1.7.3"
-}
-```
-
-Then add the dependency to opendal-java as following:
-
-```groovy
-dependencies {
-    implementation "org.apache.opendal:opendal-java:$opendal.version"
-    implementation 
"org.apache.opendal:opendal-java:$opendal.version:$osdetector.classifier"
-}
-```
-
-#### Classified library
-
-For details on specifying a classified library,
-read the [dedicated 
explanation](https://github.com/apache/opendal/tree/main/bindings/java).
-
-### Demo
-
-Try it out:
-
-```java
-// Configure service
-final Map<String, String> conf = new HashMap<>();
-conf.put("root", "/tmp");
-// Construct operator
-final Operator op = Operator.of("fs", conf);
-// Write data
-op.write("hello.txt", "Hello, World!").join();
-// Read data
-final byte[] bs = op.read("hello.txt").join();
-// Delete
-op.delete("hello.txt").join();
-```
-
-## Python binding
-
-OpenDAL's Python binding is released to PyPI repository as 
[`opendal`](https://pypi.org/project/opendal/).
-
-### Install
-
-Run the following command to install `opendal`:
-
-```shell
-pip install opendal
-```
-
-### Demo
-
-Try it out:
-
-```python
-import opendal
-import asyncio
-
-async def main():
-    op = opendal.AsyncOperator("fs", root="/tmp")
-    await op.write("test.txt", b"Hello World")
-    print(await op.read("test.txt"))
-
-asyncio.run(main())
-```
-
-## Node.js binding
-
-OpenDAL's Node.js binding is released to NPM registry as 
[`opendal`](https://www.npmjs.com/package/opendal).
-
-### Install
-
-Run the following command to install `opendal`:
-
-```shell
-npm install opendal
-```
-
-### Demo
-
-Try it out:
-
-```javascript
-import { Operator } from "opendal";
-
-async function main() {
-  const op = new Operator("fs", { root: "/tmp" });
-  await op.write("test", "Hello, World!");
-  const bs = await op.read("test");
-  console.log(new TextDecoder().decode(bs));
-  const meta = await op.stat("test");
-  console.log(`contentLength: ${meta.contentLength}`);
-}
-```
diff --git a/website/docs/rust-core.md b/website/docs/rust-core.md
deleted file mode 100644
index 8a7719fd7..000000000
--- a/website/docs/rust-core.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Rust Core
-sidebar_position: 4
----
-
-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  |

Reply via email to