<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sean Boult</title>
    <description>The latest articles on DEV Community by Sean Boult (@hacksore).</description>
    <link>https://dev.to/hacksore</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png</url>
      <title>DEV Community: Sean Boult</title>
      <link>https://dev.to/hacksore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hacksore"/>
    <language>en</language>
    <item>
      <title>AWS Waddles: What the Duck?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Mon, 01 Jun 2026 23:33:50 +0000</pubDate>
      <link>https://dev.to/aws/aws-waddles-what-the-duck-23nn</link>
      <guid>https://dev.to/aws/aws-waddles-what-the-duck-23nn</guid>
      <description>&lt;p&gt;For over a decade, there's been a tiny ASCII duck hiding in plain sight. Open the page source for &lt;a href="https://amazon.com" rel="noopener noreferrer"&gt;amazon.com&lt;/a&gt;, scroll all the way to the bottom, and there it is, surfing the web and quietly meowing at anyone who looks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!--       _
       .__(.)&amp;lt; (MEOW)
        \___)
 ~~~~~~~~~~~~~~~~~~--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A few years ago I stumbled onto this meowing duck, and it turns out &lt;a href="https://www.reddit.com/r/ProgrammerHumor/comments/9zflz9/theres_meowing_duck_in_amazon_source_code/" rel="noopener noreferrer"&gt;the internet&lt;/a&gt; had too. MEOW has lived in that source code for years. If you've never seen it, go look now!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx41d1qtszkbr79awreio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx41d1qtszkbr79awreio.png" alt=" " width="240" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One day I thought, why not bring that same duck energy to AWS? So I made my own mascot. Same surfing spirit, except this one doesn't meow. It barks. Meet Waddles.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!--       _
       .__(.)&amp;lt; (woof)
        \___)
 ~~~~~~~~~~~~~~~~~~--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Waddles made his first appearance on March 12, 2026 and landed on the timeline on X/Twitter.&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-2032135107977322989-291" src="https://platform.twitter.com/embed/Tweet.html?id=2032135107977322989"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2032135107977322989-291');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2032135107977322989&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;You'll be seeing Waddles around more, but I figured I owe the internet an explanation of sorts.&lt;/p&gt;

&lt;p&gt;Ok, I think all my ducks are in a row now 😂.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Waddles takin a nap
    _
.__(_)&amp;lt;
 \___)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Want your own Waddles? I built a little tool called &lt;code&gt;ducksay&lt;/code&gt;. &lt;a href="https://github.com/sboult/ducksay" rel="noopener noreferrer"&gt;Check out the repo here&lt;/a&gt;. Give it a message and it hands it right back to you, duck included:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ducksay "woof"
&amp;lt;!--       _
       .__(.)&amp;lt; (woof)
        \___)
 ~~~~~~~~~~~~~~~~~~--&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If ducks aren't your thing, drop some of your favorite ASCII art in the comments. Waddles could use some friends.&lt;/p&gt;

&lt;p&gt;Happy Coding 🤗!&lt;/p&gt;



&lt;p&gt;Follow AWS for more articles like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Follow me for all things tech&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__828306"&gt;
    &lt;a href="/hacksore" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F828306%2Fbf0bbed7-7874-4a26-8137-bb761a4b7f23.png" alt="hacksore image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hacksore"&gt;Sean Boult&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hacksore"&gt;Developer. Hacker. Creator.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>watercooler</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Markdown Should be Supported Everywhere Natively</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 29 May 2026 19:27:54 +0000</pubDate>
      <link>https://dev.to/aws/markdown-should-be-supported-everywhere-natively-8nd</link>
      <guid>https://dev.to/aws/markdown-should-be-supported-everywhere-natively-8nd</guid>
      <description>&lt;p&gt;You've probably seen this tweet by &lt;a href="https://x.com/trq212/" rel="noopener noreferrer"&gt;@trq212&lt;/a&gt; floating around on Twitter about letting agents write HTML instead of markdown...&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2052811606032269638-893" src="https://platform.twitter.com/embed/Tweet.html?id=2052811606032269638"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2052811606032269638-893');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2052811606032269638&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Listed below are some of the reasons mentioned in the article: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Information Density&lt;/li&gt;
&lt;li&gt;Visual Clarity &amp;amp; Ease of Reading&lt;/li&gt;
&lt;li&gt;Ease of Sharing (to me this is the most compelling)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't disagree with Tariq, but rather than switch to HTML, I think the answer is to make markdown supported everywhere. We've been using it for years and it's powering much of the modern web. However, if we look at how software and platforms have evolved, markdown support is very dependent on the platform to render it.&lt;/p&gt;

&lt;p&gt;Why does markdown work for humans and machines? Well, it's pretty simple, humans write simple syntax that gets rendered into something rich, and unironically, that's often by converting it to HTML and a browser engine rendering it. For machines, it's lightweight to parse and easy to generate token by token without the verbosity of HTML.&lt;/p&gt;

&lt;p&gt;We write headers, code blocks, pull quotes, bold text, and what typically happens is something is converting that markdown to HTML.&lt;/p&gt;

&lt;p&gt;For example, I am literally typing this blog in &lt;strong&gt;markdown&lt;/strong&gt;, and the only way I can share it to the masses is through a platform like dev.to that converts it to HTML and hosts it for me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcr743izmtwef1oggod83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcr743izmtwef1oggod83.png" alt=" " width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So if the feature is available in some places, why is it not everywhere? I believe that software vendors haven't prioritized adding markdown rendering support, and they should.&lt;/p&gt;

&lt;p&gt;We should be able to send a standalone index.md file and view it in all web browsers, chat applications, and emails. Some apps already do this like Discord and Slack (Slack's &lt;a href="https://www.markdownguide.org/tools/slack/" rel="noopener noreferrer"&gt;markdown support&lt;/a&gt; disappoints me). We can do this with HTML today, all modern browsers will render something nice, but if you load up markdown in your browser today you will become sad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3vm83fa178xsnib3bt4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3vm83fa178xsnib3bt4.png" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have to reach for things like Obsidian or Kiro to render the markdown, which I feel limits the portability of it all.&lt;/p&gt;

&lt;p&gt;Curious what you think and where you see yourself heading in terms of AI agent output. Let me know in the comments if you're switching to HTML or sticking with markdown.&lt;/p&gt;




&lt;p&gt;As always, happy coding 🫡!&lt;/p&gt;

&lt;p&gt;Follow AWS for more articles like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>discuss</category>
      <category>html</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Terminal Superpowers You Should Be Using in 2026</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Tue, 19 May 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/aws/terminal-superpowers-you-should-be-using-in-2026-38b4</link>
      <guid>https://dev.to/aws/terminal-superpowers-you-should-be-using-in-2026-38b4</guid>
      <description>&lt;p&gt;I live in my terminal. Here's what I use to stay fast.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fuzzy finder (fzf)&lt;/li&gt;
&lt;li&gt;Terminal motions&lt;/li&gt;
&lt;li&gt;Sudo shortcut&lt;/li&gt;
&lt;li&gt;Tab completion&lt;/li&gt;
&lt;li&gt;Autosuggestion&lt;/li&gt;
&lt;li&gt;Autocompletion&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Command buffering&lt;/li&gt;
&lt;li&gt;Terminal clearing&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;NOTE: Some of these are zsh-specific, so make sure you have that set up first.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Fuzzy finder (fzf)
&lt;/h2&gt;

&lt;p&gt;Please please stop spamming up arrow to find that command you ran. Instead you can make this so much simpler with &lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;fzf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once installed, hit &lt;code&gt;Ctrl+R&lt;/code&gt; and your shell history becomes searchable. No more mashing the up arrow 47 times to find that docker command you ran last Tuesday.&lt;/p&gt;

&lt;p&gt;You can also use it to find files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# fuzzy find a file and open it in your editor&lt;/span&gt;
vim &lt;span class="si"&gt;$(&lt;/span&gt;fzf&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or pipe anything into it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# search git branches&lt;/span&gt;
git branch | fzf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Seriously, just install fzf.&lt;/p&gt;
&lt;h2&gt;
  
  
  Terminal motions
&lt;/h2&gt;

&lt;p&gt;Stop holding backspace and typing everything all over again...&lt;/p&gt;

&lt;p&gt;Here are the motions that saved me the most time:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Option + ←/→&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump by word&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Option + Backspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete a word&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump to beginning of line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + E&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jump to end of line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + K&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Delete everything after cursor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Drill these for a week and holding backspace will start to physically hurt you.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sudo shortcut
&lt;/h2&gt;

&lt;p&gt;You've done this before:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;something
&lt;span class="c"&gt;# Permission denied&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Instead of retyping the whole thing, just run:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;!!&lt;/code&gt; expands to your last command. Done.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tab completion
&lt;/h2&gt;

&lt;p&gt;ZSH tab completion goes further than bash:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tab into directories and keep going (no need to hit enter between each level)&lt;/li&gt;
&lt;li&gt;Cycle through matches with repeated tab presses&lt;/li&gt;
&lt;li&gt;Case-insensitive matching by default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case I did &lt;code&gt;~/.aw&amp;lt;tab&amp;gt;/co&amp;lt;tab&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhulspug40q4a2g97csvm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhulspug40q4a2g97csvm.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're typing full paths by hand, you're doing it wrong.&lt;/p&gt;
&lt;h2&gt;
  
  
  Autocompletion
&lt;/h2&gt;

&lt;p&gt;Some CLI tools ship with their own completions for subcommands and flags. The &lt;a href="https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-completion.html" rel="noopener noreferrer"&gt;AWS CLI&lt;/a&gt; is a good example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add this to your .zshrc&lt;/span&gt;
autoload bashcompinit &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bashcompinit
autoload &lt;span class="nt"&gt;-Uz&lt;/span&gt; compinit &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; compinit
&lt;span class="nb"&gt;complete&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s1"&gt;'/usr/local/bin/aws_completer'&lt;/span&gt; aws
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxm24amx3prz7b7wacowu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxm24amx3prz7b7wacowu.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;aws s3&amp;lt;TAB&amp;gt;&lt;/code&gt; shows you all the s3 subcommands. Most popular CLIs (&lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;kubectl&lt;/code&gt;, &lt;code&gt;gh&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;) have similar setups. Check their docs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Autosuggestions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/zsh-users/zsh-autosuggestions" rel="noopener noreferrer"&gt;zsh-autosuggestions&lt;/a&gt; gives you fish-like behavior in ZSH. As you type, it shows a grayed-out suggestion based on your history. Press the right arrow to accept it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpllkeiaffkjy5tsd15ee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpllkeiaffkjy5tsd15ee.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give it a few days and you won't be able to go back.&lt;/p&gt;
&lt;h2&gt;
  
  
  Syntax highlighting
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting" rel="noopener noreferrer"&gt;zsh-syntax-highlighting&lt;/a&gt; highlights your commands as you type. Valid commands go green, invalid go red. It's instant feedback before you even hit enter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpedbeii4ec59ynt2fhd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbpedbeii4ec59ynt2fhd.png" alt=" " width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You catch typos before you hit enter. That's it, that's the sell.&lt;/p&gt;
&lt;h2&gt;
  
  
  Command buffering
&lt;/h2&gt;

&lt;p&gt;Kick off a long-running command like &lt;code&gt;pnpm i&lt;/code&gt;, then just type your next command and hit enter. ZSH buffers it and runs it when the first one finishes.&lt;/p&gt;

&lt;p&gt;You're typing blind so typos happen, but it beats waiting around.&lt;/p&gt;
&lt;h2&gt;
  
  
  Terminal clearing
&lt;/h2&gt;

&lt;p&gt;Two quick ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;clear&lt;/code&gt; (or &lt;code&gt;Ctrl + L&lt;/code&gt;) - clears the screen but keeps scrollback&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd + K&lt;/code&gt; - nukes everything including scrollback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use &lt;code&gt;Cmd + K&lt;/code&gt; when I want a clean slate and &lt;code&gt;clear&lt;/code&gt; when I just want visual breathing room.&lt;/p&gt;
&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;Here's everything linked in one place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ohmyzsh/ohmyzsh" rel="noopener noreferrer"&gt;Oh My ZSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;Fuzzy Finder (fzf)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zsh-users/zsh-autosuggestions" rel="noopener noreferrer"&gt;zsh-autosuggestions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting" rel="noopener noreferrer"&gt;zsh-syntax-highlighting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/a/5542996" rel="noopener noreferrer"&gt;Terminal Motions Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://scriptingosx.com/2019/07/moving-to-zsh-part-5-completions" rel="noopener noreferrer"&gt;Tab Completion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;That's my setup. Most of these take under a minute to install and will save you hours over time. If you found this useful, feel free to follow me for more dev tooling tips.&lt;/p&gt;

&lt;p&gt;Happy coding 😀!&lt;/p&gt;

&lt;p&gt;Also follow AWS for more articles like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>productivity</category>
      <category>cli</category>
      <category>zsh</category>
    </item>
    <item>
      <title>S3 Account Regional Namespaces with CDK</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Tue, 12 May 2026 19:07:20 +0000</pubDate>
      <link>https://dev.to/aws/s3-bucket-regional-namespaces-with-cdk-3j86</link>
      <guid>https://dev.to/aws/s3-bucket-regional-namespaces-with-cdk-3j86</guid>
      <description>&lt;p&gt;&lt;strong&gt;THIS HAS BEEN PATCHED AND THE WORKAROUND IS NO LONGER NEEDED 🙌&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are using &lt;a href="https://github.com/aws/aws-cdk/releases/tag/v2.256.0" rel="noopener noreferrer"&gt;aws-cdk-lib@2.256.0&lt;/a&gt; or newer you should be able to use both &lt;code&gt;bucketNamePrefix&lt;/code&gt; and &lt;code&gt;bucketNamespace&lt;/code&gt; with the native &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3-readme.html" rel="noopener noreferrer"&gt;L2 Bucket construct&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;So you learned about the new &lt;a href="https://aws.amazon.com/blogs/aws/introducing-account-regional-namespaces-for-amazon-s3-general-purpose-buckets/" rel="noopener noreferrer"&gt;S3 bucket account regional namespace&lt;/a&gt; feature and you're thinking "this is amazing, let me try in CDK."&lt;/p&gt;

&lt;p&gt;Well... This is where you'll learn that the &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_s3.Bucket.html" rel="noopener noreferrer"&gt;L2 Bucket construct&lt;/a&gt; has not yet been updated to allow for this. &lt;/p&gt;

&lt;p&gt;Currently there are the following items which are tracking the long term fix.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/aws-cdk/issues/37760" rel="noopener noreferrer"&gt;Issue aws/aws-cdk#37760&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aws/aws-cdk/pull/37386" rel="noopener noreferrer"&gt;PR aws/aws-cdk#37386&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should give both of these a 👍 to help them get prioritized and shipped. &lt;/p&gt;

&lt;h2&gt;
  
  
  Workaround
&lt;/h2&gt;

&lt;p&gt;Good news there is a workaround! By using the L1 construct as an escape hatch we can then pass in &lt;code&gt;bucketNamePrefix&lt;/code&gt; and &lt;code&gt;bucketNamespace&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;cdk&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Construct&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;constructs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cdk101Stack&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Construct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StackProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// WORKAROUND: use the L1 bucket construct&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ConfigBucket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;bucketNamePrefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;bucketNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;account-regional&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After deploying this you'll see your new bucket with &lt;code&gt;{name}-{account}-{region}-an&lt;/code&gt; (the an suffix indicates account namespace).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6lb1dlx5m0o1pm2rod9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6lb1dlx5m0o1pm2rod9.png" alt=" " width="800" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That will work if you only need to deploy the bucket. But if you need an L2 reference (&lt;code&gt;IBucket&lt;/code&gt;), use &lt;code&gt;s3.Bucket.fromCfnBucket&lt;/code&gt; to convert it. &lt;/p&gt;

&lt;p&gt;Full code demo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;cdk&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Construct&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;constructs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;s3deploy&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-cdk-lib/aws-s3-deployment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Cdk101Stack&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Construct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StackProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// NOTE: workaround for the following CDK issues&lt;/span&gt;
    &lt;span class="c1"&gt;// https://github.com/aws/aws-cdk/issues/37760&lt;/span&gt;
    &lt;span class="c1"&gt;// https://github.com/aws/aws-cdk/pull/37386&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cfnBucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ConfigBucket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;bucketNamePrefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;bucketNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;account-regional&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCfnBucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cfnBucket&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Upload a config file to the bucket on deploy&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BucketDeployment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DeployConfig&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;sources&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;s3deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;asset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))],&lt;/span&gt;
      &lt;span class="na"&gt;destinationBucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;Hope this blog helped you get a workaround for now and once &lt;a href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib-readme.html" rel="noopener noreferrer"&gt;aws-cdk-lib&lt;/a&gt; is patched I'll update this blog.&lt;/p&gt;

&lt;p&gt;Happy coding 😃!&lt;/p&gt;

&lt;p&gt;Follow AWS for more articles like this&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>aws</category>
      <category>cdk</category>
      <category>devops</category>
    </item>
    <item>
      <title>Embed These Websites In Your Blog Today</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 07 May 2026 18:34:41 +0000</pubDate>
      <link>https://dev.to/aws/embed-these-websites-in-your-blog-today-286p</link>
      <guid>https://dev.to/aws/embed-these-websites-in-your-blog-today-286p</guid>
      <description>&lt;p&gt;I stumbled onto the DEV &lt;a href="https://dev.to/p/editor_guide#supported-url-embeds-list"&gt;supported URL embeds list&lt;/a&gt;, which revealed some interesting supported platforms.&lt;/p&gt;

&lt;p&gt;You'll want to refer to the link above to figure out the syntax for the DEV specific ones but most are just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight liquid"&gt;&lt;code&gt;&lt;span class="cp"&gt;{%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;embed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;url&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you would like to jump around.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;asciinema&lt;/li&gt;
&lt;li&gt;StackBlitz&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;X/Twitter&lt;/li&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;DEV specific&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://asciinema.org" rel="noopener noreferrer"&gt;asciinema&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A video-like player which is so cool because you can actually pause it and copy the text from it.&lt;/p&gt;


&lt;div class="ltag_asciinema"&gt;
  
&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://stackblitz.com" rel="noopener noreferrer"&gt;StackBlitz&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Interactive code editor right in a blog post 😍. Seems like the embedded terminal and preview will fail due to some &lt;code&gt;postMessage&lt;/code&gt; shenanigans, but perhaps it can be fixed.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/vitejs-vite-48u9w2no?file=src%2FApp.tsx&amp;amp;view=editor" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;It supports rendering the README to give some brief context with a CTA to open the repo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/strands-agents" rel="noopener noreferrer"&gt;
        strands-agents
      &lt;/a&gt; / &lt;a href="https://github.com/strands-agents/sdk-typescript" rel="noopener noreferrer"&gt;
        sdk-typescript
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A model-driven approach to building AI agents in just a few lines of code. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;div&gt;
    &lt;a href="https://strandsagents.com" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/1cf2d94f5ad881d696cc58b3ffad81acf923846f6c5132f56d6a355ebbb9d6a5/68747470733a2f2f737472616e64736167656e74732e636f6d2f6c61746573742f6173736574732f6c6f676f2d6769746875622e737667" alt="Strands Agents" width="55px" height="105px"&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
    Strands Agents - TypeScript SDK
  &lt;/h1&gt;
&lt;/div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;
    A model-driven approach to building AI agents in TypeScript/JavaScript
  &lt;/h2&gt;
&lt;/div&gt;
  &lt;div&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/graphs/commit-activity" rel="noopener noreferrer"&gt;&lt;img alt="GitHub commit activity" src="https://camo.githubusercontent.com/8821bd0b3888f85c4a98c53352d041c4f739503a337ee8c8a4875cd3188b998f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f6d2f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/issues" rel="noopener noreferrer"&gt;&lt;img alt="GitHub open issues" src="https://camo.githubusercontent.com/cda88797d49d9b5fbdc6adf4b2653ab119f098575d4cd890075e2ede90d39a76/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/pulls" rel="noopener noreferrer"&gt;&lt;img alt="GitHub open pull requests" src="https://camo.githubusercontent.com/b97af830b461ced88f0c8d3a1131e8e97ef484357fc50cc9207bb80b40661893/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6973737565732d70722f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://github.com/strands-agents/sdk-typescript/blob/main/LICENSE.APACHE" rel="noopener noreferrer"&gt;&lt;img alt="License" src="https://camo.githubusercontent.com/0c123f3b067b77f5b9daffb5702a6465f7b31a8592c15b115f0ff751dfb21300/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f737472616e64732d6167656e74732f73646b2d74797065736372697074"&gt;&lt;/a&gt;
    &lt;a href="https://www.npmjs.com/package/@strands-agents/sdk" rel="nofollow noopener noreferrer"&gt;&lt;img alt="NPM Version" src="https://camo.githubusercontent.com/f5536192be00821a49a2cef74506f8a603018b1ff32f3bd3fc1c257d64b74e64/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f40737472616e64732d6167656e74732f73646b"&gt;&lt;/a&gt;
    &lt;a href="https://discord.gg/strands" rel="nofollow noopener noreferrer"&gt;&lt;img alt="Strands Discord" src="https://camo.githubusercontent.com/f09e977a820d4079f7027dc8c6cc2203d606fb6fbaf7a3ba6db7849fc8a1203a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446973636f72642d537472616e64732d3538363546323f6c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;p&gt;
    &lt;a href="https://strandsagents.com/" rel="nofollow noopener noreferrer"&gt;Documentation&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/samples" rel="noopener noreferrer"&gt;Samples&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/sdk-python" rel="noopener noreferrer"&gt;Python SDK&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/tools" rel="noopener noreferrer"&gt;Tools&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/agent-builder" rel="noopener noreferrer"&gt;Agent Builder&lt;/a&gt;
    ◆ &lt;a href="https://github.com/strands-agents/mcp-server" rel="noopener noreferrer"&gt;MCP Server&lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Strands Agents is a simple yet powerful SDK that takes a model-driven approach to building and running AI agents. The TypeScript SDK brings key features from the Python Strands framework to Node.js environments, enabling type-safe agent development for everything from simple assistants to complex workflows.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Key Features&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🪶 Lightweight &amp;amp; Flexible&lt;/strong&gt;: Simple agent loop that works seamlessly in Node.js and browser environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔒 Type-Safe Tools&lt;/strong&gt;: Define tools easily using Zod schemas for robust input validation and type inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📋 Structured Output&lt;/strong&gt;: Get type-safe, validated responses from LLMs using Zod schemas with automatic retry on validation errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔌 Model Agnostic&lt;/strong&gt;: First-class support for Amazon Bedrock and OpenAI, with extensible architecture for custom providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔗 Built-in MCP&lt;/strong&gt;: Native…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/strands-agents/sdk-typescript" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  &lt;a href="https://x.com" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Useful when a tweet has some context you want to reference.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2052162536301072643-169" src="https://platform.twitter.com/embed/Tweet.html?id=2052162536301072643"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2052162536301072643-169');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2052162536301072643&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Video is king 👑. However, I'd probably reach for the "Cover Video Link" feature, where you can have the video be your banner instead of an image.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/NJ6F0atWKpM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  DEV specific
&lt;/h2&gt;

&lt;p&gt;These are some of the custom things that DEV supports outside of third party site embeds.&lt;/p&gt;

&lt;p&gt;Article Link:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" class="crayons-story__hidden-navigation-link"&gt;Stop Reaching for Python: Strands Agents TypeScript SDK Just Hit 1.0&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/aws"&gt;
            &lt;img alt="AWS logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" class="crayons-logo__image" width="320" height="320"&gt;
          &lt;/a&gt;

          &lt;a href="/erikch" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1994%2F0j84YwMs.jpeg" alt="erikch profile" class="crayons-avatar__image" width="208" height="208"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/erikch" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Erik Hanchett
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Erik Hanchett
                
              
              &lt;div id="story-author-preview-content-3610948" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/erikch" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1994%2F0j84YwMs.jpeg" class="crayons-avatar__image" alt="" width="208" height="208"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Erik Hanchett&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/aws" class="crayons-story__secondary fw-medium"&gt;AWS&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 4&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" id="article-link-3610948"&gt;
          Stop Reaching for Python: Strands Agents TypeScript SDK Just Hit 1.0
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;19&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/aws/stop-reaching-for-python-strands-agents-typescript-sdk-just-hit-10-4lk6#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            8 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;User Profile:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__735825"&gt;
    &lt;a href="/brooke_jamieson" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F735825%2F6ede452c-440e-4a66-af2f-7ef5ab91eaa2.jpeg" alt="brooke_jamieson image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/brooke_jamieson"&gt;Brooke Jamieson&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/brooke_jamieson"&gt;🌥️ I’ll teach you tech tips in bite sized videos
📣 Keynote Speaker
👩🏻‍💻 AI/ML Specialist
💼 AWS Sr Developer Advocate (views are my own)
🇦🇺AU ➡️ NYC🗽&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Tag Profile:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__tag ltag__tag__id__397"&gt;
    &lt;div class="ltag__tag__content"&gt;
      &lt;h2&gt;#&lt;a href="https://dev.to/t/aws" class="ltag__tag__link"&gt;aws&lt;/a&gt; Follow
&lt;/h2&gt;
      &lt;div class="ltag__tag__summary"&gt;
        Amazon Web Services (AWS) is a collection of web services for computing, storage, machine learning, security, and more

There are over 200+ AWS services as of 2023.
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Comment:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__comment crayons-card my-2 p-0 overflow-hidden"&gt;
    &lt;a href="https://dev.to/aws/what-even-is-ai-i-took-a-break-had-to-relearn-everything-3dpj" class="flex items-center gap-2 p-3 fs-s color-base-60 hover:color-base-90"&gt;
      

      &lt;span&gt;Comment on &lt;strong class="fw-medium color-base-90"&gt;What Even Is AI? (I Took a Break &amp;amp; Had to Relearn Everything)&lt;/strong&gt;&lt;/span&gt;
    &lt;/a&gt;
  &lt;div class="p-4"&gt;
    &lt;div class="flex items-center gap-2 mb-3"&gt;
      &lt;a href="/jess" class="crayons-avatar crayons-avatar--l"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess" class="crayons-avatar__image" width="400" height="400"&gt;
      &lt;/a&gt;
      &lt;div&gt;
        &lt;a href="/jess" class="crayons-link fw-medium"&gt;Jess Lee&lt;/a&gt;
        &lt;span class="fs-xs color-base-60 ml-1"&gt;May 5&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="text-styles"&gt;
      &lt;blockquote&gt;
&lt;p&gt;I just came back from maternity leave. And honestly? I felt like I'd missed a decade in six months.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I feel this so hard.&lt;/p&gt;

&lt;p&gt;Looking forward to your series!&lt;/p&gt;


    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Podcast Episode:&lt;br&gt;
&lt;/p&gt;
&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/awsbites/120-lambda-best-practices"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;120. Lambda Best Practices&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/awsbites"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        AWS Bites
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-120-lambda-best-practices" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-120-lambda-best-practices" src="https://assets.dev.to/assets/playbutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-120-lambda-best-practices" src="https://assets.dev.to/assets/pausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-120-lambda-best-practices" alt="AWS Bites" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F674%2F056236bd-d6bf-4665-9ef1-ec6e3009420d.png"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-120-lambda-best-practices"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/awsbites/120-lambda-best-practices"&gt;
      &lt;img id="episode-profile-image" alt="120. Lambda Best Practices" width="420" height="420" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F674%2F056236bd-d6bf-4665-9ef1-ec6e3009420d.png"&gt;
      &lt;img id="animated-bars" src="https://assets.dev.to/assets/animated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://assets.dev.to/assets/playbutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://assets.dev.to/assets/pausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://assets.dev.to/assets/volume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://assets.dev.to/assets/volume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Organization:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__1726"&gt;
  &lt;a href="/aws" class="ltag__user__link profile-image-link"&gt;
    &lt;div class="ltag__user__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1726%2F2a73f1e6-7995-4348-ae37-44b064274c59.png" alt="aws image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;AWS&lt;/a&gt;
      Follow
    &lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a href="/aws" class="ltag__user__link"&gt;
        Articles written by current and past AWS Developer Advocates to help people interested in building on AWS. Opinions are each author's own.
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Well, this one is not a website, but it's useful when you want to add some CTA at the end of a blog.&lt;/p&gt;

&lt;p&gt;Buttons:&lt;br&gt;
&lt;a href="https://x.com/AWSDevelopers" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;View @AWSDevelopers on X/Twitter 💻&lt;/a&gt;
&lt;br&gt;
—&lt;br&gt;
&lt;a href="https://builder.aws.com/?trk=02c7b25c-78f4-4968-8fa2-241bdf0bcf97&amp;amp;sc_channel=el" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Visit AWS Builder Center&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;Let me know what your favorite embed is or if I'm missing any amazing ones in the comments. &lt;/p&gt;

&lt;p&gt;Happy coding 👨‍💻!&lt;/p&gt;

</description>
      <category>devto</category>
      <category>todayilearned</category>
      <category>howtodev</category>
    </item>
    <item>
      <title>{% embed https://dev.to/hacksore %}</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 07 May 2026 02:18:21 +0000</pubDate>
      <link>https://dev.to/hacksore/-embed-httpsdevtohacksore--ho1</link>
      <guid>https://dev.to/hacksore/-embed-httpsdevtohacksore--ho1</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://dev.to/hacksore" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3otvb2z646ytpt1hl2rv.jpg" height="400" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://dev.to/hacksore" rel="noopener noreferrer" class="c-link"&gt;
            Sean Boult - DEV Community
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Developer. Hacker. Creator.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j7kvp660rqzt99zui8e.png" width="300" height="299"&gt;
          dev.to
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>automation</category>
      <category>github</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
    <item>
      <title>1Password, GitHub, and Git CLI with Multiple Users</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Fri, 01 May 2026 23:03:23 +0000</pubDate>
      <link>https://dev.to/hacksore/1password-github-and-git-cli-with-multiple-users-a0j</link>
      <guid>https://dev.to/hacksore/1password-github-and-git-cli-with-multiple-users-a0j</guid>
      <description>&lt;p&gt;Do you use the &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git&lt;/a&gt;, &lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;github&lt;/a&gt;, and &lt;a href="https://developer.1password.com/docs/cli/" rel="noopener noreferrer"&gt;1password&lt;/a&gt; CLI? I do!&lt;/p&gt;

&lt;p&gt;I want to be able to act as different users in certain directories to support my personal projects (&lt;code&gt;~/code&lt;/code&gt;) and my work projects (&lt;code&gt;~/oss&lt;/code&gt;) automatically, because, you know, developers automate everything.&lt;/p&gt;

&lt;p&gt;This means I want to be able to run &lt;code&gt;gh&lt;/code&gt; commands as the correct user, as well as have &lt;code&gt;git&lt;/code&gt; commands pick the correct SSH key.&lt;/p&gt;

&lt;p&gt;If you want to have a single dotfiles repo for both work and personal development, this should give you something to follow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ If you use a single GitHub account for everything, this article might not be very helpful for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Tools you’ll need to make all this work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.1password.com/docs/cli/" rel="noopener noreferrer"&gt;1Password CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/install" rel="noopener noreferrer"&gt;Git CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll also want to designate some folders to hold projects. This guide will use the following structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~/code&lt;/code&gt; - where I do personal development on my personal machine&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~/oss&lt;/code&gt; - where I do all my work open source code (repros, demos, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1) Set a global default (personal)
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;~/.gitconfig&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[user]&lt;/span&gt;
    &lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;Sean Boult&lt;/span&gt;
    &lt;span class="py"&gt;email&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;996134+Hacksore@users.noreply.github.com&lt;/span&gt;

&lt;span class="nn"&gt;[includeIf "gitdir:~/oss/"]&lt;/span&gt;
    &lt;span class="py"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;~/.gitconfig-work&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we’ve added the default user in the &lt;code&gt;[user]&lt;/code&gt; block and added an &lt;code&gt;includeIf&lt;/code&gt; (&lt;a href="https://git-scm.com/docs/git-config#Documentation/git-config.txt-includeIfconditionpath" rel="noopener noreferrer"&gt;docs&lt;/a&gt;) block that specifies that inside &lt;code&gt;~/oss&lt;/code&gt; we’ll make sure to load the config options in &lt;code&gt;~/.gitconfig-work&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Given that you need to be “inside a git directory” based on the &lt;code&gt;gitdir&lt;/code&gt; clause, it means that &lt;code&gt;~/oss&lt;/code&gt; should be a valid Git directory.&lt;/p&gt;

&lt;p&gt;To do that, run this in &lt;code&gt;~/oss&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# make ~/oss a valid git repo&lt;/span&gt;
git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will also want to create a &lt;code&gt;.gitignore&lt;/code&gt; file to not track anything in this directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ~/oss/.gitignore&lt;/span&gt;
&lt;span class="c"&gt;# Sentinel repo: exists only so includeIf matches when cwd is ~/oss&lt;/span&gt;
&lt;span class="c"&gt;# Ignore all subdirs (they're separate repos)&lt;/span&gt;
&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2) Put work identity in a separate config
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;~/.gitconfig-work&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;user]
    name &lt;span class="o"&gt;=&lt;/span&gt; Sean Boult
    email &lt;span class="o"&gt;=&lt;/span&gt; &amp;lt;yourWorkEmail&amp;gt; &lt;span class="c"&gt;# replace this with your email&lt;/span&gt;
    &lt;span class="c"&gt;# optional ssh key signing&lt;/span&gt;
    &lt;span class="c"&gt;# signingkey = ~/.ssh/id_rsa.pub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3) Make SSH key selection automatic
&lt;/h3&gt;

&lt;p&gt;Now configure SSH so Git will pick the right key based on the repo you are in.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;~/.ssh/config&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Github and we default personal&lt;/span&gt;
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa.personal
    IdentitiesOnly &lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in &lt;code&gt;~/.gitconfig-work&lt;/code&gt;, add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;core]
    sshCommand &lt;span class="o"&gt;=&lt;/span&gt; ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_rsa &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;IdentitiesOnly&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any repo elsewhere uses your personal Git identity and personal SSH key.&lt;/li&gt;
&lt;li&gt;Any repo under &lt;code&gt;~/oss&lt;/code&gt; uses your work Git identity and work SSH key.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1Password CLI Plugin
&lt;/h2&gt;

&lt;p&gt;The next step is to allow the &lt;code&gt;gh&lt;/code&gt; CLI to know what directory you’re in and use the right GitHub PAT (personal access token).&lt;/p&gt;

&lt;p&gt;To put it simply, I have two PATs in my 1Password vault: &lt;code&gt;gh-pat-cli&lt;/code&gt; (personal) and &lt;code&gt;gh-pat-cli-sboult&lt;/code&gt; (work/oss). In the &lt;code&gt;op&lt;/code&gt; setup, instruct 1Password to use the &lt;code&gt;gh-pat-cli-sboult&lt;/code&gt; PAT so that when you’re in &lt;code&gt;~/oss&lt;/code&gt;, it uses the correct PAT to authenticate with the GitHub CLI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijf02e26r6nvqaxt18q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijf02e26r6nvqaxt18q1.png" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.1password.com/docs/cli/shell-plugins/github/" rel="noopener noreferrer"&gt;Use 1Password to securely authenticate the GitHub CLI&lt;/a&gt; is a helpful doc if you get stuck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work repos (&lt;code&gt;~/oss&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/oss

git clone git@github.com:awslabs/mcp.git
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="c"&gt;# gh repo clone awslabs/mcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the repo is under &lt;code&gt;~/oss/&lt;/code&gt;, Git uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your work &lt;code&gt;user.name&lt;/code&gt; / &lt;code&gt;user.email&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;your work SSH key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then normal commands work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote &lt;span class="nt"&gt;-v&lt;/span&gt;
git push

gh &lt;span class="nb"&gt;pr &lt;/span&gt;list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Personal repos
&lt;/h2&gt;

&lt;p&gt;Outside of &lt;code&gt;~/oss&lt;/code&gt;, everything uses your default (personal) identity.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:Hacksore/test.git
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="c"&gt;# gh repo clone test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;That’s it! You should now be able to reproduce the setup I have.&lt;/p&gt;

&lt;p&gt;Happy coding 😊!&lt;/p&gt;

</description>
      <category>github</category>
      <category>cli</category>
      <category>1password</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Hide regions and services in the AWS console</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Wed, 15 Apr 2026 21:26:43 +0000</pubDate>
      <link>https://dev.to/aws/hide-regions-and-services-in-the-aws-console-1m09</link>
      <guid>https://dev.to/aws/hide-regions-and-services-in-the-aws-console-1m09</guid>
      <description>&lt;p&gt;Tired of scrolling through regions and services you'll never use?&lt;/p&gt;

&lt;p&gt;You just want to...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbswyi3rgrkoso9ep0f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbswyi3rgrkoso9ep0f6.png" alt=" " width="576" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS now lets you hide regions and services from your console. Here's how.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; This is a visual preference, not a security control. Users can still access hidden regions and services directly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Hide Regions
&lt;/h2&gt;

&lt;p&gt;That region dropdown doesn't need to show every region AWS offers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3lv5j0ibchnon2gu8rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv3lv5j0ibchnon2gu8rp.png" alt=" " width="800" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://us-east-1.console.aws.amazon.com/settings/home?region=us-east-1" rel="noopener noreferrer"&gt;Unified Settings → Account settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;Visible Regions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Deselect the regions you don't use. Keep the ones where you actually run workloads.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvggpjvfsdnaskk1nscm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvggpjvfsdnaskk1nscm.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Done. Your region dropdown now only shows what matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hide Services
&lt;/h2&gt;

&lt;p&gt;Same place, different setting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://us-east-1.console.aws.amazon.com/settings/home?region=us-east-1" rel="noopener noreferrer"&gt;Unified Settings → Account settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;Visible Services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Deselect the services you don't need. I'd recommend keeping &lt;strong&gt;Billing&lt;/strong&gt; so you can still manage costs.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85ge6syjpmn6z9twyh2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F85ge6syjpmn6z9twyh2u.png" alt=" " width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens When You Access Something Hidden?
&lt;/h2&gt;

&lt;p&gt;You'll see a page like this if you navigate to a hidden region/service directly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8os34ulrswigxdakdb9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8os34ulrswigxdakdb9t.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And some parts of the console will show a restricted indicator:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r765sixs8odrrkl0yfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r765sixs8odrrkl0yfz.png" alt=" " width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, nothing is actually blocked. It's just hidden from the default navigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/customize-your-aws-management-console-experience-with-visual-settings-including-account-color-region-and-service-visibility/" rel="noopener noreferrer"&gt;AWS Blog: Customize your console experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2026/03/account-customizations-console/" rel="noopener noreferrer"&gt;What's New: Account customizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/visible-regions-services.html" rel="noopener noreferrer"&gt;Docs: Visible regions and services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>Reading a blog post about blog posts is so meta 😂</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Thu, 09 Apr 2026 12:26:43 +0000</pubDate>
      <link>https://dev.to/hacksore/reading-a-blog-post-about-blog-posts-is-so-meta-16g7</link>
      <guid>https://dev.to/hacksore/reading-a-blog-post-about-blog-posts-is-so-meta-16g7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-story__hidden-navigation-link"&gt;Top 7 Featured DEV Posts of the Week&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Beaver-powered databases and ancient AI&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image" width="800" height="800"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3461619" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" id="article-link-3461619"&gt;
          Top 7 Featured DEV Posts of the Week
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/top7"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;top7&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;80&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/top-7-featured-dev-posts-of-the-week-4idc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              20&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 22 Mar 2026 16:52:56 +0000</pubDate>
      <link>https://dev.to/hacksore/-25il</link>
      <guid>https://dev.to/hacksore/-25il</guid>
      <description></description>
    </item>
    <item>
      <title>Every AWS S3 Compatible API Provider EVER</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 22 Mar 2026 16:46:29 +0000</pubDate>
      <link>https://dev.to/aws/every-aws-s3-compatible-api-provider-ever-6fc</link>
      <guid>https://dev.to/aws/every-aws-s3-compatible-api-provider-ever-6fc</guid>
      <description>&lt;p&gt;You've probably heard of &lt;a href="https://aws.amazon.com/pm/serv-s3" rel="noopener noreferrer"&gt;AWS Simple Storage Service (Amazon S3)&lt;/a&gt;, which allows you to store objects in buckets.&lt;/p&gt;

&lt;p&gt;The AWS S3 API was the original blob storage interface, and many storage providers and technology companies have reverse-engineered or emulated it to ensure compatibility.&lt;/p&gt;

&lt;p&gt;Some notable examples include services like Cloudflare R2 and Backblaze B2, but there are countless others, as you'll see below.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;S3-Compatible Offering&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/s3/" rel="noopener noreferrer"&gt;Amazon S3&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.cloudflare.com/r2/" rel="noopener noreferrer"&gt;R2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backblaze&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.backblaze.com/cloud-storage" rel="noopener noreferrer"&gt;B2 Cloud Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wasabi&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wasabi.com/cloud-object-storage" rel="noopener noreferrer"&gt;Hot Cloud Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.digitalocean.com/products/spaces" rel="noopener noreferrer"&gt;Spaces&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cloud.google.com/storage" rel="noopener noreferrer"&gt;Cloud Storage (XML API)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IBM Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.ibm.com/products/cloud-object-storage" rel="noopener noreferrer"&gt;Cloud Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.oracle.com/cloud/storage/object-storage/" rel="noopener noreferrer"&gt;OCI Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Akamai&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.akamai.com/products/object-storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nebius&lt;/td&gt;
&lt;td&gt;&lt;a href="https://nebius.com/services/storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alibaba Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.alibabacloud.com/en/product/object-storage-service?_p_lc=1" rel="noopener noreferrer"&gt;Object Storage Service (OSS)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tencent Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.tencentcloud.com/products/cos" rel="noopener noreferrer"&gt;Cloud Object Storage (COS)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Huawei Cloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.huaweicloud.com/intl/en-us/product/obs.html" rel="noopener noreferrer"&gt;Object Storage Service (OBS)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vultr&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.vultr.com/products/cloud-storage/object-storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaleway&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.scaleway.com/en/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hetzner&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.hetzner.com/storage/object-storage" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OVHcloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://us.ovhcloud.com/public-cloud/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UpCloud&lt;/td&gt;
&lt;td&gt;&lt;a href="https://upcloud.com/global/products/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contabo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://contabo.com/en-us/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exoscale&lt;/td&gt;
&lt;td&gt;&lt;a href="https://community.exoscale.com/product/storage/object-storage/" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seagate&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.seagate.com/cloud/object-storage/" rel="noopener noreferrer"&gt;Lyve Cloud Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDrive&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.idrive.com/s3-storage-e2/s3-storage" rel="noopener noreferrer"&gt;e2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CoreWeave&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.coreweave.com/products/storage#object-storage" rel="noopener noreferrer"&gt;AI Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gcore&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gcore.com/storage" rel="noopener noreferrer"&gt;Gcore Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Synology&lt;/td&gt;
&lt;td&gt;&lt;a href="https://c2.synology.com/en-us/object-storage/overview" rel="noopener noreferrer"&gt;C2 Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEGA&lt;/td&gt;
&lt;td&gt;&lt;a href="https://mega.io/objectstorage" rel="noopener noreferrer"&gt;S4 Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storj&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.storj.io/cloud-object-storage" rel="noopener noreferrer"&gt;Cloud Object Storage&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This list is certainly not exhaustive, as there are more services I haven't discovered in my research.&lt;/p&gt;

&lt;p&gt;If I missed any, leave me a comment so I can update the list! Also, don’t be shy and tell me which ones are your favorite to use.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>s3</category>
    </item>
    <item>
      <title>anyone shipping anything on Sunday?</title>
      <dc:creator>Sean Boult</dc:creator>
      <pubDate>Sun, 08 Mar 2026 21:01:16 +0000</pubDate>
      <link>https://dev.to/hacksore/anyone-shipping-anything-on-sunday-36p</link>
      <guid>https://dev.to/hacksore/anyone-shipping-anything-on-sunday-36p</guid>
      <description></description>
    </item>
  </channel>
</rss>
