Skip to content

Instantly share code, notes, and snippets.

@loic-sharma
Last active April 30, 2025 18:56
Show Gist options
  • Save loic-sharma/1b9388fb4a7abc3b2a8c14976a727059 to your computer and use it in GitHub Desktop.
Save loic-sharma/1b9388fb4a7abc3b2a8c14976a727059 to your computer and use it in GitHub Desktop.
JetBrains Survey: Crossplatform Framework Usage

Steps

  1. Download raw data: https://www.jetbrains.com/lp/devecosystem-2024/

  2. Install DuckDB: https://duckdb.org/

  3. Launch DuckDB in the command line:

    duckdb
  4. Run this query for the 2024 report:

    WITH data AS (
      SELECT
        weight,
        "platform::Mobile" IS NOT NULL AS platform_mobile,
        "mobile_target_os::Android" IS NOT NULL AS mobile_target_os_Android,
        "mobile_target_os::Other" IS NOT NULL AS mobile_target_os_Other,
        "mobile_target_os::iOS" IS NOT NULL AS mobile_target_os_iOS,
        "mobile_os_how::I use cross-platform technologies and frameworks (Xamarin, Apache Cordova, Ionic, etc.)" IS NOT NULL AS mobile_os_how_I_use_crossplatform_frmwrk,
        "mobile_os_how::I use native tools (Swift for iOS, Kotlin for Android, etc.)" IS NOT NULL AS mobile_os_how_I_use_native_tools,
        "mobile_crossplatform_frmwrk::Apache Flex" IS NOT NULL AS mobile_crossplatform_frmwrk_Apache_Flex,
        "mobile_crossplatform_frmwrk::Cordova (formerly PhoneGap)" IS NOT NULL AS mobile_crossplatform_frmwrk_Cordova,
        "mobile_crossplatform_frmwrk::Other" IS NOT NULL AS mobile_crossplatform_frmwrk_Other,
        "mobile_crossplatform_frmwrk::Flutter" IS NOT NULL AS mobile_crossplatform_frmwrk_Flutter,
        "mobile_crossplatform_frmwrk::Ionic" IS NOT NULL AS mobile_crossplatform_frmwrk_Ionic,
        "mobile_crossplatform_frmwrk::Kivy" IS NOT NULL AS mobile_crossplatform_frmwrk_Kivy,
        "mobile_crossplatform_frmwrk::Kotlin Multiplatform" IS NOT NULL AS mobile_crossplatform_frmwrk_Kotlin_Multiplatform,
        "mobile_crossplatform_frmwrk::NativeScript" IS NOT NULL AS mobile_crossplatform_frmwrk_NativeScript,
        "mobile_crossplatform_frmwrk::PhoneGap" IS NOT NULL AS mobile_crossplatform_frmwrk_PhoneGap,
        "mobile_crossplatform_frmwrk::React Native" IS NOT NULL AS mobile_crossplatform_frmwrk_React_Native,
        "mobile_crossplatform_frmwrk::Unity" IS NOT NULL AS mobile_crossplatform_frmwrk_Unity,
        "mobile_crossplatform_frmwrk::Xamarin" IS NOT NULL AS mobile_crossplatform_frmwrk_Xamarin,
      -- TODO: Update this path!
      FROM '/path/to/Developer Ecosystem Survey 2024_ Raw data sharing/2024_sharing_data_outside.csv'
    ),
    summed_crossplatform_data AS (
      SELECT
        COUNT(*) respondents,
        SUM(weight) AS total_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Apache_Flex, weight, 0)) AS total_mobile_crossplatform_frmwrk_Apache_Flex_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Cordova, weight, 0)) AS total_mobile_crossplatform_frmwrk_Cordova_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Other, weight, 0)) AS total_mobile_crossplatform_frmwrk_Other_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Flutter, weight, 0)) AS total_mobile_crossplatform_frmwrk_Flutter_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Ionic, weight, 0)) AS total_mobile_crossplatform_frmwrk_Ionic_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Kivy, weight, 0)) AS total_mobile_crossplatform_frmwrk_Kivy_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Kotlin_Multiplatform, weight, 0)) AS total_mobile_crossplatform_frmwrk_Kotlin_Multiplatform_weight,
        SUM(IF(mobile_crossplatform_frmwrk_NativeScript, weight, 0)) AS total_mobile_crossplatform_frmwrk_NativeScript_weight,
        SUM(IF(mobile_crossplatform_frmwrk_PhoneGap, weight, 0)) AS total_mobile_crossplatform_frmwrk_PhoneGap_weight,
        SUM(IF(mobile_crossplatform_frmwrk_React_Native, weight, 0)) AS total_mobile_crossplatform_frmwrk_React_Native_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Unity, weight, 0)) AS total_mobile_crossplatform_frmwrk_Unity_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Xamarin, weight, 0)) AS total_mobile_crossplatform_frmwrk_Xamarin_weight,
      FROM data
      WHERE mobile_os_how_I_use_crossplatform_frmwrk = true
    )
    SELECT
      total_mobile_crossplatform_frmwrk_Apache_Flex_weight / total_weight * 100 AS Apache_Flex_pct,
      total_mobile_crossplatform_frmwrk_Cordova_weight / total_weight * 100 AS Cordova_pct,
      total_mobile_crossplatform_frmwrk_Other_weight / total_weight * 100 AS Other_pct,
      total_mobile_crossplatform_frmwrk_Flutter_weight / total_weight * 100 AS Flutter_pct,
      total_mobile_crossplatform_frmwrk_Ionic_weight / total_weight * 100 AS Ionic_pct,
      total_mobile_crossplatform_frmwrk_Kivy_weight / total_weight * 100 AS Kivy_pct,
      total_mobile_crossplatform_frmwrk_Kotlin_Multiplatform_weight / total_weight * 100 AS Kotlin_Multiplatform_pct,
      total_mobile_crossplatform_frmwrk_NativeScript_weight / total_weight * 100 AS NativeScript_pct,
      total_mobile_crossplatform_frmwrk_PhoneGap_weight / total_weight * 100 AS PhoneGap_pct,
      total_mobile_crossplatform_frmwrk_React_Native_weight / total_weight * 100 AS React_Native_pct,
      total_mobile_crossplatform_frmwrk_Unity_weight / total_weight * 100 AS Unity_pct,
      total_mobile_crossplatform_frmwrk_Xamarin_weight / total_weight * 100 AS Xamarin_pct,
    FROM summed_crossplatform_data
    ;
  5. Run this query for the 2023 report:

    WITH data AS (
      SELECT
        weight,
        "target_platforms::Mobile" IS NOT NULL AS target_platforms_Mobile,
        "mobile_target_os::Android" IS NOT NULL AS mobile_target_os_Android,
        "mobile_target_os::Other" IS NOT NULL AS mobile_target_os_Other,
        "mobile_target_os::iOS" IS NOT NULL AS mobile_target_os_iOS,
        "mobile_os_how::I use cross-platform technologies and frameworks (Xamarin, Apache Cordova, Ionic, etc.)"  IS NOT NULL AS mobile_os_how_I_use_crossplatform_frmwrk,
        "mobile_os_how::I use native tools (Swift / Objective-C for iOS, Kotlin for Android, etc.)" IS NOT NULL AS mobile_os_how_I_use_native_tools,
        "mobile_crossplatform_frmwrk::Apache Flex" IS NOT NULL AS mobile_crossplatform_frmwrk_Apache_Flex,
        "mobile_crossplatform_frmwrk::Cordova" IS NOT NULL AS mobile_crossplatform_frmwrk_Cordova,
        "mobile_crossplatform_frmwrk::Other" IS NOT NULL AS mobile_crossplatform_frmwrk_Other,
        "mobile_crossplatform_frmwrk::Flutter" IS NOT NULL AS mobile_crossplatform_frmwrk_Flutter,
        "mobile_crossplatform_frmwrk::Ionic" IS NOT NULL AS mobile_crossplatform_frmwrk_Ionic,
        "mobile_crossplatform_frmwrk::Kivy" IS NOT NULL AS mobile_crossplatform_frmwrk_Kivy,
        "mobile_crossplatform_frmwrk::Kotlin Multiplatform" IS NOT NULL AS mobile_crossplatform_frmwrk_Kotlin_Multiplatform,
        "mobile_crossplatform_frmwrk::NativeScript" IS NOT NULL AS mobile_crossplatform_frmwrk_NativeScript,
        "mobile_crossplatform_frmwrk::PhoneGap" IS NOT NULL AS mobile_crossplatform_frmwrk_PhoneGap,
        "mobile_crossplatform_frmwrk::React Native" IS NOT NULL AS mobile_crossplatform_frmwrk_React_Native,
        "mobile_crossplatform_frmwrk::Unity" IS NOT NULL AS mobile_crossplatform_frmwrk_Unity,
        "mobile_crossplatform_frmwrk::Xamarin" IS NOT NULL AS mobile_crossplatform_frmwrk_Xamarin,
      FROM '/Users/loicsharma/Downloads/2023_sharing_data_outside.csv'
    ),
    summed_crossplatform_data AS (
      SELECT
        COUNT(*) respondents,
        SUM(weight) AS total_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Apache_Flex, weight, 0)) AS total_mobile_crossplatform_frmwrk_Apache_Flex_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Cordova, weight, 0)) AS total_mobile_crossplatform_frmwrk_Cordova_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Other, weight, 0)) AS total_mobile_crossplatform_frmwrk_Other_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Flutter, weight, 0)) AS total_mobile_crossplatform_frmwrk_Flutter_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Ionic, weight, 0)) AS total_mobile_crossplatform_frmwrk_Ionic_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Kivy, weight, 0)) AS total_mobile_crossplatform_frmwrk_Kivy_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Kotlin_Multiplatform, weight, 0)) AS total_mobile_crossplatform_frmwrk_Kotlin_Multiplatform_weight,
        SUM(IF(mobile_crossplatform_frmwrk_NativeScript, weight, 0)) AS total_mobile_crossplatform_frmwrk_NativeScript_weight,
        SUM(IF(mobile_crossplatform_frmwrk_PhoneGap, weight, 0)) AS total_mobile_crossplatform_frmwrk_PhoneGap_weight,
        SUM(IF(mobile_crossplatform_frmwrk_React_Native, weight, 0)) AS total_mobile_crossplatform_frmwrk_React_Native_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Unity, weight, 0)) AS total_mobile_crossplatform_frmwrk_Unity_weight,
        SUM(IF(mobile_crossplatform_frmwrk_Xamarin, weight, 0)) AS total_mobile_crossplatform_frmwrk_Xamarin_weight,
      FROM data
      WHERE mobile_os_how_I_use_crossplatform_frmwrk = true
    )
    SELECT
      total_mobile_crossplatform_frmwrk_Apache_Flex_weight / total_weight * 100 AS Apache_Flex_pct,
      total_mobile_crossplatform_frmwrk_Cordova_weight / total_weight * 100 AS Cordova_pct,
      total_mobile_crossplatform_frmwrk_Other_weight / total_weight * 100 AS Other_pct,
      total_mobile_crossplatform_frmwrk_Flutter_weight / total_weight * 100 AS Flutter_pct,
      total_mobile_crossplatform_frmwrk_Ionic_weight / total_weight * 100 AS Ionic_pct,
      total_mobile_crossplatform_frmwrk_Kivy_weight / total_weight * 100 AS Kivy_pct,
      total_mobile_crossplatform_frmwrk_Kotlin_Multiplatform_weight / total_weight * 100 AS Kotlin_Multiplatform_pct,
      total_mobile_crossplatform_frmwrk_NativeScript_weight / total_weight * 100 AS NativeScript_pct,
      total_mobile_crossplatform_frmwrk_PhoneGap_weight / total_weight * 100 AS PhoneGap_pct,
      total_mobile_crossplatform_frmwrk_React_Native_weight / total_weight * 100 AS React_Native_pct,
      total_mobile_crossplatform_frmwrk_Unity_weight / total_weight * 100 AS Unity_pct,
      total_mobile_crossplatform_frmwrk_Xamarin_weight / total_weight * 100 AS Xamarin_pct,
    FROM summed_crossplatform_data
    ;
Year Apache_Flex_pct Cordova_pct Other_pct Flutter_pct Ionic_pct Kivy_pct Kotlin_Multiplatform_pct NativeScript_pct PhoneGap_pct React_Native_pct Unity_pct Xamarin_pct
2024 1.7808749291874746 6.806587279285443 13.161921971895588 42.282098970998746 11.336908183261873 1.242729680189626 6.514545200068758 3.278793140131249 1.5769608647336693 38.51763672891841 9.308370582464713 8.457156306501053
2023 1.8174896270281298 9.799609159390876 11.937024445597567 46.211868761516534 9.178085800980103 0.6994524129448879 3.7922743242327077 1.9083325316909279 2.0067525526876886 34.87420656634701 10.330980594867476 8.21496263752461
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment