Installing Flutter on Arch: A Choose-Your-Own-Adventure Saga
Serendeep Rudraraju

Installing Flutter on Arch Linux is one of those tasks that sounds straightforward until you actually try it. The internet is overflowing with guides, but most are either fossilized relics from 2019 or mysteriously don't work because Flutter evolves faster than anyone can keep up with.
If you're using bash, you'll find plenty of step-by-step resources. But if you're a fish shell user? Good luck—most guides are so outdated, you'd think they were written on papyrus.
Fear not. Here are the three main ways to get Flutter up and running on Arch, ranked from "grandma-friendly" to "why am I doing this to myself?":
The Three Paths to Flutter Enlightenment
-
The Easy Way:
Download Android Studio and let it do the heavy lifting. For everything else, consult Stack Overflow and hope for the best. It's like hiring movers instead of carrying the couch yourself. -
The Weird Way:
Install Flutter from the AUR. Prepare for a wild ride of dependency errors, cryptic logs, and the existential dread of "why doesn't this work for me?" I never got this to work reliably, but maybe you're luckier (or braver). -
The Reliable Way (My Way):
This is the method I trust—tried, tested, and works 10/10 times. If you want a setup that won't break every time Flutter sneezes out a new update, read on.
Loading diagram...
Prerequisites: The Boring but Necessary Stuff
I roll with Java 21 because my apps like living on the edge with the latest Flutter and Gradle. Check the Gradle compatibility matrix if you're feeling nerdy.
Install Java 21 from the AUR:
bashyay -S jdk21-openjdkarchlinux-java set java-21-openjdk
No need to set JAVA_HOME—it's as deprecated as Internet Explorer. Move along.
Getting Started: The Step-by-Step
Step 1: Download the Flutter SDK
Head to the official Flutter install page and grab the latest SDK.
Flutter suggests a ~/development folder, but I prefer ~/Android—it's neater, and doubles as my ANDROID_HOME.
Extract the SDK like so:
bashtar -xf ~/Downloads/flutter_linux_*-stable.tar.xz -C ~/Android/
Step 2: Command Line Tools—Because GUIs Are for Mortals
Download the Android command line tools.
Extract them into this oddly specific directory:
bashmkdir -p ~/Android/cmdline-tools/latestunzip ~/Downloads/commandlinetools-linux-*.zip -d /tmp/android_cmdline_tempmv /tmp/android_cmdline_temp/cmdline-tools/* ~/Android/cmdline-tools/latest/rm -rf /tmp/android_cmdline_temp
Yes, the directory structure is weird. No, I don't make the rules.
Step 3: Set Up Your Shell Profile
For fish users (the cool kids):
fish# Set the ANDROID_HOME environment variableset -gx ANDROID_HOME "$HOME/Android"# Add Android-related directories to the PATHset -gx PATH "$ANDROID_HOME/flutter/bin" $PATHset -gx PATH "$ANDROID_HOME/cmdline-tools/latest/bin" $PATHset -gx PATH "$ANDROID_HOME/platform-tools" $PATHset -gx PATH "$ANDROID_HOME/emulator" $PATH
For bash/zsh users (the classics):
bashexport ANDROID_HOME="$HOME/Android"export PATH="$ANDROID_HOME/flutter/bin:$PATH"export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"export PATH="$ANDROID_HOME/platform-tools:$PATH"export PATH="$ANDROID_HOME/emulator:$PATH"
Pro tip: Make sure you're not accidentally overwriting your
$PATH—append/prepend as needed!
Step 4: Relaunch and Test
Restart your terminal so your shell can soak in those new variables.
Install the essential Android components (grab a coffee, this takes a while):
bashyes | sdkmanager \ "platform-tools" \ "emulator" \ "platforms;android-35" \ "build-tools;35.0.0" \ "system-images;android-35;google_apis_playstore;x86_64"
Next, get the Android licenses out of the way:
bashyes | flutter doctor --android-licenses
Once that's done, run:
bashflutter doctor -v
If something fails (usually build tools), don't panic—Google and the Arch Wiki are your best friends.
Directory Structure: What You Should See
Your ~/Android folder should look something like this:
~/Android/
├── flutter/
├── cmdline-tools/
│ └── latest/
├── platform-tools/
├── emulator/
└── (other stuff)
Quality of Life Tweaks (a.k.a. "Save Your Sanity")
Problem:
adb sometimes refuses to detect your device unless it's in MTP mode. Annoying, right?
Solution:
Create a symbolic link so adb is always where it needs to be:
bashsudo ln -s ~/Android/platform-tools/adb /usr/bin/adb
Now your phone should show up without needing to play USB mode roulette.
Final Thoughts
Setting up Flutter on Arch is a bit like assembling a spaceship from spare parts—frustrating, occasionally confusing, but satisfying when it finally takes off. If you hit a snag, remember: you're not alone, and there's always another guide (or meme) out there to help.
Happy coding—and may your flutter doctor always return green checkmarks!
Enjoyed this post? Consider supporting the blog.
Buy me a coffee