[{"data":1,"prerenderedAt":722},["ShallowReactive",2],{"post-\u002Fblog\u002Fs3-explorer-walkthrough":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"author":11,"tags":12,"video":17,"videoPoster":18,"videoDuration":19,"body":20,"_type":716,"_id":717,"_source":718,"_file":719,"_stem":720,"_extension":721},"\u002Fblog\u002Fs3-explorer-walkthrough","blog",false,"","S3 Explorer walkthrough: zero to browsing in 5 minutes","A step-by-step walkthrough of S3 Explorer against a live S3 endpoint: pick a provider, test, browse buckets, inspect metadata, read request metrics.","2026-10-30","Clement Baranger",[13,14,15,16],"s3","tutorial","tooling","seaweedfs","\u002Fvideos\u002Fs3explorer-teaser.mp4","\u002Fvideos\u002Fs3-explorer-teaser-poster.webp","PT30S",{"type":21,"children":22,"toc":704},"root",[23,129,134,146,153,165,184,196,202,213,228,233,273,299,305,315,330,342,348,353,368,381,387,392,407,425,431,436,451,499,505,510,525,543,549,554,569,574,645,657,663,676,681],{"type":24,"tag":25,"props":26,"children":29},"element","div",{"className":27},[28],"clipblock",[30,63],{"type":24,"tag":31,"props":32,"children":35},"figure",{"className":33},[34],"clip",[36,39,56,57],{"type":37,"value":38},"text","\n  ",{"type":24,"tag":40,"props":41,"children":46},"video",{"controls":42,"playsInline":42,"preload":43,"poster":18,"width":44,"height":45},true,"metadata",1080,1920,[47,49,54],{"type":37,"value":48},"\n    ",{"type":24,"tag":50,"props":51,"children":53},"source",{"src":17,"type":52},"video\u002Fmp4",[],{"type":37,"value":55},"\n    Your browser does not support embedded video.\n  ",{"type":37,"value":38},{"type":24,"tag":58,"props":59,"children":60},"figcaption",{},[61],{"type":37,"value":62},"30-second overview. The app screens in it are real captures from the session below; the rest is title cards.",{"type":24,"tag":25,"props":64,"children":67},{"className":65},[66],"clipside",[68,69,77,78],{"type":37,"value":38},{"type":24,"tag":70,"props":71,"children":74},"p",{"className":72},[73],"label",[75],{"type":37,"value":76},"What it covers",{"type":37,"value":38},{"type":24,"tag":79,"props":80,"children":81},"ul",{},[82,83,95,96,106,107,117,118,128],{"type":37,"value":48},{"type":24,"tag":84,"props":85,"children":86},"li",{},[87,93],{"type":24,"tag":88,"props":89,"children":90},"strong",{},[91],{"type":37,"value":92},"Pick a provider.",{"type":37,"value":94}," 25 presets — AWS, R2, B2, Wasabi, MinIO, SeaweedFS — with endpoint and region filled in.",{"type":37,"value":48},{"type":24,"tag":84,"props":97,"children":98},{},[99,104],{"type":24,"tag":88,"props":100,"children":101},{},[102],{"type":37,"value":103},"Test before you save.",{"type":37,"value":105}," The connection is checked and the bucket count confirmed.",{"type":37,"value":48},{"type":24,"tag":84,"props":108,"children":109},{},[110,115],{"type":24,"tag":88,"props":111,"children":112},{},[113],{"type":37,"value":114},"Browse, preview, inspect.",{"type":37,"value":116}," Buckets, folders, object metadata, versions.",{"type":37,"value":48},{"type":24,"tag":84,"props":119,"children":120},{},[121,126],{"type":24,"tag":88,"props":122,"children":123},{},[124],{"type":37,"value":125},"Count the requests.",{"type":37,"value":127}," Local per-operation metrics, the number most clients hide.",{"type":37,"value":38},{"type":24,"tag":70,"props":130,"children":131},{},[132],{"type":37,"value":133},"Most S3 clients assume you already know your endpoint format, your addressing mode and which fields are optional. S3 Explorer takes the opposite route: you pick your provider from a list, and the connection form configures itself.",{"type":24,"tag":70,"props":135,"children":136},{},[137,139,144],{"type":37,"value":138},"This walkthrough shows the whole path — installation to first object — on a real session. The endpoint is a local ",{"type":24,"tag":88,"props":140,"children":141},{},[142],{"type":37,"value":143},"SeaweedFS",{"type":37,"value":145}," gateway (not an AWS account), because that keeps the demo reproducible and free. Nothing changes for AWS, R2, B2 or Wasabi: only the provider tile you click.",{"type":24,"tag":147,"props":148,"children":150},"h2",{"id":149},"step-1-pick-a-provider",[151],{"type":37,"value":152},"Step 1 — Pick a provider",{"type":24,"tag":70,"props":154,"children":155},{},[156,158,163],{"type":37,"value":157},"Open the app and hit ",{"type":24,"tag":88,"props":159,"children":160},{},[161],{"type":37,"value":162},"+ Add",{"type":37,"value":164},". Before showing you a single field, it asks which provider you are connecting to.",{"type":24,"tag":31,"props":166,"children":167},{},[168,169,178,179],{"type":37,"value":38},{"type":24,"tag":170,"props":171,"children":177},"img",{"src":172,"alt":173,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F01-provider-picker.webp","S3 Explorer provider picker with 25 presets, filter tabs for Cloud, Specialist, Self-hosted and Enterprise",1200,804,"lazy",[],{"type":37,"value":38},{"type":24,"tag":58,"props":180,"children":181},{},[182],{"type":37,"value":183},"25 presets, filtered by category. Custom\u002FOther is there for anything not listed.",{"type":24,"tag":70,"props":185,"children":186},{},[187,189,194],{"type":37,"value":188},"Twenty-five providers ship with the app, grouped into Cloud, Specialist, Self-hosted and Enterprise. The first tile — ",{"type":24,"tag":88,"props":190,"children":191},{},[192],{"type":37,"value":193},"Custom \u002F Other",{"type":37,"value":195}," — is the escape hatch for private endpoints.",{"type":24,"tag":147,"props":197,"children":199},{"id":198},"step-2-the-form-configures-itself",[200],{"type":37,"value":201},"Step 2 — The form configures itself",{"type":24,"tag":70,"props":203,"children":204},{},[205,207,211],{"type":37,"value":206},"Pick ",{"type":24,"tag":88,"props":208,"children":209},{},[210],{"type":37,"value":143},{"type":37,"value":212}," and the form arrives pre-filled with the endpoint format, the default port and the addressing mode that provider requires.",{"type":24,"tag":31,"props":214,"children":215},{},[216,217,222,223],{"type":37,"value":38},{"type":24,"tag":170,"props":218,"children":221},{"src":219,"alt":220,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F02-connection-form.webp","Connection form pre-configured for SeaweedFS with endpoint URL, region, credentials and path-style addressing",[],{"type":37,"value":38},{"type":24,"tag":58,"props":224,"children":225},{},[226],{"type":37,"value":227},"Provider chosen: the endpoint format, the default region and path-style addressing are already set.",{"type":24,"tag":70,"props":229,"children":230},{},[231],{"type":37,"value":232},"Two details worth noting, because they are where most S3 connections fail:",{"type":24,"tag":79,"props":234,"children":235},{},[236,263],{"type":24,"tag":84,"props":237,"children":238},{},[239,244,246,252,254,261],{"type":24,"tag":88,"props":240,"children":241},{},[242],{"type":37,"value":243},"Force path-style addressing",{"type":37,"value":245}," is already ticked, with the note ",{"type":24,"tag":247,"props":248,"children":249},"em",{},[250],{"type":37,"value":251},"\"required for SeaweedFS\"",{"type":37,"value":253},". Bucket-in-hostname addressing (",{"type":24,"tag":255,"props":256,"children":258},"code",{"className":257},[],[259],{"type":37,"value":260},"bucket.endpoint",{"type":37,"value":262},") breaks on most self-hosted gateways.",{"type":24,"tag":84,"props":264,"children":265},{},[266,271],{"type":24,"tag":88,"props":267,"children":268},{},[269],{"type":37,"value":270},"Anonymous connection",{"type":37,"value":272}," is a separate, explicit toggle — read-only access for public buckets, no credentials stored.",{"type":24,"tag":70,"props":274,"children":275},{},[276,278,283,285,290,292,297],{"type":37,"value":277},"The provider context also carries documentation: ",{"type":24,"tag":247,"props":279,"children":280},{},[281],{"type":37,"value":282},"Endpoint Format",{"type":37,"value":284},", ",{"type":24,"tag":247,"props":286,"children":287},{},[288],{"type":37,"value":289},"Where to Find Credentials",{"type":37,"value":291}," and ",{"type":24,"tag":247,"props":293,"children":294},{},[295],{"type":37,"value":296},"Tips & Notes",{"type":37,"value":298}," expand inline, so you don't leave the app to read a wiki.",{"type":24,"tag":147,"props":300,"children":302},{"id":301},"step-3-test-before-you-save",[303],{"type":37,"value":304},"Step 3 — Test before you save",{"type":24,"tag":70,"props":306,"children":307},{},[308,313],{"type":24,"tag":88,"props":309,"children":310},{},[311],{"type":37,"value":312},"Test Connection",{"type":37,"value":314}," runs the real call — it does not just ping the host.",{"type":24,"tag":31,"props":316,"children":317},{},[318,319,324,325],{"type":37,"value":38},{"type":24,"tag":170,"props":320,"children":323},{"src":321,"alt":322,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F03-test-success.webp","Successful connection test showing Found 3 buckets before saving the profile",[],{"type":37,"value":38},{"type":24,"tag":58,"props":326,"children":327},{},[328],{"type":37,"value":329},"Successfully connected. Found 3 buckets.",{"type":24,"tag":70,"props":331,"children":332},{},[333,335,340],{"type":37,"value":334},"The message tells you what actually happened: ",{"type":24,"tag":247,"props":336,"children":337},{},[338],{"type":37,"value":339},"\"Successfully connected. Found 3 buckets.\"",{"type":37,"value":341}," A wrong key, a wrong region or a blocked ListBuckets call each produce a different failure — and you find out here, not after saving a broken profile.",{"type":24,"tag":147,"props":343,"children":345},{"id":344},"step-4-buckets-land-in-the-sidebar",[346],{"type":37,"value":347},"Step 4 — Buckets land in the sidebar",{"type":24,"tag":70,"props":349,"children":350},{},[351],{"type":37,"value":352},"Save, and the connection shows up on the left with its buckets underneath.",{"type":24,"tag":31,"props":354,"children":355},{},[356,357,362,363],{"type":37,"value":38},{"type":24,"tag":170,"props":358,"children":361},{"src":359,"alt":360,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F04-buckets.webp","Sidebar listing the SeaweedFS connection and three buckets under it",[],{"type":37,"value":38},{"type":24,"tag":58,"props":364,"children":365},{},[366],{"type":37,"value":367},"One connection, three buckets, loaded on selection.",{"type":24,"tag":70,"props":369,"children":370},{},[371,373,379],{"type":37,"value":372},"The sidebar keeps connections and buckets in one tree, so switching between two accounts is a click rather than a dialog. Each bucket shows its size and object count once loaded — here ",{"type":24,"tag":255,"props":374,"children":376},{"className":375},[],[377],{"type":37,"value":378},"863.85 KB · 18 objects",{"type":37,"value":380},".",{"type":24,"tag":147,"props":382,"children":384},{"id":383},"step-5-browse",[385],{"type":37,"value":386},"Step 5 — Browse",{"type":24,"tag":70,"props":388,"children":389},{},[390],{"type":37,"value":391},"Open a bucket and you get a plain table: name, size, last modified.",{"type":24,"tag":31,"props":393,"children":394},{},[395,396,401,402],{"type":37,"value":38},{"type":24,"tag":170,"props":397,"children":400},{"src":398,"alt":399,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F05-file-list.webp","File listing of the 2026-10 prefix showing 14 JPEG objects with sizes and modified dates",[],{"type":37,"value":38},{"type":24,"tag":58,"props":403,"children":404},{},[405],{"type":37,"value":406},"14 objects in a prefix, with the running totals in the footer.",{"type":24,"tag":70,"props":408,"children":409},{},[410,412,417,418,423],{"type":37,"value":411},"The footer keeps a running total — ",{"type":24,"tag":247,"props":413,"children":414},{},[415],{"type":37,"value":416},"14 items (0 Folders, 14 Files)",{"type":37,"value":291},{"type":24,"tag":247,"props":419,"children":420},{},[421],{"type":37,"value":422},"841.99 KB",{"type":37,"value":424}," — which is the number you actually need when you are deciding whether a prefix is worth moving. Folders are prefixes, and double-clicking opens them like directories, without a re-listing round-trip.",{"type":24,"tag":147,"props":426,"children":428},{"id":427},"step-6-look-inside-an-object",[429],{"type":37,"value":430},"Step 6 — Look inside an object",{"type":24,"tag":70,"props":432,"children":433},{},[434],{"type":37,"value":435},"Double-click a file and it opens in a tabbed viewer.",{"type":24,"tag":31,"props":437,"children":438},{},[439,440,445,446],{"type":37,"value":38},{"type":24,"tag":170,"props":441,"children":444},{"src":442,"alt":443,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F06-image-preview.webp","Object preview modal with Content, Metadata, Versions, Permissions, Tags, Headers and Event Log tabs",[],{"type":37,"value":38},{"type":24,"tag":58,"props":447,"children":448},{},[449],{"type":37,"value":450},"Content tab with inline image preview, plus six more tabs for the object's other faces.",{"type":24,"tag":70,"props":452,"children":453},{},[454,456,461,462,467,468,473,474,479,480,485,486,491,492,497],{"type":37,"value":455},"Seven tabs per object: ",{"type":24,"tag":88,"props":457,"children":458},{},[459],{"type":37,"value":460},"Content",{"type":37,"value":284},{"type":24,"tag":88,"props":463,"children":464},{},[465],{"type":37,"value":466},"Metadata",{"type":37,"value":284},{"type":24,"tag":88,"props":469,"children":470},{},[471],{"type":37,"value":472},"Versions",{"type":37,"value":284},{"type":24,"tag":88,"props":475,"children":476},{},[477],{"type":37,"value":478},"Permissions",{"type":37,"value":284},{"type":24,"tag":88,"props":481,"children":482},{},[483],{"type":37,"value":484},"Tags",{"type":37,"value":284},{"type":24,"tag":88,"props":487,"children":488},{},[489],{"type":37,"value":490},"Headers",{"type":37,"value":284},{"type":24,"tag":88,"props":493,"children":494},{},[495],{"type":37,"value":496},"Event Log",{"type":37,"value":498},". Images preview inline, text is editable, and nothing requires downloading the file first.",{"type":24,"tag":147,"props":500,"children":502},{"id":501},"step-7-read-the-metadata",[503],{"type":37,"value":504},"Step 7 — Read the metadata",{"type":24,"tag":70,"props":506,"children":507},{},[508],{"type":37,"value":509},"The Metadata tab is the one you end up using at 2am when something is wrong.",{"type":24,"tag":31,"props":511,"children":512},{},[513,514,519,520],{"type":37,"value":38},{"type":24,"tag":170,"props":515,"children":518},{"src":516,"alt":517,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F07-metadata.webp","Metadata tab showing object key, size, last modified date, storage class STANDARD and ETag",[],{"type":37,"value":38},{"type":24,"tag":58,"props":521,"children":522},{},[523],{"type":37,"value":524},"Key, size, timestamp, storage class and ETag — the five fields that explain most object-level bugs.",{"type":24,"tag":70,"props":526,"children":527},{},[528,530,535,536,541],{"type":37,"value":529},"Key, size, last modified, ",{"type":24,"tag":88,"props":531,"children":532},{},[533],{"type":37,"value":534},"storage class",{"type":37,"value":291},{"type":24,"tag":88,"props":537,"children":538},{},[539],{"type":37,"value":540},"ETag",{"type":37,"value":542},". That ETag is an MD5 for a single-part upload, which means it doubles as a integrity check: compare it with the local file hash and you know instantly whether the upload was corrupted.",{"type":24,"tag":147,"props":544,"children":546},{"id":545},"step-8-see-what-the-browsing-costs",[547],{"type":37,"value":548},"Step 8 — See what the browsing costs",{"type":24,"tag":70,"props":550,"children":551},{},[552],{"type":37,"value":553},"Every request the app makes is recorded locally. The chart icon at the bottom of the sidebar opens the dashboard.",{"type":24,"tag":31,"props":555,"children":556},{},[557,558,563,564],{"type":37,"value":38},{"type":24,"tag":170,"props":559,"children":562},{"src":560,"alt":561,"width":174,"height":175,"loading":176},"\u002Fscreenshots\u002F08-metrics.webp","S3 request metrics dashboard showing 18 requests, cost, requests by category and per-operation timings",[],{"type":37,"value":38},{"type":24,"tag":58,"props":565,"children":566},{},[567],{"type":37,"value":568},"18 requests from the session above, broken down by category and by operation, with average latency.",{"type":24,"tag":70,"props":570,"children":571},{},[572],{"type":37,"value":573},"This is the part that changes how you use an S3 client. Browsing a bucket is not free:",{"type":24,"tag":79,"props":575,"children":576},{},[577,593,630,640],{"type":24,"tag":84,"props":578,"children":579},{},[580,585,587,592],{"type":24,"tag":88,"props":581,"children":582},{},[583],{"type":37,"value":584},"18 requests",{"type":37,"value":586}," for the session above, split ",{"type":24,"tag":88,"props":588,"children":589},{},[590],{"type":37,"value":591},"8 LIST \u002F 10 GET",{"type":37,"value":380},{"type":24,"tag":84,"props":594,"children":595},{},[596,598,604,606,612,614,620,622,628],{"type":37,"value":597},"Per-operation latency: ",{"type":24,"tag":255,"props":599,"children":601},{"className":600},[],[602],{"type":37,"value":603},"ListBuckets",{"type":37,"value":605}," 23 ms, ",{"type":24,"tag":255,"props":607,"children":609},{"className":608},[],[610],{"type":37,"value":611},"ListObjectsV2",{"type":37,"value":613}," 12 ms, ",{"type":24,"tag":255,"props":615,"children":617},{"className":616},[],[618],{"type":37,"value":619},"ListMultipartUploads",{"type":37,"value":621}," 8 ms, ",{"type":24,"tag":255,"props":623,"children":625},{"className":624},[],[626],{"type":37,"value":627},"GetBucketAcl",{"type":37,"value":629}," 5 ms.",{"type":24,"tag":84,"props":631,"children":632},{},[633,638],{"type":24,"tag":88,"props":634,"children":635},{},[636],{"type":37,"value":637},"Index Efficiency",{"type":37,"value":639}," counts the listings the local index answered instead of re-querying the bucket — 2 saved here.",{"type":24,"tag":84,"props":641,"children":642},{},[643],{"type":37,"value":644},"A cost estimate and a monthly projection, priced from the provider's published request rates.",{"type":24,"tag":70,"props":646,"children":647},{},[648,650,655],{"type":37,"value":649},"At 18 requests the money is invisible. At 500,000 a month, the LIST\u002FGET split ",{"type":24,"tag":247,"props":651,"children":652},{},[653],{"type":37,"value":654},"is",{"type":37,"value":656}," your bill — and this is the only client we know of that shows it while you work.",{"type":24,"tag":147,"props":658,"children":660},{"id":659},"what-this-walkthrough-leaves-out",[661],{"type":37,"value":662},"What this walkthrough leaves out",{"type":24,"tag":70,"props":664,"children":665},{},[666,668,674],{"type":37,"value":667},"Two honest caveats. This session ran against SeaweedFS on ",{"type":24,"tag":255,"props":669,"children":671},{"className":670},[],[672],{"type":37,"value":673},"127.0.0.1",{"type":37,"value":675},", so latency numbers reflect a loopback interface, not the internet. And the demo account holds 30 objects — the index efficiency metric only gets interesting at millions, which is precisely the case it was built for.",{"type":24,"tag":70,"props":677,"children":678},{},[679],{"type":37,"value":680},"Everything else — the presets, the pre-filled form, the test step, the tabs, the metrics — behaves exactly as it would against AWS.",{"type":24,"tag":682,"props":683,"children":684},"blockquote",{},[685],{"type":24,"tag":70,"props":686,"children":687},{},[688,693,695],{"type":24,"tag":88,"props":689,"children":690},{},[691],{"type":37,"value":692},"Try it against your own buckets.",{"type":37,"value":694}," 25 providers, a read-only key is enough for everything shown above. ",{"type":24,"tag":696,"props":697,"children":701},"a",{"href":698,"rel":699},"https:\u002F\u002Fs3explorer.accessdevops.com\u002F",[700],"nofollow",[702],{"type":37,"value":703},"Download S3 Explorer →",{"title":7,"searchDepth":705,"depth":705,"links":706},2,[707,708,709,710,711,712,713,714,715],{"id":149,"depth":705,"text":152},{"id":198,"depth":705,"text":201},{"id":301,"depth":705,"text":304},{"id":344,"depth":705,"text":347},{"id":383,"depth":705,"text":386},{"id":427,"depth":705,"text":430},{"id":501,"depth":705,"text":504},{"id":545,"depth":705,"text":548},{"id":659,"depth":705,"text":662},"markdown","content:blog:s3-explorer-walkthrough.md","content","blog\u002Fs3-explorer-walkthrough.md","blog\u002Fs3-explorer-walkthrough","md",1793397688488]