{"slug": "amazon-s3", "name": "Amazon S3", "category": "files", "category_name": "Files, sync and backup", "description": "Amazon Web Services' object storage service for storing and serving files at any scale.", "recommenders": 6, "commenters": 18, "warners": 0, "score": 8.372, "rising": -1.96, "first": "2025-11-26", "latest": "2026-09-28", "why": "HN commenters use S3 as a dependable low-level storage building block and as a static-site or media origin behind a CDN, valuing features like lifecycle policies, object lock, conditional writes and presigned URLs.", "why_is_quote": false, "has_verdict": true, "sentiment": {"recommend": 6, "neutral": 12, "compare": 1, "warn": 0}, "spark": [0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0], "listed": true, "loved": ["Static site hosting", "Core storage primitive"], "caveat": "Egress and cost", "short_quote": "S3 presigned URLs are the boring answer, but they work.", "icon": true, "domain": null, "github_repo": null, "official_url": "https://aws.amazon.com/s3/", "pricing": "paid", "aliases": ["Amazon S3"], "verdict": [{"text": "HN commenters use S3 as a dependable low-level storage building block", "cites": [{"id": 775187972, "item_id": 48449248, "url": "https://news.ycombinator.com/item?id=48449248", "by": "paulddraper", "date": "2026-06-08", "stance": "recommend", "quote": "Use EC2, EBS, S3, Route53 plus EKS, RDS, ElastiCache.", "excerpt": "You should really stay away from any \"high level\" AWS product, as there is almost always something much better and more flexible. Use EC2, EBS, S3, Route53 plus EKS, RDS, ElastiCache. But anything else that isn't low-to-mid-level (looking at you Beanstalk), use something better. Clerk, WorkOS, etc.", "context": "", "use_case": "object storage", "switched_from": "", "story": "Amazon Cognito now supports multi-Region replication"}, {"id": 781070832, "item_id": 48816927, "url": "https://news.ycombinator.com/item?id=48816927", "by": "CodesInChaos", "date": "2026-07-07", "stance": "neutral", "quote": "In practice I use one database and object storage (S3).", "excerpt": "I like keeping the number of stateful systems minimal, since those are the most annoying from a reliability perspective. In practice I use one database and object storage (S3). If that database is postgres is secondary.", "context": "", "use_case": "object storage", "switched_from": "", "story": "You probably don't need another database"}, {"id": 775627298, "item_id": 48476706, "url": "https://news.ycombinator.com/item?id=48476706", "by": "faangguyindia", "date": "2026-06-10", "stance": "neutral", "quote": "S3 (I wanted reliable data storage)", "excerpt": "Most of my apps are now simply HTMX + Go + SQLite. I've found it's enough for most projects. One of my sites is image heavy and serves 10 TB of traffic per month. For this, I use the following setup: 1. S3 (I wanted reliable data storage) 2. In front of it, I have Cloudflare (with Tiered Cache enabled, which makes POPs prefer pulling from Cloudflare rather than the origin). I've set rules to cache everything on both ", "context": "runs an image-heavy site serving 10 TB/month", "use_case": "image storage", "switched_from": "", "story": "Building an HTML-first site doubled our users overnight"}]}, {"text": " and as a static-site or media origin behind a CDN,", "cites": [{"id": 743819618, "item_id": 46488726, "url": "https://news.ycombinator.com/item?id=46488726", "by": "nunez", "date": "2026-01-04", "stance": "neutral", "quote": "it's served by S3 and CloudFront", "excerpt": "Welcome to the dark side, Jeff! I migrated to Hugo from WordPress in 2019: https://blog.carlosnunez.me/post/neurons-are-firing-again/ I built some automation that helps me test and deploy changes to S3 as well: https://github.com/carlosonunez/https-hugo-bloggen. It's clunky but works for me! Feel free to fork/PR if you're interested, of course. It was a great move; I couldn't be happier. Running my blog is basically ", "context": "Runs a personal blog served from S3", "use_case": "hosting static blog", "switched_from": "", "story": "Jeffgeerling.com has been Migrated to Hugo"}, {"id": 737710000, "item_id": 46106875, "url": "https://news.ycombinator.com/item?id=46106875", "by": "0x3f", "date": "2025-12-01", "stance": "recommend", "quote": "The equivalent here is more like S3 + Cloudflare (Cloud Connector and some rules).  Which is free for most use cases and (IMO) pretty easy.", "excerpt": "> trifold offers an easy alternative to services like Cloudflare Pages, Netlify [...] Does it? Those provide dynamic compute for e.g. SSR, not hosting static sites. The equivalent here is more like S3 + Cloudflare (Cloud Connector and some rules). Which is free for most use cases and (IMO) pretty easy.", "context": "", "use_case": "static site hosting", "switched_from": "", "story": "Trifold is a tool to quickly and cheaply host static websites using a CDN"}, {"id": 775627298, "item_id": 48476706, "url": "https://news.ycombinator.com/item?id=48476706", "by": "faangguyindia", "date": "2026-06-10", "stance": "neutral", "quote": "S3 (I wanted reliable data storage)", "excerpt": "Most of my apps are now simply HTMX + Go + SQLite. I've found it's enough for most projects. One of my sites is image heavy and serves 10 TB of traffic per month. For this, I use the following setup: 1. S3 (I wanted reliable data storage) 2. In front of it, I have Cloudflare (with Tiered Cache enabled, which makes POPs prefer pulling from Cloudflare rather than the origin). I've set rules to cache everything on both ", "context": "runs an image-heavy site serving 10 TB/month", "use_case": "image storage", "switched_from": "", "story": "Building an HTML-first site doubled our users overnight"}]}, {"text": " valuing features like lifecycle policies, object lock, conditional writes and presigned URLs.", "cites": [{"id": 766017184, "item_id": 47876074, "url": "https://news.ycombinator.com/item?id=47876074", "by": "sinansaka", "date": "2026-04-23", "stance": "recommend", "quote": "S3 lifecycle policies and scheduled RDBMS jobs are the low hanging fruit here.", "excerpt": "S3 lifecycle policies and scheduled RDBMS jobs are the low hanging fruit here. I used to work at a data platform team and built a cleaning service that used tags and object hierarchy trees to find and clean old PII data. Not an easy thing to do as our data analytics bucket had over 7PiB of data. Overall the architecture was based of 3 components: detector, enforcer, cleaner. Detector sifted through the datalake to fi", "context": "former data platform team member", "use_case": "data retention", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}, {"id": 783806690, "item_id": 48987918, "url": "https://news.ycombinator.com/item?id=48987918", "by": "pqdbr", "date": "2026-07-20", "stance": "recommend", "quote": "This is a feature from AWS S3 that even the most privileged account credentials (super admin) can't turn off nor delete the files before the object lock", "excerpt": "This is how we implemented this at our company: - We have 2 sources of data that we must backup to continue existing as a business; our postgres and binary files in S3. Everything else is derivable (elasticsearch, so on). - For postgres, we use barman. With the help of opus/fable, you can get a streaming replication backup working in no time. We have one into another server in the same datacenter (we use baremetal) a", "context": "", "use_case": "immutable backup storage", "switched_from": "", "story": "Hacker wipes Romania's land registry database"}, {"id": 754281184, "item_id": 47142574, "url": "https://news.ycombinator.com/item?id=47142574", "by": "umairnadeem123", "date": "2026-02-24", "stance": "recommend", "quote": "S3 CAS conditional writes changed the game for building coordination primitives on object storage", "excerpt": "the group commit pattern is the real insight here. S3 CAS conditional writes changed the game for building coordination primitives on object storage - before that you needed an external lock service which defeated the whole point of keeping things simple. we use a similar pattern for orchestrating distributed batch jobs. the key thing people miss is that the 200ms S3 PUT latency stops mattering once you batch. our jo", "context": "", "use_case": "coordinating distributed batch jobs", "switched_from": "", "story": "A distributed queue in a single JSON file on object storage"}, {"id": 748285265, "item_id": 46767829, "url": "https://news.ycombinator.com/item?id=46767829", "by": "augusteo", "date": "2026-01-26", "stance": "recommend", "quote": "S3 presigned URLs are the boring answer, but they work.", "excerpt": "Building on sluongng's point about schema evolution: we ended up in a weird middle ground on a project where we used gRPC for metadata and presigned S3 URLs for the actual bytes. The metadata schema changed constantly (new compression formats, different checksum algorithms, retry policies). Having protobufs for that was genuinely useful. But trying to pipe multi-gigabyte files through gRPC streams was painful. Memory", "context": "", "use_case": "file transfer via presigned URLs", "switched_from": "", "story": "Transfering Files with gRPC"}]}, {"text": " The caveats raised are egress costs compared with cheaper alternatives like B2, Wasabi and R2,", "cites": [{"id": 798083107, "item_id": 49880194, "url": "https://news.ycombinator.com/item?id=49880194", "by": "bojangleslover", "date": "2026-09-28", "stance": "compare", "quote": "all priced comfortably under S3 before egress", "excerpt": "> there is no fundamental technological barrier to building a true SSD-based, disaggregated storage service with the durability, capacity, and pricing profile needed to serve as a general-purpose replacement for S3 There are a lot of very competitive alternatives around today are largely unknown. For example B2 Overdrive by Backblaze boasting up to 1 Tbps, Wasabi offering byte-compatible S3 storage with no egress fee", "context": "", "use_case": "object storage", "switched_from": "", "story": "S3 Is the Future, S3 Is the Past"}]}, {"text": " and roughly 200ms PUT latency that only fades when writes are batched.", "cites": [{"id": 754281184, "item_id": 47142574, "url": "https://news.ycombinator.com/item?id=47142574", "by": "umairnadeem123", "date": "2026-02-24", "stance": "recommend", "quote": "S3 CAS conditional writes changed the game for building coordination primitives on object storage", "excerpt": "the group commit pattern is the real insight here. S3 CAS conditional writes changed the game for building coordination primitives on object storage - before that you needed an external lock service which defeated the whole point of keeping things simple. we use a similar pattern for orchestrating distributed batch jobs. the key thing people miss is that the 200ms S3 PUT latency stops mattering once you batch. our jo", "context": "", "use_case": "coordinating distributed batch jobs", "switched_from": "", "story": "A distributed queue in a single JSON file on object storage"}]}], "praise": [{"label": "Static site hosting", "summary": "Commonly paired with CloudFront or Cloudflare to serve static sites and media cheaply.", "quotes": [{"id": 743819618, "item_id": 46488726, "url": "https://news.ycombinator.com/item?id=46488726", "by": "nunez", "date": "2026-01-04", "stance": "neutral", "quote": "it's served by S3 and CloudFront", "excerpt": "Welcome to the dark side, Jeff! I migrated to Hugo from WordPress in 2019: https://blog.carlosnunez.me/post/neurons-are-firing-again/ I built some automation that helps me test and deploy changes to S3 as well: https://github.com/carlosonunez/https-hugo-bloggen. It's clunky but works for me! Feel free to fork/PR if you're interested, of course. It was a great move; I couldn't be happier. Running my blog is basically ", "context": "Runs a personal blog served from S3", "use_case": "hosting static blog", "switched_from": "", "story": "Jeffgeerling.com has been Migrated to Hugo"}, {"id": 737710000, "item_id": 46106875, "url": "https://news.ycombinator.com/item?id=46106875", "by": "0x3f", "date": "2025-12-01", "stance": "recommend", "quote": "The equivalent here is more like S3 + Cloudflare (Cloud Connector and some rules).  Which is free for most use cases and (IMO) pretty easy.", "excerpt": "> trifold offers an easy alternative to services like Cloudflare Pages, Netlify [...] Does it? Those provide dynamic compute for e.g. SSR, not hosting static sites. The equivalent here is more like S3 + Cloudflare (Cloud Connector and some rules). Which is free for most use cases and (IMO) pretty easy.", "context": "", "use_case": "static site hosting", "switched_from": "", "story": "Trifold is a tool to quickly and cheaply host static websites using a CDN"}, {"id": 775627298, "item_id": 48476706, "url": "https://news.ycombinator.com/item?id=48476706", "by": "faangguyindia", "date": "2026-06-10", "stance": "neutral", "quote": "S3 (I wanted reliable data storage)", "excerpt": "Most of my apps are now simply HTMX + Go + SQLite. I've found it's enough for most projects. One of my sites is image heavy and serves 10 TB of traffic per month. For this, I use the following setup: 1. S3 (I wanted reliable data storage) 2. In front of it, I have Cloudflare (with Tiered Cache enabled, which makes POPs prefer pulling from Cloudflare rather than the origin). I've set rules to cache everything on both ", "context": "runs an image-heavy site serving 10 TB/month", "use_case": "image storage", "switched_from": "", "story": "Building an HTML-first site doubled our users overnight"}]}, {"label": "Core storage primitive", "summary": "Recommended as one of the few low-level AWS services worth using, often alongside a single database.", "quotes": [{"id": 775187972, "item_id": 48449248, "url": "https://news.ycombinator.com/item?id=48449248", "by": "paulddraper", "date": "2026-06-08", "stance": "recommend", "quote": "Use EC2, EBS, S3, Route53 plus EKS, RDS, ElastiCache.", "excerpt": "You should really stay away from any \"high level\" AWS product, as there is almost always something much better and more flexible. Use EC2, EBS, S3, Route53 plus EKS, RDS, ElastiCache. But anything else that isn't low-to-mid-level (looking at you Beanstalk), use something better. Clerk, WorkOS, etc.", "context": "", "use_case": "object storage", "switched_from": "", "story": "Amazon Cognito now supports multi-Region replication"}, {"id": 781070832, "item_id": 48816927, "url": "https://news.ycombinator.com/item?id=48816927", "by": "CodesInChaos", "date": "2026-07-07", "stance": "neutral", "quote": "In practice I use one database and object storage (S3).", "excerpt": "I like keeping the number of stateful systems minimal, since those are the most annoying from a reliability perspective. In practice I use one database and object storage (S3). If that database is postgres is secondary.", "context": "", "use_case": "object storage", "switched_from": "", "story": "You probably don't need another database"}, {"id": 790011314, "item_id": 49375707, "url": "https://news.ycombinator.com/item?id=49375707", "by": "CodesInChaos", "date": "2026-08-20", "stance": "neutral", "quote": "Probably will integrate S3 before going live", "excerpt": "My rule is \"use a single database for as many of you persistence needs as possible\". Often Postgres is a good choice for that database, but many other general purpose DBMSs will work just as well. In my previous company we used MongoDB, for almost everything, including text logs, request logs, job-queues and small template files. We added S3 since storing terabytes of files in a database is expensive. Now, I wouldn't", "context": "", "use_case": "file storage", "switched_from": "", "story": "PostgreSQL for Everything"}]}, {"label": "Developer primitives", "summary": "Conditional writes, presigned URLs and object versioning enable simple designs without extra services.", "quotes": [{"id": 754281184, "item_id": 47142574, "url": "https://news.ycombinator.com/item?id=47142574", "by": "umairnadeem123", "date": "2026-02-24", "stance": "recommend", "quote": "S3 CAS conditional writes changed the game for building coordination primitives on object storage", "excerpt": "the group commit pattern is the real insight here. S3 CAS conditional writes changed the game for building coordination primitives on object storage - before that you needed an external lock service which defeated the whole point of keeping things simple. we use a similar pattern for orchestrating distributed batch jobs. the key thing people miss is that the 200ms S3 PUT latency stops mattering once you batch. our jo", "context": "", "use_case": "coordinating distributed batch jobs", "switched_from": "", "story": "A distributed queue in a single JSON file on object storage"}, {"id": 748285265, "item_id": 46767829, "url": "https://news.ycombinator.com/item?id=46767829", "by": "augusteo", "date": "2026-01-26", "stance": "recommend", "quote": "S3 presigned URLs are the boring answer, but they work.", "excerpt": "Building on sluongng's point about schema evolution: we ended up in a weird middle ground on a project where we used gRPC for metadata and presigned S3 URLs for the actual bytes. The metadata schema changed constantly (new compression formats, different checksum algorithms, retry policies). Having protobufs for that was genuinely useful. But trying to pipe multi-gigabyte files through gRPC streams was painful. Memory", "context": "", "use_case": "file transfer via presigned URLs", "switched_from": "", "story": "Transfering Files with gRPC"}, {"id": 746686752, "item_id": 46667922, "url": "https://news.ycombinator.com/item?id=46667922", "by": "saimiam", "date": "2026-01-18", "stance": "neutral", "quote": "I made an email mailbox using S3 object versioning.", "excerpt": "I made an email mailbox using S3 object versioning. Every email address was an s3 object so every new email sent to that email address was saved as a new object version. Presenting that email as an mailbox was just a matter of reading all the versions of that object. It worked! I used this contraption as a domain level catch\u2014all inbox for a while until cloudflare started supporting email forwarding.", "context": "", "use_case": "email mailbox storage", "switched_from": "", "story": "Ask HN: When has a \"dumb\" solution beaten a sophisticated one for you?"}]}, {"label": "Lifecycle policies", "summary": "Lifecycle rules handle easy data-retention and cleanup tasks.", "quotes": [{"id": 766017184, "item_id": 47876074, "url": "https://news.ycombinator.com/item?id=47876074", "by": "sinansaka", "date": "2026-04-23", "stance": "recommend", "quote": "S3 lifecycle policies and scheduled RDBMS jobs are the low hanging fruit here.", "excerpt": "S3 lifecycle policies and scheduled RDBMS jobs are the low hanging fruit here. I used to work at a data platform team and built a cleaning service that used tags and object hierarchy trees to find and clean old PII data. Not an easy thing to do as our data analytics bucket had over 7PiB of data. Overall the architecture was based of 3 components: detector, enforcer, cleaner. Detector sifted through the datalake to fi", "context": "former data platform team member", "use_case": "data retention", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}, {"id": 765910736, "item_id": 47869421, "url": "https://news.ycombinator.com/item?id=47869421", "by": "crawlwright", "date": "2026-04-22", "stance": "neutral", "quote": "S3 lifecycle policies handle the easy stuff", "excerpt": "Mostly cron jobs and lifecycle rules in my experience, it\u2019s rarely clean. S3 lifecycle policies handle the easy stuff but anything touching multiple systems usually ends up as a scheduled job that someone wrote once and nobody fully trusts.", "context": "", "use_case": "data retention lifecycle rules", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}]}, {"label": "Object lock", "summary": "Object lock prevents even super-admin credentials from deleting backups early.", "quotes": [{"id": 783806690, "item_id": 48987918, "url": "https://news.ycombinator.com/item?id=48987918", "by": "pqdbr", "date": "2026-07-20", "stance": "recommend", "quote": "This is a feature from AWS S3 that even the most privileged account credentials (super admin) can't turn off nor delete the files before the object lock", "excerpt": "This is how we implemented this at our company: - We have 2 sources of data that we must backup to continue existing as a business; our postgres and binary files in S3. Everything else is derivable (elasticsearch, so on). - For postgres, we use barman. With the help of opus/fable, you can get a streaming replication backup working in no time. We have one into another server in the same datacenter (we use baremetal) a", "context": "", "use_case": "immutable backup storage", "switched_from": "", "story": "Hacker wipes Romania's land registry database"}]}], "caveats": [{"label": "Egress and cost", "summary": "Competitors are priced under S3, and egress fees and lock-in are called the real kicker.", "quotes": [{"id": 798083107, "item_id": 49880194, "url": "https://news.ycombinator.com/item?id=49880194", "by": "bojangleslover", "date": "2026-09-28", "stance": "compare", "quote": "all priced comfortably under S3 before egress", "excerpt": "> there is no fundamental technological barrier to building a true SSD-based, disaggregated storage service with the durability, capacity, and pricing profile needed to serve as a general-purpose replacement for S3 There are a lot of very competitive alternatives around today are largely unknown. For example B2 Overdrive by Backblaze boasting up to 1 Tbps, Wasabi offering byte-compatible S3 storage with no egress fee", "context": "", "use_case": "object storage", "switched_from": "", "story": "S3 Is the Future, S3 Is the Past"}]}, {"label": "Write latency", "summary": "PUTs take around 200ms, which only stops mattering once writes are batched.", "quotes": [{"id": 754281184, "item_id": 47142574, "url": "https://news.ycombinator.com/item?id=47142574", "by": "umairnadeem123", "date": "2026-02-24", "stance": "recommend", "quote": "S3 CAS conditional writes changed the game for building coordination primitives on object storage", "excerpt": "the group commit pattern is the real insight here. S3 CAS conditional writes changed the game for building coordination primitives on object storage - before that you needed an external lock service which defeated the whole point of keeping things simple. we use a similar pattern for orchestrating distributed batch jobs. the key thing people miss is that the 200ms S3 PUT latency stops mattering once you batch. our jo", "context": "", "use_case": "coordinating distributed batch jobs", "switched_from": "", "story": "A distributed queue in a single JSON file on object storage"}]}, {"label": "Lifecycle limits", "summary": "Lifecycle rules cover easy cases, but cross-system cleanup still needs custom scheduled jobs.", "quotes": [{"id": 765910736, "item_id": 47869421, "url": "https://news.ycombinator.com/item?id=47869421", "by": "crawlwright", "date": "2026-04-22", "stance": "neutral", "quote": "S3 lifecycle policies handle the easy stuff", "excerpt": "Mostly cron jobs and lifecycle rules in my experience, it\u2019s rarely clean. S3 lifecycle policies handle the easy stuff but anything touching multiple systems usually ends up as a scheduled job that someone wrote once and nobody fully trusts.", "context": "", "use_case": "data retention lifecycle rules", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}]}], "who": [{"by": "brainless", "context": "long-time software builder", "url": "https://news.ycombinator.com/item?id=49735737", "date": "2026-09-17"}, {"by": "faangguyindia", "context": "runs an image-heavy site serving 10 TB/month", "url": "https://news.ycombinator.com/item?id=48476706", "date": "2026-06-10"}, {"by": "preston-kwei", "context": "selling to enterprise", "url": "https://news.ycombinator.com/item?id=47897740", "date": "2026-04-24"}, {"by": "sinansaka", "context": "former data platform team member", "url": "https://news.ycombinator.com/item?id=47876074", "date": "2026-04-23"}, {"by": "nunez", "context": "Runs a personal blog served from S3", "url": "https://news.ycombinator.com/item?id=46488726", "date": "2026-01-04"}, {"by": "ldoughty", "context": "personal site owner", "url": "https://news.ycombinator.com/item?id=46488102", "date": "2026-01-04"}], "tags": ["for static sites", "for immutable backups", "for large file transfer", "for data lakes", "for image-heavy sites"], "use_cases": ["object storage", "storing non-critical data", "file storage", "immutable backup storage", "image storage", "storing files"], "compared": [{"slug": "postgresql", "name": "PostgreSQL", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "hugo", "name": "Hugo", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "netlify", "name": "Netlify", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "cloudflare-r2", "name": "Cloudflare R2", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "wordpress", "name": "WordPress", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47868481", "title": "Ask HN: How are you handling data retention across your stack?", "mentions": 3}, {"url": "https://news.ycombinator.com/item?id=46487498", "title": "Jeffgeerling.com has been Migrated to Hugo", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49851693", "title": "S3 Is the Future, S3 Is the Past", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49724881", "title": "Nvidia announces native GPU programming in Rust", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49719249", "title": "AWS says it can't restore some data from mideast facilities struck by Iran", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49361279", "title": "PostgreSQL for Everything", "mentions": 1}], "sentiment_by_month": {"2025-11": {"neutral": 1}, "2025-12": {"recommend": 1}, "2026-01": {"neutral": 3, "recommend": 1}, "2026-02": {"recommend": 1}, "2026-03": {}, "2026-04": {"neutral": 2, "recommend": 1}, "2026-05": {}, "2026-06": {"neutral": 2, "recommend": 1}, "2026-07": {"neutral": 1, "recommend": 1}, "2026-08": {"neutral": 1}, "2026-09": {"neutral": 2, "compare": 1}, "2026-10": {}}, "quotes": [{"id": 798083107, "item_id": 49880194, "url": "https://news.ycombinator.com/item?id=49880194", "by": "bojangleslover", "date": "2026-09-28", "stance": "compare", "quote": "all priced comfortably under S3 before egress", "excerpt": "> there is no fundamental technological barrier to building a true SSD-based, disaggregated storage service with the durability, capacity, and pricing profile needed to serve as a general-purpose replacement for S3 There are a lot of very competitive alternatives around today are largely unknown. For example B2 Overdrive by Backblaze boasting up to 1 Tbps, Wasabi offering byte-compatible S3 storage with no egress fee", "context": "", "use_case": "object storage", "switched_from": "", "story": "S3 Is the Future, S3 Is the Past"}, {"id": 795771795, "item_id": 49735737, "url": "https://news.ycombinator.com/item?id=49735737", "by": "brainless", "date": "2026-09-17", "stance": "neutral", "quote": "Got into AWS S3 as a beta user.", "excerpt": "I was learning Rust slowly when the LLM enabled coding became good enough. I switched from learning to full on building with Rust. I still learn high level concepts as needed but I will not be able to write Rust on my own at all. And that sounds scary but the way I got over the fear is by realizing there are many things that I do very well but I do not know their internals very well. Driving is an example. I barely u", "context": "long-time software builder", "use_case": "object storage", "switched_from": "", "story": "Nvidia announces native GPU programming in Rust"}, {"id": 795744081, "item_id": 49734005, "url": "https://news.ycombinator.com/item?id=49734005", "by": "kevml", "date": "2026-09-16", "stance": "neutral", "quote": "I use S3 (well GCS mostly) for data that I wouldn\u2019t be upset if it\u2019s lost.", "excerpt": "That\u2019s simply not true. I use S3 (well GCS mostly) for data that I wouldn\u2019t be upset if it\u2019s lost. And I pay the zonal discount for it.", "context": "", "use_case": "storing non-critical data", "switched_from": "", "story": "AWS says it can't restore some data from mideast facilities struck by Iran"}, {"id": 790011314, "item_id": 49375707, "url": "https://news.ycombinator.com/item?id=49375707", "by": "CodesInChaos", "date": "2026-08-20", "stance": "neutral", "quote": "Probably will integrate S3 before going live", "excerpt": "My rule is \"use a single database for as many of you persistence needs as possible\". Often Postgres is a good choice for that database, but many other general purpose DBMSs will work just as well. In my previous company we used MongoDB, for almost everything, including text logs, request logs, job-queues and small template files. We added S3 since storing terabytes of files in a database is expensive. Now, I wouldn't", "context": "", "use_case": "file storage", "switched_from": "", "story": "PostgreSQL for Everything"}, {"id": 783806690, "item_id": 48987918, "url": "https://news.ycombinator.com/item?id=48987918", "by": "pqdbr", "date": "2026-07-20", "stance": "recommend", "quote": "This is a feature from AWS S3 that even the most privileged account credentials (super admin) can't turn off nor delete the files before the object lock", "excerpt": "This is how we implemented this at our company: - We have 2 sources of data that we must backup to continue existing as a business; our postgres and binary files in S3. Everything else is derivable (elasticsearch, so on). - For postgres, we use barman. With the help of opus/fable, you can get a streaming replication backup working in no time. We have one into another server in the same datacenter (we use baremetal) a", "context": "", "use_case": "immutable backup storage", "switched_from": "", "story": "Hacker wipes Romania's land registry database"}, {"id": 781070832, "item_id": 48816927, "url": "https://news.ycombinator.com/item?id=48816927", "by": "CodesInChaos", "date": "2026-07-07", "stance": "neutral", "quote": "In practice I use one database and object storage (S3).", "excerpt": "I like keeping the number of stateful systems minimal, since those are the most annoying from a reliability perspective. In practice I use one database and object storage (S3). If that database is postgres is secondary.", "context": "", "use_case": "object storage", "switched_from": "", "story": "You probably don't need another database"}, {"id": 775627298, "item_id": 48476706, "url": "https://news.ycombinator.com/item?id=48476706", "by": "faangguyindia", "date": "2026-06-10", "stance": "neutral", "quote": "S3 (I wanted reliable data storage)", "excerpt": "Most of my apps are now simply HTMX + Go + SQLite. I've found it's enough for most projects. One of my sites is image heavy and serves 10 TB of traffic per month. For this, I use the following setup: 1. S3 (I wanted reliable data storage) 2. In front of it, I have Cloudflare (with Tiered Cache enabled, which makes POPs prefer pulling from Cloudflare rather than the origin). I've set rules to cache everything on both ", "context": "runs an image-heavy site serving 10 TB/month", "use_case": "image storage", "switched_from": "", "story": "Building an HTML-first site doubled our users overnight"}, {"id": 775187972, "item_id": 48449248, "url": "https://news.ycombinator.com/item?id=48449248", "by": "paulddraper", "date": "2026-06-08", "stance": "recommend", "quote": "Use EC2, EBS, S3, Route53 plus EKS, RDS, ElastiCache.", "excerpt": "You should really stay away from any \"high level\" AWS product, as there is almost always something much better and more flexible. Use EC2, EBS, S3, Route53 plus EKS, RDS, ElastiCache. But anything else that isn't low-to-mid-level (looking at you Beanstalk), use something better. Clerk, WorkOS, etc.", "context": "", "use_case": "object storage", "switched_from": "", "story": "Amazon Cognito now supports multi-Region replication"}, {"id": 774906752, "item_id": 48431672, "url": "https://news.ycombinator.com/item?id=48431672", "by": "lmc", "date": "2026-06-06", "stance": "neutral", "quote": "True, we use S3 a lot too.", "excerpt": "True, we use S3 a lot too. But it's interesting to think of alternatives like this project, e.g., for when we don't have the setup for a full on block storage service.", "context": "", "use_case": "storing files", "switched_from": "", "story": "Zeroserve: A zero-config web server you can script with eBPF"}, {"id": 766363842, "item_id": 47897740, "url": "https://news.ycombinator.com/item?id=47897740", "by": "preston-kwei", "date": "2026-04-24", "stance": "neutral", "quote": "my product stores emails in S3", "excerpt": "I agree. I'm trying to sell to enterprise right now and this is a blocker. Basically, my product stores emails in S3, but metadata in Supabase, and caches in Redis. It's all fragmented and super difficult to keep track of. Plus Supabase isn't WORM compliant so it is hard to ensure data doesn't get deleted.", "context": "selling to enterprise", "use_case": "email storage", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}, {"id": 766017184, "item_id": 47876074, "url": "https://news.ycombinator.com/item?id=47876074", "by": "sinansaka", "date": "2026-04-23", "stance": "recommend", "quote": "S3 lifecycle policies and scheduled RDBMS jobs are the low hanging fruit here.", "excerpt": "S3 lifecycle policies and scheduled RDBMS jobs are the low hanging fruit here. I used to work at a data platform team and built a cleaning service that used tags and object hierarchy trees to find and clean old PII data. Not an easy thing to do as our data analytics bucket had over 7PiB of data. Overall the architecture was based of 3 components: detector, enforcer, cleaner. Detector sifted through the datalake to fi", "context": "former data platform team member", "use_case": "data retention", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}, {"id": 765910736, "item_id": 47869421, "url": "https://news.ycombinator.com/item?id=47869421", "by": "crawlwright", "date": "2026-04-22", "stance": "neutral", "quote": "S3 lifecycle policies handle the easy stuff", "excerpt": "Mostly cron jobs and lifecycle rules in my experience, it\u2019s rarely clean. S3 lifecycle policies handle the easy stuff but anything touching multiple systems usually ends up as a scheduled job that someone wrote once and nobody fully trusts.", "context": "", "use_case": "data retention lifecycle rules", "switched_from": "", "story": "Ask HN: How are you handling data retention across your stack?"}, {"id": 754281184, "item_id": 47142574, "url": "https://news.ycombinator.com/item?id=47142574", "by": "umairnadeem123", "date": "2026-02-24", "stance": "recommend", "quote": "S3 CAS conditional writes changed the game for building coordination primitives on object storage", "excerpt": "the group commit pattern is the real insight here. S3 CAS conditional writes changed the game for building coordination primitives on object storage - before that you needed an external lock service which defeated the whole point of keeping things simple. we use a similar pattern for orchestrating distributed batch jobs. the key thing people miss is that the 200ms S3 PUT latency stops mattering once you batch. our jo", "context": "", "use_case": "coordinating distributed batch jobs", "switched_from": "", "story": "A distributed queue in a single JSON file on object storage"}, {"id": 748285265, "item_id": 46767829, "url": "https://news.ycombinator.com/item?id=46767829", "by": "augusteo", "date": "2026-01-26", "stance": "recommend", "quote": "S3 presigned URLs are the boring answer, but they work.", "excerpt": "Building on sluongng's point about schema evolution: we ended up in a weird middle ground on a project where we used gRPC for metadata and presigned S3 URLs for the actual bytes. The metadata schema changed constantly (new compression formats, different checksum algorithms, retry policies). Having protobufs for that was genuinely useful. But trying to pipe multi-gigabyte files through gRPC streams was painful. Memory", "context": "", "use_case": "file transfer via presigned URLs", "switched_from": "", "story": "Transfering Files with gRPC"}, {"id": 746686752, "item_id": 46667922, "url": "https://news.ycombinator.com/item?id=46667922", "by": "saimiam", "date": "2026-01-18", "stance": "neutral", "quote": "I made an email mailbox using S3 object versioning.", "excerpt": "I made an email mailbox using S3 object versioning. Every email address was an s3 object so every new email sent to that email address was saved as a new object version. Presenting that email as an mailbox was just a matter of reading all the versions of that object. It worked! I used this contraption as a domain level catch\u2014all inbox for a while until cloudflare started supporting email forwarding.", "context": "", "use_case": "email mailbox storage", "switched_from": "", "story": "Ask HN: When has a \"dumb\" solution beaten a sophisticated one for you?"}, {"id": 743819618, "item_id": 46488726, "url": "https://news.ycombinator.com/item?id=46488726", "by": "nunez", "date": "2026-01-04", "stance": "neutral", "quote": "it's served by S3 and CloudFront", "excerpt": "Welcome to the dark side, Jeff! I migrated to Hugo from WordPress in 2019: https://blog.carlosnunez.me/post/neurons-are-firing-again/ I built some automation that helps me test and deploy changes to S3 as well: https://github.com/carlosonunez/https-hugo-bloggen. It's clunky but works for me! Feel free to fork/PR if you're interested, of course. It was a great move; I couldn't be happier. Running my blog is basically ", "context": "Runs a personal blog served from S3", "use_case": "hosting static blog", "switched_from": "", "story": "Jeffgeerling.com has been Migrated to Hugo"}, {"id": 743809634, "item_id": 46488102, "url": "https://news.ycombinator.com/item?id=46488102", "by": "ldoughty", "date": "2026-01-04", "stance": "neutral", "quote": "uploaded the result to the S3 bucket that backs my website", "excerpt": "I had a similar push years ago, but I did take this approach once step further. For a similar reason Jeff mentions -- lower maintenance over time. I was frustrated that (because my posts are less frequent) changes in Hugo and my local machine could lead to changes in what is generated. So I attached a web hook from my websites GitHub repo to trigger an AWS Lambda which, on merge to main, automatically pulled in the r", "context": "personal site owner", "use_case": "hosting static site", "switched_from": "", "story": "Jeffgeerling.com has been Migrated to Hugo"}, {"id": 737710000, "item_id": 46106875, "url": "https://news.ycombinator.com/item?id=46106875", "by": "0x3f", "date": "2025-12-01", "stance": "recommend", "quote": "The equivalent here is more like S3 + Cloudflare (Cloud Connector and some rules).  Which is free for most use cases and (IMO) pretty easy.", "excerpt": "> trifold offers an easy alternative to services like Cloudflare Pages, Netlify [...] Does it? Those provide dynamic compute for e.g. SSR, not hosting static sites. The equivalent here is more like S3 + Cloudflare (Cloud Connector and some rules). Which is free for most use cases and (IMO) pretty easy.", "context": "", "use_case": "static site hosting", "switched_from": "", "story": "Trifold is a tool to quickly and cheaply host static websites using a CDN"}, {"id": 736941489, "item_id": 46058843, "url": "https://news.ycombinator.com/item?id=46058843", "by": "lucastech", "date": "2025-11-26", "stance": "neutral", "quote": "I use S3/Cloudfront today", "excerpt": "This is awesome, I've used offload media for years, but they've been getting more and more annoying about their plugin trying to convert to using their cdns and upgrading to their premium plugin. I've wanted to explore R2 (I use S3/Cloudfront today) and this looks like a great way to do so!", "context": "", "use_case": "media storage", "switched_from": "", "story": "Show HN: A WordPress plugin that rewrites image URLs for near-zero-cost delivery"}]}