Skip to content

Latest commit

 

History

History

README.md

Fluttida (Network Stack Lab)

Main screen Results screen Logs screen Pinning screen

Flutter Version Frida Version Platform

The example/test app Fluttida is also available on the Google Play Store: Fluttida on Google Play

Get it on Google Play

Fluttida is a small Flutter-based network stack lab and test playground. It helps you run the same HTTP request through multiple networking implementations (Dart and native platform stacks), inspect and compare results, and evaluate behavior under instrumentation. It works on both iOS and Android.

Platform Support

Fluttida runs on both supported mobile platforms. The table below highlights availability per OS:

Feature / Stack iOS Android
dart:io HttpClient yes yes
package:http (default) yes yes
package:http via IOClient yes yes
cupertino_http (NSURLSession) yes no
iOS legacy NSURLConnection yes no
Android HttpURLConnection no yes
Android OkHttp no yes
Cronet (Android) no yes
Headless WebView DOM scraping yes yes
Native libcurl + OpenSSL yes yes

Features

  • Multiple network stacks: dart:io HttpClient, package:http (default), package:http via IOClient, cupertino_http (NSURLSession on iOS), native iOS legacy connection, Android native stacks (HttpURLConnection, OkHttp, Cronet), and a headless WebView DOM scraper.
  • SSL pinning lab: toggle pinning per stack (Dart, Android native, native libcurl), choose SPKI vs certificate hash, and view per-pin comparisons in the Logs tab.
  • Unified result format: each stack returns status, body, durationMs, and error (when applicable) so you can compare outputs easily.
  • Interactive UI: three tabs — Stack (configure request and pick stacks), Results (preview and full-screen viewer), and Logs (per-run debug output).
  • Full-screen viewer: open truncated responses in a selectable, scrollable view with jump-to-end and copy-to-clipboard controls.
  • Quick controls: Run Selected, Select/Deselect All, and clear actions for body, headers, results and status codes.

Why use Fluttida as a test playground

  • Compare client behavior across Dart, iOS and Android stacks to spot differences in headers, redirects, TLS handling, and response parsing.
  • Run Frida scripts and instrumentation in a controlled environment: attach Frida to a running device/emulator to inspect or hook native network APIs and observe how stacks behave under runtime instrumentation.
  • Reproduce subtle platform-specific issues before applying fixes in production code.

Quick start

  1. Install Flutter and required platform toolchains (Android SDK/NDK, Xcode for iOS).
  2. From the app folder, fetch packages and run:
cd example_app/fluttida
flutter pub get
flutter run

Notes

  • WebView-based stack: WebView APIs generally do not expose raw HTTP status codes to page scripts; the UI will show n/a for status on WebView stacks.
  • Native dependencies (e.g. Cronet, OkHttp) can increase binary size and may require extra packaging steps for release (ABI splits, proper gradle settings).

Where to look

  • UI & controller: lib/lab_screen.dart — request config, controls, results viewer and logs.
  • Stack implementations: lib/stacks/stacks_impl.dart — Dart implementations and platform channel callers.
  • Android native handlers: android/app/src/main/kotlin/.../MainActivity.kt (if present) — native HttpURLConnection/OkHttp/Cronet handlers.
  • iOS native bridge: ios/Runner/AppDelegate.swift (if present) — legacy iOS stack integration.