<?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: Mukesh KG</title>
    <description>The latest articles on DEV Community by Mukesh KG (@mukesh1811).</description>
    <link>https://dev.to/mukesh1811</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%2F1148828%2Fbe051640-031f-4c43-a8ef-5c1fecc5321a.jpeg</url>
      <title>DEV Community: Mukesh KG</title>
      <link>https://dev.to/mukesh1811</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mukesh1811"/>
    <language>en</language>
    <item>
      <title>Stop Using JSON Keys: Secure Your GitHub Actions with Workload Identity Federation</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Tue, 13 Jan 2026 09:01:06 +0000</pubDate>
      <link>https://dev.to/mukesh1811/stop-using-json-keys-secure-your-github-actions-with-workload-identity-federation-49h6</link>
      <guid>https://dev.to/mukesh1811/stop-using-json-keys-secure-your-github-actions-with-workload-identity-federation-49h6</guid>
      <description>&lt;p&gt;If you are running production workloads on Google Cloud and still authenticating GitHub Actions using Service Account JSON keys, you are carrying unnecessary security risk and not following the &lt;a href="https://console.cloud.google.com/iam-admin/workload-identity-pools?project=fr-b2c-480112" rel="noopener noreferrer"&gt;best practises&lt;/a&gt; from google&lt;/p&gt;




&lt;p&gt;This article explains why JSON keys are dangerous, what Workload Identity Federation (WIF) actually does, and how GitHub and GCP talk to each other under the hood - written for engineers and data scientists who already understand CI/CD but want the deeper identity story.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Problem with JSON Keys&lt;/strong&gt;&lt;br&gt;
For years, the default pattern looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a GCP service account&lt;/li&gt;
&lt;li&gt;Generate a JSON key&lt;/li&gt;
&lt;li&gt;Store it in GitHub Secrets&lt;/li&gt;
&lt;li&gt;Authenticate from CI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was the best we've got while it violates almost every modern security principle. Because:&lt;br&gt;
A Service Account JSON key is effectively a permanent password.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It does not expire automatically&lt;/li&gt;
&lt;li&gt;It can be copied infinitely&lt;/li&gt;
&lt;li&gt;It works from anywhere on the internet&lt;/li&gt;
&lt;li&gt;Rotation is manual and often forgotten&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that key leaks, the attacker does not need GitHub, your repository, or your workflow. They authenticate directly against GCP.&lt;br&gt;
This is why Google has been strongly nudging teams away from keys. Away from Long-Lived to Short-Lived credentials&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Long-Lived vs Short-Lived Credentials (Quick 101)&lt;/strong&gt;&lt;br&gt;
This distinction is the entire reason Workload Identity Federation exists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-Lived Credentials (JSON Keys)&lt;/strong&gt;&lt;br&gt;
Think of these as static secrets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created once&lt;/li&gt;
&lt;li&gt;Valid until revoked&lt;/li&gt;
&lt;li&gt;Reusable outside their original context&lt;/li&gt;
&lt;li&gt;High blast radius
They break zero-trust and least-privilege by design.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Short-Lived Credentials (OIDC Tokens)&lt;/strong&gt;&lt;br&gt;
Short-lived credentials behave like just-in-time access passes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issued only when needed&lt;/li&gt;
&lt;li&gt;Automatically expire (usually ~1 hour)&lt;/li&gt;
&lt;li&gt;Bound to a specific workload execution&lt;/li&gt;
&lt;li&gt;Impossible to reuse later
Even if intercepted, damage is limited.
This is the security model WIF enables.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;What Is Workload Identity Federation?&lt;/strong&gt;&lt;br&gt;
Workload Identity Federation allows external workloads (GitHub Actions, GitLab CI, Kubernetes, etc.) to access Google Cloud without service account keys.&lt;br&gt;
Instead of trusting a file, GCP trusts an identity assertion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub = Identity Provider (IdP)&lt;/li&gt;
&lt;li&gt;Google Cloud = Resource Provider
No keys stored. No secrets copied. No rotation required.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;What Actually Happens Between GitHub and GCP&lt;/strong&gt;&lt;br&gt;
Assume you already understand GitHub Actions jobs and runners. Here's the identity flow.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GitHub Action job starts
A runner begins executing your workflow. At this point, it has zero GCP credentials.&lt;/li&gt;
&lt;li&gt;GitHub issues an OIDC token
Because your job has id-token: write permission, the runner can request an OpenID Connect (OIDC) token from GitHub.
This token is:
• Cryptographically signed by GitHub
• Short-lived
• Audience-restricted
The token payload contains execution metadata:
• Repository
• Repository owner
• Branch or tag
• Workflow name
• Job reference
Think of this as a structured record describing who is running what, from where.&lt;/li&gt;
&lt;li&gt;Token is sent to Google Cloud STS
The google-github-actions/auth action sends this token to Google Cloud's Security Token Service (STS).&lt;/li&gt;
&lt;li&gt;Google validates trust conditions
GCP verifies:
• Token signature (issued by GitHub)
• Token audience
• Attribute conditions you configured (repo, org, branch)
This is where your security rules are enforced.&lt;/li&gt;
&lt;li&gt;Token exchange happens
If validation passes, STS exchanges the GitHub OIDC token for a short-lived Google access token.
No service account keys are created. Nothing is persisted.&lt;/li&gt;
&lt;li&gt;Service account impersonation
The access token represents a temporary impersonation of a specific GCP service account.
IAM permissions are evaluated exactly like any other GCP identity - but only for the token's lifetime.&lt;/li&gt;
&lt;li&gt;Access expires automatically
When the job ends (or the token expires), access disappears.
This is zero-trust implemented correctly.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Benefits&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No long-lived secrets in GitHub&lt;/li&gt;
&lt;li&gt;Credentials expire automatically&lt;/li&gt;
&lt;li&gt;Access can be restricted by repo, org, branch&lt;/li&gt;
&lt;li&gt;Easier audits and compliance&lt;/li&gt;
&lt;li&gt;No key rotation burden
Security improves and operational friction drops.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Migration Overview&lt;br&gt;
I recently migrated my Data ETL pipeline github action from JSON keys to WIF in under 20 minutes.&lt;br&gt;
GCP Setup (One-Time)&lt;br&gt;
You need to:&lt;br&gt;
• Create a Workload Identity Pool&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcloud iam workload-identity-pools create "github-actions-pool" ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;• Create a Workload Identity Provider (GitHub)&lt;br&gt;
• Allow a service account to be impersonated&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gcloud iam workload-identity-pools providers create-oidc "github-actions-provider" \
  --issuer-uri="https://token.actions.githubusercontent.com" \
  --attribute-mapping="google.subject=assertion.sub,attribute.repository=assertion.repository" \
  --attribute-condition="assertion.repository_owner == 'YOUR_ORG_NAME'"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important: Attribute conditions are mandatory. This is where you lock down trust. By giving your org name you lock in the source which can be the provider so that this impersonation can happen only from github. Also not from any github repo but only from your your org repository.&lt;/p&gt;




&lt;p&gt;GitHub Workflow Change&lt;br&gt;
Enable OIDC:&lt;br&gt;
&lt;code&gt;permissions:&lt;br&gt;
  contents: read&lt;br&gt;
  id-token: write&lt;/code&gt;&lt;br&gt;
Authenticate using WIF:&lt;br&gt;
&lt;code&gt;- uses: google-github-actions/auth@v2&lt;br&gt;
  with:&lt;br&gt;
    workload_identity_provider: projects/123456789/locations/global/workloadIdentityPools/github-actions-pool/providers/github-actions-provider&lt;br&gt;
    service_account: my-service-account@my-project.iam.gserviceaccount.com&lt;/code&gt;&lt;br&gt;
That's it.&lt;/p&gt;




&lt;p&gt;Final Thoughts&lt;br&gt;
JSON keys were a necessary workaround in the past. They are technical debt today.&lt;br&gt;
Workload Identity Federation gives you:&lt;br&gt;
• Stronger security&lt;br&gt;
• Smaller blast radius&lt;br&gt;
• Less operational overhead&lt;br&gt;
If Google is recommending WIF, it's the new baseline of dev sec ops&lt;/p&gt;




&lt;p&gt;Glossary&lt;br&gt;
Service Account&lt;br&gt;
Non-human identity in GCP used by workloads.&lt;br&gt;
Service Account JSON Key&lt;br&gt;
Long-lived private key tied to a service account.&lt;br&gt;
OIDC (OpenID Connect)&lt;br&gt;
Identity layer on OAuth 2.0 using signed tokens.&lt;br&gt;
OIDC Token (JWT)&lt;br&gt;
Short-lived, signed token containing identity claims.&lt;br&gt;
Identity Provider (IdP)&lt;br&gt;
Entity that issues identity tokens (GitHub).&lt;br&gt;
Workload Identity Federation&lt;br&gt;
GCP mechanism for trusting external identities.&lt;br&gt;
Workload Identity Pool&lt;br&gt;
Container for external identities in GCP.&lt;br&gt;
Workload Identity Provider&lt;br&gt;
Defines how GCP validates external tokens.&lt;br&gt;
STS (Security Token Service)&lt;br&gt;
Exchanges external tokens for GCP access tokens.&lt;br&gt;
Service Account Impersonation&lt;br&gt;
Temporarily acting as a service account without keys.&lt;br&gt;
Zero-Trust&lt;br&gt;
Every access is verified; nothing is trusted by default.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>github</category>
      <category>google</category>
      <category>security</category>
    </item>
    <item>
      <title>IMO, a good v0 , that is, the zeroth version of your product, should feel like an insult to your capability but an "aaha" for your user</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Mon, 25 Nov 2024 21:25:49 +0000</pubDate>
      <link>https://dev.to/mukesh1811/imo-a-good-v0-that-is-the-zeroth-version-of-your-product-should-feel-like-an-insult-to-your-23fc</link>
      <guid>https://dev.to/mukesh1811/imo-a-good-v0-that-is-the-zeroth-version-of-your-product-should-feel-like-an-insult-to-your-23fc</guid>
      <description></description>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>I wanted my users to have their own subdomain and ...</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Tue, 12 Nov 2024 18:30:20 +0000</pubDate>
      <link>https://dev.to/mukesh1811/i-wanted-my-users-to-have-their-own-subdomain-and--e16</link>
      <guid>https://dev.to/mukesh1811/i-wanted-my-users-to-have-their-own-subdomain-and--e16</guid>
      <description>&lt;p&gt;I wanted to create a functionality where every user of mine gets their own subdomain. And for that I needed my hosting provider to support wildcard(*) subdomain. So that &lt;strong&gt;&lt;em&gt;anything.joyzo.in&lt;/em&gt;&lt;/strong&gt; will resolve to &lt;strong&gt;&lt;em&gt;*.joyzo.in&lt;/em&gt;&lt;/strong&gt; where I have my application server running. And my application can then extract the subdomain "anything" from the full url &lt;strong&gt;&lt;em&gt;anything.joyzo.in&lt;/em&gt;&lt;/strong&gt; and build the page accordingly. As you know I am a returning-back dev and this seemingly simple task took almost 2 weeks for me, trying various hosting service providers. And finally got it done, ofcourse.&lt;br&gt;
Here are my learnings:&lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;strong&gt;1. Firebase&lt;/strong&gt;
&lt;/h6&gt;

&lt;p&gt;My app is in flutter. I started off thinking firebase would be ideal with seamless integration, because, you know, Google. Also, more importantly, I did not want to go searching the world for the best stack. So firebase it was. And seamless it did. Hosting worked fine. CLI was helpful. And then came the bummer.&lt;br&gt;
Firebase does not support wildcard subdomain. Plain and simple NO. No turn arounds. No hacks. Nothing. You can afford two 10 days to not believe me.&lt;/p&gt;

&lt;h6&gt;
  
  
  2. &lt;strong&gt;Netlify&lt;/strong&gt;
&lt;/h6&gt;

&lt;p&gt;Then came Netlify. I follow a indie developer in Linkedin and sometime back he said he uses Netlify. So why not. There could have been many benefits and one was evident immediately. Drag and drop files to build. Cannot ask for anything simpler. But then came the bummer.&lt;br&gt;
Netlify supports wild card subdomain but only for pro version. Pro version costs $19 per month. And we'll never know how easy it is to set up with a pro version 😛&lt;/p&gt;

&lt;p&gt;But there is one important learning I had with Netlify. I learnt about &lt;strong&gt;NameServers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Use this prompt to understand about nameservers in detail: &lt;br&gt;
"&lt;em&gt;explain nameservers like I am a fresh college grad with a CS degree&lt;/em&gt;". &lt;br&gt;
But here is my version. A citizen developer who is looking to get things done version: &lt;/p&gt;

&lt;p&gt;I bought my domain name joyzo.in from Godaddy. and then began development in flutter. And when I had a poc built ready in flutter, I wanted to host it. So that end users can visit joyzo.in and use my app. Fairly clear requirement. And thus came firebase. I have some idea about how firebase works. so I hosted my app in firebase and the app was live with a firebase project url. Now I researched about adding custom domain. Just by following steps I was able to make few changes and add my  custom domain joyzo.in to this firebase project url. And bam, the app was live. And in the process I had to do a lot of configurations in my Godaddy domain control panel. and a only a few in firebase. Why? because my domain joyzo.in was using Godaddy nameservers. That's why I had to do a lot of configuration changes in Godaddy control panel versus firebase where the only change I had to do was to add a custom domain. So nameservers is the place where we do many changes. But what are those many changes? Changes like adding  CNAME , TXT, A etc.. these are called DNS records. and nameserver is where your DNS is hosted so that you can make these "lot of" changes there. How did I specifically learn about nameservers when trying Netlify? Nothing specific. I had a documentation about changing nameserver from domain registrar, Godaddy, to Netlify. And what is the benefit? Actually there is no outstanding benefit except the fact that now you can add/modify/remove DNS records from the place where you host, Netlify, than from your domain registrar, Godaddy. We'll be anyhow using hosting services from the web interface frequently. So this is a convenience to have your dns hosted there as well. And firebase did not speak about nameservers. I am unsure whether there is a nameserver option in firebase. But Netlify do have it. They did speak about it. And now I know about it.&lt;/p&gt;

&lt;h6&gt;
  
  
  3. &lt;strong&gt;Vercel&lt;/strong&gt;
&lt;/h6&gt;

&lt;p&gt;As much as I was excited, I was disappointed that Netlify allowed wildcard subdomains but only for pro version. So researched further and found Vercel. This release &lt;a href="https://vercel.com/blog/wildcard-domains" rel="noopener noreferrer"&gt;post&lt;/a&gt; from Vercel is actually the one that caught my eye while I was still exploring other hosting options like Cloudfare, AWS, GCP etc.. And it was a breeze. Just setup your repo, set the prod branch, build script, install script and that is it. you are done hosting. Previously learnt nameserver and custom domain setup knowledge helped. Then come the important part, wildcard. It was another breeze. Just following the steps in the release post made it work like a charm. And here I have, my poc running:&lt;/p&gt;

&lt;p&gt;&lt;a href="//anything.joyzo.in"&gt;*.joyzo.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;try changing the subdomain from "anything" to anything and see them all resolving to the same app.&lt;/p&gt;




&lt;p&gt;Along side I got myself familiar with DNS records and their usages. Not expert level but I know when to change what and change what to what. I will follow up about DNS records with a post if asked for, in comments. If not, will be busy building Joyzo and sharing the journey here in &lt;a href="https://dev.to/mukeshkg"&gt;dev.to&lt;/a&gt; exclusively.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vercel</category>
      <category>netlify</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Github for Story Writing</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Wed, 27 Mar 2024 13:57:24 +0000</pubDate>
      <link>https://dev.to/mukesh1811/github-for-story-writing-2m5i</link>
      <guid>https://dev.to/mukesh1811/github-for-story-writing-2m5i</guid>
      <description>&lt;p&gt;thoughts?&lt;/p&gt;

</description>
      <category>idea</category>
    </item>
    <item>
      <title>Widget Curious : Expanded</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Tue, 12 Mar 2024 01:32:08 +0000</pubDate>
      <link>https://dev.to/mukesh1811/widget-curious-expanded-431j</link>
      <guid>https://dev.to/mukesh1811/widget-curious-expanded-431j</guid>
      <description>&lt;p&gt;I am building a startup and I am pre product. Imagine the velocity at which the build is happening.&lt;br&gt;
I was preparing a demo for a potential inital user for feedback. Demo was made in two days with just enough feature set to get the feel of the product, thanks to flutter + firebase.&lt;br&gt;
At the last minute I somehow felt that the widgets in the screen weren't taking up enough space when the app is opened in a tablet. So to just be doubly sure, I added a Expanded widget at the top level. Triggered a debug run and everything seemed fine. Hence pushed to prod and went on for the demo.&lt;/p&gt;

&lt;p&gt;As you have guessed, the demo flopped. Here are my learnings:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Expanded&lt;/strong&gt; widget is typically used within a Column or Row to indicate that its child should take up the remaining space in the main axis.&lt;/p&gt;

&lt;p&gt;However, using Expanded requires its parent widget to have constraints to determine how much space should be allocated to the child. However, using Expanded requires its parent widget to have constraints to determine how much space should be allocated to the child. In some cases, especially when dealing with complex layouts or nested widgets, the absence of constraints can lead to errors or unexpected behavior, particularly in release builds where optimizations may differ.&lt;/p&gt;

&lt;p&gt;It's important to note that while Expanded is a powerful tool for managing layout in Flutter, it's not always necessary and can sometimes be omitted depending on the specific requirements of your UI. It's always a good idea to simplify your layout and remove unnecessary widgets if they aren't contributing to the desired behavior or causing issues.&lt;/p&gt;

&lt;p&gt;here are some scenarios where you might want to use or avoid using the Expanded widget in Flutter:&lt;/p&gt;
&lt;h2&gt;
  
  
  When to Use Expanded:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Flexible Layouts:&lt;/strong&gt; &lt;br&gt;
Use Expanded when you want a child widget to take up the available space along the main axis of a Row or Column. For example, if you have a list of items in a Column and you want one of the items to expand to fill the remaining space, you would wrap it with Expanded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Column(
  children: [
    Text('Header'),
    Expanded(
      child: Container(color: Colors.blue),
    ),
    Text('Footer'),
  ],
)

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Flexible Containers:&lt;/strong&gt; &lt;br&gt;
When you want a container to expand to fill the available space within its parent widget, you can use Expanded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Row(
  children: [
    Container(color: Colors.red),
    Expanded(
      child: Container(color: Colors.blue),
    ),
    Container(color: Colors.green),
  ],
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Flexible Sized Boxes:&lt;/strong&gt; &lt;br&gt;
Sometimes you might want a SizedBox to take up the available space within a parent widget. Wrapping it with Expanded can achieve this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Column(
  children: [
    SizedBox(height: 20),
    Expanded(
      child: Container(color: Colors.blue),
    ),
    SizedBox(height: 20),
  ],
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When Not to Use Expanded:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;When Child Should Take Its Intrinsic Size:&lt;/strong&gt; &lt;br&gt;
If the child widget should only take its intrinsic size and not expand to fill available space, avoid using Expanded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Row(
  children: [
    Container(width: 100, height: 100, color: Colors.blue),
    // No need for Expanded if the child should maintain its intrinsic size
    Container(width: 200, height: 100, color: Colors.red),
  ],
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When Constraints Are Not Clear:&lt;/strong&gt; &lt;br&gt;
If the parent widget does not provide clear constraints, using Expanded might lead to layout issues. In such cases, consider using other widgets or reorganizing your layout.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Column(
  children: [
    // The parent Column does not provide constraints, so using Expanded here might lead to issues
    Expanded(
      child: Container(color: Colors.blue),
    ),
  ],
)

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Single Child Layouts:&lt;/strong&gt; &lt;br&gt;
If you only have one child in a Row or Column and you want it to take up the available space, you might not need Expanded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Column(
  children: [
    // Only one child, it will take up the available space by default
    Container(color: Colors.blue),
  ],
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember, the decision to use Expanded depends on the specific layout requirements of your UI. Use it when you need a child to fill available space, and avoid it when you don't want the child to expand or when constraints are unclear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices and Tips**
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use with Caution:&lt;/strong&gt; While the Expanded widget can be a powerful tool for managing layout in Flutter, it should be used judiciously. Overusing Expanded can lead to complex and difficult-to-maintain layouts. Reserve its use for cases where you truly need a child widget to expand to fill available space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combine with Flex:&lt;/strong&gt; The Expanded widget works hand in hand with Flex widgets like Row and Column. When using Expanded within a Row or Column, ensure that the mainAxisSize property of the parent is set to MainAxisSize.max. This allows the Expanded widget to expand to fill the available space along the main axis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Avoid Nesting:&lt;/strong&gt; Avoid nesting Expanded widgets within each other, as this can lead to unpredictable layout behavior. Instead, consider using a combination of Expanded and Flexible widgets within a Flex container to achieve more flexible layouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Across Devices:&lt;/strong&gt; Always test your layouts across different devices and screen sizes, especially when using Expanded. While Expanded is great for filling available space, it's important to ensure that your layout remains responsive and looks good on all devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimize Performance:&lt;/strong&gt; Be mindful of performance implications when using Expanded, especially in large and complex layouts. Overuse of Expanded can result in unnecessary widget rebuilding and layout recalculations, leading to performance issues. Keep your layout hierarchy as simple and efficient as possible.&lt;/p&gt;




&lt;p&gt;it is fun to startup. if it goes by your plan, great. if not, you can always write about it. either way it is a win.&lt;/p&gt;

&lt;p&gt;you can expect more about startups, flutter and firebase from me. letting you know just in case you are wondering to follow or not.&lt;/p&gt;

&lt;p&gt;cheers!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>learning</category>
      <category>startup</category>
      <category>ux</category>
    </item>
    <item>
      <title>How many start-up ideas do you have?</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Fri, 22 Sep 2023 12:12:14 +0000</pubDate>
      <link>https://dev.to/mukesh1811/how-many-start-up-ideas-do-you-have-22b3</link>
      <guid>https://dev.to/mukesh1811/how-many-start-up-ideas-do-you-have-22b3</guid>
      <description>&lt;p&gt;let the comment section rain &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>startup</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Flutter + Firebase ; What else could one ask for?</title>
      <dc:creator>Mukesh KG</dc:creator>
      <pubDate>Tue, 29 Aug 2023 08:28:32 +0000</pubDate>
      <link>https://dev.to/mukesh1811/flutter-firebase-what-else-could-one-ask-for-3l4l</link>
      <guid>https://dev.to/mukesh1811/flutter-firebase-what-else-could-one-ask-for-3l4l</guid>
      <description>&lt;p&gt;Since my recent decision to become an indie maker, I have got my hands dirty with possibly every stack available and concluded upon Flutter + Firebase. I can complete 99% of my planned projects with it. And I am astounded. It is too good to be true and I sure I am missing out something. Can some one explain what am I missing?&lt;/p&gt;

&lt;p&gt;For context, I've been into Data Science for more that 9 years now, professionally. And the tech stack my DS works and deployment demands is mostly different than a full stack's. So I could be missing out something very silly.&lt;/p&gt;

</description>
      <category>help</category>
      <category>techstack</category>
    </item>
  </channel>
</rss>
