You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2026/05/21 10:10:58 UTC
(opendal) 01/01: docs: reshape README around action cards
This is an automated email from the ASF dual-hosted git repository.
Xuanwo pushed a commit to branch docs/readme-action-cards-pr
in repository https://gitbox.apache.org/repos/asf/opendal.git
commit a90c84da0fe898b1d039f9a1b38576167155c058
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Thu May 21 18:10:31 2026 +0800
docs: reshape README around action cards
---
README.md | 267 ++++++++++++--------------
website/static/img/bindings/c.svg | 1 +
website/static/img/bindings/cpp.svg | 1 +
website/static/img/bindings/d.svg | 1 +
website/static/img/bindings/dart.svg | 1 +
website/static/img/bindings/dotnet.svg | 1 +
website/static/img/bindings/go.svg | 1 +
website/static/img/bindings/haskell.svg | 1 +
website/static/img/bindings/java.svg | 1 +
website/static/img/bindings/lua.svg | 1 +
website/static/img/bindings/nodejs.svg | 1 +
website/static/img/bindings/ocaml.svg | 1 +
website/static/img/bindings/php.svg | 1 +
website/static/img/bindings/python.svg | 1 +
website/static/img/bindings/ruby.svg | 1 +
website/static/img/bindings/rust.svg | 1 +
website/static/img/bindings/swift.svg | 1 +
website/static/img/bindings/zig.svg | 1 +
website/static/img/layers/cache.svg | 1 +
website/static/img/layers/content-type.svg | 1 +
website/static/img/layers/layers.svg | 1 +
website/static/img/layers/logging.svg | 1 +
website/static/img/layers/metrics.svg | 1 +
website/static/img/layers/otel.svg | 1 +
website/static/img/layers/prometheus.svg | 1 +
website/static/img/layers/retry.svg | 1 +
website/static/img/layers/route.svg | 1 +
website/static/img/layers/timeout.svg | 1 +
website/static/img/layers/tracing.svg | 1 +
website/static/img/layers/traffic-control.svg | 1 +
website/static/img/services/aliyun-drive.svg | 1 +
website/static/img/services/alluxio.svg | 1 +
website/static/img/services/azure.svg | 1 +
website/static/img/services/b2.svg | 1 +
website/static/img/services/cloudflare-kv.svg | 1 +
website/static/img/services/cos.svg | 49 +++++
website/static/img/services/d1.svg | 1 +
website/static/img/services/dbfs.svg | 1 +
website/static/img/services/dropbox.svg | 1 +
website/static/img/services/etcd.svg | 1 +
website/static/img/services/foundationdb.svg | 1 +
website/static/img/services/foyer.svg | 1 +
website/static/img/services/fs.svg | 1 +
website/static/img/services/ftp.svg | 1 +
website/static/img/services/gcs.svg | 38 ++++
website/static/img/services/gdrive.svg | 1 +
website/static/img/services/ghac.svg | 1 +
website/static/img/services/github.svg | 1 +
website/static/img/services/goosefs.svg | 1 +
website/static/img/services/hdfs.svg | 1 +
website/static/img/services/http.svg | 1 +
website/static/img/services/huggingface.svg | 1 +
website/static/img/services/ipfs.svg | 1 +
website/static/img/services/koofr.svg | 1 +
website/static/img/services/lakefs.svg | 1 +
website/static/img/services/memcached.svg | 1 +
website/static/img/services/moka.svg | 1 +
website/static/img/services/mongodb.svg | 1 +
website/static/img/services/mysql.svg | 1 +
website/static/img/services/obs.png | Bin 0 -> 3500 bytes
website/static/img/services/onedrive.svg | 1 +
website/static/img/services/opfs.svg | 1 +
website/static/img/services/oss.svg | 1 +
website/static/img/services/pcloud.svg | 1 +
website/static/img/services/postgresql.svg | 1 +
website/static/img/services/redb.svg | 1 +
website/static/img/services/redis.svg | 1 +
website/static/img/services/rocksdb.svg | 1 +
website/static/img/services/s3.svg | 38 ++++
website/static/img/services/seafile.svg | 1 +
website/static/img/services/sftp.svg | 1 +
website/static/img/services/sled.svg | 1 +
website/static/img/services/sqlite.svg | 1 +
website/static/img/services/surrealdb.svg | 1 +
website/static/img/services/swift.svg | 1 +
website/static/img/services/tikv.svg | 1 +
website/static/img/services/tos.svg | 4 +
website/static/img/services/upyun.svg | 1 +
website/static/img/services/vercel.svg | 1 +
website/static/img/services/webdav.svg | 1 +
website/static/img/services/yandex-disk.svg | 1 +
81 files changed, 328 insertions(+), 143 deletions(-)
diff --git a/README.md b/README.md
index b8f64b91e..45f0bef44 100644
--- a/README.md
+++ b/README.md
@@ -1,154 +1,162 @@
# Apache OpenDAL™: *One Layer, All Storage.*
-[](https://github.com/apache/opendal/discussions)
-[](https://opendal.apache.org/discord)
-[](https://deepwiki.com/apache/opendal)
+[](https://github.com/apache/opendal/discussions)
+[](https://opendal.apache.org/discord)
+[](https://deepwiki.com/apache/opendal)
-OpenDAL (`/ˈoʊ.pən.dæl/`, pronounced "OH-puhn-dal") is an Open Data Access Layer that enables seamless interaction with diverse storage services.
+Apache OpenDAL™ (`/ˈoʊ.pən.dæl/`, pronounced "OH-puhn-dal") is an Open Data Access Layer that gives every language a unified way to access object storage, file storage, cloud SaaS, databases, protocols, and key-value services.
-OpenDAL's development is guided by its vision of **One Layer, All Storage** and its core principles: **Open Community**, **Solid Foundation**, **Fast Access**, **Object Storage First**, and **Extensible Architecture**. Read the explained vision at [OpenDAL Vision](https://opendal.apache.org/vision).
+Apache OpenDAL™ is guided by its vision of **One Layer, All Storage** and its core principles: **Open Community**, **Solid Foundation**, **Fast Access**, **Object Storage First**, and **Extensible Architecture**. Read the explained vision at [OpenDAL Vision](https://opendal.apache.org/vision).
<img src="./website/static/img/architectural.png" alt="OpenDAL Architecture" width="100%" />
-## For *ANY* languages
+## At a Glance
+
+- Project: Apache OpenDAL™
+- Vision: **One Layer, All Storage**
+- Core package: Rust crate [`opendal`][Rust Core Link]
+- Main abstraction: `Operator`
+- Extension points: language bindings, layers, and services
+- Common layers: retry, timeout, logging, tracing, metrics, throttling, and concurrency control
+- Access targets: object storage, file systems, cloud SaaS, databases, protocols, and key-value services
+
+## Why OpenDAL
+
+Apache OpenDAL™ turns the vision of **One Layer, All Storage** into a practical data access layer for applications, libraries, and data systems.
+
+- **Zero-cost core**: built in Rust with composable services and layers, so applications only enable the backends and capabilities they use.
+- **Production-ready access**: add retry, timeout, logging, tracing, metrics, throttling, and concurrency limits through reusable layers.
+- **One API, all storage**: access object storage, file systems, cloud SaaS, databases, protocols, and key-value services through the same interface.
+- **Open and extensible**: add new services, layers, and language bindings while keeping the same unified access model.
+
+## Choose Your Language
+
+Start with the binding for your application runtime. Each binding provides access to the same OpenDAL service model while following its language ecosystem.
> **Note**: Each binding has its own independent version number, which may differ from the Rust core version. When checking for updates or compatibility, always refer to the specific binding's version rather than the core version.
-| Name | Release | Docs | Used By |
-| ----------------- | ------------------------------------------------ | --------------------------------------------------------------------------------- | ----------------------------------- |
-| [Rust Core] | [![Rust Core Image]][Rust Core Link] | [![Docs Release]][Rust Core Release Docs] [![Docs Dev]][Rust Core Dev Docs] | [![Rust Core Users Image]][Rust Core Users] |
-| [C Binding] | - | [![Docs Dev]][C Binding Dev Docs] | [![C Binding Users Image]][C Binding Users] |
-| [Cpp Binding] | - | [![Docs Dev]][Cpp Binding Dev Docs] | - |
-| [D Binding] | - | - | - |
-| [Dart Binding] | - | - | - |
-| [Dotnet Binding] | - | - | - |
-| [Go Binding] | [![Go Binding Image]][Go Binding Link] | [![Docs Release]][Go Release Docs] | - |
-| [Haskell Binding] | - | - | - |
-| [Java Binding] | [![Java Binding Image]][Java Binding Link] | [![Docs Release]][Java Binding Release Docs] [![Docs Dev]][Java Binding Dev Docs] | [![Java Binding Users Image]][Java Binding Users] |
-| [Lua Binding] | - | - | - |
-| [Node.js Binding] | [![Node.js Binding Image]][Node.js Binding Link] | [![Docs Dev]][Node.js Binding Dev Docs] | - |
-| [OCaml Binding] | - | - | - |
-| [PHP Binding] | - | - | - |
-| [Python Binding] | [![Python Binding Image]][Python Binding Link] | [![Docs Dev]][Python Binding Dev Docs] | [![Python Binding Users Image]][Python Binding Users] |
-| [Ruby Binding] | - | - | - |
-| [Swift Binding] | - | - | - |
-| [Zig Binding] | - | - | - |
-
-[Docs Release]: https://img.shields.io/badge/docs-release-blue
-[Docs Dev]: https://img.shields.io/badge/docs-dev-blue
+| | | | |
+| :---: | :---: | :---: | :---: |
+| <img src="./website/static/img/bindings/rust.svg" width="42" height="42" alt="Rust logo"><br>**[Rust Core]**<br>[Package][Rust Core Link] · [Docs][Rust Core Release Docs] · [Dev Docs][Rust Core Dev Docs] | <img src="./website/static/img/bindings/c.svg" width="42" height="42" alt="C logo"><br>**[C Binding]**<br>[Dev Docs][C Binding Dev Docs] | <img src="./website/static/img/bindings/cpp.svg" width="42" height="42" alt="C++ logo"><br>**[Cpp Binding]**<br>[Dev Docs][Cpp Binding Dev Docs] [...]
+| <img src="./website/static/img/bindings/dart.svg" width="42" height="42" alt="Dart logo"><br>**[Dart Binding]** | <img src="./website/static/img/bindings/dotnet.svg" width="42" height="42" alt=".NET logo"><br>**[Dotnet Binding]** | <img src="./website/static/img/bindings/go.svg" width="42" height="42" alt="Go logo"><br>**[Go Binding]**<br>[Package][Go Binding Link] · [Docs][Go Release Docs] | <img src="./website/static/img/bindings/haskell.svg" width="42" height="42" alt="Haskell logo" [...]
+| <img src="./website/static/img/bindings/java.svg" width="42" height="42" alt="Java logo"><br>**[Java Binding]**<br>[Package][Java Binding Link] · [Docs][Java Binding Release Docs] · [Dev Docs][Java Binding Dev Docs] | <img src="./website/static/img/bindings/lua.svg" width="42" height="42" alt="Lua logo"><br>**[Lua Binding]** | <img src="./website/static/img/bindings/nodejs.svg" width="42" height="42" alt="Node.js logo"><br>**[Node.js Binding]**<br>[Package][Node.js Binding Link] · [Dev [...]
+| <img src="./website/static/img/bindings/php.svg" width="42" height="42" alt="PHP logo"><br>**[PHP Binding]** | <img src="./website/static/img/bindings/python.svg" width="42" height="42" alt="Python logo"><br>**[Python Binding]**<br>[Package][Python Binding Link] · [Dev Docs][Python Binding Dev Docs] | <img src="./website/static/img/bindings/ruby.svg" width="42" height="42" alt="Ruby logo"><br>**[Ruby Binding]** | <img src="./website/static/img/bindings/swift.svg" width="42" height="42" [...]
+| <img src="./website/static/img/bindings/zig.svg" width="42" height="42" alt="Zig logo"><br>**[Zig Binding]** | | | |
+
+## Choose Your Layers
+
+Add layers when your application needs cross-service behavior such as retries, timeouts, observability, or traffic control.
+
+| | | | |
+| :---: | :---: | :---: | :---: |
+| <img src="./website/static/img/layers/retry.svg" width="42" height="42" alt="Retry icon"><br>**[RetryLayer]**<br>Retry temporary failures. | <img src="./website/static/img/layers/timeout.svg" width="42" height="42" alt="Timeout icon"><br>**[TimeoutLayer]**<br>Bound slow or hanging operations. | <img src="./website/static/img/layers/logging.svg" width="42" height="42" alt="Logging icon"><br>**[LoggingLayer]**<br>Emit structured operation logs. | <img src="./website/static/img/layers/tra [...]
+| <img src="./website/static/img/layers/metrics.svg" width="42" height="42" alt="Metrics icon"><br>**[MetricsLayer]**<br>Export operation metrics. | <img src="./website/static/img/layers/prometheus.svg" width="42" height="42" alt="Prometheus icon"><br>**[PrometheusLayer]**<br>Expose Prometheus metrics. | <img src="./website/static/img/layers/otel.svg" width="42" height="42" alt="OpenTelemetry icon"><br>**[OtelMetricsLayer]**<br>Export OpenTelemetry metrics. | <img src="./website/static/i [...]
+| <img src="./website/static/img/layers/content-type.svg" width="42" height="42" alt="Content type icon"><br>**[MimeGuessLayer]**<br>Infer `Content-Type` from paths. | <img src="./website/static/img/layers/route.svg" width="42" height="42" alt="Route icon"><br>**[RouteLayer]**<br>Route operations by path. | <img src="./website/static/img/layers/cache.svg" width="42" height="42" alt="Cache icon"><br>**[FoyerLayer]**<br>Add hybrid cache behavior. | <img src="./website/static/img/layers/lay [...]
+
+Explore all available layers in the [layers documentation][Layers Docs].
+
+## Choose Your Services
+
+Pick the storage services that your application needs. See the full OpenDAL service configuration docs in the [services documentation][Services Docs].
+
+| | | |
+| :---: | :---: | :---: |
+| <img src="./website/static/img/services/s3.svg" width="44" height="28" alt="AWS logo"> <img src="./website/static/img/services/gcs.svg" width="30" height="30" alt="Google Cloud Storage logo"> <img src="./website/static/img/services/azure.svg" width="30" height="30" alt="Azure Storage logo"> <img src="./website/static/img/services/oss.svg" width="52" height="24" alt="Alibaba Cloud logo"> <img src="./website/static/img/services/obs.png" width="64" height="24" alt="Huawei Cloud logo"> <im [...]
+| <img src="./website/static/img/services/http.svg" width="30" height="30" alt="HTTP icon"> <img src="./website/static/img/services/ftp.svg" width="30" height="30" alt="FTP icon"> <img src="./website/static/img/services/webdav.svg" width="30" height="30" alt="WebDAV icon"> <img src="./website/static/img/services/sftp.svg" width="30" height="30" alt="SFTP icon"><br>**Standard Protocols**<br>[http] · [ftp] · [webdav] · [sftp] | <img src="./website/static/img/services/sqlite.svg" width="30" [...]
+
+## Examples
+
+See [examples](./examples/) for runnable usage examples.
+
+## Documentation
+
+- Website: <https://opendal.apache.org>
+- Vision: <https://opendal.apache.org/vision>
+- Rust release docs: <https://docs.rs/opendal>
+- Rust dev docs: <https://opendal.apache.org/docs/rust/opendal/>
+
+## Contribute
+
+OpenDAL is an active open-source project. We are always open to people who want to use it or contribute to it. Here are some ways to go.
+
+- Start with [Contributing Guide](CONTRIBUTING.md).
+- Submit [Issues](https://github.com/apache/opendal/issues/new) for bug report or feature requests.
+- Start [Discussions](https://github.com/apache/opendal/discussions/new?category=q-a) for questions or ideas.
+- Talk to community directly at [Discord](https://opendal.apache.org/discord).
+- Report security vulnerabilities to [private mailing list](mailto:private@opendal.apache.org)
+
+## Branding
+
+The first and most prominent mentions must use the full form: **Apache OpenDAL™** of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.
+
+For more details, see the [Apache Product Name Usage Guide](https://www.apache.org/foundation/marks/guide).
+
+## License and Trademarks
+
+Licensed under the Apache License, Version 2.0: <http://www.apache.org/licenses/LICENSE-2.0>
+
+Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.
+
+<!-- Link references -->
+
+<!-- Binding references -->
+
[Rust Core]: core/README.md
-[Rust Core Image]: https://img.shields.io/crates/v/opendal.svg
[Rust Core Link]: https://crates.io/crates/opendal
[Rust Core Release Docs]: https://docs.rs/opendal
[Rust Core Dev Docs]: https://opendal.apache.org/docs/rust/opendal/
-[Rust Core Users Image]: https://github.com/user-attachments/assets/2726c336-8509-491d-92d8-1be2040d5136
-[Rust Core Users]: core/users.md
-
[C Binding]: bindings/c/README.md
[C Binding Dev Docs]: https://opendal.apache.org/docs/c/
-[C Binding Users Image]: https://github.com/user-attachments/assets/b1cf4d79-8478-4eac-ae04-0bbe0d6a993d
-[C Binding Users]: bindings/c/users.md
[Cpp Binding]: bindings/cpp/README.md
[Cpp Binding Dev Docs]: https://opendal.apache.org/docs/cpp/
[D Binding]: bindings/d/README.md
[Dart Binding]: bindings/dart/README.md
[Dotnet Binding]: bindings/dotnet/README.md
[Go Binding]: bindings/go/README.md
-[Go Binding Image]: https://badge.fury.io/go/github.com%2Fapache%2Fopendal%2Fbindings%2Fgo.svg
[Go Binding Link]: https://pkg.go.dev/github.com/apache/opendal/bindings/go
[Go Release Docs]: https://pkg.go.dev/github.com/apache/opendal/bindings/go
[Haskell Binding]: bindings/haskell/README.md
[Java Binding]: bindings/java/README.md
-[Java Binding Image]: https://img.shields.io/maven-central/v/org.apache.opendal/opendal-java
[Java Binding Link]: https://central.sonatype.com/artifact/org.apache.opendal/opendal-java
[Java Binding Release Docs]: https://javadoc.io/doc/org.apache.opendal/opendal-java
[Java Binding Dev Docs]: https://opendal.apache.org/docs/java/
-[Java Binding Users Image]: https://github.com/user-attachments/assets/f20a59a9-8f23-4919-a165-980ed4e6e0d0
-[Java Binding Users]: bindings/java/users.md
[Lua Binding]: bindings/lua/README.md
[Node.js Binding]: bindings/nodejs/README.md
-[Node.js Binding Image]: https://img.shields.io/npm/v/opendal
[Node.js Binding Link]: https://www.npmjs.com/package/opendal
[Node.js Binding Dev Docs]: https://opendal.apache.org/docs/nodejs/
[OCaml Binding]: bindings/ocaml/README.md
[PHP Binding]: bindings/php/README.md
[Python Binding]: bindings/python/README.md
-[Python Binding Image]: https://img.shields.io/pypi/v/opendal
[Python Binding Link]: https://pypi.org/project/opendal/
[Python Binding Dev Docs]: https://opendal.apache.org/docs/python/
-[Python Binding Users Image]: https://github.com/user-attachments/assets/6bba7e5b-cada-4cf2-81e3-09d4e4535dcb
-[Python Binding Users]: bindings/python/users.md
[Ruby Binding]: bindings/ruby/README.md
[Swift Binding]: bindings/swift/README.md
[Zig Binding]: bindings/zig/README.md
-## For *ANY* methods
-
-| Name | Description | Release |
-| ----- | ------------------------------------------------------------------ | ------------------------- |
-| [oli] | Access data via Command Line (alternative to s3cmd, s3cli, azcopy) | [![oli image]][oli crate] |
-| [ofs] | Access data via POSIX file system API (alternative to s3fs) | [![ofs image]][ofs crate] |
-
-[oli]: https://github.com/apache/opendal-oli
-[oli image]: https://img.shields.io/crates/v/oli.svg
-[oli crate]: https://crates.io/crates/oli
-[ofs]: https://github.com/apache/opendal-ofs
-[ofs image]: https://img.shields.io/crates/v/ofs.svg
-[ofs crate]: https://crates.io/crates/ofs
-
-## For *ANY* integrations
-
-| Name | Description | Release | Docs |
-| ---------------------- | ----------------------------------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------------------------------- |
-| [dav-server-opendalfs] | a [dav-server-rs] implementation using opendal. | [![dav-server image]][dav-server crate] | [![Docs Release]][dav-server release docs] [![Docs Dev]][dav-server dev docs] |
-| [object_store_opendal] | an [object_store] implementation using opendal. | [![object_store image]][object_store crate] | [![Docs Release]][object_store release docs] [![Docs Dev]][object_store dev docs] |
-| [unftp-sbe-opendal] | an [unftp] storage backend implementation using opendal. | [![unftp-sbe image]][unftp-sbe crate] | [![Docs Release]][unftp-sbe release docs] [![Docs Dev]][unftp-sbe dev docs] |
-| [parquet_opendal] | Provides [`parquet`](https://crates.io/crates/parquet) efficient IO utilities | [![parquet image]][parquet crate] | [![Docs Release]][parquet release docs] [![Docs Dev]][parquet dev docs] |
-
-[dav-server-opendalfs]: integrations/dav-server/README.md
-[dav-server-rs]: https://github.com/messense/dav-server-rs
-[dav-server image]: https://img.shields.io/crates/v/dav-server-opendalfs.svg
-[dav-server crate]: https://crates.io/crates/dav-server-opendalfs
-[dav-server release docs]: https://docs.rs/dav-server-opendalfs/
-[dav-server dev docs]: https://opendal.apache.org/docs/dav-server-opendalfs/dav_server_opendalfs/
-
-[object_store_opendal]: integrations/object_store/README.md
-[object_store]: https://docs.rs/object_store
-[object_store image]: https://img.shields.io/crates/v/object_store_opendal.svg
-[object_store crate]: https://crates.io/crates/object_store_opendal
-[object_store release docs]: https://docs.rs/object_store_opendal/
-[object_store dev docs]: https://opendal.apache.org/docs/object-store-opendal/object_store_opendal/
-
-
-[unftp-sbe-opendal]: integrations/unftp-sbe/README.md
-[unftp]: https://crates.io/crates/unftp
-[unftp-sbe image]: https://img.shields.io/crates/v/unftp-sbe-opendal.svg
-[unftp-sbe crate]: https://crates.io/crates/unftp-sbe-opendal
-[unftp-sbe release docs]: https://docs.rs/unftp-sbe-opendal/
-[unftp-sbe dev docs]: https://opendal.apache.org/docs/unftp-sbe-opendal/unftp_sbe_opendal/
-
-[parquet_opendal]: integrations/parquet/README.md
-[parquet image]: https://img.shields.io/crates/v/parquet-opendal.svg
-[parquet crate]: https://crates.io/crates/parquet-opendal
-[parquet release docs]: https://docs.rs/parquet-opendal/
-[parquet dev docs]: https://opendal.apache.org/docs/parquet-opendal/parquet_opendal/
-
-## For *ANY* services
-
-| Type | Services |
-| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
-| Standard Storage Protocols | ftp http [sftp] [webdav] |
-| Object Storage Services | [azblob] [cos] [gcs] [obs] [oss] [s3] <br> [b2] [openstack_swift] [upyun] [vercel-blob] |
-| File Storage Services | fs [alluxio] [azdls] [azfile] [compfs] <br> [dbfs] [gridfs] [hdfs] [hdfs-native] [ipfs] [webhdfs] |
-| Consumer Cloud Storage Service | [aliyun-drive] [gdrive] [onedrive] [dropbox] [koofr] <br> [pcloud] [seafile] [yandex-disk] |
-| Key-Value Storage Services | [cacache] [cloudflare-kv] [dashmap] memory [etcd] <br> [foundationdb] [persy] [redis] [rocksdb] [sled] <br> [redb] [tikv] |
-| Database Storage Services | [d1] [mongodb] [mysql] [postgresql] [sqlite] [surrealdb] |
-| Cache Storage Services | [ghac] [memcached] [mini-moka] [moka] [vercel-artifacts] |
-| Git Based Storage Services | [huggingface] |
-
+<!-- Layer references -->
+
+[Layers Docs]: https://opendal.apache.org/docs/rust/opendal/layers/
+[RetryLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.RetryLayer.html
+[TimeoutLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.TimeoutLayer.html
+[LoggingLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.LoggingLayer.html
+[TracingLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.TracingLayer.html
+[MetricsLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.MetricsLayer.html
+[PrometheusLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.PrometheusLayer.html
+[OtelMetricsLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.OtelMetricsLayer.html
+[ThrottleLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.ThrottleLayer.html
+[ConcurrentLimitLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.ConcurrentLimitLayer.html
+[MimeGuessLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.MimeGuessLayer.html
+[RouteLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.RouteLayer.html
+[FoyerLayer]: https://opendal.apache.org/docs/rust/opendal/layers/struct.FoyerLayer.html
+
+<!-- Service references -->
+
+[Services Docs]: https://opendal.apache.org/docs/rust/opendal/services/
+[fs]: https://opendal.apache.org/docs/rust/opendal/services/struct.Fs.html
+[http]: https://developer.mozilla.org/en-US/docs/Web/HTTP
+[ftp]: https://datatracker.ietf.org/doc/html/rfc959
[sftp]: https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-02
[webdav]: https://datatracker.ietf.org/doc/html/rfc4918
-
[azblob]: https://azure.microsoft.com/en-us/services/storage/blobs/
[cos]: https://www.tencentcloud.com/products/cos
[gcs]: https://cloud.google.com/storage
@@ -157,9 +165,10 @@ OpenDAL's development is guided by its vision of **One Layer, All Storage** and
[s3]: https://aws.amazon.com/s3/
[b2]: https://www.backblaze.com/
[openstack_swift]: https://docs.openstack.org/swift/latest/
+[swift]: https://docs.openstack.org/swift/latest/
+[tos]: https://www.volcengine.com/product/tos
[upyun]: https://www.upyun.com/
[vercel-blob]: https://vercel.com/docs/storage/vercel-blob
-
[alluxio]: https://docs.alluxio.io/os/user/stable/en/api/REST-API.html
[azdls]: https://azure.microsoft.com/en-us/products/storage/data-lake-storage/
[azfile]: https://learn.microsoft.com/en-us/rest/api/storageservices/file-service-rest-api
@@ -169,8 +178,12 @@ OpenDAL's development is guided by its vision of **One Layer, All Storage** and
[hdfs]: https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
[hdfs-native]: https://github.com/Kimahriman/hdfs-native
[ipfs]: https://ipfs.tech/
+[ipmfs]: https://docs.ipfs.tech/concepts/file-systems/
+[lakefs]: https://lakefs.io/
+[goosefs]: https://github.com/Tencent/GooseFS
+[opfs]: https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system
+[monoiofs]: https://github.com/bytedance/monoio
[webhdfs]: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
-
[aliyun-drive]: https://www.aliyundrive.com/
[gdrive]: https://www.google.com/drive/
[onedrive]: https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage
@@ -179,7 +192,7 @@ OpenDAL's development is guided by its vision of **One Layer, All Storage** and
[pcloud]: https://www.pcloud.com/
[seafile]: https://www.seafile.com/
[yandex-disk]: https://360.yandex.com/disk/
-
+[github]: https://github.com/
[cacache]: https://crates.io/crates/cacache
[cloudflare-kv]: https://developers.cloudflare.com/kv/
[dashmap]: https://github.com/xacrimon/dashmap
@@ -191,48 +204,16 @@ OpenDAL's development is guided by its vision of **One Layer, All Storage** and
[sled]: https://crates.io/crates/sled
[redb]: https://crates.io/crates/redb
[tikv]: https://tikv.org/
-
[d1]: https://developers.cloudflare.com/d1/
[mongodb]: https://www.mongodb.com/
[mysql]: https://www.mysql.com/
[postgresql]: https://www.postgresql.org/
[sqlite]: https://www.sqlite.org/
[surrealdb]: https://surrealdb.com/
-
[ghac]: https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows
[memcached]: https://memcached.org/
[mini-moka]: https://github.com/moka-rs/mini-moka
[moka]: https://github.com/moka-rs/moka
+[foyer]: https://github.com/foyer-rs/foyer
[vercel-artifacts]: https://vercel.com/docs/concepts/monorepos/remote-caching
-
[huggingface]: https://huggingface.co/
-
-## Examples
-
-The examples are available at [here](./examples/).
-
-## Documentation
-
-The documentation is available at <https://opendal.apache.org>.
-
-## Contribute
-
-OpenDAL is an active open-source project. We are always open to people who want to use it or contribute to it. Here are some ways to go.
-
-- Start with [Contributing Guide](CONTRIBUTING.md).
-- Submit [Issues](https://github.com/apache/opendal/issues/new) for bug report or feature requests.
-- Start [Discussions](https://github.com/apache/opendal/discussions/new?category=q-a) for questions or ideas.
-- Talk to community directly at [Discord](https://opendal.apache.org/discord).
-- Report security vulnerabilities to [private mailing list](mailto:private@opendal.apache.org)
-
-## Branding
-
-The first and most prominent mentions must use the full form: **Apache OpenDAL™** of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.
-
-For more details, see the [Apache Product Name Usage Guide](https://www.apache.org/foundation/marks/guide).
-
-## License and Trademarks
-
-Licensed under the Apache License, Version 2.0: <http://www.apache.org/licenses/LICENSE-2.0>
-
-Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.
diff --git a/website/static/img/bindings/c.svg b/website/static/img/bindings/c.svg
new file mode 100644
index 000000000..e70d71c66
--- /dev/null
+++ b/website/static/img/bindings/c.svg
@@ -0,0 +1 @@
+<svg fill="#A8B9CC" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>C</title><path d="M16.5921 9.1962s-.354-3.298-3.627-3.39c-3.2741-.09-4.9552 2.474-4.9552 6.14 0 3.6651 1.858 6.5972 5.0451 6.5972 3.184 0 3.5381-3.665 3.5381-3.665l6.1041.365s.36 3.31-2.196 5.836c-2.552 2.5241-5.6901 2.9371-7.8762 2.9201-2.19-.017-5.2261.034-8.1602-2.97-2.938-3.0101-3.436-5.9302-3.436-8.8002 0-2.8701.556-6.6702 4.047-9.5502C7.444.72 9.849 0 12.254 0c10.0422 0 10.7172 9.2602 10.71 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/cpp.svg b/website/static/img/bindings/cpp.svg
new file mode 100644
index 000000000..3d1b49e21
--- /dev/null
+++ b/website/static/img/bindings/cpp.svg
@@ -0,0 +1 @@
+<svg fill="#00599C" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>C++</title><path d="M22.394 6c-.167-.29-.398-.543-.652-.69L12.926.22c-.509-.294-1.34-.294-1.848 0L2.26 5.31c-.508.293-.923 1.013-.923 1.6v10.18c0 .294.104.62.271.91.167.29.398.543.652.69l8.816 5.09c.508.293 1.34.293 1.848 0l8.816-5.09c.254-.147.485-.4.652-.69.167-.29.27-.616.27-.91V6.91c.003-.294-.1-.62-.268-.91zM12 19.11c-3.92 0-7.109-3.19-7.109-7.11 0-3.92 3.19-7.11 7.11-7.11a7.133 7.133 0 016. [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/d.svg b/website/static/img/bindings/d.svg
new file mode 100644
index 000000000..9095fd148
--- /dev/null
+++ b/website/static/img/bindings/d.svg
@@ -0,0 +1 @@
+<svg fill="#B03931" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>D</title><path d="M22.635 3.883a1.364 1.25 0 0 0-1.363 1.25 1.364 1.25 0 0 0 1.363 1.25A1.364 1.25 0 0 0 24 5.133a1.364 1.25 0 0 0-1.365-1.25zm-16.004.418-6.027.008c-.026 0-.051-.003-.076 0-.296.036-.527.273-.528.558l.018 14.574c0 .22.06.676.682.676l5.58-.021c1.595-.003 2.664-.031 3.3-.112h.016a11.43 11.43 0 0 0 1.955-.469c1.22-.38 2.3-.944 3.23-1.697a7.854 7.854 0 0 0 2.114-2.562 6.716 6.716 0 0 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/dart.svg b/website/static/img/bindings/dart.svg
new file mode 100644
index 000000000..990da5554
--- /dev/null
+++ b/website/static/img/bindings/dart.svg
@@ -0,0 +1 @@
+<svg fill="#0175C2" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Dart</title><path d="M4.105 4.105S9.158 1.58 11.684.316a3.079 3.079 0 0 1 1.481-.315c.766.047 1.677.788 1.677.788L24 9.948v9.789h-4.263V24H9.789l-9-9C.303 14.5 0 13.795 0 13.105c0-.319.18-.818.316-1.105l3.789-7.895zm.679.679v11.787c.002.543.021 1.024.498 1.508L10.204 23h8.533v-4.263L4.784 4.784zm12.055-.678c-.899-.896-1.809-1.78-2.74-2.643-.302-.267-.567-.468-1.07-.462-.37.014-.87.195-.87.195L6.3 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/dotnet.svg b/website/static/img/bindings/dotnet.svg
new file mode 100644
index 000000000..c4b482ecc
--- /dev/null
+++ b/website/static/img/bindings/dotnet.svg
@@ -0,0 +1 @@
+<svg fill="#512BD4" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>.NET</title><path d="M24 8.77h-2.468v7.565h-1.425V8.77h-2.462V7.53H24zm-6.852 7.565h-4.821V7.53h4.63v1.24h-3.205v2.494h2.953v1.234h-2.953v2.604h3.396zm-6.708 0H8.882L4.78 9.863a2.896 2.896 0 0 1-.258-.51h-.036c.032.189.048.592.048 1.21v5.772H3.157V7.53h1.659l3.965 6.32c.167.261.275.442.323.54h.024c-.04-.233-.06-.629-.06-1.185V7.529h1.372zm-8.703-.693a.868.829 0 0 1-.869.829.868.829 0 0 1-.868-.83 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/go.svg b/website/static/img/bindings/go.svg
new file mode 100644
index 000000000..51990bd01
--- /dev/null
+++ b/website/static/img/bindings/go.svg
@@ -0,0 +1 @@
+<svg fill="#00ADD8" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Go</title><path d="M1.811 10.231c-.047 0-.058-.023-.035-.059l.246-.315c.023-.035.081-.058.128-.058h4.172c.046 0 .058.035.035.07l-.199.303c-.023.036-.082.07-.117.07zM.047 11.306c-.047 0-.059-.023-.035-.058l.245-.316c.023-.035.082-.058.129-.058h5.328c.047 0 .07.035.058.07l-.093.28c-.012.047-.058.07-.105.07zm2.828 1.075c-.047 0-.059-.035-.035-.07l.163-.292c.023-.035.07-.07.117-.07h2.337c.047 0 .07.0 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/haskell.svg b/website/static/img/bindings/haskell.svg
new file mode 100644
index 000000000..8bd8e24df
--- /dev/null
+++ b/website/static/img/bindings/haskell.svg
@@ -0,0 +1 @@
+<svg fill="#5D4F85" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Haskell</title><path d="M0 3.535L5.647 12 0 20.465h4.235L9.883 12 4.235 3.535zm5.647 0L11.294 12l-5.647 8.465h4.235l3.53-5.29 3.53 5.29h4.234L9.883 3.535zm8.941 4.938l1.883 2.822H24V8.473zm2.824 4.232l1.882 2.822H24v-2.822z"/></svg>
\ No newline at end of file
diff --git a/website/static/img/bindings/java.svg b/website/static/img/bindings/java.svg
new file mode 100644
index 000000000..d946516fb
--- /dev/null
+++ b/website/static/img/bindings/java.svg
@@ -0,0 +1 @@
+<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OpenJDK</title><path d="M11.915 0 11.7.215C9.515 2.4 7.47 6.39 6.046 10.483c-1.064 1.024-3.633 2.81-3.711 3.551-.093.87 1.746 2.611 1.55 3.235-.198.625-1.304 1.408-1.014 1.939.1.188.823.011 1.277-.491a13.389 13.389 0 0 0-.017 2.14c.076.906.27 1.668.643 2.232.372.563.956.911 1.667.911.397 0 .727-.114 1.024-.264.298-.149.571-.33.91-.5.68-.34 1.634-.666 3.53-.604 1.903.062 2.872.39 3.559.704.687.314 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/lua.svg b/website/static/img/bindings/lua.svg
new file mode 100644
index 000000000..5f4c65216
--- /dev/null
+++ b/website/static/img/bindings/lua.svg
@@ -0,0 +1 @@
+<svg fill="#000080" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Lua</title><path d="M.38 10.377l-.272-.037c-.048.344-.082.695-.101 1.041l.275.016c.018-.34.051-.682.098-1.02zM4.136 3.289l-.184-.205c-.258.232-.509.48-.746.734l.202.188c.231-.248.476-.49.728-.717zM5.769 2.059l-.146-.235c-.296.186-.586.385-.863.594l.166.219c.27-.203.554-.399.843-.578zM1.824 18.369c.185.297.384.586.593.863l.22-.164c-.205-.271-.399-.555-.58-.844l-.233.145zM1.127 16.402l-.255.104c.12 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/nodejs.svg b/website/static/img/bindings/nodejs.svg
new file mode 100644
index 000000000..3cc5893e0
--- /dev/null
+++ b/website/static/img/bindings/nodejs.svg
@@ -0,0 +1 @@
+<svg fill="#5FA04E" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Node.js</title><path d="M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383 c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076 c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0 L3.075,6.68C2.99,6.729,2.936,6.82 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/ocaml.svg b/website/static/img/bindings/ocaml.svg
new file mode 100644
index 000000000..41b2d39de
--- /dev/null
+++ b/website/static/img/bindings/ocaml.svg
@@ -0,0 +1 @@
+<svg fill="#EC6813" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OCaml</title><path d="M12.178 21.637c-.085-.17-.187-.524-.255-.676-.067-.135-.27-.506-.37-.625-.22-.253-.27-.27-.338-.608-.12-.574-.405-1.588-.76-2.296-.187-.372-.49-.677-.761-.947-.236-.236-.777-.624-.878-.607-.895.169-1.166 1.046-1.587 1.739-.237.388-.473.71-.66 1.115-.167.371-.151.793-.439 1.115a2.952 2.952 0 00-.624 1.097c-.034.084-.101.929-.186 1.131l1.318-.084c1.233.085.877.557 2.787.456l3. [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/php.svg b/website/static/img/bindings/php.svg
new file mode 100644
index 000000000..92bdc7de4
--- /dev/null
+++ b/website/static/img/bindings/php.svg
@@ -0,0 +1 @@
+<svg fill="#777BB4" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PHP</title><path d="M7.01 10.207h-.944l-.515 2.648h.838c.556 0 .97-.105 1.242-.314.272-.21.455-.559.55-1.049.092-.47.05-.802-.124-.995-.175-.193-.523-.29-1.047-.29zM12 5.688C5.373 5.688 0 8.514 0 12s5.373 6.313 12 6.313S24 15.486 24 12c0-3.486-5.373-6.312-12-6.312zm-3.26 7.451c-.261.25-.575.438-.917.551-.336.108-.765.164-1.285.164H5.357l-.327 1.681H3.652l1.23-6.326h2.65c.797 0 1.378.209 1.744.628 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/python.svg b/website/static/img/bindings/python.svg
new file mode 100644
index 000000000..e1b14ec64
--- /dev/null
+++ b/website/static/img/bindings/python.svg
@@ -0,0 +1 @@
+<svg fill="#3776AB" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Python</title><path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/ruby.svg b/website/static/img/bindings/ruby.svg
new file mode 100644
index 000000000..6acadc0ee
--- /dev/null
+++ b/website/static/img/bindings/ruby.svg
@@ -0,0 +1 @@
+<svg fill="#CC342D" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Ruby</title><path d="M20.156.083c3.033.525 3.893 2.598 3.829 4.77L24 4.822 22.635 22.71 4.89 23.926h.016C3.433 23.864.15 23.729 0 19.139l1.645-3 2.819 6.586.503 1.172 2.805-9.144-.03.007.016-.03 9.255 2.956-1.396-5.431-.99-3.9 8.82-.569-.615-.51L16.5 2.114 20.159.073l-.003.01zM0 19.089zM5.13 5.073c3.561-3.533 8.157-5.621 9.922-3.84 1.762 1.777-.105 6.105-3.673 9.636-3.563 3.532-8.103 5.734-9.864 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/rust.svg b/website/static/img/bindings/rust.svg
new file mode 100644
index 000000000..faa8c3a34
--- /dev/null
+++ b/website/static/img/bindings/rust.svg
@@ -0,0 +1 @@
+<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Rust</title><path d="M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.49-1.0761a.3437.3437 0 00-.0274-.3361.3486.3486 0 00-.3006-.154l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.417-.4172 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/swift.svg b/website/static/img/bindings/swift.svg
new file mode 100644
index 000000000..ce06dc55f
--- /dev/null
+++ b/website/static/img/bindings/swift.svg
@@ -0,0 +1 @@
+<svg fill="#F05138" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Swift</title><path d="M7.508 0c-.287 0-.573 0-.86.002-.241.002-.483.003-.724.01-.132.003-.263.009-.395.015A9.154 9.154 0 0 0 4.348.15 5.492 5.492 0 0 0 2.85.645 5.04 5.04 0 0 0 .645 2.848c-.245.48-.4.972-.495 1.5-.093.52-.122 1.05-.136 1.576a35.2 35.2 0 0 0-.012.724C0 6.935 0 7.221 0 7.508v8.984c0 .287 0 .575.002.862.002.24.005.481.012.722.014.526.043 1.057.136 1.576.095.528.25 1.02.495 1.5a5.03 [...]
\ No newline at end of file
diff --git a/website/static/img/bindings/zig.svg b/website/static/img/bindings/zig.svg
new file mode 100644
index 000000000..d8504941a
--- /dev/null
+++ b/website/static/img/bindings/zig.svg
@@ -0,0 +1 @@
+<svg fill="#F7A41D" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Zig</title><path d="m23.53 1.02-7.686 3.45h-7.06l-2.98 3.452h7.173L.47 22.98l7.681-3.607h7.065v-.002l2.978-3.45-7.148-.001 12.482-14.9zM0 4.47v14.901h1.883l2.98-3.45H3.451v-8h.942l2.824-3.45H0zm22.117 0-2.98 3.608h1.412v7.844h-.942l-2.98 3.45H24V4.47h-1.883z"/></svg>
\ No newline at end of file
diff --git a/website/static/img/layers/cache.svg b/website/static/img/layers/cache.svg
new file mode 100644
index 000000000..27da31733
--- /dev/null
+++ b/website/static/img/layers/cache.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="7" ry="3"/><path d="M5 5v6c0 1.7 3.1 3 7 3s7-1.3 7-3V5"/><path d="M5 11v6c0 1.7 3.1 3 7 3s7-1.3 7-3v-6"/></svg>
diff --git a/website/static/img/layers/content-type.svg b/website/static/img/layers/content-type.svg
new file mode 100644
index 000000000..3067a16c8
--- /dev/null
+++ b/website/static/img/layers/content-type.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h9l3 3v15H6z"/><path d="M15 3v4h4"/><path d="M9 13h6"/><path d="M11 17h2"/><path d="M10 10h4"/></svg>
diff --git a/website/static/img/layers/layers.svg b/website/static/img/layers/layers.svg
new file mode 100644
index 000000000..455ed2a00
--- /dev/null
+++ b/website/static/img/layers/layers.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3 9 5-9 5-9-5z"/><path d="m3 12 9 5 9-5"/><path d="m3 16 9 5 9-5"/></svg>
diff --git a/website/static/img/layers/logging.svg b/website/static/img/layers/logging.svg
new file mode 100644
index 000000000..359b2035a
--- /dev/null
+++ b/website/static/img/layers/logging.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h9l3 3v15H6z"/><path d="M15 3v4h4"/><path d="M9 11h6"/><path d="M9 15h6"/><path d="M9 19h4"/></svg>
diff --git a/website/static/img/layers/metrics.svg b/website/static/img/layers/metrics.svg
new file mode 100644
index 000000000..ad226d62b
--- /dev/null
+++ b/website/static/img/layers/metrics.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 20V10"/><path d="M10 20V4"/><path d="M16 20v-7"/><path d="M22 20H2"/></svg>
diff --git a/website/static/img/layers/otel.svg b/website/static/img/layers/otel.svg
new file mode 100644
index 000000000..4e7db4a9e
--- /dev/null
+++ b/website/static/img/layers/otel.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 2v4"/><path d="M12 18v4"/><path d="M2 12h4"/><path d="M18 12h4"/><path d="m4.9 4.9 2.8 2.8"/><path d="m16.3 16.3 2.8 2.8"/><path d="m19.1 4.9-2.8 2.8"/><path d="m7.7 16.3-2.8 2.8"/></svg>
diff --git a/website/static/img/layers/prometheus.svg b/website/static/img/layers/prometheus.svg
new file mode 100644
index 000000000..f56b4f267
--- /dev/null
+++ b/website/static/img/layers/prometheus.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3c2 3 2 5 0 8"/><path d="M8 5c-2 3-1 6 2 8"/><path d="M16 5c2 3 1 6-2 8"/><path d="M7 14a5 5 0 1 0 10 0"/><path d="M9 21h6"/></svg>
diff --git a/website/static/img/layers/retry.svg b/website/static/img/layers/retry.svg
new file mode 100644
index 000000000..f5135abec
--- /dev/null
+++ b/website/static/img/layers/retry.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 0 1-15.5 6.2"/><path d="M3 12a9 9 0 0 1 15.5-6.2"/><path d="M18 2v4h-4"/><path d="M6 22v-4h4"/></svg>
diff --git a/website/static/img/layers/route.svg b/website/static/img/layers/route.svg
new file mode 100644
index 000000000..08f57cc07
--- /dev/null
+++ b/website/static/img/layers/route.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2"/><circle cx="18" cy="6" r="2"/><circle cx="18" cy="18" r="2"/><path d="M8 6h6"/><path d="M18 8v6"/><path d="M6 8v4a6 6 0 0 0 6 6h4"/></svg>
diff --git a/website/static/img/layers/timeout.svg b/website/static/img/layers/timeout.svg
new file mode 100644
index 000000000..a8a929fa3
--- /dev/null
+++ b/website/static/img/layers/timeout.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/><path d="M5 3 2 6"/><path d="m19 3 3 3"/></svg>
diff --git a/website/static/img/layers/tracing.svg b/website/static/img/layers/tracing.svg
new file mode 100644
index 000000000..de92d4e81
--- /dev/null
+++ b/website/static/img/layers/tracing.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="5" cy="12" r="2"/><circle cx="12" cy="5" r="2"/><circle cx="19" cy="12" r="2"/><circle cx="12" cy="19" r="2"/><path d="M7 11 11 7"/><path d="m13 7 4 4"/><path d="m17 13-4 4"/><path d="m11 17-4-4"/></svg>
diff --git a/website/static/img/layers/traffic-control.svg b/website/static/img/layers/traffic-control.svg
new file mode 100644
index 000000000..496827f4d
--- /dev/null
+++ b/website/static/img/layers/traffic-control.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 14a8 8 0 0 1 16 0"/><path d="M12 14l4-4"/><path d="M5 20h14"/><path d="M8 20v-3"/><path d="M16 20v-3"/></svg>
diff --git a/website/static/img/services/aliyun-drive.svg b/website/static/img/services/aliyun-drive.svg
new file mode 100644
index 000000000..c1d8e4ffd
--- /dev/null
+++ b/website/static/img/services/aliyun-drive.svg
@@ -0,0 +1 @@
+<svg fill="#FF6A00" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Alibaba Cloud</title><path d="M3.996 4.517h5.291L8.01 6.324 4.153 7.506a1.668 1.668 0 0 0-1.165 1.601v5.786a1.668 1.668 0 0 0 1.165 1.6l3.857 1.183 1.277 1.807H3.996A3.996 3.996 0 0 1 0 15.487V8.513a3.996 3.996 0 0 1 3.996-3.996m16.008 0h-5.291l1.277 1.807 3.857 1.182c.715.227 1.17.889 1.165 1.601v5.786a1.668 1.668 0 0 1-1.165 1.6l-3.857 1.183-1.277 1.807h5.291A3.996 3.996 0 0 0 24 15.487V8.513a3 [...]
\ No newline at end of file
diff --git a/website/static/img/services/alluxio.svg b/website/static/img/services/alluxio.svg
new file mode 100644
index 000000000..0f4427aea
--- /dev/null
+++ b/website/static/img/services/alluxio.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#10b981"/><text x="32" y="38" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="13" font-weight="700" fill="#ffffff">Alluxio</text></svg>
diff --git a/website/static/img/services/azure.svg b/website/static/img/services/azure.svg
new file mode 100644
index 000000000..e2a26a2d5
--- /dev/null
+++ b/website/static/img/services/azure.svg
@@ -0,0 +1 @@
+<svg id="f2f04349-8aee-4413-84c9-a9053611b319" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><linearGradient id="ad4c4f96-09aa-4f91-ba10-5cb8ad530f74" x1="9" y1="15.83" x2="9" y2="5.79" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b3b3b3" /><stop offset="0.26" stop-color="#c1c1c1" /><stop offset="1" stop-color="#e6e6e6" /></linearGradient></defs><title>Icon-storage-86</title><path d="M.5,5.79h17a0,0,0,0,1,0,0v9.48a.57.57,0,0,1-.57.57H [...]
\ No newline at end of file
diff --git a/website/static/img/services/b2.svg b/website/static/img/services/b2.svg
new file mode 100644
index 000000000..5d6b370fc
--- /dev/null
+++ b/website/static/img/services/b2.svg
@@ -0,0 +1 @@
+<svg fill="#E21E29" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Backblaze</title><path d="M9.3108.0003c.6527 1.3502 1.5666 4.0812-1.3887 7.1738-1.8096 1.8796-3.078 3.8487-2.3496 6.0644.3642 1.1037 1.1864 2.5079 2.8867 2.7852.6107.1008 1.3425-.0006 1.7403-.1406 2.4538-.8544 2.098-3.4138 1.5546-5.0469-.07-.2129-.1915-.7333-.2363-.9238-.3726-1.6023.776-2.6562 1.129-3.8047.028-.0925.0534-.1819.0702-.2715.042-.21.067-.423.0781-.6387 0-1.8264-.9882-2.6303-1.7754-3. [...]
\ No newline at end of file
diff --git a/website/static/img/services/cloudflare-kv.svg b/website/static/img/services/cloudflare-kv.svg
new file mode 100644
index 000000000..66cc02086
--- /dev/null
+++ b/website/static/img/services/cloudflare-kv.svg
@@ -0,0 +1 @@
+<svg fill="#F38020" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Cloudflare</title><path d="M16.5088 16.8447c.1475-.5068.0908-.9707-.1553-1.3154-.2246-.3164-.6045-.499-1.0615-.5205l-8.6592-.1123a.1559.1559 0 0 1-.1333-.0713c-.0283-.042-.0351-.0986-.021-.1553.0278-.084.1123-.1484.2036-.1562l8.7359-.1123c1.0351-.0489 2.1601-.8868 2.5537-1.9136l.499-1.3013c.0215-.0561.0293-.1128.0147-.168-.5625-2.5463-2.835-4.4453-5.5499-4.4453-2.5039 0-4.6284 1.6177-5.3876 3.861 [...]
\ No newline at end of file
diff --git a/website/static/img/services/cos.svg b/website/static/img/services/cos.svg
new file mode 100644
index 000000000..91c2e239e
--- /dev/null
+++ b/website/static/img/services/cos.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1053 719.6" style="enable-background:new 0 0 1053 719.6;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#949495;}
+ .st1{fill:#00A3FF;}
+ .st2{fill:#00C8DC;}
+ .st3{fill:#006EFF;}
+</style>
+<path class="st0" d="M665.2,619.1c-7.2,8.2-17.6,12.9-28.5,13c-18.4,0-30.2-12.7-30.2-32.3c0-20,11.3-32.4,29.5-32.4
+ c10.6,0.2,20.7,4.5,28.2,12c0.2,0.2,0.6,0.2,0.8,0c0,0,0,0,0,0c0.1-0.1,0.2-0.3,0.2-0.4v-10.1c-7.4-6.7-18.2-10.7-29.2-10.7
+ c-11.4,0-21.1,4-28,11.6s-10.4,17.9-10.4,30.2c0,25,15.7,41.8,39.1,41.8c11.2,0,22.1-4.1,29.5-11v-11.1c0-0.3-0.3-0.6-0.6-0.6
+ C665.5,618.9,665.3,619,665.2,619.1 M231.4,560.1H167v8.7h27.4v70.7h9.5v-70.7h27.4L231.4,560.1z M858,632.3
+ c-9,0-18.8-6.7-18.8-21.4c0-10.8,5.7-22.4,18.2-22.4c13.9,0,18.9,11.8,18.9,21.9C876.3,621.4,870,632.3,858,632.3z M876.6,560.2v27
+ c-4.9-5.3-13.1-7.3-19-7.3c-7.5-0.2-14.8,2.8-20,8.3c-5.1,5.5-7.8,13.1-7.8,22c0,21.2,14.1,30.7,28,30.7c8.1,0,14.8-2.9,18.8-8.1
+ v6.7h9.4v-79.4L876.6,560.2L876.6,560.2z M678.8,639.7h9.6v-79.4h-9.6V639.7z M352.1,610.5c0,18.3,11.8,30.5,29.4,30.5
+ c7.3,0.1,14.5-2.1,20.6-6.3V625c0-0.3-0.3-0.6-0.6-0.6c-0.1,0-0.3,0-0.4,0.1c-6.2,5.6-15.2,7.8-19.1,7.8c-12.7,0-21-8.5-21-21.8
+ s8.2-21.8,21-21.8c3.9,0,12.6,1.1,19.1,6.7c0.2,0.2,0.6,0.2,0.8,0c0.1-0.1,0.1-0.2,0.1-0.4v-8.8c-3.9-2.5-12.1-6.2-20.6-6.2
+ C363.9,580,352.1,592.3,352.1,610.5 M236.1,605v-0.2c0.3-4.9,2.6-9.5,6.4-12.6c3.2-2.6,7.3-4,11.4-3.9c10.4,0,17.1,6.3,17.6,16.5
+ v0.2H236.1z M254.2,580c-16.6,0-27.4,11.9-27.4,30.3c0.6,19.2,11.5,30.6,29.1,30.6c8.1,0.1,15.9-2.9,21.9-8.4v-9.5
+ c0-0.3-0.3-0.6-0.6-0.5c-0.1,0-0.3,0.1-0.4,0.2c-4.2,5.6-14.3,10.1-20.5,10.1c-5.9,0-11.5-2-14.6-5.1c-3.7-3.9-5.7-9.1-5.7-14.5
+ h44.4v-0.7c0-12.5-2.1-19.6-7.6-25.3C268.4,582.5,262.1,580.1,254.2,580L254.2,580z M809.5,611c0,15.8-9.1,21.4-16.9,21.4
+ c-7.6,0-15.6-5.2-15.6-14.9v-36.2h-9v36c0,13.9,10,23.7,24.2,23.7c7.9,0,14-2.7,18-7.7v6.3h8.6v-58.3h-9.2L809.5,611z M317.9,580
+ c-7.3,0-13.4,2.4-17.6,6.9v-5.6h-9v58.3h9.2v-33.2c0-5.5,1.7-10.2,4.7-13.1c3.3-3.2,7.8-4.9,12.4-4.6c7.2,0.2,14.4,5,14.4,15.1v35.8
+ h9.2v-36.2c0-7.2-2.3-13.2-6.6-17.3C330.5,582.1,324.7,580,317.9,580 M420.2,605v-0.2c0.3-4.9,2.6-9.5,6.5-12.6
+ c3.2-2.6,7.3-4,11.4-3.9c10.4,0,17.1,6.3,17.6,16.5v0.2L420.2,605z M438.3,580c-16.6,0-27.4,11.9-27.4,30.3
+ c0.6,19.2,11.5,30.6,29.1,30.6c8.1,0.1,15.9-2.9,21.9-8.4v-9.5c0-0.3-0.3-0.6-0.6-0.5c-0.2,0-0.3,0.1-0.4,0.2
+ c-4.2,5.6-14.3,10.1-20.5,10.1c-5.9,0-11.5-2-14.6-5.1c-3.7-3.9-5.7-9.1-5.7-14.5h44.4v-0.7c0-12.5-2.1-19.6-7.6-25.3
+ C452.5,582.5,446.2,580,438.3,580L438.3,580z M501.8,580c-7.3,0-13.4,2.4-17.6,6.9v-5.6h-9v58.3h9.2v-33.2c0-5.5,1.7-10.2,4.7-13.1
+ c3.3-3.2,7.8-4.9,12.4-4.6c7.2,0.2,14.4,5,14.4,15.1v35.8h9.2v-36.2c0-7.2-2.3-13.2-6.6-17.3C514.4,582.1,508.6,580,501.8,580
+ M553.4,565.8H544v15.6h-9.6v8.5h9.6v40.1c0,3.5,1,6.1,3.1,7.9c2.3,1.8,5.2,2.7,8.1,2.6c4.1-0.4,8.1-1.3,12-2.7v-8.8
+ c0-0.3-0.3-0.6-0.6-0.6c-0.1,0-0.1,0-0.2,0c-3.2,1.1-6.5,2-9.8,2.7c-1,0.2-1.8,0.3-2.4-0.2c-0.5-0.5-0.7-1.2-0.6-1.8v-39.2h16.8
+ v-8.5h-16.8L553.4,565.8z M729.2,632.2c-11.7,0-19.5-8.8-19.5-21.7l0,0c0-12.9,7.9-21.6,19.5-21.6s19.5,8.7,19.5,21.7
+ S740.9,632.2,729.2,632.2 M729.2,580.2c-16.9,0-28.2,12.2-28.2,30.4s11.4,30.4,28.3,30.4s28.3-12.2,28.3-30.4
+ S746.2,580.1,729.2,580.2"/>
+<path class="st1" d="M724.4,396.5c-8.7,8.7-26.1,21.7-56.5,21.7h-187c56.5-54.1,104.4-99.6,108.8-104c8.3-8.4,17-16.3,26.1-23.8
+ c21.8-19.5,39.1-21.7,54.4-21.7c21.7,0,39.1,8.7,54.4,21.6C754.9,318.5,754.9,368.4,724.4,396.5z M761.4,255.6
+ c-23-24.8-55.3-39-89.2-39c-30.4,0-56.5,10.9-80.5,28.2c-8.8,8.7-21.8,17.3-32.7,30.3c-8.7,8.7-195.7,190.7-195.7,190.7
+ c10.9,2.2,23.9,2.2,34.8,2.2h237.1c17.4,0,30.5,0,43.5-2.2c30-2.2,58.3-14.4,80.5-34.7C809.2,383.5,809.2,303.4,761.4,255.6
+ L761.4,255.6z"/>
+<path class="st2" d="M456.9,242.6c-23.9-17.3-47.9-26-76.1-26c-33.9,0-66.2,14.2-89.2,39c-48.4,49.7-47.4,129.2,2.2,177.7
+ c21.7,19.5,43.5,30.3,69.6,32.5l50-47.7h-28.3c-28.3-2.1-45.7-10.8-56.5-21.6c-30-29.6-30.9-77.6-2.2-108.3
+ c15.2-15.2,32.6-21.7,54.4-21.7c13.1,0,32.6,2.1,52.2,21.6c8.7,8.7,32.6,26,41.3,34.7h2.1l32.6-32.5v-2.2
+ C493.9,273,470,253.5,456.9,242.6"/>
+<path class="st3" d="M685.3,188.5c-24.7-66.3-88-110.4-158.8-110.5c-84.8,0-152.2,62.8-165.3,140.8c6.5,0,13.1-2.1,21.8-2.1
+ c8.7,0,19.6,2.1,28.3,2.1c10.9-54.2,58.7-93.2,115.3-93.2c47.8,0,89.2,28.2,108.7,69.3c0,0,2.2,2.2,2.2,0
+ C652.6,192.8,670,188.5,685.3,188.5L685.3,188.5"/>
+</svg>
diff --git a/website/static/img/services/d1.svg b/website/static/img/services/d1.svg
new file mode 100644
index 000000000..66cc02086
--- /dev/null
+++ b/website/static/img/services/d1.svg
@@ -0,0 +1 @@
+<svg fill="#F38020" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Cloudflare</title><path d="M16.5088 16.8447c.1475-.5068.0908-.9707-.1553-1.3154-.2246-.3164-.6045-.499-1.0615-.5205l-8.6592-.1123a.1559.1559 0 0 1-.1333-.0713c-.0283-.042-.0351-.0986-.021-.1553.0278-.084.1123-.1484.2036-.1562l8.7359-.1123c1.0351-.0489 2.1601-.8868 2.5537-1.9136l.499-1.3013c.0215-.0561.0293-.1128.0147-.168-.5625-2.5463-2.835-4.4453-5.5499-4.4453-2.5039 0-4.6284 1.6177-5.3876 3.861 [...]
\ No newline at end of file
diff --git a/website/static/img/services/dbfs.svg b/website/static/img/services/dbfs.svg
new file mode 100644
index 000000000..d67b17058
--- /dev/null
+++ b/website/static/img/services/dbfs.svg
@@ -0,0 +1 @@
+<svg fill="#FF3621" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Databricks</title><path d="M.95 14.184L12 20.403l9.919-5.55v2.21L12 22.662l-10.484-5.96-.565.308v.77L12 24l11.05-6.218v-4.317l-.515-.309L12 19.118l-9.867-5.653v-2.21L12 16.805l11.05-6.218V6.32l-.515-.308L12 11.974 2.647 6.681 12 1.388l7.76 4.368.668-.411v-.566L12 0 .95 6.27v.72L12 13.207l9.919-5.55v2.26L12 15.52 1.516 9.56l-.565.308Z"/></svg>
\ No newline at end of file
diff --git a/website/static/img/services/dropbox.svg b/website/static/img/services/dropbox.svg
new file mode 100644
index 000000000..2fc268685
--- /dev/null
+++ b/website/static/img/services/dropbox.svg
@@ -0,0 +1 @@
+<svg fill="#0061FF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Dropbox</title><path d="M6 1.807L0 5.629l6 3.822 6.001-3.822L6 1.807zM18 1.807l-6 3.822 6 3.822 6-3.822-6-3.822zM0 13.274l6 3.822 6.001-3.822L6 9.452l-6 3.822zM18 9.452l-6 3.822 6 3.822 6-3.822-6-3.822zM6 18.371l6.001 3.822 6-3.822-6-3.822L6 18.371z"/></svg>
\ No newline at end of file
diff --git a/website/static/img/services/etcd.svg b/website/static/img/services/etcd.svg
new file mode 100644
index 000000000..cb9f3cee4
--- /dev/null
+++ b/website/static/img/services/etcd.svg
@@ -0,0 +1 @@
+<svg fill="#419EDA" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>etcd</title><path d="M10.985 10.715A1.565 1.565 0 1 1 9.42 9.151a1.566 1.566 0 0 1 1.565 1.564zm2.023 0a1.565 1.565 0 1 0 1.565-1.564 1.564 1.564 0 0 0-1.565 1.564zm10.653 1.698a4.295 4.295 0 0 1-.346.013 4.517 4.517 0 0 1-1.986-.462 18.448 18.448 0 0 0 .267-3.515 18.184 18.184 0 0 0-2.274-2.695 4.519 4.519 0 0 1 1.603-1.717l.294-.182-.23-.26a11.977 11.977 0 0 0-4.182-3.05l-.319-.138-.08.336a4.50 [...]
\ No newline at end of file
diff --git a/website/static/img/services/foundationdb.svg b/website/static/img/services/foundationdb.svg
new file mode 100644
index 000000000..f28a71b0d
--- /dev/null
+++ b/website/static/img/services/foundationdb.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#1d4ed8"/><text x="32" y="38" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" fill="#ffffff">FDB</text></svg>
diff --git a/website/static/img/services/foyer.svg b/website/static/img/services/foyer.svg
new file mode 100644
index 000000000..4fbd765ba
--- /dev/null
+++ b/website/static/img/services/foyer.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#0891b2"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700" fill="#ffffff">Foyer</text></svg>
diff --git a/website/static/img/services/fs.svg b/website/static/img/services/fs.svg
new file mode 100644
index 000000000..a84e12109
--- /dev/null
+++ b/website/static/img/services/fs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M7 17h19l6 7h25v25a6 6 0 0 1-6 6H13a6 6 0 0 1-6-6z" fill="#2563eb"/><path d="M7 22h50v8H7z" fill="#60a5fa"/></svg>
diff --git a/website/static/img/services/ftp.svg b/website/static/img/services/ftp.svg
new file mode 100644
index 000000000..9e992be6e
--- /dev/null
+++ b/website/static/img/services/ftp.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#0f766e"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="18" font-weight="700" fill="#ffffff">FTP</text></svg>
diff --git a/website/static/img/services/gcs.svg b/website/static/img/services/gcs.svg
new file mode 100644
index 000000000..842c121a7
--- /dev/null
+++ b/website/static/img/services/gcs.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="standard_product_icon" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 512 512">
+ <!-- Generator: Adobe Illustrator 29.1.0, SVG Export Plug-In . SVG Version: 2.1.0 Build 142) -->
+ <defs>
+ <style>
+ .st0 {
+ fill: none;
+ }
+
+ .st1 {
+ fill: #4285f4;
+ }
+
+ .st2 {
+ fill: #34a853;
+ }
+
+ .st3 {
+ fill: #fbbc04;
+ }
+
+ .st4 {
+ fill: #ea4335;
+ }
+ </style>
+ </defs>
+ <g id="bounding_box">
+ <rect class="st0" width="512" height="512"/>
+ </g>
+ <g id="art">
+ <path class="st2" d="M442,277.9H70c-8.8,0-16,7.2-16,16v148.1c0,8.8,7.2,16,16,16h107.2c1.5.5,3.1.7,4.8.7s3.3-.3,4.8-.7h255.2c8.8,0,16-7.2,16-16v-148.1c0-8.8-7.2-16-16-16ZM86,309.9h80v116.1h-80v-116.1ZM426,425.9h-228v-116.1h228v116.1Z"/>
+ <path class="st3" d="M442,54H70c-8.8,0-16,7.2-16,16v148.8c0,8.8,7.2,16,16,16h372c8.8,0,16-7.2,16-16V70c0-8.8-7.2-16-16-16ZM86,86h80v116.8h-80v-116.8ZM426,202.8h-228v-116.8h228v116.8Z"/>
+ <path class="st4" d="M442,234.8h-16V86H54v-16c0-8.8,7.2-16,16-16h372c8.8,0,16,7.2,16,16v148.8c0,8.8-7.2,16-16,16Z"/>
+ <path class="st1" d="M442,457.9h-16v-148.1H54v-16c0-8.8,7.2-16,16-16h372c8.8,0,16,7.2,16,16v148.1c0,8.8-7.2,16-16,16Z"/>
+ <circle class="st4" cx="349" cy="144.4" r="37"/>
+ <circle class="st1" cx="349" cy="367.9" r="37"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/website/static/img/services/gdrive.svg b/website/static/img/services/gdrive.svg
new file mode 100644
index 000000000..7263ef312
--- /dev/null
+++ b/website/static/img/services/gdrive.svg
@@ -0,0 +1 @@
+<svg fill="#4285F4" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Google Drive</title><path d="M12.01 1.485c-2.082 0-3.754.02-3.743.047.01.02 1.708 3.001 3.774 6.62l3.76 6.574h3.76c2.081 0 3.753-.02 3.742-.047-.005-.02-1.708-3.001-3.775-6.62l-3.76-6.574zm-4.76 1.73a789.828 789.861 0 0 0-3.63 6.319L0 15.868l1.89 3.298 1.885 3.297 3.62-6.335 3.618-6.33-1.88-3.287C8.1 4.704 7.255 3.22 7.25 3.214zm2.259 12.653-.203.348c-.114.198-.96 1.672-1.88 3.287a423.93 423.948 [...]
\ No newline at end of file
diff --git a/website/static/img/services/ghac.svg b/website/static/img/services/ghac.svg
new file mode 100644
index 000000000..bb5160ec8
--- /dev/null
+++ b/website/static/img/services/ghac.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#181717"/><text x="32" y="38" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="13" font-weight="700" fill="#ffffff">GHAC</text></svg>
diff --git a/website/static/img/services/github.svg b/website/static/img/services/github.svg
new file mode 100644
index 000000000..81920ca33
--- /dev/null
+++ b/website/static/img/services/github.svg
@@ -0,0 +1 @@
+<svg fill="#181717" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1 [...]
\ No newline at end of file
diff --git a/website/static/img/services/goosefs.svg b/website/static/img/services/goosefs.svg
new file mode 100644
index 000000000..922d8ea21
--- /dev/null
+++ b/website/static/img/services/goosefs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#facc15"/><text x="32" y="38" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="13" font-weight="700" fill="#422006">GooseFS</text></svg>
diff --git a/website/static/img/services/hdfs.svg b/website/static/img/services/hdfs.svg
new file mode 100644
index 000000000..a03f68448
--- /dev/null
+++ b/website/static/img/services/hdfs.svg
@@ -0,0 +1 @@
+<svg fill="#66CCFF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apache Hadoop</title><path d="M12.098 3.01c-1.133.277-1.466.474-1.842 1.787.478-.962.84-1.315 1.842-1.787zm3.228.076c-.834-.053-1.715.177-2.756.615a3.97 3.97 0 00-1.199.76c-.31.287-.576.62-.866 1.006a1.312 1.312 0 00-.468.095 1.868 1.868 0 00-.539.356c-.141.124-.28.252-.416.383v.002c-.123.12-.244.241-.363.365-.945.152-1.72.32-2.41.588a6.314 6.314 0 00-1.97 1.217c-.252.222-.482.469-.687.736a5.435 [...]
\ No newline at end of file
diff --git a/website/static/img/services/http.svg b/website/static/img/services/http.svg
new file mode 100644
index 000000000..b908f613b
--- /dev/null
+++ b/website/static/img/services/http.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#2563eb"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" fill="#ffffff">HTTP</text></svg>
diff --git a/website/static/img/services/huggingface.svg b/website/static/img/services/huggingface.svg
new file mode 100644
index 000000000..a52cbe3ec
--- /dev/null
+++ b/website/static/img/services/huggingface.svg
@@ -0,0 +1 @@
+<svg fill="#FFD21E" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Hugging Face</title><path d="M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378 0 1.112.178 2.181.503 3.185.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284.278.173.48.408.71.694.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542.01.026.653 1.552 1.657 2.54.616.605 1.01 1.223 1.082 1.912.055 [...]
\ No newline at end of file
diff --git a/website/static/img/services/ipfs.svg b/website/static/img/services/ipfs.svg
new file mode 100644
index 000000000..5a92d8cc1
--- /dev/null
+++ b/website/static/img/services/ipfs.svg
@@ -0,0 +1 @@
+<svg fill="#65C2CB" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>IPFS</title><path d="M12 0L1.608 6v12L12 24l10.392-6V6zm-1.073 1.445h.001a1.8 1.8 0 002.138 0l7.534 4.35a1.794 1.794 0 000 .403l-7.535 4.35a1.8 1.8 0 00-2.137 0l-7.536-4.35a1.795 1.795 0 000-.402zM21.324 7.4c.109.08.226.147.349.201v8.7a1.8 1.8 0 00-1.069 1.852l-7.535 4.35a1.8 1.8 0 00-.349-.2l-.009-8.653a1.8 1.8 0 001.07-1.851zm-18.648.048l7.535 4.35a1.8 1.8 0 001.069 1.852v8.7c-.124.054-.24.122- [...]
\ No newline at end of file
diff --git a/website/static/img/services/koofr.svg b/website/static/img/services/koofr.svg
new file mode 100644
index 000000000..1dad8caaa
--- /dev/null
+++ b/website/static/img/services/koofr.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#fb923c"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700" fill="#ffffff">Koofr</text></svg>
diff --git a/website/static/img/services/lakefs.svg b/website/static/img/services/lakefs.svg
new file mode 100644
index 000000000..5458eb06e
--- /dev/null
+++ b/website/static/img/services/lakefs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#14b8a6"/><path d="M12 38c8-9 15-9 23 0 5 5 10 6 17 0" fill="none" stroke="#ecfeff" stroke-width="5" stroke-linecap="round"/><text x="32" y="27" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="13" font-weight="700" fill="#ecfeff">lakeFS</text></svg>
diff --git a/website/static/img/services/memcached.svg b/website/static/img/services/memcached.svg
new file mode 100644
index 000000000..7acbf7439
--- /dev/null
+++ b/website/static/img/services/memcached.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#64748b"/><text x="32" y="38" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="12" font-weight="700" fill="#ffffff">Memcached</text></svg>
diff --git a/website/static/img/services/moka.svg b/website/static/img/services/moka.svg
new file mode 100644
index 000000000..5b987938b
--- /dev/null
+++ b/website/static/img/services/moka.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#92400e"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" fill="#ffffff">Moka</text></svg>
diff --git a/website/static/img/services/mongodb.svg b/website/static/img/services/mongodb.svg
new file mode 100644
index 000000000..13d7d00a6
--- /dev/null
+++ b/website/static/img/services/mongodb.svg
@@ -0,0 +1 @@
+<svg fill="#47A248" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>MongoDB</title><path d="M17.193 9.555c-1.264-5.58-4.252-7.414-4.573-8.115-.28-.394-.53-.954-.735-1.44-.036.495-.055.685-.523 1.184-.723.566-4.438 3.682-4.74 10.02-.282 5.912 4.27 9.435 4.888 9.884l.07.05A73.49 73.49 0 0111.91 24h.481c.114-1.032.284-2.056.51-3.07.417-.296.604-.463.85-.693a11.342 11.342 0 003.639-8.464c.01-.814-.103-1.662-.197-2.218zm-5.336 8.195s0-8.291.275-8.29c.213 0 .49 10.695. [...]
\ No newline at end of file
diff --git a/website/static/img/services/mysql.svg b/website/static/img/services/mysql.svg
new file mode 100644
index 000000000..0948dc482
--- /dev/null
+++ b/website/static/img/services/mysql.svg
@@ -0,0 +1 @@
+<svg fill="#4479A1" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>MySQL</title><path d="M16.405 5.501c-.115 0-.193.014-.274.033v.013h.014c.054.104.146.18.214.273.054.107.1.214.154.32l.014-.015c.094-.066.14-.172.14-.333-.04-.047-.046-.094-.08-.14-.04-.067-.126-.1-.18-.153zM5.77 18.695h-.927a50.854 50.854 0 00-.27-4.41h-.008l-1.41 4.41H2.45l-1.4-4.41h-.01a72.892 72.892 0 00-.195 4.41H0c.055-1.966.192-3.81.41-5.53h1.15l1.335 4.064h.008l1.347-4.064h1.095c.242 2.015 [...]
\ No newline at end of file
diff --git a/website/static/img/services/obs.png b/website/static/img/services/obs.png
new file mode 100644
index 000000000..394e8c58f
Binary files /dev/null and b/website/static/img/services/obs.png differ
diff --git a/website/static/img/services/onedrive.svg b/website/static/img/services/onedrive.svg
new file mode 100644
index 000000000..746580e2e
--- /dev/null
+++ b/website/static/img/services/onedrive.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#0078d4"/><path d="M20 41h27a9 9 0 0 0-2-17 13 13 0 0 0-24-3A10 10 0 0 0 20 41z" fill="#ffffff"/></svg>
diff --git a/website/static/img/services/opfs.svg b/website/static/img/services/opfs.svg
new file mode 100644
index 000000000..ebf878a2a
--- /dev/null
+++ b/website/static/img/services/opfs.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#6366f1"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="18" font-weight="700" fill="#ffffff">OPFS</text></svg>
diff --git a/website/static/img/services/oss.svg b/website/static/img/services/oss.svg
new file mode 100644
index 000000000..9b47f6124
--- /dev/null
+++ b/website/static/img/services/oss.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="90" height="27" viewBox="0 0 90 27"><defs><clipPath id="master_svg0_865_12220"><rect x="0" y="0" width="90" height="27" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_865_12220)"><g><path d="M88.6994171625,10.73370361328125L88.4410829625,13.76266841328125L87.1910858625,13.76266841328125C85.1994199625,13.76266841328125,84.1660826625,15.34335801328125,84.1660826625, [...]
\ No newline at end of file
diff --git a/website/static/img/services/pcloud.svg b/website/static/img/services/pcloud.svg
new file mode 100644
index 000000000..03436fed3
--- /dev/null
+++ b/website/static/img/services/pcloud.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#0ea5e9"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="18" font-weight="700" fill="#ffffff">pC</text></svg>
diff --git a/website/static/img/services/postgresql.svg b/website/static/img/services/postgresql.svg
new file mode 100644
index 000000000..931bdae18
--- /dev/null
+++ b/website/static/img/services/postgresql.svg
@@ -0,0 +1 @@
+<svg fill="#4169E1" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PostgreSQL</title><path d="M23.5594 14.7228a.5269.5269 0 0 0-.0563-.1191c-.139-.2632-.4768-.3418-1.0074-.2321-1.6533.3411-2.2935.1312-2.5256-.0191 1.342-2.0482 2.445-4.522 3.0411-6.8297.2714-1.0507.7982-3.5237.1222-4.7316a1.5641 1.5641 0 0 0-.1509-.235C21.6931.9086 19.8007.0248 17.5099.0005c-1.4947-.0158-2.7705.3461-3.1161.4794a9.449 9.449 0 0 0-.5159-.0816 8.044 8.044 0 0 0-1.3114-.1278c-1.1822- [...]
\ No newline at end of file
diff --git a/website/static/img/services/redb.svg b/website/static/img/services/redb.svg
new file mode 100644
index 000000000..f8d40c8c7
--- /dev/null
+++ b/website/static/img/services/redb.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#dc2626"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" fill="#ffffff">redb</text></svg>
diff --git a/website/static/img/services/redis.svg b/website/static/img/services/redis.svg
new file mode 100644
index 000000000..61480c931
--- /dev/null
+++ b/website/static/img/services/redis.svg
@@ -0,0 +1 @@
+<svg fill="#FF4438" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Redis</title><path d="M22.71 13.145c-1.66 2.092-3.452 4.483-7.038 4.483-3.203 0-4.397-2.825-4.48-5.12.701 1.484 2.073 2.685 4.214 2.63 4.117-.133 6.94-3.852 6.94-7.239 0-4.05-3.022-6.972-8.268-6.972-3.752 0-8.4 1.428-11.455 3.685C2.59 6.937 3.885 9.958 4.35 9.626c2.648-1.904 4.748-3.13 6.784-3.744C8.12 9.244.886 17.05 0 18.425c.1 1.261 1.66 4.648 2.424 4.648.232 0 .431-.133.664-.365a100.49 100.49 [...]
\ No newline at end of file
diff --git a/website/static/img/services/rocksdb.svg b/website/static/img/services/rocksdb.svg
new file mode 100644
index 000000000..7fc4e765e
--- /dev/null
+++ b/website/static/img/services/rocksdb.svg
@@ -0,0 +1 @@
+<svg fill="#2A2A2A" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>RocksDB</title><path d="m19.299 2.519-2.102.985c.006.005.006.014.006.02a.81.81 0 0 0 .303.337c-2.557 1.32-3.643 3.104-3.643 3.104L4.09 12.228a1.183 1.183 0 0 1-1.598-.482 1.183 1.183 0 0 1 .483-1.596l2.771-1.492A2.226 2.226 0 0 0 6.912 6.84l-1.664.894-2.771 1.494a2.23 2.23 0 0 0 2.109 3.927l1.25-.674c-.09.493-.05 1.019.146 1.516.066.17.11.277.11.277.443.96-.14 1.713-.903 1.713h-.242l-.879 3.828a. [...]
\ No newline at end of file
diff --git a/website/static/img/services/s3.svg b/website/static/img/services/s3.svg
new file mode 100644
index 000000000..80192a12d
--- /dev/null
+++ b/website/static/img/services/s3.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 304 182" style="enable-background:new 0 0 304 182;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#252F3E;}
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FF9900;}
+</style>
+<g>
+ <path class="st0" d="M86.4,66.4c0,3.7,0.4,6.7,1.1,8.9c0.8,2.2,1.8,4.6,3.2,7.2c0.5,0.8,0.7,1.6,0.7,2.3c0,1-0.6,2-1.9,3l-6.3,4.2
+ c-0.9,0.6-1.8,0.9-2.6,0.9c-1,0-2-0.5-3-1.4C76.2,90,75,88.4,74,86.8c-1-1.7-2-3.6-3.1-5.9c-7.8,9.2-17.6,13.8-29.4,13.8
+ c-8.4,0-15.1-2.4-20-7.2c-4.9-4.8-7.4-11.2-7.4-19.2c0-8.5,3-15.4,9.1-20.6c6.1-5.2,14.2-7.8,24.5-7.8c3.4,0,6.9,0.3,10.6,0.8
+ c3.7,0.5,7.5,1.3,11.5,2.2v-7.3c0-7.6-1.6-12.9-4.7-16c-3.2-3.1-8.6-4.6-16.3-4.6c-3.5,0-7.1,0.4-10.8,1.3c-3.7,0.9-7.3,2-10.8,3.4
+ c-1.6,0.7-2.8,1.1-3.5,1.3c-0.7,0.2-1.2,0.3-1.6,0.3c-1.4,0-2.1-1-2.1-3.1v-4.9c0-1.6,0.2-2.8,0.7-3.5c0.5-0.7,1.4-1.4,2.8-2.1
+ c3.5-1.8,7.7-3.3,12.6-4.5c4.9-1.3,10.1-1.9,15.6-1.9c11.9,0,20.6,2.7,26.2,8.1c5.5,5.4,8.3,13.6,8.3,24.6V66.4z M45.8,81.6
+ c3.3,0,6.7-0.6,10.3-1.8c3.6-1.2,6.8-3.4,9.5-6.4c1.6-1.9,2.8-4,3.4-6.4c0.6-2.4,1-5.3,1-8.7v-4.2c-2.9-0.7-6-1.3-9.2-1.7
+ c-3.2-0.4-6.3-0.6-9.4-0.6c-6.7,0-11.6,1.3-14.9,4c-3.3,2.7-4.9,6.5-4.9,11.5c0,4.7,1.2,8.2,3.7,10.6
+ C37.7,80.4,41.2,81.6,45.8,81.6z M126.1,92.4c-1.8,0-3-0.3-3.8-1c-0.8-0.6-1.5-2-2.1-3.9L96.7,10.2c-0.6-2-0.9-3.3-0.9-4
+ c0-1.6,0.8-2.5,2.4-2.5h9.8c1.9,0,3.2,0.3,3.9,1c0.8,0.6,1.4,2,2,3.9l16.8,66.2l15.6-66.2c0.5-2,1.1-3.3,1.9-3.9c0.8-0.6,2.2-1,4-1
+ h8c1.9,0,3.2,0.3,4,1c0.8,0.6,1.5,2,1.9,3.9l15.8,67l17.3-67c0.6-2,1.3-3.3,2-3.9c0.8-0.6,2.1-1,3.9-1h9.3c1.6,0,2.5,0.8,2.5,2.5
+ c0,0.5-0.1,1-0.2,1.6c-0.1,0.6-0.3,1.4-0.7,2.5l-24.1,77.3c-0.6,2-1.3,3.3-2.1,3.9c-0.8,0.6-2.1,1-3.8,1h-8.6c-1.9,0-3.2-0.3-4-1
+ c-0.8-0.7-1.5-2-1.9-4L156,23l-15.4,64.4c-0.5,2-1.1,3.3-1.9,4c-0.8,0.7-2.2,1-4,1H126.1z M254.6,95.1c-5.2,0-10.4-0.6-15.4-1.8
+ c-5-1.2-8.9-2.5-11.5-4c-1.6-0.9-2.7-1.9-3.1-2.8c-0.4-0.9-0.6-1.9-0.6-2.8v-5.1c0-2.1,0.8-3.1,2.3-3.1c0.6,0,1.2,0.1,1.8,0.3
+ c0.6,0.2,1.5,0.6,2.5,1c3.4,1.5,7.1,2.7,11,3.5c4,0.8,7.9,1.2,11.9,1.2c6.3,0,11.2-1.1,14.6-3.3c3.4-2.2,5.2-5.4,5.2-9.5
+ c0-2.8-0.9-5.1-2.7-7c-1.8-1.9-5.2-3.6-10.1-5.2L246,52c-7.3-2.3-12.7-5.7-16-10.2c-3.3-4.4-5-9.3-5-14.5c0-4.2,0.9-7.9,2.7-11.1
+ c1.8-3.2,4.2-6,7.2-8.2c3-2.3,6.4-4,10.4-5.2c4-1.2,8.2-1.7,12.6-1.7c2.2,0,4.5,0.1,6.7,0.4c2.3,0.3,4.4,0.7,6.5,1.1
+ c2,0.5,3.9,1,5.7,1.6c1.8,0.6,3.2,1.2,4.2,1.8c1.4,0.8,2.4,1.6,3,2.5c0.6,0.8,0.9,1.9,0.9,3.3v4.7c0,2.1-0.8,3.2-2.3,3.2
+ c-0.8,0-2.1-0.4-3.8-1.2c-5.7-2.6-12.1-3.9-19.2-3.9c-5.7,0-10.2,0.9-13.3,2.8c-3.1,1.9-4.7,4.8-4.7,8.9c0,2.8,1,5.2,3,7.1
+ c2,1.9,5.7,3.8,11,5.5l14.2,4.5c7.2,2.3,12.4,5.5,15.5,9.6c3.1,4.1,4.6,8.8,4.6,14c0,4.3-0.9,8.2-2.6,11.6
+ c-1.8,3.4-4.2,6.4-7.3,8.8c-3.1,2.5-6.8,4.3-11.1,5.6C264.4,94.4,259.7,95.1,254.6,95.1z"/>
+ <g>
+ <path class="st1" d="M273.5,143.7c-32.9,24.3-80.7,37.2-121.8,37.2c-57.6,0-109.5-21.3-148.7-56.7c-3.1-2.8-0.3-6.6,3.4-4.4
+ c42.4,24.6,94.7,39.5,148.8,39.5c36.5,0,76.6-7.6,113.5-23.2C274.2,133.6,278.9,139.7,273.5,143.7z"/>
+ <path class="st1" d="M287.2,128.1c-4.2-5.4-27.8-2.6-38.5-1.3c-3.2,0.4-3.7-2.4-0.8-4.5c18.8-13.2,49.7-9.4,53.3-5
+ c3.6,4.5-1,35.4-18.6,50.2c-2.7,2.3-5.3,1.1-4.1-1.9C282.5,155.7,291.4,133.4,287.2,128.1z"/>
+ </g>
+</g>
+</svg>
diff --git a/website/static/img/services/seafile.svg b/website/static/img/services/seafile.svg
new file mode 100644
index 000000000..8fd594ce8
--- /dev/null
+++ b/website/static/img/services/seafile.svg
@@ -0,0 +1 @@
+<svg fill="#FF9800" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Seafile</title><path d="M8.2129 4.2695c-2.003 0-3.623 1.6201-3.623 3.623 0 .0648.0043.1326.0078.2012a2.3767 2.3767 0 0 0-.9727-.205c-1.3369 0-2.418 1.0815-2.418 2.418 0 .0647.0043.1266.0078.1913-.1299-.119-.2995-.1953-.4902-.1953-.4001 0-.7246.321-.7246.7207 0 .4002.3245.713.7246.7207h3.5489c.6808-1.448 2.1364-2.4062 3.8222-2.4062.8177 0 1.5803.2409 2.2285.6445a5.701 5.701 0 0 1 1.5137-2.125c-.02 [...]
\ No newline at end of file
diff --git a/website/static/img/services/sftp.svg b/website/static/img/services/sftp.svg
new file mode 100644
index 000000000..191f84e80
--- /dev/null
+++ b/website/static/img/services/sftp.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#334155"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" fill="#ffffff">SFTP</text></svg>
diff --git a/website/static/img/services/sled.svg b/website/static/img/services/sled.svg
new file mode 100644
index 000000000..8bed197e1
--- /dev/null
+++ b/website/static/img/services/sled.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#7c2d12"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" fill="#ffffff">sled</text></svg>
diff --git a/website/static/img/services/sqlite.svg b/website/static/img/services/sqlite.svg
new file mode 100644
index 000000000..3bfccb838
--- /dev/null
+++ b/website/static/img/services/sqlite.svg
@@ -0,0 +1 @@
+<svg fill="#003B57" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>SQLite</title><path d="M21.678.521c-1.032-.92-2.28-.55-3.513.544a8.71 8.71 0 0 0-.547.535c-2.109 2.237-4.066 6.38-4.674 9.544.237.48.422 1.093.544 1.561a13.044 13.044 0 0 1 .164.703s-.019-.071-.096-.296l-.05-.146a1.689 1.689 0 0 0-.033-.08c-.138-.32-.518-.995-.686-1.289-.143.423-.27.818-.376 1.176.484.884.778 2.4.778 2.4s-.025-.099-.147-.442c-.107-.303-.644-1.244-.772-1.464-.217.804-.304 1.346-.2 [...]
\ No newline at end of file
diff --git a/website/static/img/services/surrealdb.svg b/website/static/img/services/surrealdb.svg
new file mode 100644
index 000000000..6a17d53e9
--- /dev/null
+++ b/website/static/img/services/surrealdb.svg
@@ -0,0 +1 @@
+<svg fill="#FF00A0" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>SurrealDB</title><path d="m12 6.314 5.714 3.165v-1.27L12 5.054c-.85.47-4.957 2.74-5.714 3.157.703.39 8.085 4.467 12.572 6.946v1.264L12 20.209c-1.71-.943-5.15-2.844-6.858-3.79v-3.788L12 16.42l1.144-.632-9.146-5.05v6.316L12 21.472l8-4.42v-2.526L8.57 8.21Zm-8.002.632v2.528l11.428 6.316-3.428 1.896-5.714-3.165v1.27l5.714 3.156c.85-.47 4.957-2.74 5.714-3.157-.703-.39-8.083-4.467-12.57-6.948V7.578L12 3 [...]
\ No newline at end of file
diff --git a/website/static/img/services/swift.svg b/website/static/img/services/swift.svg
new file mode 100644
index 000000000..c8cfaa9e9
--- /dev/null
+++ b/website/static/img/services/swift.svg
@@ -0,0 +1 @@
+<svg fill="#ED1944" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OpenStack</title><path d="M18.575 9.29h5.418v5.42h-5.418zM0 9.29h5.419v5.42H0zm18.575 7.827a1.207 1.207 0 0 1-1.206 1.206H6.623a1.207 1.207 0 0 1-1.205-1.206v-.858H0v5.252a2.236 2.236 0 0 0 2.229 2.23h19.53A2.237 2.237 0 0 0 24 21.512V16.26h-5.425zM21.763.258H2.233a2.236 2.236 0 0 0-2.23 2.23V7.74h5.419v-.858a1.206 1.206 0 0 1 1.205-1.206h10.746a1.206 1.206 0 0 1 1.205 1.206v.858H24V2.487A2.237 2 [...]
\ No newline at end of file
diff --git a/website/static/img/services/tikv.svg b/website/static/img/services/tikv.svg
new file mode 100644
index 000000000..52139a6f4
--- /dev/null
+++ b/website/static/img/services/tikv.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#0f172a"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="18" font-weight="700" fill="#ffffff">TiKV</text></svg>
diff --git a/website/static/img/services/tos.svg b/website/static/img/services/tos.svg
new file mode 100644
index 000000000..f54ff6cf7
--- /dev/null
+++ b/website/static/img/services/tos.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M8.32509 7.82098C8.75769 7.07208 9.83981 7.072 10.2724 7.82098L14.0028 14.2839L15.6063 11.5085C16.1255 10.6097 17.4233 10.6095 17.9423 11.5085L21.7352 18.0778C22.254 18.9766 21.605 20.1009 20.5673 20.1013H15.4306C15.4258 20.1013 15.4207 20.1022 15.4159 20.1022H3.18153C2.3166 20.1021 1.77648 19.1658 2.20888 18.4167L8.32509 7.82098Z" fill="#0C0D0E"/>
+<path d="M17.8622 2.89078C17.9698 2.59094 18.3938 2.59094 18.5014 2.89078C18.8947 3.98713 19.7845 4.8321 20.8997 5.1683C21.2283 5.26737 21.2283 5.73263 20.8997 5.8317C19.7845 6.1679 18.8947 7.01287 18.5014 8.10922C18.3938 8.40906 17.9698 8.40906 17.8622 8.10922L17.8037 7.94606C17.4437 6.94267 16.6657 6.14504 15.6717 5.7601C15.4341 5.66809 15.4341 5.33191 15.6717 5.2399C16.6657 4.85496 17.4437 4.05733 17.8037 3.05394L17.8622 2.89078Z" fill="#0C0D0E"/>
+</svg>
diff --git a/website/static/img/services/upyun.svg b/website/static/img/services/upyun.svg
new file mode 100644
index 000000000..bb1b1d4d3
--- /dev/null
+++ b/website/static/img/services/upyun.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#38bdf8"/><text x="32" y="39" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="15" font-weight="700" fill="#083344">UPYUN</text></svg>
diff --git a/website/static/img/services/vercel.svg b/website/static/img/services/vercel.svg
new file mode 100644
index 000000000..d0ebd3213
--- /dev/null
+++ b/website/static/img/services/vercel.svg
@@ -0,0 +1 @@
+<svg fill="#000000" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Vercel</title><path d="m12 1.608 12 20.784H0Z"/></svg>
\ No newline at end of file
diff --git a/website/static/img/services/webdav.svg b/website/static/img/services/webdav.svg
new file mode 100644
index 000000000..bec112d25
--- /dev/null
+++ b/website/static/img/services/webdav.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="12" fill="#7c3aed"/><text x="32" y="38" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-size="13" font-weight="700" fill="#ffffff">WebDAV</text></svg>
diff --git a/website/static/img/services/yandex-disk.svg b/website/static/img/services/yandex-disk.svg
new file mode 100644
index 000000000..1fa5c8ebd
--- /dev/null
+++ b/website/static/img/services/yandex-disk.svg
@@ -0,0 +1 @@
+<svg fill="#5282FF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Yandex Cloud</title><path d="M12 0C5.38 0 0 5.38 0 12s5.38 12 12 12 12-5.38 12-12S18.62 0 12 0zM7.163 20.618C4.152 18.927 2.12 15.702 2.12 12c0-5.46 4.42-9.88 9.88-9.88 1.429 0 2.496.536 3.029 1.187.534.65.684 1.715.5 3.253l-3.207.631c-2.905.532-4.506 2.148-5.06 5.065-.07.406-.15.812-.226 1.196-.031.157-.062.312-.09.46-.073.396-.143.773-.208 1.124-.093.505-.177.957-.247 1.34-.324 1.884-.06 3.276. [...]
\ No newline at end of file