CINXE.COM

<!DOCTYPE html><html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-core" data-has-hydrated="false"><head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v3.6.1"> <title data-rh="true">Core | Apache OpenDAL™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/core/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Core | Apache OpenDAL™"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://opendal.apache.org/core/"><link data-rh="true" rel="alternate" href="https://opendal.apache.org/core/" hreflang="en"><link data-rh="true" rel="alternate" href="https://opendal.apache.org/core/" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache OpenDAL™ RSS Feed"> <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.9369d349.css"> <script src="/assets/js/runtime~main.ae361215.js" defer="defer"></script> <script src="/assets/js/main.e2fbe84c.js" defer="defer"></script> </head> <body class="navigation-with-keyboard"> <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_mbPH" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" target="_self" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="Apache OpenDAL" class="themedComponent_uAN0 themedComponent--light_SXb1" height="32"><img src="/img/logo_dark.svg" alt="Apache OpenDAL" class="themedComponent_uAN0 themedComponent--dark_SjJw" height="32"></div></a></div><div class="navbar__items navbar__items--right"><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/">Docs</a><a class="navbar__item navbar__link" href="/blog/">Blog</a><a class="navbar__item navbar__link" href="/community/">Community</a><a class="navbar__item navbar__link" href="/download/">Download</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">ASF</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Foundation</a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">License</a></li><li><a href="https://www.apache.org/events/current-event.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Privacy</a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship</a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks</a></li><li><a href="https://www.apache.org/foundation/policies/conduct.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Code of Conduct</a></li></ul></div><a href="https://github.com/apache/opendal" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><a href="https://discord.gg/XQy8yGR2dg" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-discord-link" aria-label="Discord"></a><div class="navbarSearchContainer_cX17"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_NfWm"><div class="docsWrapper_EXDp"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_FqST" type="button"></button><div class="docRoot_FdVe"><aside class="theme-doc-sidebar-container docSidebarContainer_MTQP"><div class="sidebarViewport_zfgy"><div class="sidebar_qrCB"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_Mn2C"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/vision/">Vision</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/core/">Core</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" href="/category/bindings/">Bindings</a><button aria-label="Collapse sidebar category 'Bindings'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/c/">C 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/cpp/">Cpp 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/d/">D 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/dart/">Dart 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/dotnet/">Dotnet 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/go/">Go</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/haskell/">Haskell 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/java/">Java</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/lua/">Lua 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/nodejs/">Node.js</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/ocaml/">Ocaml 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/php/">PHP 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/python/">Python</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/ruby/">Ruby 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/swift/">Swift 🚧</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/bindings/zig/">Zig 🚧</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" href="/category/integrations/">Integrations</a><button aria-label="Collapse sidebar category 'Integrations'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/cloud_filter/">Cloud Filter</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/dav_server/">Dav Server</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/fuse3/">Fuse3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/object_store/">Object Store</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/parquet/">Parquet</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/spring/">Spring</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/unftp_sbe/">Unftp Sbe</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/integrations/virtiofs/">Virtiofs</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" href="/category/applications/">Applications</a><button aria-label="Collapse sidebar category 'Applications'" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/apps/oay/">Oay</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/apps/ofs/">Ofs</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/apps/oli/">Oli</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_Ztw0"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_fzqc"><div class="docItemContainer_mgxp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_jTIh" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_crCa"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Core</span><meta itemprop="position" content="1"></li></ul></nav><div class="tocCollapsible__3CD theme-doc-toc-mobile tocMobile_l2EP"><button type="button" class="clean-btn tocCollapsibleButton_Vl9O">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Core</h1></header><header><h2 id="apache-opendal-rust-core-one-layer-all-storage">Apache OpenDAL™ Rust Core: One Layer, All Storage.</h2></header> <p><a href="https://github.com/apache/opendal/actions?query=branch%3Amain"><img decoding="async" loading="lazy" src="/img/external/d72b608ed149e7c35843c1cf675575a4.svg" alt="Build Status" class="img_hjxC"></a> <a href="https://crates.io/crates/opendal"><img decoding="async" loading="lazy" src="/img/external/588af842932c40a78cc2afe70ce679e1.svg" alt="Latest Version" class="img_hjxC"></a> <a href="https://crates.io/crates/opendal"><img decoding="async" loading="lazy" src="/img/external/3f78235565441f57291f2f43533e8a26.svg" alt="Crate Downloads" class="img_hjxC"></a> <a href="https://opendal.apache.org/discord"><img decoding="async" loading="lazy" src="/img/external/6564632a3de5ae36e76129dad4c34d7c.svg" alt="chat" class="img_hjxC"></a></p> <p>Apache OpenDAL™ is an Open Data Access Layer that enables seamless interaction with diverse storage services.</p> <img decoding="async" loading="lazy" src="/img/external/e90fb803e25e12f621eafa3d092fe628.png" alt="OpenDAL Architectural" width="61.8%" class="img_hjxC"> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="useful-links">Useful Links<a href="#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links">​</a></h2> <ul> <li>Documentation: <a href="https://docs.rs/opendal/">release</a> | <a href="https://opendal.apache.org/docs/rust/opendal/">dev</a></li> <li><a href="https://github.com/apache/opendal/blob/main/core/examples">Examples</a></li> <li><a href="https://docs.rs/opendal/latest/opendal/docs/changelog/index.html">Release Notes</a></li> <li><a href="https://docs.rs/opendal/latest/opendal/docs/upgrade/index.html">Upgrade Guide</a></li> <li><a href="https://docs.rs/opendal/latest/opendal/docs/rfcs/index.html">RFC List</a></li> </ul> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="services">Services<a href="#services" class="hash-link" aria-label="Direct link to Services" title="Direct link to Services">​</a></h2> <p>OpenDAL supports the following storage <a href="https://docs.rs/opendal/latest/opendal/services/index.html">services</a>:</p> <table><thead><tr><th>Type</th><th>Services</th></tr></thead><tbody><tr><td>Standard Storage Protocols</td><td>ftp http <a href="https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-02">sftp</a> <a href="https://datatracker.ietf.org/doc/html/rfc4918">webdav</a></td></tr><tr><td>Object Storage Services</td><td><a href="https://azure.microsoft.com/en-us/services/storage/blobs/">azblob</a> <a href="https://www.tencentcloud.com/products/cos">cos</a> <a href="https://cloud.google.com/storage">gcs</a> <a href="https://www.huaweicloud.com/intl/en-us/product/obs.html">obs</a> <a href="https://www.aliyun.com/product/oss">oss</a> <a href="https://aws.amazon.com/s3/">s3</a> <br> <a href="https://www.backblaze.com/">b2</a> <a href="https://docs.openstack.org/swift/latest/">openstack_swift</a> <a href="https://www.upyun.com/">upyun</a> <a href="https://vercel.com/docs/storage/vercel-blob">vercel_blob</a></td></tr><tr><td>File Storage Services</td><td>fs <a href="https://docs.alluxio.io/os/user/stable/en/api/REST-API.html">alluxio</a> <a href="https://azure.microsoft.com/en-us/products/storage/data-lake-storage/">azdls</a> <a href="https://learn.microsoft.com/en-us/rest/api/storageservices/file-service-rest-api">azfile</a> <a href="https://github.com/compio-rs/compio/">compfs</a> <br> <a href="https://docs.databricks.com/en/dbfs/index.html">dbfs</a> <a href="https://www.mongodb.com/docs/manual/core/gridfs/">gridfs</a> <a href="https://hadoop.apache.org/docs/r3.3.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html">hdfs</a> <a href="https://github.com/Kimahriman/hdfs-native">hdfs_native</a> <a href="https://ipfs.tech/">ipfs</a> <a href="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html">webhdfs</a></td></tr><tr><td>Consumer Cloud Storage Service</td><td><a href="https://www.aliyundrive.com/">aliyun_drive</a> <a href="https://www.google.com/drive/">gdrive</a> <a href="https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage">onedrive</a> <a href="https://www.dropbox.com/">dropbox</a> <a href="https://www.icloud.com/iclouddrive">icloud</a> <a href="https://koofr.eu/">koofr</a> <br> <a href="https://www.pcloud.com/">pcloud</a> <a href="https://www.seafile.com/">seafile</a> <a href="https://360.yandex.com/disk/">yandex_disk</a></td></tr><tr><td>Key-Value Storage Services</td><td><a href="https://crates.io/crates/cacache">cacache</a> <a href="https://developers.cloudflare.com/kv/">cloudflare_kv</a> <a href="https://github.com/xacrimon/dashmap">dashmap</a> memory <a href="https://etcd.io/">etcd</a> <br> <a href="https://www.foundationdb.org/">foundationdb</a> <a href="https://crates.io/crates/persy">persy</a> <a href="https://redis.io/">redis</a> <a href="http://rocksdb.org/">rocksdb</a> <a href="https://crates.io/crates/sled">sled</a> <br> <a href="https://crates.io/crates/redb">redb</a> <a href="https://tikv.org/">tikv</a> <a href="https://github.com/atomicdata-dev/atomic-server">atomicserver</a></td></tr><tr><td>Database Storage Services</td><td><a href="https://developers.cloudflare.com/d1/">d1</a> <a href="https://www.mongodb.com/">mongodb</a> <a href="https://www.mysql.com/">mysql</a> <a href="https://www.postgresql.org/">postgresql</a> <a href="https://www.sqlite.org/">sqlite</a> <a href="https://surrealdb.com/">surrealdb</a></td></tr><tr><td>Cache Storage Services</td><td><a href="https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows">ghac</a> <a href="https://memcached.org/">memcached</a> <a href="https://github.com/moka-rs/mini-moka">mini_moka</a> <a href="https://github.com/moka-rs/moka">moka</a> <a href="https://vercel.com/docs/concepts/monorepos/remote-caching">vercel_artifacts</a></td></tr><tr><td>Git Based Storage Services</td><td><a href="https://huggingface.co/">huggingface</a></td></tr></tbody></table> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="layers">Layers<a href="#layers" class="hash-link" aria-label="Direct link to Layers" title="Direct link to Layers">​</a></h2> <p>OpenDAL supports the following storage <a href="https://docs.rs/opendal/latest/opendal/layers/index.html">layers</a> to extend the behavior:</p> <table><thead><tr><th>Name</th><th>Depends</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.AsyncBacktraceLayer.html"><code>AsyncBacktraceLayer</code></a></td><td><a href="https://github.com/tokio-rs/async-backtrace">async-backtrace</a></td><td>Add Efficient, logical 'stack' traces of async functions for the underlying services.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.AwaitTreeLayer.html"><code>AwaitTreeLayer</code></a></td><td><a href="https://github.com/risingwavelabs/await-tree">await-tree</a></td><td>Add a Instrument await-tree for actor-based applications to the underlying services.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.BlockingLayer.html"><code>BlockingLayer</code></a></td><td><a href="https://github.com/tokio-rs/tokio">tokio</a></td><td>Add blocking API support for non-blocking services.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.ChaosLayer.html"><code>ChaosLayer</code></a></td><td><a href="https://github.com/rust-random/rand">rand</a></td><td>Inject chaos into underlying services for robustness test.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.ConcurrentLimitLayer.html"><code>ConcurrentLimitLayer</code></a></td><td><a href="https://github.com/tokio-rs/tokio">tokio</a></td><td>Add concurrent request limit.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.DtraceLayer.html"><code>DtraceLayer</code></a></td><td><a href="https://github.com/cuviper/probe-rs">probe</a></td><td>Support User Statically-Defined Tracing(aka USDT) on Linux</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.LoggingLayer.html"><code>LoggingLayer</code></a></td><td><a href="https://github.com/rust-lang/log">log</a></td><td>Add log for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.MetricsLayer.html"><code>MetricsLayer</code></a></td><td><a href="https://github.com/metrics-rs/metrics">metrics</a></td><td>Add metrics for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.MimeGuessLayer.html"><code>MimeGuessLayer</code></a></td><td><a href="https://github.com/abonander/mime_guess">mime_guess</a></td><td>Add <code>Content-Type</code> automatically based on the file extension in the operation path.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.FastraceLayer.html"><code>FastraceLayer</code></a></td><td><a href="https://github.com/fastracelabs/fastrace">fastrace</a></td><td>Add fastrace for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.OtelMetricsLayer.html"><code>OtelMetricsLayer</code></a></td><td>[opentelemetry::metrics]</td><td>Add opentelemetry::metrics for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.OtelTraceLayer.html"><code>OtelTraceLayer</code></a></td><td><a href="https://docs.rs/opentelemetry/latest/opentelemetry/trace/index.html">opentelemetry::trace</a></td><td>Add opentelemetry::trace for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.PrometheusClientLayer.html"><code>PrometheusClientLayer</code></a></td><td><a href="https://github.com/prometheus/client_rust">prometheus_client</a></td><td>Add prometheus metrics for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.PrometheusLayer.html"><code>PrometheusLayer</code></a></td><td><a href="https://github.com/tikv/rust-prometheus">prometheus</a></td><td>Add prometheus metrics for every operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.RetryLayer.html"><code>RetryLayer</code></a></td><td><a href="https://github.com/Xuanwo/backon">backon</a></td><td>Add retry for temporary failed operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.ThrottleLayer.html"><code>ThrottleLayer</code></a></td><td><a href="https://github.com/boinkor-net/governor">governor</a></td><td>Add a bandwidth rate limiter to the underlying services.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.TimeoutLayer.html"><code>TimeoutLayer</code></a></td><td><a href="https://github.com/tokio-rs/tokio">tokio</a></td><td>Add timeout for every operations to avoid slow or unexpected hang operations.</td></tr><tr><td><a href="https://docs.rs/opendal/latest/opendal/layers/struct.TracingLayer.html"><code>TracingLayer</code></a></td><td><a href="https://github.com/tokio-rs/tracing">tracing</a></td><td>Add tracing for every operations.</td></tr></tbody></table> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="quickstart">Quickstart<a href="#quickstart" class="hash-link" aria-label="Direct link to Quickstart" title="Direct link to Quickstart">​</a></h2> <div class="language-rust codeBlockContainer_HoUO theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_fLNQ"><pre tabindex="0" class="prism-code language-rust codeBlock_OwT2 thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_CaTV"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">opendal</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">::</span><span class="token class-name">Result</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">opendal</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">::</span><span class="token namespace" style="opacity:0.7">layers</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">::</span><span class="token class-name">LoggingLayer</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">opendal</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">::</span><span class="token plain">services</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">use</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">opendal</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">::</span><span class="token class-name">Operator</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token attribute attr-name" style="color:#00a4db">#[tokio::main]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-&gt;</span><span class="token plain"> </span><span class="token class-name">Result</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Pick a builder and configure it.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">mut</span><span class="token plain"> builder </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token namespace" style="opacity:0.7">services</span><span class="token namespace punctuation" style="opacity:0.7;color:#393A34">::</span><span class="token constant" style="color:#36acaa">S3</span><span class="token punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">default</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> builder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">bucket</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"test"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Init an operator</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> op </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token class-name">Operator</span><span class="token punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">new</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">builder</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">?</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Init with logging layer enabled.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">layer</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">LoggingLayer</span><span class="token punctuation" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">default</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">finish</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Write data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> op</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">write</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"hello.txt"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, World!"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword" style="color:#00009f">await</span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Read data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> bs </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> op</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">read</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"hello.txt"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword" style="color:#00009f">await</span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Fetch metadata</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> meta </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> op</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stat</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"hello.txt"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword" style="color:#00009f">await</span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> mode </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> meta</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">mode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> length </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> meta</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">content_length</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Delete</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> op</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">delete</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"hello.txt"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword" style="color:#00009f">await</span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token class-name">Ok</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_ry9d"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_hlAx" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_e2oV"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_Kvv3"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples">​</a></h2> <table><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><a href="https://github.com/apache/opendal/blob/main/core/examples/basic">Basic</a></td><td>Show how to use opendal to operate storage service.</td></tr><tr><td><a href="https://github.com/apache/opendal/blob/main/core/examples/concurrent-upload">Concurrent Upload</a></td><td>Show how to perform upload concurrently to a storage service.</td></tr><tr><td><a href="https://github.com/apache/opendal/blob/main/core/examples/multipart-upload">Multipart Upload</a></td><td>Show how to perform a multipart upload to a storage service.</td></tr></tbody></table> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="contributing">Contributing<a href="#contributing" class="hash-link" aria-label="Direct link to Contributing" title="Direct link to Contributing">​</a></h2> <p>Check out the <a href="https://github.com/apache/opendal/blob/main/core/CONTRIBUTING.md">CONTRIBUTING</a> guide for more details on getting started with contributing to this project.</p> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="used-by">Used by<a href="#used-by" class="hash-link" aria-label="Direct link to Used by" title="Direct link to Used by">​</a></h2> <p>Check out the <a href="https://github.com/apache/opendal/blob/main/core/users.md">users</a> list for more details on who is using OpenDAL.</p> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="branding">Branding<a href="#branding" class="hash-link" aria-label="Direct link to Branding" title="Direct link to Branding">​</a></h2> <p>The first and most prominent mentions must use the full form: <strong>Apache OpenDAL™</strong> of the name for any individual usage (webpage, handout, slides, etc.) Depending on the context and writing style, you should use the full form of the name sufficiently often to ensure that readers clearly understand the association of both the OpenDAL project and the OpenDAL software product to the ASF as the parent organization.</p> <p>For more details, see the <a href="https://www.apache.org/foundation/marks/guide">Apache Product Name Usage Guide</a>.</p> <h2 class="anchor anchorWithStickyNavbar_hDRy" id="license-and-trademarks">License and Trademarks<a href="#license-and-trademarks" class="hash-link" aria-label="Direct link to License and Trademarks" title="Direct link to License and Trademarks">​</a></h2> <p>Licensed under the Apache License, Version 2.0: <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p> <p>Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/opendal/tree/main/website/docs/10-core.mdx" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_vgs4" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_l9Jf"><span class="theme-last-updated">Last updated<!-- --> on <b><time datetime="2025-03-10T10:15:25.000Z" itemprop="dateModified">Mar 10, 2025</time></b> by <b>Xuanwo</b></span></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/vision/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Vision</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/category/bindings/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Bindings</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_f6Mq thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#useful-links" class="table-of-contents__link toc-highlight">Useful Links</a></li><li><a href="#services" class="table-of-contents__link toc-highlight">Services</a></li><li><a href="#layers" class="table-of-contents__link toc-highlight">Layers</a></li><li><a href="#quickstart" class="table-of-contents__link toc-highlight">Quickstart</a></li><li><a href="#examples" class="table-of-contents__link toc-highlight">Examples</a></li><li><a href="#contributing" class="table-of-contents__link toc-highlight">Contributing</a></li><li><a href="#used-by" class="table-of-contents__link toc-highlight">Used by</a></li><li><a href="#branding" class="table-of-contents__link toc-highlight">Branding</a></li><li><a href="#license-and-trademarks" class="table-of-contents__link toc-highlight">License and Trademarks</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://www.apache.org/" rel="noopener noreferrer" class="footerLogoLink_iEtV"><img src="/./img/asf_logo_wide.svg" alt="Apache Software Foundation" class="footer__logo themedComponent_uAN0 themedComponent--light_SXb1" width="300"><img src="/./img/asf_logo_wide.svg" alt="Apache Software Foundation" class="footer__logo themedComponent_uAN0 themedComponent--dark_SjJw" width="300"></a></div><div class="footer__copyright">Copyright © 2022-2025, The Apache Software Foundation<br>Apache OpenDAL, OpenDAL, Apache, the Apache feather and the Apache OpenDAL project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div> </body></html>

Pages: 1 2 3 4 5 6 7 8 9 10