├── config.yml ├── crowdin.yml ├── .github └── workflows │ ├── ping-api.yml │ └── yaml-validation.yml ├── accounts.yml ├── react2025.yml ├── README.md ├── js2025.yml ├── homepage.yml ├── how_to_help.yml ├── surveys.yml ├── css2020.yml ├── html2023.yml ├── js2020.yml ├── demo2022.yml ├── ai2025.yml ├── graphql2022.yml ├── demo_survey.yml ├── state_of_graphql.yml ├── css2021.yml └── js2021.yml /config.yml: -------------------------------------------------------------------------------- 1 | id: en-US 2 | label: English 3 | translators: [] 4 | active: true 5 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: '*.yml' 3 | translation: /%two_letters_code%/%original_file_name% 4 | -------------------------------------------------------------------------------- /.github/workflows/ping-api.yml: -------------------------------------------------------------------------------- 1 | name: Ping API on Commit 2 | 3 | on: 4 | push: 5 | branches: 6 | - "**" # Trigger on any branch 7 | 8 | jobs: 9 | ping-api: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Get Repository Name 14 | id: repo_name 15 | run: echo "::set-output name=name::$(basename $GITHUB_REPOSITORY)" 16 | 17 | - name: Ping API 18 | env: 19 | I18N_SECRET_KEY: ${{ secrets.I18N_SECRET_KEY }} # Set your secret in repository settings 20 | ACTIONS_ENDPOINT_URL: ${{ secrets.ACTIONS_ENDPOINT_URL }} # Set your secret in repository settings 21 | run: | 22 | curl -X GET "$ACTIONS_ENDPOINT_URL?locale=${{ steps.repo_name.outputs.name }}&secretKey=$I18N_SECRET_KEY" 23 | -------------------------------------------------------------------------------- /.github/workflows/yaml-validation.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: YAML Validation 4 | 5 | # Controls when the workflow will run 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the main branch 8 | push: 9 | branches: [main] 10 | pull_request: 11 | branches: [main] 12 | 13 | # Allows you to run this workflow manually from the Actions tab 14 | workflow_dispatch: 15 | 16 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 17 | jobs: 18 | # This workflow contains a single job called "validate-yaml" 19 | validate-yaml: 20 | # The type of runner that the job will run on 21 | runs-on: ubuntu-latest 22 | 23 | # Steps represent a sequence of tasks that will be executed as part of the job 24 | steps: 25 | - uses: actions/checkout@v2 26 | - name: YAML Lint 27 | uses: ibiqlik/action-yamllint@v3.0.4 28 | with: 29 | config_data: | 30 | extends: default 31 | rules: 32 | line-length: disable 33 | new-line-at-end-of-file: disable 34 | trailing-spaces: disable 35 | document-start: disable 36 | empty-lines: disable 37 | truthy: disable 38 | -------------------------------------------------------------------------------- /accounts.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | - key: accounts.error_incorrect_password 4 | t: Incorrect password 5 | - key: accounts.error_email_required 6 | t: Email required 7 | - key: accounts.error_email_already_exists 8 | t: Email already exists 9 | - key: accounts.error_invalid_email 10 | t: Invalid email 11 | - key: accounts.error_minchar 12 | t: Your password is too short 13 | - key: accounts.error_unknown 14 | t: Unknown error 15 | - key: accounts.error_user_not_found 16 | t: User not found 17 | - key: accounts.error_username_already_exists 18 | t: Username already exists 19 | - key: accounts.enter_username_or_email 20 | t: Enter username or email 21 | - key: accounts.error_internal_server_error 22 | t: Internal server error 23 | - key: accounts.error_token_expired 24 | t: Invalid password reset token 25 | - key: accounts.username_or_email 26 | t: Username or email 27 | - key: accounts.enter_username 28 | t: Enter username 29 | - key: accounts.username 30 | t: Username 31 | - key: accounts.enter_email 32 | t: Enter email 33 | - key: accounts.email 34 | t: Email 35 | - key: accounts.enter_password 36 | t: Enter password 37 | - key: accounts.password 38 | t: Password 39 | - key: accounts.choose_password 40 | t: Choose password 41 | - key: accounts.change_password 42 | t: Change password 43 | - key: accounts.reset_your_password 44 | t: Reset your password 45 | - key: accounts.set_password 46 | t: Set password 47 | - key: accounts.enter_new_password 48 | t: Enter new password 49 | - key: accounts.new_password 50 | t: New password 51 | - key: accounts.forgot_password 52 | t: Forgot password 53 | - key: accounts.sign_up 54 | t: Sign up 55 | - key: accounts.sign_in 56 | t: Log in 57 | - key: accounts.switch_to_sign_up 58 | t: Don't have an account ? Sign up 59 | - key: accounts.switch_to_sign_in 60 | t: Already have an account? Log in 61 | - key: accounts.sign_out 62 | t: Sign out 63 | - key: accounts.cancel 64 | t: Cancel 65 | - key: accounts.info_email_sent 66 | t: Email sent. 67 | - key: accounts.info_password_changed 68 | t: Password changed. 69 | - key: accounts.please_pick_password 70 | t: Please pick a new password to continue. 71 | - key: accounts.please_log_in 72 | t: Please log in or sign up to begin. 73 | - key: accounts.logged_in_as 74 | t: Logged in using your email address 75 | - key: accounts.logged_in_as_guest 76 | t: Logged in as Guest 77 | - key: accounts.questions 78 | t: > 79 | If you have any questions about how we use your data, or would like 80 | us to remove your data from our records, 81 | please get in touch. 82 | 83 | - key: accounts.token_verified 84 | t: Token verification successful, redirecting… 85 | 86 | - key: accounts.your_surveys 87 | t: Your Surveys 88 | -------------------------------------------------------------------------------- /react2025.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: general.results.description 8 | t: The 2025 edition of the annual survey about the latest trends in the React ecosystem. 9 | 10 | ########################################################################### 11 | # Introduction 12 | ########################################################################### 13 | 14 | - key: general.react2025.survey_intro 15 | t: | 16 | Given that it originally came out of a company whose motto was “move fast and break things”, it's ironic that React's approach could be summarized as “slow and steady”. 17 | 18 | The React team has done a remarkable job of evolving the framework into its current modern state, progressively introducing innovations like Server Components and then letting the community adopt them (or not!) at its own pace. 19 | 20 | This year, it's time for the long-awaited Compiler to make its official debut. And things are also moving on the administrative front, with the recently-introduced [React foundation](https://react.dev/blog/2025/10/07/introducing-the-react-foundation). 21 | 22 | So whether you're on the cutting edge of new React features, or adopting innovations at a slower pace, join us once again to figure out where React is going by taking this year's State of React survey! 23 | 24 | - key: features.features_intro.react2025 25 | t: | 26 | Welcome to the survey! This first part is all about sharing your experience with various React features: 27 | 28 | 29 | - **Never heard of it**: it's your first time seeing this – or you've heard of it but have no idea what it does. 30 | 31 | - **Heard of it**: you've read or learned about this, but haven't actually used it yet. 32 | 33 | - **Used it**: you've used this at least once, even if it was just to play around. 34 | 35 | 36 | By the way, if you want to tell us more about any of your choices, just click that little "comment" icon! 37 | 38 | - key: tools.tools_intro.react2025 39 | t: | 40 | This next part of the survey is all about the various libraries and frameworks that make up the React ecosystem. 41 | 42 | ########################################################################### 43 | # FAQ/About 44 | ########################################################################### 45 | 46 | - key: faq.survey_design_react2025 47 | t: How was this survey designed? 48 | - key: faq.survey_design_react2025.description 49 | t: > 50 | The survey was designed with input from the community through an [open feedback thread](https://github.com/Devographics/surveys/issues/262). 51 | 52 | - key: faq.results_released_react2025 53 | t: When will the results be released? 54 | - key: faq.results_released_react2025.description 55 | t: The survey will run from October 25 to November 25, and the survey results will be released shortly after that. 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # locale-en-US 2 | 3 | This repo contains the English language files for the State of JS/CSS/HTML/etc. surveys, which serve as a base to translate all the other languages. You can view a list of [all the locales repos here](https://github.com/orgs/Devographics/repositories?q=locale-&type=all&language=&sort=name). 4 | 5 | ## How To Help 6 | 7 | #### 1. Becoming a Translator 8 | 9 | To start helping translate the survey, you should [join the Discord](https://discord.com/invite/zRDb35jfrt) and DM me (`SachaG`) your GitHub username, along with the locale code (`fr-FR`, `zh-Hant`, etc.) for the language you'd like to help with. 10 | 11 | I will then give you maintainer rights over a repo containing all the translation `yaml` files, and from now on you can manage it yourself along with other members of the translation team. 12 | 13 | #### 2. Finding Things to Translate 14 | 15 | You can either browse the survey-taking app, survey results site, etc. and find untranslated strings this way, or else use our API to get extra data such as the completion percentage for a locale or a list of all the untranslated strings: 16 | 17 | - https://graphiql.devographics.com/ 18 | 19 | Here is a sample query: 20 | 21 | ```graphql 22 | query GetLocaleData { 23 | locale(localeId: ru_RU) { 24 | completion 25 | totalCount 26 | translatedCount 27 | translators 28 | untranslatedKeys 29 | } 30 | } 31 | ``` 32 | 33 | #### 3. Getting Credit 34 | 35 | Every translator will be credited on any site that makes use of the translations, starting with the survey-taking app. In order to receive credit, add your GitHub username to the `translators` array in each locale's `config.yml` file. 36 | 37 | Here is an example for the `de-DE` locale: 38 | 39 | - https://github.com/Devographics/locale-de-DE/blob/main/config.yml#L3 40 | 41 | #### 4. Pushing Your Changes Live 42 | 43 | There is currently no automated hook to update the production apps when a translation is updated, so for now the best way is to DM me on Discord to let me know when you're finished. 44 | 45 | ## Translation Files 46 | 47 | #### Surveys App 48 | 49 | These strings are related to the app that you use to fill out the actual survey. 50 | 51 | - `surveys.yml` 52 | - `accounts.yml` 53 | - `state_of_js_2020_survey.yml` 54 | 55 | #### Results App 56 | 57 | These strings only appear in the static site that displays the survey results and stats. 58 | 59 | - `results.yml` 60 | - `state_of_css_2020.yml` 61 | - `state_of_js_2020.yml` 62 | 63 | #### Both 64 | 65 | These strings appear in both. 66 | 67 | - `common.yml` 68 | - `state_of_css.yml` 69 | - `state_of_js.yml` 70 | 71 | #### Other 72 | 73 | - `homepage.yml` 74 | 75 | ## Joining Translation Teams 76 | 77 | It's recommended you join the [translation team](https://github.com/orgs/Devographics/teams/translators/teams) for the language you want to translate. 78 | 79 | ## Local Development 80 | 81 | There is currently no easy way to see your strings in context while developing locally. We are working on it. 82 | 83 | ## Getting Help 84 | 85 | Join [our Discord](https://discord.gg/zRDb35jfrt). 86 | -------------------------------------------------------------------------------- /js2025.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: finish.share_message.js2025 8 | t: The State of JS 2025 survey is now open! {link} 9 | 10 | - key: general.results.description 11 | t: The 2025 edition of the annual survey about the latest trends in the JavaScript ecosystem. 12 | 13 | ########################################################################### 14 | # Survey Intro 15 | ########################################################################### 16 | 17 | - key: general.js2025.survey_intro 18 | t: > 19 | JavaScript, you OK? You've barely created any new front-end frameworks this year. 20 | 21 | 22 | After a decade of rapid iteration, it seems clear that the ecosystem has stabilized over the last few years. For example, did you know that “newcomer” Svelte is *9 years old*? Which, in JavaScript framework years, is basically ancient! 23 | 24 | 25 | Instead, the main battle has moved to the realm of meta-frameworks, with Astro making a serious attempt at Next.js's crown – while over in build-tool land, it seems only a matter of time until Vite overtakes webpack. 26 | 27 | 28 | Or maybe something else entirely will appear out of the Rust ecosystem and suddenly take over, bringing a premature end to our well-deserved era of peace and quiet. 29 | 30 | 31 | Whatever happens, one thing's for sure: you can help us figure it all out by taking this year's State of JavaScript survey! 32 | 33 | ########################################################################### 34 | # Survey FAQ 35 | ########################################################################### 36 | 37 | - key: faq.how_long_will_survey_take_js2025 38 | t: How long will answering the survey take? 39 | - key: faq.how_long_will_survey_take_js2025.description 40 | t: > 41 | Depending on how many questions you answer (all questions can be skipped), 42 | filling out the survey should take around 15-20 minutes. 43 | 44 | - key: faq.survey_design_js2025 45 | t: How was this survey designed? 46 | - key: faq.survey_design_js2025.description 47 | t: > 48 | This survey was designed as the results of an [open design process](https://github.com/Devographics/surveys/issues/307) involving browser vendors and the web development community. 49 | 50 | - key: faq.results_released_js2025 51 | t: When will the results be released? 52 | - key: faq.results_released_js2025.description 53 | t: The survey will run from October 1 to November 1, 2025, and the survey results will be released shortly after. 54 | 55 | ########################################################################### 56 | # Overview 57 | ########################################################################### 58 | 59 | - key: overview_1_frontend_fatigue.js2025 60 | t: | 61 | Front-end Frameworks 62 | 63 | - key: overview_2_whats_next.js2025 64 | t: | 65 | Meta Frameworks 66 | 67 | - key: overview_3_back_in_business.js2025 68 | t: | 69 | Back-end Frameworks 70 | 71 | - key: overview_4_build_it.js2025 72 | t: | 73 | Build Tools 74 | 75 | - key: overview_5_static_typing.js2025 76 | t: | 77 | Static Typing 78 | 79 | - key: overview_6_other_languages.js2025 80 | t: | 81 | Other Languages 82 | 83 | - key: overview_7_conclusion.js2025 84 | t: | 85 | ### Now Open 86 | ## State of React 2025 87 | -------------------------------------------------------------------------------- /homepage.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # Homepage 5 | ########################################################################### 6 | 7 | - key: homepage.hand_coded 8 | t: Hand-coded in Japan. 9 | - key: homepage.leave_issue 10 | t: Report an issue 11 | - key: homepage.get_in_touch 12 | t: Get in touch 13 | 14 | - key: homepage.previous_years 15 | t: "Previous Years:" 16 | 17 | - key: homepage.take_survey 18 | t: Take Survey 19 | 20 | - key: homepage.view_results 21 | t: View Results 22 | 23 | - key: homepage.results_coming_soon 24 | t: Results Coming Soon… 25 | 26 | - key: share.help_spread 27 | t: Help Spread the Word! 28 | 29 | - key: homepage.other_surveys 30 | t: "Other Surveys:" 31 | 32 | - key: homepage.survey_open_now 33 | t: Currently Open 34 | 35 | - key: homepage.survey_preview 36 | t: Preview Survey 37 | 38 | - key: homepage.most_recent_survey 39 | t: Most Recent 40 | 41 | - key: homepage.current_survey 42 | t: Current Survey 43 | 44 | - key: homepage.past_surveys 45 | t: Past Surveys 46 | 47 | - key: homepage.view_questions 48 | t: View Questions 49 | 50 | - key: homepage.preview_questions 51 | t: Preview Questions 52 | 53 | # newsletter 54 | - key: newsletter.stay_tuned 55 | t: Don't Miss the Next Survey 56 | - key: newsletter.leave_your_email 57 | t: Leave us your email and we’ll let you know when the next survey takes place. 58 | - key: newsletter.email 59 | t: Your Email 60 | - key: newsletter.submit 61 | t: Notify Me 62 | - key: newsletter.thanks 63 | t: Thanks for signing up! 64 | 65 | # languages 66 | - key: languages.available_languages 67 | t: "Available languages:" 68 | - key: languages.help_us_translate 69 | t: Help us translate the survey in your language → 70 | 71 | # partners 72 | - key: homepage.with_support_from 73 | aliasFor: sponsors.with_support_from 74 | 75 | # footer 76 | - key: homepage.made_by_devographics 77 | aliasFor: general.made_by_devographics 78 | - key: homepage.netlify_link 79 | aliasFor: general.netlify_link 80 | 81 | - key: homepage.join_discord 82 | aliasFor: general.join_discord 83 | - key: homepage.astro_link 84 | t: Powered by [Astro](https://astro.build/) 85 | 86 | # creators 87 | - key: creators.heading 88 | t: Creators We Support 89 | 90 | - key: creators.description 91 | t: | 92 | Our surveys are only possible because of the developer community's ongoing support, and it's only natural that we also give back when we can. 93 | 94 | 95 | These are some of the awesome content creators and organizations we support financially, in exchange for raising awareness around the surveys. 96 | 97 | - key: creators.stephanie_walter.description 98 | t: | 99 | Stéphanie Walter is an accomplished UX Researcher, Designer, and Writer living in Luxembourg with a knack for making otherwise complex topics clear and easy to understand. 100 | 101 | - key: creators.afor_digital.description 102 | t: | 103 | Afor is a key figure in the Spanish-language web development streaming community, and her talent for making programming content compelling have led to her well-deserved success. 104 | 105 | - key: creators.shruti_kapoor.description 106 | t: | 107 | Between blogging, producing YouTube videos, speaking at conferences, and generally being an all-around great person, Shruti has been a mainstay of the React ecosystem for a while now. 108 | 109 | - key: creators.codebar.description 110 | t: | 111 | Codebar is an amazing organization that puts together workshops that would usually cost thousands of dollars, and makes them available for free online in order to build a more inclusive developer community. 112 | 113 | # calendar 114 | 115 | - key: calendar.heading 116 | t: | 117 | {currentYear} Surveys 118 | - key: calendar.feedbackAt 119 | t: Feedback start 120 | - key: calendar.startedAt 121 | t: Survey start 122 | - key: calendar.endedAt 123 | t: Survey end 124 | - key: calendar.releasedAt 125 | t: Results release 126 | - key: calendar.past_editions 127 | t: Past Surveys 128 | - key: calendar.ongoing_editions 129 | t: Ongoing Surveys 130 | - key: calendar.upcoming_editions 131 | t: Upcoming Surveys 132 | - key: calendar.no_editions 133 | t: No surveys. 134 | - key: calendar.give_feedback 135 | t: Suggest questions → 136 | - key: calendar.take_survey 137 | t: Take survey → 138 | - key: calendar.view_results 139 | t: View results → 140 | -------------------------------------------------------------------------------- /how_to_help.yml: -------------------------------------------------------------------------------- 1 | # NOTE: not ready for translation currently 2 | locale: en-US 3 | translations: 4 | 5 | - key: how_to_help.content 6 | t: > 7 | Although the State of JavaScript and CSS do earn some revenue, they still rely primarily on volunteer work. If you'd like to join the project and help out, here are a few things we always need help with. 8 | 9 | ### Translation 10 | 11 | The surveys are now translated in 20+ languages, but a lot of the translations are incomplete or out of date. If you'd like to help, [join our Discord](https://discord.gg/tuWRUWVyJs) and give your GitHub username in the **#translations** channel. 12 | 13 | ### Outreach 14 | 15 | It's no secret that audiences for developer surveys in general tend to skew male, white, and U.S.-based. If you'd like to help us balance things out a bit, we could definitely use your help! 16 | 17 | Outreach efforts include things like reaching out to organizations focused on helping minoritized populations negotiate the tech world, submitting links to the survey to various online communities, emailing blogs or magazines about the survey, and generally trying to diversify the survey's audience. If you'd like to help, [join our Discord](https://discord.gg/tuWRUWVyJs)'s **#outreach** channel (feel free to mute every other channel if you'd like). 18 | 19 | Specifically, we'd love some help reaching out to organizations focused on: 20 | 21 | 22 | - BIPOC developers 23 | 24 | 25 | - LGBTQ+ developers 26 | 27 | 28 | - Women developers 29 | 30 | 31 | - Developers with disabilities 32 | 33 | 34 | - Developers in under-represented countries (China, Brazil, India, Japan, etc.) 35 | 36 | 37 | ### Writing & Analysis 38 | 39 | Even though we try and surface interesting insights every year, we know there is no way to cover everything in a single report. If you're a data scientist or just curious about tech trends, we would love to see your own spin on our data! This can be a great way to broaden the dialog around the survey, especially when it comes to highlighting under-represented communities like the ones mentioned above. 40 | 41 | You can either use the chart customization feature (pencil icon next to some charts) and our [public GraphQL API](https://api.stateofjs.com/) to create new visualizations, or [join our Discord](https://discord.gg/tuWRUWVyJs) and get in touch to ask for the full JSON dataset. 42 | 43 | ### Coding 44 | 45 | The entirety of our codebases are open-source, and we welcome contributions. I suggest first [getting familiar with how the surveys are run](https://dev.to/sachagreif/how-the-state-of-js-css-surveys-are-run-4lnb), and then [dropping by the Discord](https://discord.gg/tuWRUWVyJs) to let me know what you'd like to work on. 46 | 47 | ### Deals & Partnerships 48 | 49 | In the future, we want to explore providing deals or discounts on products to our survey respondents as a way of rewarding survey participants and incentivizing new audiences to take part in the survey, 50 | 51 | ### Financial Support 52 | 53 | #### Grants & Funding 54 | 55 | Of course, another way to help is to simply provide funding. For example, thanks to a grant received from Google we've been able to hire an expert to do a full accessibility audit of the project. 56 | 57 | #### Chart Sponsorships 58 | 59 | If you'd like to support the survey on a smaller scale, you can also now 60 | 61 | #### Recommended Resources 62 | 63 | If you create content relevant to our audience, you can also purchase one of the "Recommended Resources" links displayed at the bottom of each page. We also make these spots available for free for 64 | 65 | Recommended Resources 66 | Chart sponsorships 67 | Discounts 68 | Other partnerships 69 | 70 | #### A Note About Paid Work 71 | 72 | I have talked mainly about volunteer work here but we also have a small budget to pay consultants or experts, and are working on finding partners to subsidize more work. More specifically, we prefer paying for tasks that: 73 | 74 | 75 | - Are **limited in scope**, since the budget will probably be limited too. 76 | 77 | 78 | - Require **special expertise** that would not be easily provided by volunteers. 79 | 80 | 81 | - Are **self-contained** and don't require too much follow-up work since we might not have time to do it. 82 | 83 | 84 | Good examples include: illustrations & branding work, usability or accessibility audits, data visualization work, outreach work, etc. 85 | 86 | So although we can't promise much, if you'd like to contribute to the project but can't afford to work on a volunteer basis, don't hesitate to [join the Discord](https://discord.gg/tuWRUWVyJs) and get in touch! -------------------------------------------------------------------------------- /surveys.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: general.title 8 | t: Devographics Surveys 9 | - key: general.description 10 | t: The State of JavaScript, State of CSS, State of HTML, and other developer surveys. 11 | 12 | - key: general.no_preview_surveys 13 | t: No surveys to preview 14 | - key: general.global_nav 15 | t: Global 16 | - key: general.survey_status_preview 17 | t: Preview 18 | - key: general.survey_status_open 19 | t: Open 20 | - key: general.survey_status_closed 21 | t: Closed 22 | - key: general.survey_status_hidden 23 | t: Hidden 24 | 25 | - key: general.pick_up_to 26 | t: Pick up to {limit} items. 27 | 28 | - key: general.privacy_policy 29 | t: Privacy Policy 30 | - key: general.privacy_policy.description 31 | t: > 32 | ### 1. Data Collection 33 | 34 | In addition to the data collected through a survey's questions, we collect your device, browser, OS, browser version, and referrer. 35 | 36 | Note that all questions are entirely optional, and we never link any identifiable information (such as email addresses) to your survey answers. 37 | 38 | ### 2. Email Collection 39 | 40 | We may optionally collect your email to: 41 | 42 | 43 | 1. Generate a magic log-in link, after which we discard your email and only keep a one-way hash in our user database. 44 | 45 | 2. Contact you once survey results are available, as well as when we launch future editions of a survey and for infrequent announcements. You can unsubscribe from our mailing list at any time, and your email is discarded from our records once it is sent to our email newsletter provider. 46 | 47 | 3. Send you a recap list of features or tools you want to learn more about. We will discard your address once the email has been sent out through our transactional email provider. 48 | 49 | 50 | Whenever we do collect your email address for the above purposes, it is never linked to your responses for a survey or to your user account, and it is never stored on our own servers or databases. 51 | 52 | ### 3. Cookies 53 | 54 | We set a log-in cookie, and our hosting provider (Vercel) may also sets its own cookie. We do not set any other cookie or use client-side analytics or ads. 55 | 56 | ### 4. Data Use 57 | 58 | We process the data and then use it to publish reports. We also make the entire dataset publicly available. 59 | 60 | ### 5. Data/Account Deletion 61 | 62 | You can email us at [hello@stateofjs.com](mailto:hello@stateofjs.com) if you'd like us to delete all or part of your data. 63 | 64 | ########################################################################### 65 | # Other UI Strings 66 | ########################################################################### 67 | 68 | - key: textlist.placeholder 69 | t: Item {index}… 70 | 71 | - key: feature.unimplemented 72 | t: No browser implementation yet 73 | 74 | - key: general.skip_question 75 | t: Skip 76 | 77 | - key: general.unskip_question 78 | t: Answer Question 79 | 80 | - key: general.skip_question.description 81 | t: Skip question and mark it as completed 82 | 83 | - key: general.unskip_question.description 84 | t: Unskip question and answer it 85 | 86 | - key: years.less_than_one_year 87 | t: Less than one year 88 | 89 | - key: years.years 90 | t: years 91 | 92 | - key: likert.happiness.option.0 93 | t: Very Unhappy 94 | - key: likert.happiness.option.1 95 | t: Unhappy 96 | - key: likert.happiness.option.2 97 | t: Neutral 98 | - key: likert.happiness.option.3 99 | t: Happy 100 | - key: likert.happiness.option.4 101 | t: Very Happy 102 | 103 | - key: likert.agreement.option.0 104 | t: Strongly Disagree 105 | aliases: 106 | - likert.option.0 107 | - key: likert.agreement.option.1 108 | t: Disagree 109 | aliases: 110 | - likert.option.1 111 | - key: likert.agreement.option.2 112 | t: Neutral 113 | aliases: 114 | - likert.option.2 115 | - key: likert.agreement.option.3 116 | t: Agree 117 | aliases: 118 | - likert.option.3 119 | - key: likert.agreement.option.4 120 | t: Strongly Agree 121 | aliases: 122 | - likert.option.4 123 | 124 | - key: general.numeric_input.invalid_input 125 | t: Please make sure you enter a valid number. 126 | 127 | - key: general.numeric_input.unit.years 128 | t: years 129 | - key: general.numeric_input.unit.years_old 130 | t: years old 131 | - key: general.numeric_input.unit.hours 132 | t: hours 133 | 134 | - key: general.check_all 135 | t: > 136 | Check all that apply. 137 | 138 | ########################################################################### 139 | # Errors & Messages 140 | ########################################################################### 141 | 142 | - key: error.duplicate_response 143 | t: Sorry, you already have a session in progress for this survey. 144 | 145 | - key: error.report_issue 146 | t: Report issue 147 | 148 | - key: success.data_saved 149 | t: Data Saved 150 | - key: success.data_saved.description 151 | t: Your data has been saved. 152 | 153 | ########################################################################### 154 | # Accounts 155 | ########################################################################### 156 | 157 | - key: accounts.create_account 158 | t: Continue with Account 159 | - key: accounts.create_account.description 160 | t: Having an account lets you **access your own data in the future** and be notified when survey results are published. 161 | - key: accounts.create_account.note 162 | t: If you **already have an account** we will send you a magic log-in link by email. 163 | - key: accounts.create_account.action 164 | t: Continue with Account 165 | - key: accounts.your_email 166 | t: Your Email 167 | 168 | - key: accounts.upgrade_account.action 169 | t: Upgrade your account 170 | - key: accounts.upgrade_account.description 171 | t: Upgrading your account with an email address will let you access your survey response after you end your session. 172 | 173 | - key: accounts.continue_as_guest 174 | t: Continue as Guest 175 | - key: accounts.continue_as_guest.description 176 | t: Taking the survey anonymously means you **won't be able to access your data again** after you end your session. 177 | - key: accounts.continue_as_guest.action 178 | t: Continue as Guest 179 | 180 | - key: accounts.magic_link.no_email 181 | t: Please enter your email 182 | - key: accounts.magic_link.success 183 | t: Check your inbox! We sent you a magic link, just click it to confirm your account and log in. 184 | # Open known mail provider directly in browser with the right search params 185 | - key: accounts.magic_link.browser 186 | t: Click to open your inbox. 187 | 188 | ########################################################################### 189 | # FAQ 190 | ########################################################################### 191 | 192 | - key: general.faq 193 | t: FAQ 194 | - key: faq.create_account 195 | t: Why do I need to create an account? 196 | - key: faq.create_account.description 197 | t: We ask you to create an account in order to avoid duplicate responses, save your data, and notify you when results are published. 198 | - key: faq.anonymous_survey 199 | t: Can I take the survey anonymously? 200 | - key: faq.anonymous_survey.description 201 | t: Yes, you can use a fake (something@example.com) or non-identifying email to take the survey as long as you save it for future access. 202 | - key: faq.questions_required 203 | t: Is answering every question required? 204 | - key: faq.questions_required.description 205 | t: No, every question of the survey is optional and can freely be skipped. 206 | - key: faq.data_published 207 | t: Will my data be made public? 208 | - key: faq.data_published.description 209 | t: Yes, all data will be released publicly, but only after being purged of any identifying information (emails, usernames, IDs, etc.). 210 | - key: faq.survey_design 211 | t: How are the surveys designed? 212 | - key: faq.survey_design.description 213 | t: Surveys are designed based on community feedback, as well as reviewed by experts. You can [learn more here](https://dev.to/sachagreif/how-the-state-of-js-css-surveys-are-run-4lnb). 214 | - key: faq.results_released 215 | t: When will the results be released? 216 | - key: faq.results_released.description 217 | t: Results are generally released a few weeks after the survey closes. 218 | - key: faq.survey_deadline 219 | t: When will the survey close? 220 | - key: faq.survey_deadline.description 221 | t: This survey is scheduled to run until {date} 222 | - key: faq.team 223 | t: Who runs this survey? 224 | - key: faq.team.description 225 | t: This survey is run by [Devographics](http://devographics.com) together with a collective of contributors, translators, and volunteers. 226 | 227 | ########################################################################### 228 | # Form Controls 229 | ########################################################################### 230 | 231 | - key: bracket.vs 232 | t: VS 233 | - key: bracket.start_over 234 | t: Start Over 235 | - key: bracket.winner 236 | t: > 237 | Winner: 238 | - key: bracket.round 239 | t: Round 240 | - key: bracket.empty_bracket 241 | t: Pending result (complete the previous round first) 242 | - key: bracket.result 243 | t: Result 244 | - key: bracket.cancel 245 | t: Cancel 246 | 247 | - key: experience.leave_comment 248 | t: Leave a Comment (optional) 249 | - key: experience.leave_comment_short 250 | t: Leave a Comment 251 | - key: experience.tell_us_more 252 | t: "You answered “{response}”. Tell us more about your choice:" 253 | - key: experience.tell_us_more_generic 254 | t: "Tell us more about your answer:" 255 | - key: experience.tell_us_more_no_value 256 | t: "You didn't pick any response. Tell us why:" 257 | 258 | - key: user_info.gender.snowball_sampling 259 | t: > 260 | ### Help us share this survey with more women! 261 | 262 | 263 | We are hoping to increase participation of women in the survey, and one approach we're trying (known as “[snowball sampling](https://github.com/Devographics/surveys/issues/258)”) is asking women respondents such as yourself to share the link to this survey with other women developers. 264 | 265 | 266 | If you're able to help with this, here is a special share link you can use so we can track the success of this initiative: 267 | 268 | ########################################################################### 269 | # Response 270 | ########################################################################### 271 | 272 | - key: response.completion 273 | t: "{completion}% completed" 274 | 275 | - key: response.details 276 | t: Started on {startedAt}, {completion}% completed. 277 | 278 | ########################################################################### 279 | # Reading List 280 | ########################################################################### 281 | 282 | - key: readinglist.prompt 283 | t: > 284 | You picked “{option}”. If you'd like to learn more about this feature at the end of the survey, you can click the "+" icon in the corner above to add it to your **reading list**. 285 | 286 | - key: readinglist.add_to_list 287 | t: Add to Your Reading List 288 | 289 | - key: readinglist.remove_from_list 290 | t: Remove from Reading List 291 | 292 | - key: readinglist.added_to_list 293 | t: Added “{label}” to your reading list. 294 | 295 | - key: readinglist.title 296 | t: Reading List 297 | 298 | - key: readinglist.description 299 | t: > 300 | Save items here using the "+" button, and you'll get a list of links to learn more about them at the end of the survey. 301 | 302 | - key: readinglist.description2 303 | t: > 304 | Items you're interested are saved here, and you'll get a list of links to learn more about them at the end of the survey. 305 | 306 | - key: readinglist.empty 307 | t: > 308 | You don't have any items in your reading list. 309 | Try going back to the survey and adding features or libraries you'd like 310 | to learn more about using the "+" button. 311 | 312 | - key: readinglist.autogenerated 313 | t: > 314 | You didn't add any items to your reading list using the “+” button, so instead here's an auto-generated list of resources based on your survey answers. 315 | 316 | - key: readinglist.results 317 | t: > 318 | Here are some resources to learn more about the items in your reading list. 319 | 320 | - key: readinglist.homepage_link 321 | t: Homepage 322 | 323 | - key: readinglist.receive_copy 324 | t: > 325 | Enter your email to get a copy of your reading list straight in your inbox: 326 | - key: readinglist.send_by_email 327 | t: Send 328 | - key: readinglist.email_sent 329 | t: Thanks! Your reading list is on its way to your inbox. 330 | 331 | ########################################################################### 332 | # Score & Knowledge Ranks 333 | ########################################################################### 334 | 335 | - key: knowledge_rank.your_rank 336 | t: "Your Rank:" 337 | - key: knowledge_rank.rank1 338 | t: Novice 339 | - key: knowledge_rank.rank2 340 | t: Apprentice 341 | - key: knowledge_rank.rank3 342 | t: Intermediate 343 | - key: knowledge_rank.rank4 344 | t: Expert 345 | - key: knowledge_rank.rank5 346 | t: Scholar 347 | - key: knowledge_rank.rank6 348 | t: Elite 349 | -------------------------------------------------------------------------------- /css2020.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # Introduction 5 | ########################################################################### 6 | 7 | - key: introduction.css2020 8 | t: | 9 | 10 | Forget everything you know about CSS. Or at least, be ready to reconsider a lot of it. If like me you've been writing CSS for over a decade, CSS in 2020 looks nothing like what you were used to. 11 | 12 | Instead of breakpoints, we can now leverage CSS Grid to make dynamic, responsive layouts that adapt to any viewport size with fewer lines of code. Instead of relying on global stylesheets, CSS-in-JS lets us colocate our styles with our components to build themeable design systems. 13 | 14 | And most of all, Tailwind CSS has burst onto the scene and, through its use of utility-first CSS, forced us to reconsider the traditional dogma of semantic class names. 15 | 16 | Whether all this change makes you want to write a hyped-up blog post or an angry Twitter rant, we are here to present the data, highlight the trends, and hopefully guide you through another eventful year of CSS! 17 | 18 | ### Team 19 | 20 | The State of CSS Survey is created and maintained by: 21 | 22 | - [Sacha Greif](https://twitter.com/sachagreif): Design, writing, coding 23 | - [Raphaël Benitte](https://twitter.com/benitteraphael): Data analysis, data visualizations 24 | 25 | ### Download Our Data 26 | 27 | You can [download the raw JSON data for this survey](https://www.kaggle.com/sachag/state-of-css). Let us know if you end up making your own data visualizations! 28 | 29 | ### Other Links 30 | 31 | - [State of CSS Homepage](https://stateofcss.com) 32 | - [State of JS](https://stateofjs.com) 33 | 34 | ### Thanks 35 | 36 | Thanks to all the people who helped us design the survey, including [Chen Hui-Jing](http://chenhuijing.com/), [Philip Jägenstedt](https://blog.foolip.org/), [Adam Argyle](https://nerdy.dev/), [Ahmad Shadeed](https://www.ishadeed.com/), [Robert Flack](https://github.com/flackr), [Dominic Nguyen](https://www.chromatic.com/), [Fantasai](http://fantasai.inkedblade.net/), and [Kilian Valkhof](https://kilianvalkhof.com/). 37 | 38 | Additional thanks to [Alexey Pyltsyn](https://github.com/lex111) for his help with translations. 39 | 40 | ### Credits & Stuff 41 | 42 | The site is set in IBM Plex Mono. Questions? Feedback? [Get in touch!](mailto:hello@stateofjs.com) 43 | 44 | And now, let's see what CSS has been up to this year! 45 | 46 | – Sacha and Raphaël 47 | 48 | ########################################################################### 49 | # Tshirt 50 | ########################################################################### 51 | 52 | - key: sections.tshirt.title 53 | t: T-shirt 54 | 55 | - key: sections.tshirt.description 56 | t: | 57 | ## Support the survey and look good in the process! 58 | 59 | A quick announcement before the survey results. Introducing our very own 🎈🎉👕 State of CSS T-shirt 👕🎉🎈! 60 | 61 | What makes this shirt truly special is that it's the only piece of clothing that also teaches you practical, real-world CSS techniques. 62 | 63 | So whether you're going to a conference, a job interview, or just work, this shirt will demonstrate your CSS mastery like no other garment can! 64 | 65 | - key: tshirt.about 66 | t: About the T-shirt 67 | 68 | - key: tshirt.description 69 | t: | 70 | The shirt features the State of CSS logo along with snippets of the actual CSS code used to create each shape. Who knows, you might learn a thing or two! 71 | 72 | We use a high-quality, super-soft tri-blend shirt with a slim fit. 73 | This shirt sizes small, so if you prefer a looser fit we recommend ordering one size up from what you usually wear (I'm wearing an M in the photos). 74 | 75 | - key: tshirt.getit 76 | t: Get It 77 | 78 | - key: tshirt.price 79 | t: USD $24 + shipping 80 | 81 | ########################################################################### 82 | # Sections Introductions 83 | ########################################################################### 84 | 85 | - key: sections.user_info.description 86 | t: | 87 | This year's survey reached **11,492** people in **102** countries. For the first time this year, 88 | we were able to translate the survey questions in multiple languages thanks to an awesome team of volunteers. 89 | 90 | - key: sections.features.description 91 | t: | 92 | CSS has seen a surge of new features in recent years, so as you'd expect adoption is 93 | lagging a bit behind as the community takes its time to absorb new properties. 94 | 95 | - key: sections.units_selectors.description 96 | t: | 97 | We're willing to bet you'll find a few things you didn't know about in this section! 98 | 99 | - key: sections.technologies.description 100 | t: | 101 | The CSS ecosystem is going through a renewal of sorts, as older mainstays like Bootstrap 102 | now have to accomodate newer entrants like Tailwind CSS. To say nothing of the whole CSS-in-JS 103 | movement which, while it has yet to cross over to the CSS mainstream, is nonetheless quite dynamic. 104 | 105 | - key: sections.other_tools.description 106 | t: | 107 | No big surprises here, but it's worth highlighting the appearance of development-focused browsers 108 | like Polypane and Sizzy, which go a step further than traditional devtools. 109 | 110 | - key: sections.environments.description 111 | t: | 112 | One of CSS's core strengths is its ability to adapt to different environment, yet for a variety 113 | of reasons media like print and email remain unexplored by a majority of CSS developers. Might they 114 | turn out to be the next frontier of CSS…? 115 | 116 | - key: sections.resources.description 117 | t: | 118 | The “other answers” results in this section highlight the richness and diversity of the CSS community, 119 | and feature many outstanding blogs and podcasts which we are looking forward to officially adding 120 | to the survey next year! 121 | 122 | - key: sections.opinions.description 123 | t: | 124 | These opinions paint a picture of a language getting more mature, but also more complex. And perhaps 125 | –at least while we struggle to keep up with the pace of change– a little less enjoyable? 126 | 127 | ########################################################################### 128 | # Notes 129 | ########################################################################### 130 | 131 | - key: blocks.gender.note 132 | t: | 133 | If you're interested in learning more, we [wrote a blog post](https://dev.to/sachagreif/is-our-survey-biased-against-women-49oj) that addresses the survey's gender dynamics. 134 | 135 | - key: blocks.css_missing_features.note 136 | t: | 137 | You can explore the full dataset of answers to this question in [this side project](https://whatsmissingfromcss.com/). 138 | 139 | - key: blocks.source.note 140 | t: > 141 | 142 | This chart aggregates a mix of referrers, URL parameters, and freeform answers. 143 | 144 | - State of JS: the [State of JS](https://stateofjs.com) mailing list. 145 | 146 | - State of CSS: the State of CSS mailing list; also matches `email`, `by email`, etc. 147 | 148 | - Work: matches `work`, `colleagues`, `coworkers`, etc. 149 | 150 | ########################################################################### 151 | # Awards 152 | ########################################################################### 153 | 154 | - key: award.feature_adoption_delta_award.comment 155 | t: With a **{value}** progression in 2020, this was the year CSS Grid crossed over from new technology to established tool. 156 | 157 | - key: award.tool_usage_delta_award.comment 158 | t: No other tool comes even close to Tailwind CSS's dramatic **{value}** progression over the last year. 159 | 160 | - key: award.tool_satisfaction_award.comment 161 | t: PostCSS's **{value}** retention ratio shows that you can't beat doing one thing really, really well. 162 | 163 | - key: award.tool_interest_award.comment 164 | t: With a **{value}** ratio, CSS Modules have generated the most interest among CSS developers this year. 165 | 166 | - key: award.most_write_ins_award.comment 167 | t: Many questions also accepted write-in answers, and with **{value}** mentions PhpStorm was the most popular item overall. 168 | 169 | ########################################################################### 170 | # Conclusion 171 | ########################################################################### 172 | 173 | - key: sections.conclusion.description 174 | t: | 175 | If a JavaScript developer writes a line of CSS code, are they now a CSS developer? 176 | 177 | This programming *kōan* illustrates a clear trend in the web development world: as more and more CSS developers are tasked with learning JavaScript, so are JavaScript developers starting to realize there might be more to this whole CSS thing than just `font-weight: bold;`. 178 | 179 | So asking about “the State of CSS” is inherently a tricky proposition: depending on who you ask you might get completely different answers! And how do you know which one's right? 180 | 181 | Here's another kōan for you: the right answer is that there *is* no right answer. Each of the many tools, methodologies, frameworks, and libraries featured here has its place in the vast front-end ecosystem. 182 | 183 | Building a complex React app? Styled Components is a great option. Designing a static landing page? You can't go wrong with Sass! And even though Bootstrap has lost some of its original hype factor, you can't beat it when it comes to sheer number of themes and plugins. 184 | 185 | So while we keep an eye on the shiny new toys popping up on GitHub every week, let's not forget the tools, techniques, and most of all people who have carried the CSS torch up to now. We'll need everybody if we're to keep CSS moving forward into 2021 and beyond! 186 | 187 | ########################################################################### 188 | # Picks 189 | ########################################################################### 190 | 191 | - key: picks.my_2020_pick 192 | t: "My 2020 Pick: " 193 | - key: picks.intro 194 | t: We asked members of the CSS community to share their “pick of the year” 195 | 196 | - key: picks.shadeed9.bio 197 | t: Author of debuggingcss.com 198 | - key: picks.shadeed9.description 199 | t: | 200 | Container queries are a long-time awaited feature for us, 201 | and I’m thrilled that the Chrome team is working on support for it natively! 202 | 203 | - key: picks.argyleink.bio 204 | t: CSS at Google 205 | - key: picks.argyleink.description 206 | t: | 207 | The humble CSS box is more dynamic every year, and for me 2020 was about logical sides, instead of physical sides. Free internationally contextual content flow, spacing and shorthands? pls & ty 208 | 209 | - key: picks.sachagreif.bio 210 | t: Creator of this survey 211 | - key: picks.sachagreif.description 212 | t: | 213 | With this blog post, Amelia Wattenberger didn't just go the extra mile, she ran a whole marathon! The animations and quiz will ensure you finally understand the CSS cascade. 214 | 215 | - key: picks.christianoliff.bio 216 | t: Front-end developer for Trimble MAPS 217 | - key: picks.christianoliff.description 218 | t: | 219 | One thing I've really started using and appreciating this year though is Purge CSS- an awesome tool for removing unused CSS. It can greatly reduce the size of your CSS, and its fast and easy to use. 220 | 221 | - key: picks.kilianvalkhof.bio 222 | t: Web developer and creator of Polypane 223 | - key: picks.kilianvalkhof.description 224 | t: | 225 | `content-visibility` is making a huge difference in the performance of my web apps already, but at the same time I think it should be the job of browsers to optimize this, not devs. 226 | 227 | - key: picks.walterstephanie.bio 228 | t: User Centered Designer & CSS Lover 229 | - key: picks.walterstephanie.description 230 | t: | 231 | A series of YouTube videos that explain all the new cool CSS features to build modern designs. 232 | 233 | - key: picks.piccalilli_.bio 234 | t: Freelance designer & dev who runs piccalil.li 235 | - key: picks.piccalilli_.description 236 | t: | 237 | This blog is an absolute gold mine of CSS knowledge. Michelle is a CSS legend and every post or tutorial they write is heaped with useful content. 238 | 239 | - key: picks.sarasoueidan.bio 240 | t: Independent UI/design engineer 241 | - key: picks.sarasoueidan.description 242 | t: | 243 | My pick is a person, namely Rachel Andrew. She taught CSS Grid to a whole generation of developers. 244 | 245 | - key: picks.5t3ph.bio 246 | t: Software Engineer @ Microsoft 247 | - key: picks.5t3ph.description 248 | t: | 249 | In this conference talk, Manuel Matuzovic provides thoughtfully 250 | crafted examples that are engaging, approachable, and actionable. 251 | 252 | - key: picks.hugogiraudel.bio 253 | t: Non-binary accessibility & diversity advocate 254 | - key: picks.hugogiraudel.description 255 | t: | 256 | Fela is an amazing piece of software. 257 | It’s pretty powerful, relatively easy to use and very performant 258 | 259 | - key: picks.foolip.bio 260 | t: Software Engineer @ Google 261 | - key: picks.foolip.description 262 | t: | 263 | Sergio has recently fixed lots of Flexbox in WebKit and even some in Chromium, 264 | notably bringing flex gap to WebKit, 265 | which means that soon it will be available on all modern browsers. 266 | 267 | - key: picks.jina.bio 268 | t: Design systems advocate and practitioner 269 | - key: picks.jina.description 270 | t: | 271 | The media query to reduce motion, which helps avoid 272 | triggering dizziness and discomfort. 273 | -------------------------------------------------------------------------------- /html2023.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: general.results.description 8 | t: The 2023 edition of the annual survey about the latest trends in the HTML ecosystem. 9 | 10 | - key: introduction.html2023 11 | t: > 12 | While JavaScript was taking over the web, and CSS was gaining new superpowers year over year, 13 | it could seem like HTML was content to stay dormant, happy to cede center stage to its younger siblings. 14 | After all once you've learned about `
`s and ``s 1 through 6, what else is there to know? 15 | 16 | 17 | Quite a lot, as it turns out! Once again we drafted [Lea Verou](https://lea.verou.me/) to put her in-depth 18 | knowledge of the web platform to work, and help us craft a survey that ended up reaching far 19 | beyond pure HTML to cover accessibility, web components, and much more. 20 | 21 | 22 | This partly explains why this report has taken so long to come out – there was 23 | just a *lot* of new data to process! Hopefully you'll find that the result was worth the wait. 24 | 25 | 26 | Beyond the data included here, we've also improved our **chart customization** feature to let you tailor 27 | each data visualization to an even greater degree. If you find any interesting 28 | insights in the process, be sure to let us know! 29 | 30 | 31 | You can learn more about all this in [this post](https://dev.to/sachagreif/discover-the-state-of-html-2023-survey-results-n10), or by watching a [quick YouTube video](https://www.youtube.com/watch?v=G-rFwp2zUT4) 32 | 33 | 34 | With all this out of the day, welcome to the results for the first ever State of HTML survey. 35 | After this, I'm willing to bet you won't look at good old HTML quite the same way ever again! 36 | 37 | ########################################################################### 38 | # Tshirt 39 | ########################################################################### 40 | 41 | - key: sections.tshirt.title 42 | t: T-shirt 43 | 44 | - key: sections.tshirt.description 45 | t: | 46 | ## Support the Survey With the State of HTML T-Shirt 47 | 48 | Do you miss the the good old days of the mid-90s, when HTML was king and VHS tape covers featured futuristic, colorful artwork? 49 | 50 | The bad news is that even with 2024's technology, you can't yet go back in time to relive those glory days. But what you *can* do is wear this awesome original retro t-shirt, designed by none other than the talented Christopher Kirk-Nielsen. 51 | 52 | - key: tshirt.about 53 | t: About the T-shirt 54 | 55 | - key: tshirt.description 56 | t: | 57 | We use a high-quality, super-soft tri-blend shirt with a slim fit printed by our partners at Cotton Bureau. 58 | 59 | - key: tshirt.getit 60 | t: Get It 61 | 62 | - key: tshirt.price 63 | t: USD $32 + shipping 64 | 65 | - key: tshirt.designer.heading 66 | t: About the Designer 67 | 68 | - key: tshirt.designer.name 69 | t: Christopher Kirk-Nielsen 70 | 71 | - key: tshirt.designer.bio 72 | t: | 73 | Originally from France but now based in the United States, Chris is not just an amazing front-end developer, but also a talented illustrator who specializes in retro visuals. In fact, we encourage you to also check out his [other t-shirt designs](https://chriskirknielsen.com/designs)! 74 | 75 | ########################################################################### 76 | # Sections Introductions 77 | ########################################################################### 78 | 79 | - key: sections.user_info.description.html2023 80 | t: | 81 | Welcome to the State of HTML survey results. This first-ever edition reached **20,904** participants from all around the world. 82 | 83 | - key: sections.features.description.html2023 84 | t: | 85 | HTML features and other browser APIs 86 | 87 | ########################################################################### 88 | # Other Content 89 | ########################################################################### 90 | 91 | - key: features.all_features 92 | t: All Features 93 | - key: features.all_features.description 94 | t: | 95 | This chart recaps all of the survey's feature questions. The main bars represent a respondent's experience; and they are then further subdivided according to that respondent's sentiment. You can change the grouping to alternate between both. 96 | 97 | 98 | Note that you can also find a more specific breakdown of the same data in each feature sub-section. 99 | 100 | - key: features.forms_features 101 | t: Forms Experience & Sentiment 102 | 103 | - key: features.interactivity_features 104 | t: Interactivity Experience & Sentiment 105 | 106 | - key: features.content_features 107 | t: Content Experience & Sentiment 108 | 109 | - key: features.web_components_main_features 110 | t: Web Components Experience & Sentiment 111 | 112 | - key: features.accessibility_features 113 | t: Accessibility Experience & Sentiment 114 | 115 | - key: features.mobile_web_apps_features 116 | t: Mobile Web Apps Experience & Sentiment 117 | 118 | ########################################################################### 119 | # Sponsors 120 | ########################################################################### 121 | 122 | - key: sponsors.frontendmasters.description 123 | t: Advance your skills with in-depth, modern front-end engineering courses. 124 | - key: sponsors.google_chrome.description 125 | t: Thanks to the Google Chrome team for supporting our work. 126 | - key: sponsors.tokyodev.description 127 | t: Find your dream developer job in Japan today. 128 | - key: sponsors.renderatl.description 129 | t: The tech conference focused on all things web. 130 | 131 | ########################################################################### 132 | # Conclusion 133 | ########################################################################### 134 | 135 | - key: conclusion.html2023.lea_verou.bio 136 | t: W3C Technical Architecture Group Member & MIT CSAIL Researcher 137 | - key: conclusion.html2023.lea_verou 138 | t: > 139 | *Phew!* This survey has taken a monumental effort by dozens of people across six continents. Not only did it set a new record for the most responses in a “State of…” survey debut, its data collection UI pioneered innovations that gave us unparalleled insight into developer attitudes, and will ripple far beyond its scope. 140 | 141 | 142 | Some argue that improving HTML is futile, but the survey resoundingly demonstrates the contrary. **Developers crave more interactive HTML elements**: not only were interactive elements like `` or the Popover API among those accumulating the most positive sentiment across all categories, but in addition all top [missing elements](https://2023.stateofhtml.com/en-US/usage/#html_missing_elements) were interactive widgets. 143 | 144 | 145 | However, **making simple things easy** by providing canned functionality is no longer sufficient. **Making complex things possible** by supporting thorough customization is a necessity: insufficient customizability, especially around **styling**, was by far the top recurring pain point. 146 | 147 | 148 | As a result, form elements were also the elements [most frequently recreated](https://2023.stateofhtml.com/en-US/usage/#html_functionality_features); a lose-lose outcome that makes both developers and end-users suffer. Thankfully, there are many new initiatives to improve this, so the future looks bright. 149 | 150 | 151 | Another big need is extensibility. It does not scale if only standards bodies have the privilege to extend HTML; and besides, generic elements cannot possibly address the enormous diversity of needs. Unfortunately, **Web Components APIs** (and especially Shadow DOM), while widely used, appear to fall short in terms of meeting developer needs and providing a smooth developer experience, as they topped the charts of worst experiences across the survey. However, the ongoing activity in this area (some of which I have been part of) leaves me hopeful that while it has been a rocky path, they are on track to reach their full potential. 152 | 153 | 154 | Which brings me to my final point: it is important to remember that this survey is only a snapshot of developer perspectives and reflects the state of the web platform at the time. However, a primary goal of these surveys is to improve the status quo by providing better visibility into developer needs. How many of today’s pain points will be addressed tomorrow as a result? Join us later this year for the survey’s second iteration and let’s find out! 155 | 156 | ########################################################################### 157 | # About 158 | ########################################################################### 159 | 160 | - key: about.content.html2023 161 | t: | 162 | The 2023 State of HTML survey ran from September 19 to October 19 2023, and collected 20,904 responses. 163 | 164 | The survey design effort was lead by [Lea Verou](https://lea.verou.me/) thanks to a grant from Google. Lea also oversaw the prototyping, testing, and implementation of new UI data collection elements; contributed to data processing; and helped with data visualization. 165 | 166 | The survey infrastructure is run by [Sacha Greif](https://sachagreif.com/) and [Eric Burel](https://www.lbke.fr/), with help from a team of open-source contributors and consultants. 167 | 168 | This year's logo and t-shirt were designed by [Christopher Kirk-Nielsen](http://chriskirknielsen.com/). 169 | 170 | ### Survey Goals 171 | 172 | This survey was created to identify upcoming trends in the web development ecosystem in order to help developers make technological choices. 173 | 174 | As such, the survey is focused on anticipating what's coming over the next few years rather than analyzing what's popular now, which is why the features or technologies that are currently most widespread are not always included. 175 | 176 | It should also be taken as a **snapshot of a specific subset of developers**, and is not meant to speak for the entire ecosystem. 177 | 178 | The survey was openly accessible online and respondents were not filtered or selected in any way. 179 | 180 | ### Project Funding 181 | 182 | Funding from this project comes from a variety of sources: 183 | 184 | - **T-shirt sales**. 185 | 186 | - **Sponsored links**: the links to recommended resources at the bottom of each page are provided by our partner [Frontend Masters](https://frontendmasters.com/). 187 | 188 | - **Other Funding**: [Google](https://www.google.com/) and [TokyoDev](https://www.tokyodev.com/) also funded work on the survey. 189 | 190 | ### Technical Overview 191 | 192 | You can find a more in-depth technical overview of how the surveys are run [here](https://dev.to/sachagreif/how-the-devographics-surveys-are-run-2023-edition-1p6a). 193 | 194 | # HTML 2023 195 | 196 | - key: faq.data_used_html2023 197 | t: How will this data be used? 198 | - key: faq.data_used_html2023.description 199 | t: > 200 | All data collected will be released openly for any developer or company to consult. 201 | Browser vendors also [use this data](https://web.dev/interop-2023/) to prioritize focus areas and inform their roadmaps. 202 | 203 | - key: faq.survey_goals_html2023 204 | t: What are the survey's goals? 205 | - key: faq.survey_goals_html2023.description 206 | t: > 207 | The survey's goals are to measure awareness of new HTML features and browser APIs, and help developers keep track of how their usage is evolving. 208 | 209 | - key: faq.who_should_take_survey_html2023 210 | t: Who should take this survey? 211 | - key: faq.who_should_take_survey_html2023.description 212 | t: > 213 | This is an open survey for anybody who makes websites or web apps, whether regularly or occasionally, as part of their job, as a student, or just for fun! 214 | 215 | - key: faq.how_long_will_survey_take_html2023 216 | t: How long will answering the survey take? 217 | - key: faq.how_long_will_survey_take_html2023.description 218 | t: > 219 | Depending on how many questions you answer (all questions are optional), 220 | filling out the survey should take around 15-20 minutes. 221 | 222 | - key: faq.learn_more_html2023 223 | t: Where can I learn more? 224 | - key: faq.learn_more_html2023.description 225 | t: You can learn more about this survey in [our announcement post](https://lea.verou.me/blog/2023/design-state-of-html/). 226 | 227 | - key: faq.survey_design_html2023 228 | t: How was this survey designed? 229 | - key: faq.survey_design_html2023.description 230 | t: > 231 | The survey was designed by [Lea Verou](https://lea.verou.me), with input from browser vendors as well as groups such as the [WebDX Community Group](https://www.w3.org/community/webdx/). 232 | 233 | - key: faq.results_released_html2023 234 | t: When will the results be released? 235 | - key: faq.results_released_html2023.description 236 | t: The survey will run from September 19 to October 16, and the survey results will be released shortly after that. 237 | 238 | # Intro for actual survey page 239 | - key: general.html2023.survey_intro 240 | t: | 241 | While web developers tend to focus on JavaScript and CSS, none of what we do would be possible without HTML acting as the foundation. 242 | 243 | It has long seemed like HTML wasn't evolving, but things may be changing. 244 | New elements like `` are on the horizon, cool new features like popovers, 245 | and a swath of related browser APIs (Web Components, PWAs, etc.). 246 | 247 | This year, [Lea Verou](https://lea.verou.me/) took on the formidable task of leading the design of this brand new survey, from content to UX and beyond. 248 | 249 | Building on the success of [State of JS](http://stateofjs.com/) and [State of CSS](https://stateofcss.com/), we introduce **State of HTML**; 250 | the last missing piece that completes the trilogy, so we can track the evolution of the web platform as a whole. 251 | 252 | Benefits to you: 253 | - Survey results are **used by browsers** and standards groups **for roadmap prioritization**. 254 | Your responses can help get features you care about implemented, browser incompatibilities being prioritized, and gaps in the platform being addressed. 255 | - Learn about new and upcoming features; add features to your reading list and get a list of resources at the end! 256 | - Get a personalized knowledge score and see how you compare to other respondents 257 | 258 | The survey will be open for 3 weeks, but responses entered **within the first 9 days (until October 1st)** will have a much higher impact on the Web, 259 | as preliminary data will be used for certain prioritization efforts that have deadlines before then. 260 | -------------------------------------------------------------------------------- /js2020.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | namespace: js 3 | translations: 4 | ########################################################################### 5 | # General 6 | ########################################################################### 7 | 8 | - key: general.results.description 9 | t: The annual survey about the latest trends in the JavaScript ecosystem. 10 | 11 | ########################################################################### 12 | # Introduction 13 | ########################################################################### 14 | 15 | - key: introduction.js2020 16 | t: | 17 | 18 | As crappy as 2020 was, JavaScript as a whole still managed to somehow move forward. As the language itself keeps improving 19 | thanks to new features like Optional Chaining and Nullish Coalescing, TypeScript's widespread adoption is taking things to a whole other level by popularizing static typing. 20 | 21 | And on the framework side, just when we thought things were settling down, Svelte comes in and shakes everything up with a fresh take on the front-end. And even build tools are showing signs of new activity after years of webpack dominance. 22 | 23 | But the difference this time is that the “old” guard –relatively speaking– is not going anywhere. Svelte and Snowpack are great, but so are React and webpack. And sure, they too will eventually fall prey to the Great JavaScript Churn, but not for many, many years. 24 | 25 | So let's enjoy what we have here: a great ecosystem that just keeps getting even better! 26 | 27 | ### Join Our Launch Livestream! 28 | 29 | We'll be doing a [special launch livestream](https://stateofjs.com/2020stream/) in collaboration with the folks at the CodeItLive Twitch channel. Join us along with guests such as Sarah Drasner, Josh W. Comeau, and Kent C. Dodds to discuss this past year's JavaScript trends! 30 | 31 | ### Download Our Data 32 | 33 | You can [download the raw JSON data for this survey](https://www.kaggle.com/sachag/state-of-js). Let us know if you end up making your own data visualizations! 34 | 35 | ### State of CSS 36 | 37 | If you haven't seen it already, we strongly recommend checking out the [State of CSS 2020 Trend Report](https://2020.stateofcss.com/en-US/report/) to get up to date on the past year's three main CSS trends. 38 | 39 | ### Thanks 40 | 41 | Many thanks to [Alexey Pyltsyn](https://github.com/lex111) for his help with translations. 42 | 43 | Thanks as well to [Amelia Wattenberger](https://wattenberger.com/) for helping us update her original “Changes Over Time” chart from last year. If you want to learn how to build your own amazing data visualizations there's no better way than her [D3 video course](https://www.newline.co/fullstack-d3). 44 | 45 | ### Credits & Stuff 46 | 47 | The State of JavaScript Survey is created and maintained by [Sacha Greif](https://twitter.com/sachagreif) and [Raphaël Benitte](https://twitter.com/benitteraphael). 48 | 49 | Watch [this video overview](https://www.youtube.com/watch?v=o4w1qEnZxbM) to learn more about the technical aspects of the project, from data collection to data visualizations. Questions? Feedback? [Get in touch](mailto:hello@stateofjs.com) or [join our Discord](https://discord.gg/zRDb35jfrt). 50 | 51 | And now, let's see what JavaScript has been up to this year! 52 | 53 | 54 | 55 | ########################################################################### 56 | # Tshirt 57 | ########################################################################### 58 | 59 | - key: sections.tshirt.title 60 | t: T-shirt 61 | 62 | - key: sections.tshirt.description 63 | t: | 64 | ## Support the survey and look good in the process! 65 | 66 | We've updated last year's very popular 👕 State of JavaScript T-shirt 👕 for 67 | the 2020 JavaScript landscape! 68 | 69 | The shirt features a ”periodic table of JavaScript” that lists the most popular 70 | libraries grouped by category, along with their GitHub stars counts (in thousands). 71 | 72 | This shirt is a great way to familiarize yourself with the JavaScript ecosystem, 73 | and maybe even strike up a conversation with other like-minded 74 | JavaScript developers! 75 | 76 | - key: tshirt.about 77 | t: About the T-shirt 78 | 79 | - key: tshirt.description 80 | t: | 81 | Printing and shipping is handled by [Cotton Bureau](https://cottonbureau.com/people/state-of-js). The design is printed on a premium Next Level black super-soft, tri-blend shirt. 82 | 83 | - key: tshirt.getit 84 | t: Get It 85 | 86 | - key: tshirt.price 87 | t: USD ${price} + shipping 88 | 89 | ########################################################################### 90 | # Sections Introductions 91 | ########################################################################### 92 | 93 | - key: sections.user_info.description 94 | t: | 95 | This year's survey reached **23,765** people in **137** countries. For the first time this year, 96 | we were able to translate the survey questions in multiple languages thanks to an awesome team of volunteers. 97 | 98 | - key: sections.features.description 99 | t: | 100 | While most respondents were aware of the majority of JavaScript features 101 | mentioned in the survey, many still have yet to actually use most of them. 102 | 103 | - key: sections.technologies.description 104 | t: | 105 | The typical new JavaScript library shows high retention but low usage, which can sometimes make 106 | selecting the right technology for your needs a bit tricky. This is where looking at 107 | the data can really help point you in the right direction. 108 | 109 | - key: sections.javascript_flavors.description 110 | t: | 111 | The trend of “flavors” of JavaScript that compile down to standard code started all these 112 | years ago with CoffeeScript, but it's now clear that TypeScript is the uncontested leader in 113 | that category. 114 | 115 | - key: sections.front_end_frameworks.description 116 | t: | 117 | As usual React and Vue lead the pack, but Svelte is quickly establishing itself as a very 118 | serious contender for the front-end crown. 119 | 120 | - key: sections.datalayer.description 121 | t: | 122 | While the datalayer space is still in constant movement, one thing seems clear: GraphQL and 123 | its related technologies are here to stay. 124 | 125 | - key: sections.back_end_frameworks.description 126 | t: | 127 | The back-end space is still very fragmented, but Express stands out as the one dominant 128 | tool, while Next.js maintains its high retention ratio. 129 | 130 | - key: sections.testing.description 131 | t: | 132 | The testing ecosystem keeps getting richer, with new entrants Testing Library and Playwright both 133 | scoring high marks on the retention index. 134 | 135 | - key: sections.build_tools.description 136 | t: | 137 | Just when it seemed like webpack's dominance had settled the debate, the build tools scene 138 | has again exploded with new entrants like Snowpack and esbuild, leading us to give it a full 139 | section for the first time since 2017. 140 | 141 | - key: sections.mobile_desktop.description 142 | t: | 143 | JavaScript is not just for the browser, and while Electron and React Native are the two 144 | best-known names in this category, other solutions like Expo and Capacitor are also starting 145 | to make waves. 146 | 147 | - key: sections.other_tools.description 148 | t: | 149 | The diversity and quantity of libraries, utilities, and other tools highlights how vast the JavaScript 150 | ecosystem has become, and for the first time this year we're also tracking JavaScript runtimes 151 | such as Deno and Hermes. 152 | 153 | - key: sections.resources.description 154 | t: | 155 | Many great resources are listed here, and we're sure that you'll find at least a few new 156 | blogs or podcasts to follow! 157 | 158 | - key: sections.opinions.description 159 | t: | 160 | While things are generally looking good in JavaScript land, there does seem to be a bit of a 161 | come-down from the positivity high-point of 2018. Will the trend persist? Tune in next year to find out! 162 | 163 | ########################################################################### 164 | # Notes 165 | ########################################################################### 166 | 167 | - key: blocks.source.note 168 | t: > 169 | 170 | This chart aggregates a mix of referrers, URL parameters, and freeform answers. 171 | 172 | - State of JS: the [State of JS](https://stateofjs.com) mailing list; also matches `email`, `by email`, etc. 173 | 174 | - State of CSS: the [State of CSS](https://stateofcss.com/) mailing list 175 | 176 | - Work: matches `work`, `colleagues`, `coworkers`, etc. 177 | 178 | ########################################################################### 179 | # Awards 180 | ########################################################################### 181 | 182 | # - key: award.feature_adoption_delta_award.comment 183 | # t: With a **{value}** progression in 2020, this was the year CSS Grid crossed over from new technology to established tool. 184 | 185 | - key: award.tool_usage_delta_award.comment 186 | t: TypeScript was already popular, and with a **{value}** growth in usage it looks like it's only going to get more ubiquitous going forward. 187 | 188 | - key: award.tool_satisfaction_award.comment 189 | t: With a sky-high retention rating of **{value}**, Testing Library is 2020's overall most beloved tool. 190 | 191 | - key: award.tool_interest_award.comment 192 | t: GraphQL continues to be the one thing developers want to learn more about with an interest ratio of **{value}**, as soon as they can finally find the time. 193 | 194 | - key: award.most_write_ins_award.comment 195 | t: People are always passionate about text editors, and with **{value}** mentions IntelliJ IDEA wins the award for the most write-in answers. 196 | 197 | ########################################################################### 198 | # Conclusion 199 | ########################################################################### 200 | 201 | - key: sections.conclusion.description 202 | t: | 203 | Since ancient times, philosophers have pondered the Paradox of JavaScript: on one hand, you can't wait for exciting new language features and libraries that promise to make your developer experience so much better. 204 | 205 | But at the same time, you crave stability and simplicity so you can finally get things done without having to spend half your time browsing through convoluted GitHub issues threads and outdated Stack Overflow questions. 206 | 207 | So which is it? Do we want the new shiny, or the old reliable? More than ever, 2020 shows that we won't settle for anything less than *both*. The good news is that the JavaScript community has risen up to the challenge, which promises an exciting 2021! 208 | 209 | P.S. if you're still hungry for more JavaScript stats we recommend checking out the yearly [Rising Stars](https://risingstars.js.org/2020/en/) rankings from [Best Of JS](https://bestofjs.org/). 210 | 211 | ########################################################################### 212 | # Picks 213 | ########################################################################### 214 | 215 | - key: picks.my_2020_pick 216 | t: "My 2020 Pick: " 217 | - key: picks.intro 218 | t: We asked members of the JavaScript community to share their “pick of the year” 219 | 220 | - key: picks.joshwcomeau.bio 221 | t: Software-engineer-turned-educator 222 | - key: picks.joshwcomeau.description 223 | t: | 224 | This is a fantastic intro resource for learning about web accessibility! 225 | I picked it because it's our job as JS devs to make sure that the sites 226 | we build are usable by everyone, not just sighted keyboard-and-mouse users. 227 | 228 | - key: picks.swyx.bio 229 | t: Infinite Builder 230 | - key: picks.swyx.description 231 | t: | 232 | Svelte is the Space Elevator of frontend frameworks. 233 | It helps you ship apps extremely fast. 234 | 235 | - key: picks.kentcdodds.bio 236 | t: Improving the world with quality software 237 | - key: picks.kentcdodds.description 238 | t: | 239 | Remix is a different approach to React frameworks with an emphasis on progressive 240 | enhancement. It embraces the web platform in a way that no existing frameworks do 241 | and I'm excited by its potential. 242 | 243 | - key: picks.sarah_edo.bio 244 | t: Core Team Vue.js 245 | - key: picks.sarah_edo.description 246 | t: | 247 | Insomnia is an app that allows you to design, test, and deploy API 248 | Workflows with a clean, simplified UX- it has both REST and GraphQL support, 249 | though clearly the puns are better if you're using REST. 250 | 251 | - key: picks.ladyleet.bio 252 | t: This Dot Labs, GDE, MVP 253 | - key: picks.ladyleet.description 254 | t: | 255 | RedwoodJS and frameworks like it are starting to change how we think about development. 256 | It’s bringing the ease of Ruby on Rails to the front-end ecosystem. 257 | 258 | - key: picks.midudev.bio 259 | t: Lead Frontend @ Adevinta & Content Creator 260 | - key: picks.midudev.description 261 | t: | 262 | Working with modules on the JavaScript ecosystem has been messy. 263 | ES2020 came with ES Modules to end that. Even it's stable on Node.js. Yei! 264 | 265 | - key: picks.cassidoo.bio 266 | t: Principal Developer Experience Engineer at Netlify 267 | - key: picks.cassidoo.description 268 | t: | 269 | Ben is one of the most generous people in the JS community. 270 | He's active in open source (on the Vue core team), 271 | consistently makes useful content for developers to learn, and is very giving with his time. 272 | 273 | - key: picks.lauragift_.bio 274 | t: Frontend Developer @ PassionatePeople 275 | - key: picks.lauragift_.description 276 | t: | 277 | Josh Comeau has been an inspiration to me, and I can say the JS community in general. 278 | He writes very thoughtful articles on his blog, and they are some of the best I read in 279 | 2020 because they either helped me stay on top of the latest in JavaScript 280 | or helped me learn something new. 281 | 282 | - key: picks.tomdale.bio 283 | t: JavaScript Thinkfluencer 284 | - key: picks.tomdale.description 285 | t: | 286 | Volta helps manage your entire JavaScript toolchain – think nvm, but it also helps 287 | you and your team stay on the same versions of Node, npm, CLI tools, etc. 288 | I love it because it's so darn nice to use, and is pioneering the use of 289 | Rust to build speedy tools for JS. 290 | 291 | - key: picks.markdalgleish.bio 292 | t: Co-creator of CSS Modules, creator of Playroom 293 | - key: picks.markdalgleish.description 294 | t: | 295 | Automates npm publishing with the ability to tie Markdown release notes to every change. Changesets has really leveled up the quality of our release notes and version management this year. 296 | 297 | - key: picks.sachagreif.bio 298 | t: Creator of the State of JS survey 299 | - key: picks.sachagreif.description 300 | t: | 301 | Best Of JS tracks GitHub stats about virtually every major JavaScript project, and it has been an invaluable resource for helping us decide what to include in the survey! 302 | 303 | - key: general.js2020.survey_intro 304 | t: | 305 | 2020 has been a tough year for everyone, one that makes worrying about the 306 | latest JavaScript frameworks seem pretty futile in comparison. 307 | 308 | Still, the world has to move on, and so does JavaScript. And once again, with your help 309 | we'll try to build a comprehensive picture of the ecosystem to find out a little bit more 310 | about where it's going. 311 | -------------------------------------------------------------------------------- /demo2022.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: general.results.description 8 | t: The 2022 edition of the annual survey about the latest trends in the GraphQL ecosystem. 9 | 10 | - key: general.livestream_announcement 11 | t: Make sure to tune in for our [special survey results livestream](https://dev.to/sachagreif/state-of-javascript-2021-livestream-24a5) on February 22! (English) 12 | 13 | ########################################################################### 14 | # Introduction 15 | ########################################################################### 16 | 17 | - key: introduction.demo2022 18 | t: > 19 | 20 | Since being originally created at Facebook in September 2015, many developers have embraced GraphQL as a new and promising way to build APIs. 21 | 22 | 23 | Yet 7 years later, a lot of questions still remain: when do you need GraphQL exactly? Should you hand-code your GraphQL API or generate it from your database? And will it ever replace REST? 24 | 25 | 26 | To answer these questions and many more, we've created the first ever **State of GraphQL** community survey. Over 3,000 developers took part this year, and this is just the beginning. 27 | 28 | 29 | We hope you enjoy browsing the data, and make sure to check out our [GraphQL API](https://graphiql.devographics.com/) as well! 30 | 31 | 32 | 33 | 34 | ########################################################################### 35 | # Tshirt 36 | ########################################################################### 37 | 38 | - key: sections.tshirt.title 39 | t: T-shirt 40 | 41 | - key: sections.tshirt.description 42 | t: | 43 | ## Support the Survey With the State of JavaScript T-Shirt 44 | 45 | Between the bad video quality, the bulky cassettes, and having to rewind, there's not much to miss about the VHS era. But one thing we *do* miss are the amazing 90s visuals that used to adorn blank VHS tapes. 46 | 47 | But now, thanks to the talented Christopher Kirk-Nielsen you can enjoy all this retro radness while also celebrating your love for JavaScript at the same time! 48 | 49 | - key: tshirt.about 50 | t: About the T-shirt 51 | 52 | - key: tshirt.description 53 | t: | 54 | We use a high-quality, super-soft tri-blend shirt with a slim fit printed by our partners at Cotton Bureau. 55 | 56 | - key: tshirt.getit 57 | t: Get It 58 | 59 | - key: tshirt.price 60 | t: USD $29 + shipping 61 | 62 | - key: tshirt.designer.heading 63 | t: About the Designer 64 | 65 | - key: tshirt.designer.name 66 | t: Christopher Kirk-Nielsen 67 | 68 | - key: tshirt.designer.bio 69 | t: | 70 | Originally from France but now based in the United States, Chris is not just an amazing front-end developer, but also a talented illustrator who specializes in retro visuals. In fact, we encourage you to also check out his [other t-shirt designs](https://chriskirknielsen.com/designs)! 71 | 72 | ########################################################################### 73 | # Sections 74 | ########################################################################### 75 | 76 | - key: sections.user_info_demo2022.description 77 | t: | 78 | **3,094** respondents took part in this year's survey. 79 | 80 | - key: sections.features_demo2022.description 81 | t: | 82 | GraphQL may be a simple concept at its core, but there are many features and patterns to consider when you dig below the surface. 83 | 84 | - key: sections.libraries_demo2022.description 85 | t: | 86 | The GraphQL ecosystem is surprisingly deep, with many competing libraries helping you set up your API. 87 | 88 | - key: sections.tools_others_demo2022.description 89 | t: | 90 | Picking the right tools to use in combination with GraphQL can make all the difference. 91 | 92 | - key: sections.usage_demo2022.description 93 | t: | 94 | We wanted to know not only how people use GraphQL, but also *why* they use it – as well as where GraphQL is still lacking… 95 | 96 | - key: sections.resources_demo2022.description 97 | t: | 98 | We're sure you'll discover at least one or two new people, podcasts, or blogs to follow! 99 | 100 | ########################################################################### 101 | # Charts 102 | ########################################################################### 103 | 104 | - key: options.features_categories.graphql_language 105 | aliasFor: sections.graphql_language.title 106 | - key: options.features_categories.directives 107 | aliasFor: sections.directives.title 108 | - key: options.features_categories.security_performance 109 | aliasFor: sections.security_performance.title 110 | - key: options.features_categories.other_features 111 | aliasFor: sections.other_features.title 112 | 113 | - key: blocks.tools_quadrant.description 114 | t: | 115 | This chart shows each technology's **retention ratio** over its total **user count**. 116 | It can be divided into four quadrants: 117 | 118 | - **1**: Low usage, high retention. Technologies worth keeping an eye on. 119 | 120 | - **2**: High usage, high retention. Safe technologies to adopt. 121 | 122 | - **3**: Low usage, low retention. Technologies that are harder to recommend currently. 123 | 124 | - **4**: High usage, low retention. Reassess these technologies if you're currently using them. 125 | 126 | ########################################################################### 127 | # Notes 128 | ########################################################################### 129 | 130 | - key: blocks.gender.note 131 | t: | 132 | If you're interested in learning more, we [wrote a blog post](https://dev.to/sachagreif/is-our-survey-biased-against-women-49oj) that addresses the survey's gender dynamics. 133 | 134 | - key: blocks.css_missing_features.note 135 | t: | 136 | You can explore the full dataset of answers to this question in [this side project](https://whatsmissingfromcss.com/). 137 | 138 | - key: blocks.source.note 139 | t: > 140 | 141 | This chart aggregates a mix of referrers, URL parameters, and freeform answers. 142 | 143 | - State of JS: the [State of JS](https://stateofjs.com) mailing list. 144 | 145 | - State of CSS: the State of CSS mailing list; also matches `email`, `by email`, etc. 146 | 147 | - Work: matches `work`, `colleagues`, `coworkers`, etc. 148 | 149 | ########################################################################### 150 | # Awards 151 | ########################################################################### 152 | 153 | - key: award.feature_adoption_delta_award.comment 154 | t: With a **{value}** progression in 2021, the nullish coalescing operator (??) has quickly become an integral part of JavaScript. 155 | 156 | - key: award.tool_usage_delta_award.comment 157 | t: esbuild is barely two years old, but with a **{value}** progression over the last year it's already gaining ground. 158 | 159 | - key: award.tool_satisfaction_award.comment 160 | t: Vite takes the top spot with a sky-high **{value}** retention ratio! 161 | 162 | - key: award.tool_interest_award.comment 163 | t: With a **{value}** interest ratio, Vite once again wins the gold! 164 | 165 | - key: award.most_write_ins_award.comment 166 | t: Many questions also accepted write-in answers, and with **{value}** mentions Elm was the most popular item overall. 167 | 168 | ########################################################################### 169 | # Conclusion 170 | ########################################################################### 171 | 172 | - key: conclusion.demo2022 173 | t: | 174 | 175 | GraphQL is truly part of how we build modern applications today. 176 | 177 | More and more companies are creating products, services, tooling, RFCs and most of that work is being done as open-source, which is fantastic to see! It's crucial for a flourishing ecosystem to have healthy competition and collaboration! 178 | 179 | As a result, the tide is changing on how we consume GraphQL on the client, with libraries such as urql and React Query being popular choices today alongside stalwarts like Apollo Client and Relay. It's also great to see GraphQL continue to grow and flourish in languages other than JavaScript – there are now stable and mature GraphQL servers and clients in almost all of the most popular programming languages! 180 | 181 | GraphQL itself is changing as well, with much anticipated changes edging closer to being officially part of the specification. We'll soon see changes with stream, defer, input polymorphism, as well as improvements around subscriptions and live queries. 182 | 183 | Moreover, there's now dedicated companies focused on GraphQL security, caching, tracing errors, deploying to the edge, abstracting databases and backends into simple schemas, and so much more that make working with GraphQL even more approachable than it ever has been before. 184 | 185 | We also recently witnessed a brand new GraphiQL release that boasts a powerful plugin ecosystem, fewer dependencies, and even dark mode! And the [GraphQL Foundation](https://graphql.org/foundation/) continues to grow with new members joining regularly to help sustain the efforts of all those involved in educating, building, and steering the future of GraphQL. 186 | 187 | GraphQL has found its place in the ecosystem, and it has an exciting future ahead! 188 | 189 | - key: conclusion.demo2022.bio 190 | t: Senior Developer Relations @ Grafbase 191 | 192 | ########################################################################### 193 | # Picks 194 | ########################################################################### 195 | 196 | - key: picks.my_pick.demo2022 197 | t: "My 2022 Pick: " 198 | - key: picks.intro 199 | t: We asked members of the GraphQL community to share their “pick of the year” 200 | 201 | - key: picks.jamie_barton.name 202 | t: GraphQL Mesh 203 | - key: picks.jamie_barton.bio 204 | t: Full Stack Developer & Educator 205 | - key: picks.jamie_barton.description 206 | t: | 207 | More and more people are looking for solutions to bridge the 208 | gap between all of their services. Mesh lets you do that with GraphQL, 209 | and non-GraphQL services. 210 | 211 | - key: picks.tanmai_gopal.name 212 | t: Streaming over GraphQL Subscriptions 213 | - key: picks.tanmai_gopal.bio 214 | t: CEO & co-founder at Hasura 215 | - key: picks.tanmai_gopal.description 216 | t: | 217 | Modern APIs need to handle an increasing volume of data, 218 | or fast-moving data that is a stream. 219 | Could we use GraphQL subscriptions as a streaming API? 220 | 221 | - key: picks.tim_suchanek.name 222 | t: Benjie Gillam 223 | - key: picks.tim_suchanek.bio 224 | t: Software Engineer and Entrepreneur 225 | - key: picks.tim_suchanek.description 226 | t: | 227 | Benjie is one of the main people pushing GraphQL forward. 228 | His engagement in the WG, TSC, and various foundation initiatives is second to none. 229 | 230 | - key: picks.uri_goldshtein.name 231 | t: Pothos GraphQL 232 | - key: picks.uri_goldshtein.bio 233 | t: Founder of The Guild 234 | - key: picks.uri_goldshtein.description 235 | t: | 236 | Code-first, TS schema builder. Easy to use yet powerful, plugin based and very well maintained. 237 | If you go code first, this is the one to choose. 238 | 239 | - key: picks.benjie_gillam.name 240 | t: SpecNews Podcast 241 | - key: picks.benjie_gillam.bio 242 | t: Community-funded OSS maintainer 243 | - key: picks.benjie_gillam.description 244 | t: | 245 | Latest activities from the GraphQL Working Group summarised in just 5-10 minutes per month. 246 | Cutting edge GraphQL knowledge with minimal effort! 247 | 248 | - key: picks.xxxx.name 249 | t: 250 | - key: picks.xxxx.bio 251 | t: 252 | - key: picks.xxxx.description 253 | t: | 254 | ########################################################################### 255 | # Sponsors 256 | ########################################################################### 257 | 258 | - key: sponsors.nijibox.description 259 | t: > 260 | One-stop support for UX design, creativity, and development. 261 | 262 | - key: sponsors.frontendmasters.description 263 | t: > 264 | Advance your skills with in-depth, modern front-end engineering courses. 265 | 266 | - key: sponsors.nhost.description 267 | t: > 268 | Nhost is an open source Firebase alternative with GraphQL. 269 | 270 | - key: sponsors.apollo.description 271 | t: > 272 | Apollo's supergraph empowers product and engineering teams to quickly create incredible experiences for their customers. 273 | 274 | - key: sponsors.the_guild.description 275 | t: > 276 | The Guild's open-source tools and ecosystem provides everything you need for evolving your APIs. 277 | 278 | - key: sponsors.hasura.description 279 | t: > 280 | Run Hasura locally or in the cloud, and connect it to your new or existing databases to instantly get a production-grade GraphQL API. 281 | 282 | - key: sponsors.graphql_wtf.description 283 | t: > 284 | Learn something new with GraphQL, every week. Get new episodes directly to your inbox. 285 | 286 | - key: sponsors.grafbase.description 287 | t: > 288 | Instant serverless GraphQL backends. Grafbase provides the best developer experience to deploy GraphQL APIs. 289 | 290 | ########################################################################### 291 | # FAQ/About 292 | ########################################################################### 293 | 294 | - key: about.content.demo2022 295 | t: > 296 | The 2022 State of GraphQL survey ran from June 15, 2022 to July 15, 2022, and collected 3,094 responses. The survey is primarily run by me, [Sacha Greif](https://sachagreif.com/), with help from a team of open-source contributors and consultants. 297 | 298 | ### Survey Goals 299 | 300 | This survey, along with the [State of CSS](https://stateofcss.com/) and [State of JS](https://stateofjs.com/) surveys, was created to identify upcoming trends in the web development ecosystem in order to help developers make technological choices. 301 | 302 | 303 | Because of the relatively small sample size, this survey should be taken as a **snapshot of a subset of developers**, and is not meant to speak for the entire GraphQL ecosystem. 304 | 305 | 306 | The survey is also **not affiliated with GraphQL or Facebook**. 307 | 308 | ### Survey Design 309 | 310 | The survey was designed collaboratively, with an open feedback period where the survey contents were discussed on GitHub ([1](https://github.com/Devographics/Monorepo/issues/86), [2](https://github.com/Devographics/Monorepo/issues/90)). All survey questions were optional. 311 | 312 | ### Survey Audience 313 | 314 | The survey was openly accessible online and respondents were not filtered or selected in any way. Respondents were primarily inbound from social media traffic. 315 | 316 | ### Representativeness & Inclusivity 317 | 318 | While we believe it's important to give a voice to every community, the reality is that an open survey like this one will always struggle to properly represent everybody, especially when operating through systems that already carry their own inherent biases. 319 | 320 | 321 | In order to counter-balance this, we are implementing three distinct strategies: 322 | 323 | 324 | - **Outreach**: we always try to reach out to different organizations (such as BIPOC- or LGBTQ-focused organizations, or online teaching platforms) to try and diversify our own audience. 325 | 326 | - **Data Analysis**: through features like facets and variants, we're always trying to make it easier to surface the voices of any demographic segment, no matter how minoritized it might be in our data. 327 | 328 | - **Barrier Lowering**: making the survey too long, inaccessible, slow to load, English-only, etc. can all contribute to imposing an "effort tax" that cuts off the parts of the community that can't afford to pay it. Fixing these issues can lower the barrier to entry and in the process make our audience more diverse. 329 | 330 | 331 | ### Project Funding 332 | 333 | Funding from this project comes from a variety of sources: 334 | 335 | 336 | - **Chart Sponsorships**: members of the community can donate to the survey in exchange for having their name featured in the report. 337 | 338 | - **Sponsored Links**: the links to recommended resources at the bottom of each page are provided by our partner [Frontend Masters](https://frontendmasters.com/). 339 | 340 | - **Other Funding**: the companies listed in the "Our Partners" section on the [introduction page](/introduction) have also contributed financially or otherwise. 341 | 342 | 343 | Sponsors have no say over the survey contents or the way the results are presented, and sponsorships are only decided once all data has already been collected. 344 | 345 | ### Technical Overview 346 | 347 | You can find a more in-depth technical overview of how the surveys are run [here](https://dev.to/sachagreif/how-the-state-of-js-css-surveys-are-run-4lnb). 348 | 349 | 350 | - **Data collection**: custom [Vulcan.js](http://vulcanjs.org/) app. 351 | 352 | - **Data storage/processing**: MongoDB & MongoDB Aggregations. 353 | 354 | - **Data API**: Node.js GraphQL API. 355 | 356 | - **Results Site**: [Gatsby](https://www.gatsbyjs.com/) React app. 357 | 358 | - **Data Visualizations**: [Nivo](https://nivo.rocks/) React dataviz library. 359 | 360 | - **Type**: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [Bebas Neue](https://fonts.google.com/specimen/Bebas+Neue). 361 | -------------------------------------------------------------------------------- /ai2025.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | - key: general.ai2025.devs2025_banner 4 | t: > 5 | Announcing a new developer survey for everything that's *not* code: health, hobbies, career, and more! → 6 | 7 | - key: general.ai2025.survey_intro 8 | t: | 9 | 10 | I asked ChatGPT to write an intro to this survey – not to actually use it of course, just for inspiration. 11 | 12 | That intro was great – concise, coherent, well thought-out. And now the issue is that I'm struggling to come up with something quite as good using my own feeble human mind. 13 | 14 | Somehow I resisted the urge to copy-paste this time. However, when it comes to web development, many of us have already embraced our new AI overlords and regularly generate entire apps before breakfast – at least if my social media feeds are to be believed. 15 | 16 | But today I want to figure out what's *really* going on. How do you use AI? What tools have you tried? And will the robots uprising happen before we get GTA 6? 17 | 18 | We appreciate your time and input, and we look forward to sharing the results with the community. Let’s explore how AI is shaping the future of web development together! 19 | 20 | *P.S. One of the paragraphs above was in fact written by AI. Can you tell which one?* 21 | 22 | - key: introduction.ai2025 23 | t: | 24 | 25 | Does napping help with jetlag? What soldering iron should I buy? Where should I eat tonight? 26 | 27 | Like many, I've started entrusting life's small – and sometimes not-so-small – questions to AI. But what about *writing code*? Is AI ready to take over, or should we hold on to our keyboards just a little bit longer? 28 | 29 | Now open your favorite social media app and you'll find no shortage of developers willing to tell you all about how they routinely “vibe code” a whole app before breakfast. 30 | 31 | Yet many questions still remain: 32 | 33 | 34 | - How much are developers spending on AI? 35 | - Which tools are the most useful? 36 | - And what are developer's biggest pain points when it comes to actually leveraging AI to develop web apps? 37 | 38 | 39 | This first ever **State of Web Dev AI** survey answers all these questions and much more. What's more, we tried to also poll developers who still have their reservations about AI, in order to paint a more accurate picture of the current State of the AI ecosystem. 40 | 41 | We hope you find the resulting report as interesting as we did! 42 | 43 | *Note that this survey is not affiliated with [The State of AI Report](https://www.stateof.ai/) or the [Vercel State of AI survey](https://vercel.com/state-of-ai).* 44 | 45 | 46 | 47 | # FAQ 48 | 49 | - key: faq.results_released_ai2025 50 | t: When will the results be released? 51 | - key: faq.results_released_ai2025.description 52 | t: The survey will run from February 10 to March 10, 2025, and the survey results will be released shortly after. 53 | 54 | - key: faq.survey_design_ai2025 55 | t: How was this survey designed? 56 | - key: faq.survey_design_ai2025.description 57 | t: > 58 | This survey was designed as the results of an [open design process](https://github.com/Devographics/surveys/issues/278) involving AI companies, browser vendors and the web development community. 59 | 60 | ########################################################################### 61 | # Content 62 | ########################################################################### 63 | 64 | # user_info 65 | 66 | - key: sections.user_info.description.ai2025 67 | t: | 68 | **4,181** respondents took part in this first edition of the State of Web Dev AI survey. 69 | 70 | # models 71 | 72 | - key: sections.models.description.ai2025 73 | t: | 74 | The foundation on which the entire ecosystem is built. 75 | 76 | - key: tools.models_experience.takeaway.ai2025 77 | t: | 78 | It should be no surprise that OpenAI's **ChatGPT** still benefits from its first-mover advantage and large mindshare, making it both the most-used (91.2%) and most-loved (53.1%) model provider. 79 | 80 | But while it does possess a large lead in terms of usage, runner-up **Claude** is not very far behind in terms of positive sentiment with 45.9%. 81 | 82 | - key: ai_pain_points.models_pain_points.takeaway.ai2025 83 | t: | 84 | **Hallucinations & inaccuracies** were by far the biggest pain point with AI models reported by respondents, which makes sense as these tools lose all utility if their output can't be relied on. 85 | 86 | The lack of ability to **handle larger contexts** and keep data in memory was also a big issue, especially when it comes to dealing with large, real-world codebases. 87 | 88 | # ides 89 | 90 | - key: sections.ides.description.ai2025 91 | t: | 92 | The AI-powered text editors of tomorrow. 93 | 94 | - key: tools.ides_experience.takeaway.ai2025 95 | t: | 96 | **Cursor** has a dominant awareness lead, with 82.2% of respondents having used it or heard of it, versus just 54.1% for runner-up Zed. 97 | 98 | When looking at freeform comments left about Cursor, it seems like the main issue is actually its price, indicating that the market might have room for a cheaper alternative. 99 | 100 | - key: ai_pain_points.ides_pain_points.takeaway.ai2025 101 | t: | 102 | **Context & memory limitations** were the main thing currently preventing web developers from using dedicated IDEs to code, followed by too many **intrusive suggestions** as well as the **high cost** associated with AI IDEs. 103 | 104 | # coding_assistants 105 | 106 | - key: sections.coding_assistants.description.ai2025 107 | t: | 108 | Your personal coding buddy. 109 | 110 | - key: tools.coding_assistants_experience.takeaway.ai2025 111 | t: | 112 | While it's no surprise seeing **GitHub Copilot** top the usage and positive sentiment rankings, it's worth noting that **Supermaven** has the second highest amount of positive sentiment despite only ranking 4th in terms of usage. This kind of discrepancy is often the sign of a new rising star that could make waves in the year to come. 113 | 114 | - key: ai_pain_points.coding_assistants_pain_points.takeaway.ai2025 115 | t: | 116 | Once again **hallucinations and inaccuracies** prove to be a big obstacle to wider adoption. 117 | 118 | And just like for IDEs, coding assistants having **limited context window** was also a major issue. 119 | 120 | # code_generation 121 | 122 | - key: sections.code_generation.description.ai2025 123 | aliasFor: sections.code_generation.prompt 124 | 125 | - key: tools.code_generation_experience.takeaway.ai2025 126 | t: | 127 | With Vercel's might behind it, **v0** has quickly established itself as the leader in this budding new industry sector. But StackBlitz' **Bolt** is not far behind, and certainly worth keeping an eye on. 128 | 129 | - key: ai_pain_points.code_generation_pain_points.takeaway.ai2025 130 | t: | 131 | Code generation tools seem to generate **poor quality code** that often just doesn't work as intended, or at all. 132 | 133 | # other_tools 134 | 135 | - key: sections.other_tools.description.ai2025 136 | t: Other AI Tools 137 | 138 | - key: other_tools.ai_programming_languages.takeaway.ai2025 139 | t: | 140 | As expected for a surevy focusing on web development, AI tools wre most often used in conjunction with JavaScript and TypeScript. 141 | 142 | - key: other_tools.image_generation.takeaway.ai2025 143 | t: | 144 | Being built into ChatGPT has proven to be a big advantage for **Dall-E**, as it takes the lead over established competitors such as **Stable Diffusion** and **Midjourney**. 145 | 146 | - key: other_tools.ai_libraries_sdks.takeaway.ai2025 147 | t: | 148 | Between v0 and the **Vercel AI SDK**, Vercel has managed to perform quite well in the AI space, despite not having AI as its main focus. 149 | 150 | - key: other_tools.ai_browser_apis.takeaway.ai2025 151 | t: | 152 | AI models could very well become baked into our web browsers in the future – and if that happens, things like translating or summarizing content on the fly could be just an API call away. 153 | 154 | # usage 155 | 156 | - key: sections.usage.description.ai2025 157 | t: | 158 | How developers use AI. 159 | 160 | - key: usage.ai_uses.takeaway.ai2025 161 | t: As expected in a developer survey, **code generation** ranked as the most common AI usage. On the other hand, even though **image generation** was the original use case for generative AI, only 38% of respondents stated using it. 162 | 163 | - key: usage.ai_generated_code_balance.takeaway.ai2025 164 | t: Most of us aren't quite vibe coding just yet, with a majority of respondents (69%) generating less than 25% of their code through AI – and only a small minority (8%) generating more than 75% of it. 165 | 166 | - key: usage.ai_generated_code_refactoring.takeaway.ai2025 167 | t: Even when AI is used to generate code, a large majority (76%) of developers stated they have to refactor at least half of the outputted code before it's ready to be used. 168 | 169 | - key: usage.ai_code_refactoring_reasons.takeaway.ai2025 170 | t: | 171 | The top reasons for refactoring were cosmetic concerns such as poor readability, variable renaming, and excessive repetition. 172 | 173 | Many respondents also used the freeform “other answer” field to state that generated code often just didn't work as intended. 174 | 175 | - key: usage.ai_code_generation_frequency.takeaway.ai2025 176 | t: | 177 | This chart shows just how embedded AI has become in our daily workflows, with 46% of respondents using AI to generate code multiple times per day or more. 178 | 179 | - key: usage.ai_other_tasks_frequency.takeaway.ai2025 180 | t: | 181 | Compared to code generation, AI is used for other tasks (research, summarization, translation, etc.) relatively less often – which makes sense given that coding is still what we spend the most time on. 182 | 183 | - key: usage.ai_generated_code_type.takeaway.ai2025 184 | t: | 185 | The most commonly generated code type proved to be helper functions, followed by frontend components, both of which are fairly self-contained, making them good candidates for code generation. 186 | 187 | Many are also using AI to add documentation or comments to existing code, which is an unexpected use case. 188 | 189 | - key: usage.ai_personal_expenses.takeaway.ai2025 190 | t: | 191 | I'm not sure where AI companies are getting the cash to run their server farms, but one thing's for sure – it's not from individual developers, with a majority of respondents not currently spending any of their own money on AI tools and services. 192 | 193 | - key: usage.ai_company_expenses.takeaway.ai2025 194 | t: | 195 | Interestingly, company expenses follow a horseshoe pattern, with companies not spending anything on AI – unless they're spending over $5000! Whether this pricing model will prove sustainable for AI companies will remain to be seen. 196 | 197 | Note that respondents also pointed out in freeform comments that they might not always have access to this information. 198 | 199 | - key: usage.industry_sector.takeaway.ai2025 200 | t: | 201 | Don't hesitate to use our built-in **Query Builder** on any *other* chart to filter these survey results according to any specific industry sector. 202 | 203 | - key: usage.ai_running_locally.takeaway.ai2025 204 | t: | 205 | Many respondents have already tried running their own AI models locally, despite the difficulties involved, and many others are interesting in trying. 206 | 207 | This could become a key differentiator for new models, as this shows a strong demand for being more in control of your AI tools. 208 | 209 | - key: usage.ai_pain_points.takeaway.ai2025 210 | t: | 211 | Poor overall code quality ranked first when it comes to AI pain points. 212 | 213 | - key: usage.ai_missing_features.takeaway.ai2025 214 | t: | 215 | The main thing missing from today's models is the ability to keep entire codebases in memory, something that will prove key if AI tools are meant to help us maintain applications, and not just prototype them. 216 | 217 | - key: usage.ai_happiness.takeaway.ai2025 218 | t: | 219 | Despite the various pain points highlighted by the survey, respondents were overall quite positive on the state of AI for web development in 2025. 220 | aliases: 221 | - happiness.ai_happiness.takeaway.ai2025 222 | 223 | # resources 224 | 225 | - key: sections.resources.description.ai2025 226 | t: How developers are learning about AI 227 | 228 | # opinions 229 | 230 | - key: sections.opinions.description.ai2025 231 | t: Asking deeper questions 232 | 233 | - key: opinions.integral_workflow.takeaway.ai2025 234 | t: | 235 | Even though AI tools aren't perfect by any means, there's a strong concensus among respondents that they have already become an integral part of their daily coding workflow. 236 | 237 | - key: opinions.more_productive.takeaway.ai2025 238 | t: | 239 | Similarly, a majority of respondents agree that AI tools have successfully made them more productive. 240 | 241 | - key: opinions.ai_reliance_worse_developers.takeaway.ai2025 242 | t: | 243 | Yet this productivity gain today may come at a cost tommorrow: excessive reliance on AI tools may well end up lowering the overall skill level of the entire industry! 244 | 245 | - key: opinions.job_security_threat.takeaway.ai2025 246 | t: | 247 | In any case, the average respondent isn't worried about AI coming for their job – time will tell if this is confidence or hubris. 248 | 249 | - key: opinions.existential_risk.takeaway.ai2025 250 | t: | 251 | Respondents were split on the topic of AI safety, with many (myself included) not quite sure yet whether AI really poses a risk to humanity or not. 252 | 253 | - key: opinions.reach_agi.takeaway.ai2025 254 | t: | 255 | “AGI” is a nebulous target that it often touted as being “just around the corner”. But overall, respondents remained somewhat skeptical that it would be reached within the near future. 256 | 257 | # conclusion 258 | 259 | - key: conclusion.ai2025.ashok_gelal.bio 260 | t: Developer and Founder, [Msty](https://msty.app/) 261 | 262 | - key: conclusion.ai2025.ashok_gelal 263 | t: | 264 | Just like many of us, I was very skeptical of AI at first. Was AI a real game-changer, or just another fad like NFTs, Crypto, Web3, and so many others? 265 | 266 | Then OpenAI came out with ChatGPT. And when, shortly after, my 7th-grader niece mentioned their teacher was making plans to use it in the classroom, I knew something was different this time around. 267 | 268 | And for a while there I thought OpenAI would run away with the whole market – but man, am I glad to be wrong! 269 | 270 | Recent reasoning models from DeepSeek, mind-blowing image generative capabilities from Goolge Gemini, MCP Tools from Anthropic, etc. show that this is just the beginning, and that AI innovation is happening at an unprecedented pace. 271 | 272 | As someone making an app on top of these models, I am super excited to see where this is all going to take us. Will AI replace us? I'm not sure. But I believe those of us who learn how to use it will definitely have an edge. 273 | 274 | I wasn't around for the original Internet boom, so I am not going to sit this one out. Now excuse me, as I need to check out a just-announced new model that is supposed to be faster, cheaper, and better than anything else out there! 275 | 276 | ########################################################################### 277 | # Sponsors 278 | ########################################################################### 279 | 280 | - key: sponsors.google_chrome.description 281 | t: Thanks to the Google Chrome team for supporting our work. 282 | 283 | - key: sponsors.tokyodev.description 284 | t: Find your dream developer job in Japan today. 285 | 286 | - key: sponsors.neon.description 287 | t: Unleash cutting-edge AI applications with Postgres. 288 | 289 | ########################################################################### 290 | # FAQ/About 291 | ########################################################################### 292 | 293 | - key: about.content.ai2025 294 | t: | 295 | The 2025 State of Web Dev AI survey ran from February 10 to March 10 2025, and collected 4,181 responses. The results were published on April 15, 2025. The survey is run by [Devographics](https://devographics.com/), with help from invited domain experts and open-source contributors. 296 | 297 | ### Survey Goals 298 | 299 | This survey was created to identify upcoming trends in terms of using AI for web development, in order to help developers make better technological choices. 300 | 301 | ### Survey Design 302 | 303 | The survey was designed in collaboration with the community, with an open feedback period where the survey outline was discussed [on GitHub](https://github.com/Devographics/surveys/issues/278). 304 | 305 | All survey questions were optional. 306 | 307 | ### Survey Audience 308 | 309 | The survey was openly accessible online and respondents were not filtered or selected in any way. Respondents were primarily a mix of respondents from past Devographics surveys such as [State of JS](https://stateofjs.com/), [State of CSS](https://stateofcss.com/), etc. (alerted through a dedicated mailing list) and social media traffic. 310 | 311 | Although the survey was open to all developers regardless of whether they use AI or not, the topic of the survey by itself is likely to have biased the respondent set towards developers who do have an interest in AI. 312 | 313 | It should also be taken as a **snapshot of a specific subset of developers**, and is not meant to speak for the entire ecosystem. 314 | 315 | ### Project Funding 316 | 317 | Funding from this project comes from sponsorships from our partners. 318 | 319 | Any contribution or sponsorship is greatly appreciated. we would especially like to work closely with more browser vendors, since they play such a central role in the web ecosystem. 320 | 321 | ### Technical Overview 322 | 323 | You can find a more in-depth technical overview of how the surveys are run [here](https://dev.to/sachagreif/how-the-devographics-surveys-are-run-2023-edition-1p6a). 324 | -------------------------------------------------------------------------------- /graphql2022.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: general.results.description 8 | t: The 2022 edition of the annual survey about the latest trends in the GraphQL ecosystem. 9 | 10 | - key: general.livestream_announcement 11 | t: Make sure to tune in for our [special survey results livestream](https://dev.to/sachagreif/state-of-javascript-2021-livestream-24a5) on February 22! (English) 12 | 13 | ########################################################################### 14 | # Introduction 15 | ########################################################################### 16 | 17 | - key: introduction.graphql2022 18 | t: > 19 | 20 | Since being originally created at Facebook in September 2015, many developers have embraced GraphQL as a new and promising way to build APIs. 21 | 22 | 23 | Yet 7 years later, a lot of questions still remain: when do you need GraphQL exactly? Should you hand-code your GraphQL API or generate it from your database? And will it ever replace REST? 24 | 25 | 26 | To answer these questions and many more, we've created the first ever **State of GraphQL** community survey. Over 3,000 developers took part this year, and this is just the beginning. 27 | 28 | 29 | We hope you enjoy browsing the data, and make sure to check out our [GraphQL API](https://graphiql.devographics.com/) as well! 30 | 31 | 32 | 33 | 34 | ########################################################################### 35 | # Tshirt 36 | ########################################################################### 37 | 38 | - key: sections.tshirt.title 39 | t: T-shirt 40 | 41 | - key: sections.tshirt.description 42 | t: | 43 | ## Support the Survey With the State of JavaScript T-Shirt 44 | 45 | Between the bad video quality, the bulky cassettes, and having to rewind, there's not much to miss about the VHS era. But one thing we *do* miss are the amazing 90s visuals that used to adorn blank VHS tapes. 46 | 47 | But now, thanks to the talented Christopher Kirk-Nielsen you can enjoy all this retro radness while also celebrating your love for JavaScript at the same time! 48 | 49 | - key: tshirt.about 50 | t: About the T-shirt 51 | 52 | - key: tshirt.description 53 | t: | 54 | We use a high-quality, super-soft tri-blend shirt with a slim fit printed by our partners at Cotton Bureau. 55 | 56 | - key: tshirt.getit 57 | t: Get It 58 | 59 | - key: tshirt.price 60 | t: USD $29 + shipping 61 | 62 | - key: tshirt.designer.heading 63 | t: About the Designer 64 | 65 | - key: tshirt.designer.name 66 | t: Christopher Kirk-Nielsen 67 | 68 | - key: tshirt.designer.bio 69 | t: | 70 | Originally from France but now based in the United States, Chris is not just an amazing front-end developer, but also a talented illustrator who specializes in retro visuals. In fact, we encourage you to also check out his [other t-shirt designs](https://chriskirknielsen.com/designs)! 71 | 72 | ########################################################################### 73 | # Sections 74 | ########################################################################### 75 | 76 | - key: sections.user_info_graphql2022.description 77 | t: | 78 | **3,094** respondents took part in this year's survey. 79 | 80 | - key: sections.features_graphql2022.description 81 | t: | 82 | GraphQL may be a simple concept at its core, but there are many features and patterns to consider when you dig below the surface. 83 | 84 | - key: sections.libraries_graphql2022.description 85 | t: | 86 | The GraphQL ecosystem is surprisingly deep, with many competing libraries helping you set up your API. 87 | 88 | - key: sections.tools_others_graphql2022.description 89 | t: | 90 | Picking the right tools to use in combination with GraphQL can make all the difference. 91 | 92 | - key: sections.usage_graphql2022.description 93 | t: | 94 | We wanted to know not only how people use GraphQL, but also *why* they use it – as well as where GraphQL is still lacking… 95 | 96 | - key: sections.resources_graphql2022.description 97 | t: | 98 | We're sure you'll discover at least one or two new people, podcasts, or blogs to follow! 99 | 100 | ########################################################################### 101 | # Charts 102 | ########################################################################### 103 | 104 | - key: options.features_categories.graphql_language 105 | aliasFor: sections.graphql_language.title 106 | - key: options.features_categories.directives 107 | aliasFor: sections.directives.title 108 | - key: options.features_categories.security_performance 109 | aliasFor: sections.security_performance.title 110 | - key: options.features_categories.other_features 111 | aliasFor: sections.other_features.title 112 | 113 | - key: blocks.tools_quadrant.description 114 | t: | 115 | This chart shows each technology's **retention ratio** over its total **user count**. 116 | It can be divided into four quadrants: 117 | 118 | - **1**: Low usage, high retention. Technologies worth keeping an eye on. 119 | 120 | - **2**: High usage, high retention. Safe technologies to adopt. 121 | 122 | - **3**: Low usage, low retention. Technologies that are harder to recommend currently. 123 | 124 | - **4**: High usage, low retention. Reassess these technologies if you're currently using them. 125 | 126 | ########################################################################### 127 | # Notes 128 | ########################################################################### 129 | 130 | - key: blocks.gender.note 131 | t: | 132 | If you're interested in learning more, we [wrote a blog post](https://dev.to/sachagreif/is-our-survey-biased-against-women-49oj) that addresses the survey's gender dynamics. 133 | 134 | - key: blocks.css_missing_features.note 135 | t: | 136 | You can explore the full dataset of answers to this question in [this side project](https://whatsmissingfromcss.com/). 137 | 138 | - key: blocks.source.note 139 | t: > 140 | 141 | This chart aggregates a mix of referrers, URL parameters, and freeform answers. 142 | 143 | - State of JS: the [State of JS](https://stateofjs.com) mailing list. 144 | 145 | - State of CSS: the State of CSS mailing list; also matches `email`, `by email`, etc. 146 | 147 | - Work: matches `work`, `colleagues`, `coworkers`, etc. 148 | 149 | ########################################################################### 150 | # Awards 151 | ########################################################################### 152 | 153 | - key: award.feature_adoption_delta_award.comment 154 | t: With a **{value}** progression in 2021, the nullish coalescing operator (??) has quickly become an integral part of JavaScript. 155 | 156 | - key: award.tool_usage_delta_award.comment 157 | t: esbuild is barely two years old, but with a **{value}** progression over the last year it's already gaining ground. 158 | 159 | - key: award.tool_satisfaction_award.comment 160 | t: Vite takes the top spot with a sky-high **{value}** retention ratio! 161 | 162 | - key: award.tool_interest_award.comment 163 | t: With a **{value}** interest ratio, Vite once again wins the gold! 164 | 165 | - key: award.most_write_ins_award.comment 166 | t: Many questions also accepted write-in answers, and with **{value}** mentions Elm was the most popular item overall. 167 | 168 | ########################################################################### 169 | # Conclusion 170 | ########################################################################### 171 | 172 | - key: conclusion.graphql2022 173 | t: | 174 | 175 | GraphQL is truly part of how we build modern applications today. 176 | 177 | More and more companies are creating products, services, tooling, RFCs and most of that work is being done as open-source, which is fantastic to see! It's crucial for a flourishing ecosystem to have healthy competition and collaboration! 178 | 179 | As a result, the tide is changing on how we consume GraphQL on the client, with libraries such as urql and React Query being popular choices today alongside stalwarts like Apollo Client and Relay. It's also great to see GraphQL continue to grow and flourish in languages other than JavaScript – there are now stable and mature GraphQL servers and clients in almost all of the most popular programming languages! 180 | 181 | GraphQL itself is changing as well, with much anticipated changes edging closer to being officially part of the specification. We'll soon see changes with stream, defer, input polymorphism, as well as improvements around subscriptions and live queries. 182 | 183 | Moreover, there's now dedicated companies focused on GraphQL security, caching, tracing errors, deploying to the edge, abstracting databases and backends into simple schemas, and so much more that make working with GraphQL even more approachable than it ever has been before. 184 | 185 | We also recently witnessed a brand new GraphiQL release that boasts a powerful plugin ecosystem, fewer dependencies, and even dark mode! And the [GraphQL Foundation](https://graphql.org/foundation/) continues to grow with new members joining regularly to help sustain the efforts of all those involved in educating, building, and steering the future of GraphQL. 186 | 187 | GraphQL has found its place in the ecosystem, and it has an exciting future ahead! 188 | 189 | - key: conclusion.graphql2022.bio 190 | t: Senior Developer Relations @ Grafbase 191 | 192 | ########################################################################### 193 | # Picks 194 | ########################################################################### 195 | 196 | - key: picks.my_pick.graphql2022 197 | t: "My 2022 Pick: " 198 | - key: picks.intro 199 | t: We asked members of the GraphQL community to share their “pick of the year” 200 | 201 | - key: picks.jamie_barton.name 202 | t: GraphQL Mesh 203 | - key: picks.jamie_barton.bio 204 | t: Full Stack Developer & Educator 205 | - key: picks.jamie_barton.description 206 | t: | 207 | More and more people are looking for solutions to bridge the 208 | gap between all of their services. Mesh lets you do that with GraphQL, 209 | and non-GraphQL services. 210 | 211 | - key: picks.tanmai_gopal.name 212 | t: Streaming over GraphQL Subscriptions 213 | - key: picks.tanmai_gopal.bio 214 | t: CEO & co-founder at Hasura 215 | - key: picks.tanmai_gopal.description 216 | t: | 217 | Modern APIs need to handle an increasing volume of data, 218 | or fast-moving data that is a stream. 219 | Could we use GraphQL subscriptions as a streaming API? 220 | 221 | - key: picks.tim_suchanek.name 222 | t: Benjie Gillam 223 | - key: picks.tim_suchanek.bio 224 | t: Software Engineer and Entrepreneur 225 | - key: picks.tim_suchanek.description 226 | t: | 227 | Benjie is one of the main people pushing GraphQL forward. 228 | His engagement in the WG, TSC, and various foundation initiatives is second to none. 229 | 230 | - key: picks.uri_goldshtein.name 231 | t: Pothos GraphQL 232 | - key: picks.uri_goldshtein.bio 233 | t: Founder of The Guild 234 | - key: picks.uri_goldshtein.description 235 | t: | 236 | Code-first, TS schema builder. Easy to use yet powerful, plugin based and very well maintained. 237 | If you go code first, this is the one to choose. 238 | 239 | - key: picks.benjie_gillam.name 240 | t: SpecNews Podcast 241 | - key: picks.benjie_gillam.bio 242 | t: Community-funded OSS maintainer 243 | - key: picks.benjie_gillam.description 244 | t: | 245 | Latest activities from the GraphQL Working Group summarised in just 5-10 minutes per month. 246 | Cutting edge GraphQL knowledge with minimal effort! 247 | 248 | - key: picks.xxxx.name 249 | t: 250 | - key: picks.xxxx.bio 251 | t: 252 | - key: picks.xxxx.description 253 | t: | 254 | ########################################################################### 255 | # Sponsors 256 | ########################################################################### 257 | 258 | - key: sponsors.nijibox.description 259 | t: > 260 | One-stop support for UX design, creativity, and development. 261 | 262 | - key: sponsors.frontendmasters.description 263 | t: > 264 | Advance your skills with in-depth, modern front-end engineering courses. 265 | 266 | - key: sponsors.nhost.description 267 | t: > 268 | Nhost is an open source Firebase alternative with GraphQL. 269 | 270 | - key: sponsors.apollo.description 271 | t: > 272 | Apollo's supergraph empowers product and engineering teams to quickly create incredible experiences for their customers. 273 | 274 | - key: sponsors.the_guild.description 275 | t: > 276 | The Guild's open-source tools and ecosystem provides everything you need for evolving your APIs. 277 | 278 | - key: sponsors.hasura.description 279 | t: > 280 | Run Hasura locally or in the cloud, and connect it to your new or existing databases to instantly get a production-grade GraphQL API. 281 | 282 | - key: sponsors.graphql_wtf.description 283 | t: > 284 | Learn something new with GraphQL, every week. Get new episodes directly to your inbox. 285 | 286 | - key: sponsors.grafbase.description 287 | t: > 288 | Instant serverless GraphQL backends. Grafbase provides the best developer experience to deploy GraphQL APIs. 289 | 290 | ########################################################################### 291 | # FAQ/About 292 | ########################################################################### 293 | 294 | - key: about.content.graphql2022 295 | t: > 296 | The 2022 State of GraphQL survey ran from June 15, 2022 to July 15, 2022, and collected 3,094 responses. The survey is primarily run by me, [Sacha Greif](https://sachagreif.com/), with help from a team of open-source contributors and consultants. 297 | 298 | ### Survey Goals 299 | 300 | This survey, along with the [State of CSS](https://stateofcss.com/) and [State of JS](https://stateofjs.com/) surveys, was created to identify upcoming trends in the web development ecosystem in order to help developers make technological choices. 301 | 302 | 303 | Because of the relatively small sample size, this survey should be taken as a **snapshot of a subset of developers**, and is not meant to speak for the entire GraphQL ecosystem. 304 | 305 | 306 | The survey is also **not affiliated with GraphQL or Facebook**. 307 | 308 | ### Survey Design 309 | 310 | The survey was designed collaboratively, with an open feedback period where the survey contents were discussed on GitHub ([1](https://github.com/Devographics/Monorepo/issues/86), [2](https://github.com/Devographics/Monorepo/issues/90)). All survey questions were optional. 311 | 312 | ### Survey Audience 313 | 314 | The survey was openly accessible online and respondents were not filtered or selected in any way. Respondents were primarily inbound from social media traffic. 315 | 316 | ### Representativeness & Inclusivity 317 | 318 | While we believe it's important to give a voice to every community, the reality is that an open survey like this one will always struggle to properly represent everybody, especially when operating through systems that already carry their own inherent biases. 319 | 320 | 321 | In order to counter-balance this, we are implementing three distinct strategies: 322 | 323 | 324 | - **Outreach**: we always try to reach out to different organizations (such as BIPOC- or LGBTQ-focused organizations, or online teaching platforms) to try and diversify our own audience. 325 | 326 | - **Data Analysis**: through features like facets and variants, we're always trying to make it easier to surface the voices of any demographic segment, no matter how minoritized it might be in our data. 327 | 328 | - **Barrier Lowering**: making the survey too long, inaccessible, slow to load, English-only, etc. can all contribute to imposing an "effort tax" that cuts off the parts of the community that can't afford to pay it. Fixing these issues can lower the barrier to entry and in the process make our audience more diverse. 329 | 330 | 331 | ### Project Funding 332 | 333 | Funding from this project comes from a variety of sources: 334 | 335 | 336 | - **Chart Sponsorships**: members of the community can donate to the survey in exchange for having their name featured in the report. 337 | 338 | - **Sponsored Links**: the links to recommended resources at the bottom of each page are provided by our partner [Frontend Masters](https://frontendmasters.com/). 339 | 340 | - **Other Funding**: the companies listed in the "Our Partners" section on the [introduction page](/introduction) have also contributed financially or otherwise. 341 | 342 | 343 | Sponsors have no say over the survey contents or the way the results are presented, and sponsorships are only decided once all data has already been collected. 344 | 345 | ### Technical Overview 346 | 347 | You can find a more in-depth technical overview of how the surveys are run [here](https://dev.to/sachagreif/how-the-state-of-js-css-surveys-are-run-4lnb). 348 | 349 | 350 | - **Data collection**: custom [Vulcan.js](http://vulcanjs.org/) app. 351 | 352 | - **Data storage/processing**: MongoDB & MongoDB Aggregations. 353 | 354 | - **Data API**: Node.js GraphQL API. 355 | 356 | - **Results Site**: [Gatsby](https://www.gatsbyjs.com/) React app. 357 | 358 | - **Data Visualizations**: [Nivo](https://nivo.rocks/) React dataviz library. 359 | 360 | - **Type**: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [Bebas Neue](https://fonts.google.com/specimen/Bebas+Neue). 361 | 362 | - key: general.graphql2022.survey_intro 363 | t: | 364 | When GraphQL was first introduced it offered a radically new way to build APIs, with more control, more granularity, and more flexibility. 365 | 366 | But that flexibility came at a price in the form of extra complexity, and a crop of frameworks, libraries, and services quickly appeared to help define better patterns and workflows. 367 | 368 | Now, for the first time ever we're surveying the GraphQL community to figure out which of these many tools are the most popular, and which features are actually being used. With your help, let's see what GraphQL has been up to in 2022! 369 | -------------------------------------------------------------------------------- /demo_survey.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | namespace: demo 3 | translations: 4 | ########################################################################### 5 | # General 6 | ########################################################################### 7 | 8 | - key: general.demo_survey.intro 9 | t: | 10 | Since being originally created at Facebook in September 2015, many developers have embraced GraphQL as a new and promising way to build APIs. 11 | 12 | Yet a lot of questions still remain: when do you need GraphQL exactly? Should you hand-code your GraphQL API or generate it from your database? And will it ever replace REST? 13 | 14 | The annual State of GraphQL developer survey aims to answer these questions, and many more! 15 | 16 | - key: general.demo_survey.description 17 | t: The annual developer survey of the GraphQL ecosystem 18 | ########################################################################### 19 | # Survey 20 | ########################################################################### 21 | 22 | - key: features.graphql_features_intro 23 | t: > 24 | Welcome to the survey! This first part is all about figuring out 25 | which **features** of GraphQL and its ecosystem you know about. 26 | And if you know about something but haven't yet used it, that's fine too! 27 | 28 | - key: tools.graphql_tools_intro 29 | t: > 30 | The next couple sections focus on the **libraries** and **services** that make up 31 | the GraphQL ecosystem. Let us know what you're excited about! 32 | 33 | - key: usage.bracket_intro 34 | t: > 35 | The next question uses a special **bracket** format! For each match-up, pick the item 36 | that you feel is most important to you (note that match-ups are randomized for every respondent). 37 | 38 | ########################################################################### 39 | # Sections 40 | ########################################################################### 41 | 42 | - key: sections.graphql_language.title 43 | t: Language 44 | - key: sections.graphql_language.description 45 | t: The vocabulary of GraphQL. 46 | - key: sections.directives.title 47 | t: Directives 48 | - key: sections.directives.description 49 | t: Augmenting your GraphQL fields. 50 | - key: sections.security_performance.title 51 | t: Security & Performance 52 | - key: sections.security_performance.description 53 | t: Making your API more robust. 54 | - key: sections.other_features.title 55 | t: Other Features 56 | 57 | - key: sections.graphql_servers.title 58 | t: GraphQL Servers 59 | - key: sections.graphql_servers.description 60 | t: How you power your API. 61 | - key: sections.graphql_clients.title 62 | t: GraphQL Clients 63 | - key: sections.graphql_clients.description 64 | t: Querying your API. 65 | - key: sections.api_generators.title 66 | t: API Generators 67 | - key: sections.api_generators.description 68 | t: ORMs, CMSes, and other tools that create an API for you. 69 | - key: sections.web_frameworks.title 70 | t: Web Frameworks 71 | - key: sections.web_frameworks.description 72 | t: Web frameworks that you use in conjunction with GraphQL. 73 | - key: sections.graphql_code_generators.title 74 | t: Code & Schema Generators 75 | - key: sections.graphql_code_generators.description 76 | t: Generators, schema builders, and other libraries that write part of your code for you. 77 | - key: sections.schema_builders.title 78 | t: Schema Builders 79 | - key: sections.schema_builders.description 80 | t: Libraries and utilities that help you build all or part of your GraphQL schema. 81 | - key: sections.usage_graphql.title 82 | t: GraphQL Usage 83 | - key: sections.usage_graphql.description 84 | t: How you use GraphQL. 85 | 86 | - key: sections.tools_others.title 87 | t: Other Tools 88 | - key: sections.tools_others.description 89 | t: Other GraphQL tools. 90 | 91 | - key: sections.resources_graphql.title 92 | t: Resources 93 | - key: sections.resources_graphql.description 94 | t: What GraphQL resources do you consult? 95 | 96 | ########################################################################### 97 | # Features 98 | ########################################################################### 99 | 100 | # common features 101 | - key: features.custom_directives 102 | t: Custom Directives 103 | - key: features.custom_scalars 104 | t: Custom Scalars 105 | - key: features.fragments 106 | t: Fragments 107 | - key: features.unions 108 | t: Unions 109 | - key: features.interfaces 110 | t: Interfaces 111 | 112 | # directives 113 | - key: features.at_skip 114 | t: "@skip" 115 | - key: features.at_include 116 | t: "@include" 117 | - key: features.at_deprecated 118 | t: "@deprecated" 119 | - key: features.at_specified_by 120 | t: "@specifiedBy" 121 | - key: features.at_defer 122 | t: "@defer" 123 | - key: features.at_stream 124 | t: "@stream" 125 | 126 | # security & performance 127 | - key: features.persisted_queries 128 | t: Persisted Queries 129 | - key: features.query_allowlisting 130 | t: Query Allow-listing 131 | - key: features.query_allowlisting.description 132 | t: Only accept queries from a predefined list. 133 | 134 | - key: features.query_timeouts 135 | t: Query Timeouts 136 | - key: features.query_rate_limit 137 | t: Query Rate Limiting 138 | - key: features.query_depth_limit 139 | t: Query Depth Limiting 140 | - key: features.query_amount_limit 141 | t: Query Amount Limiting 142 | - key: features.query_amount_limiting.description 143 | t: Put a ceiling on any pagination count passed as a query argument. 144 | - key: features.query_cost_analysis 145 | t: Query Cost Analysis 146 | - key: features.query_cost_analysis.description 147 | t: Analyzing a set of factors before deciding whether to allow a query. 148 | 149 | - key: features.disabling_introspection 150 | t: Disabling Introspection 151 | - key: features.disabling_introspection.description 152 | t: Disabling introspection in production. 153 | - key: features.ip_allowlisting 154 | t: IP Allow-listing 155 | - key: features.ip_allowlisting.description 156 | t: Only allowing a predefined set of IP addresses to access an API. 157 | - key: features.require_authentication 158 | t: Requiring Authentication 159 | - key: features.require_authentication.description 160 | t: Require authentication before any API access. 161 | 162 | # other features 163 | - key: features.graphql_subscriptions 164 | t: GraphQL Subscriptions 165 | - key: features.live_queries 166 | t: Live Queries 167 | - key: features.apollo_federation 168 | t: Apollo Federation 169 | - key: features.schema_stitching 170 | t: Schema Stitching 171 | 172 | ########################################################################### 173 | # Tools 174 | ########################################################################### 175 | 176 | - key: tools.no_client 177 | t: No Client 178 | - key: tools.no_client.description 179 | t: No dedicated GraphQL client (raw HTTP requests with Fetch, Axios, etc.) 180 | 181 | ########################################################################### 182 | # Other Tools 183 | ########################################################################### 184 | 185 | - key: tools_others.server_languages 186 | t: Server Languages 187 | - key: tools_others.server_languages.description 188 | t: Which language(s) do you use to write your GraphQL back-ends? 189 | - key: tools_others.server_languages.others 190 | t: Other Server Languages 191 | 192 | - key: tools_others.combining_schemas 193 | t: Combining Schemas 194 | - key: tools_others.combining_schemas.description 195 | t: Which tools do you use to combine, aggregate, or merge GraphQL schemas from different APIs? 196 | - key: tools_others.combining_schemas.others 197 | t: Other tools for combining schemas 198 | 199 | - key: tools_others.graphql_ides 200 | t: GraphQL IDEs 201 | - key: tools_others.graphql_ides.description 202 | t: Apps and services that help you query your GraphQL API. 203 | - key: tools_others.graphql_ides.others 204 | t: Other GraphQL IDEs 205 | 206 | - key: tools_others.web_frameworks 207 | t: Web Frameworks 208 | - key: tools_others.web_frameworks.description 209 | t: Web frameworks that you use in conjunction with GraphQL. 210 | - key: tools_others.web_frameworks.others 211 | t: Other Web Frameworks 212 | 213 | - key: tools_others.databases 214 | t: Databases 215 | - key: tools_others.databases.description 216 | t: Which databases do you use in conjunction with GraphQL? 217 | - key: tools_others.databases.others 218 | t: Other Databases 219 | 220 | - key: tools_others.other_tools 221 | t: Other GraphQL Tools 222 | - key: tools_others.other_tools.description 223 | t: Other tools, libraries, or services you use 224 | - key: tools_others.other_tools.others 225 | t: Other GraphQL tools not previously mentioned 226 | 227 | ########################################################################### 228 | # Usage 229 | ########################################################################### 230 | 231 | - key: usage.graphql_experience 232 | t: GraphQL Experience 233 | - key: usage.graphql_experience.description 234 | t: How long have you been using GraphQL for? 235 | 236 | - key: usage.api_type 237 | t: API Types 238 | - key: usage.api_type.description 239 | t: What kind of APIs do you use GraphQL for? 240 | - key: usage.api_type.others 241 | t: Other kind of APIs 242 | 243 | - key: usage.client_type 244 | t: API Clients 245 | - key: usage.client_type.description 246 | t: What kind of clients connect to your APIs? 247 | - key: usage.client_type.others 248 | t: Other types of clients 249 | 250 | - key: usage.data_sources 251 | t: Data Sources 252 | - key: usage.data_sources.description 253 | t: Which kind of data sources are consumed by your GraphQL APIs? 254 | - key: usage.data_sources.others 255 | t: Other data sources 256 | 257 | - key: usage.code_generation_type 258 | t: Code Generation Type 259 | - key: usage.code_generation_type.description 260 | t: If you use code generation, which approaches do you tend to prefer? 261 | - key: usage.code_generation_type.others 262 | t: Other types of code generation 263 | - key: usage.code_generation_target 264 | t: Code Generation Target 265 | - key: usage.code_generation_target.description 266 | t: Which part(s) of your codebase do you generate programatically? 267 | - key: usage.code_generation_target.others 268 | t: Other code generation targets 269 | 270 | - key: usage.industry_sector_graphql 271 | aliasFor: usage.industry_sector 272 | - key: usage.industry_sector_graphql.description 273 | t: Which industry sector(s) are you using GraphQL in? 274 | - key: usage.industry_sector_graphql.others 275 | aliasFor: usage.industry_sector.others 276 | 277 | - key: usage.graphql_strong_points 278 | t: GraphQL Strong Points 279 | - key: usage.graphql_strong_points.description 280 | t: What are the main reasons why you enjoy using GraphQL? 281 | - key: usage.graphql_strong_points.others 282 | t: Other GraphQL Strong Points 283 | 284 | - key: usage.graphql_pain_points 285 | t: GraphQL Pain Points 286 | - key: usage.graphql_pain_points.description 287 | t: What are your main pain points when using GraphQL? 288 | - key: usage.graphql_pain_points.others 289 | t: Other GraphQL Pain Points 290 | 291 | - key: happiness.graphql_servers 292 | t: How happy are you with the overall state of GraphQL servers? 293 | - key: happiness.graphql_clients 294 | t: How happy are you with the overall state of GraphQL clients? 295 | - key: happiness.api_generators 296 | t: How happy are you with the overall state of API generators? 297 | - key: happiness.schema_builders 298 | t: How happy are you with the overall state of schema builders? 299 | - key: happiness.state_of_graphql 300 | t: How happy are you with the overall state of the GraphQL ecosystem? 301 | 302 | ########################################################################### 303 | # Opinions 304 | ########################################################################### 305 | 306 | # - key: opinions.graphql_better_than_rest 307 | # t: GraphQL is superior to REST 308 | # - key: opinions.always_prefer_graphql_apis 309 | # t: I always prefer working with GraphQL APIs 310 | 311 | ########################################################################### 312 | # Resources 313 | ########################################################################### 314 | 315 | - key: resources.first_steps_graphql 316 | t: First Steps With GraphQL 317 | - key: resources.first_steps_graphql.description 318 | t: When first starting out, how did you initially learn GraphQL? 319 | - key: resources.first_steps_graphql.others 320 | t: Other initial learning methods 321 | 322 | # sites & courses 323 | - key: resources.sites_courses_graphql 324 | aliasFor: resources.sites_courses 325 | - key: resources.sites_courses_graphql.description 326 | t: Which GraphQL-related sites/courses/etc. do you use to learn about GraphQL? 327 | 328 | # podcasts 329 | - key: resources.podcasts_graphql.others 330 | aliasFor: resources.podcasts 331 | - key: resources.podcasts_graphql.others.description 332 | t: Which GraphQL-related podcasts do you listen to? 333 | 334 | # people 335 | - key: resources.people_graphql.others 336 | aliasFor: resources.people 337 | - key: resources.people_graphql.others.description 338 | t: People you read, follow, or just want to highlight for their work in the GraphQL ecosystem. 339 | 340 | ########################################################################### 341 | # Options 342 | ########################################################################### 343 | 344 | - key: options.graphql_experience.range_less_than_1 345 | t: Less than one year 346 | - key: options.graphql_experience.range_1_2 347 | t: 1 to 2 years 348 | - key: options.graphql_experience.range_3_5 349 | t: 3 to 5 years 350 | - key: options.graphql_experience.range_6_10 351 | t: 6 to 10 years 352 | - key: options.graphql_experience.range_more_than_10 353 | t: More than 10 years 354 | 355 | - key: options.api_type.public_apis 356 | t: Publicly-available APIs intended for third-party developers 357 | - key: options.api_type.personal_apis 358 | t: Exposed APIs intended for your own website and/or apps 359 | - key: options.api_type.private_apis 360 | t: Private, unexposed APIs for internal usage 361 | 362 | - key: options.client_type.browsers 363 | t: Browsers 364 | - key: options.client_type.mobile_devices 365 | t: Native Mobile Apps 366 | - key: options.client_type.desktop_apps 367 | t: Native Desktop Apps 368 | - key: options.client_type.other_servers 369 | t: Other Servers 370 | 371 | - key: options.data_sources.static_files 372 | t: Static files (YAML, Markdown, etc.) 373 | - key: options.data_sources.databases 374 | t: Databases 375 | - key: options.data_sources.spreadsheets 376 | t: Spreadsheets 377 | - key: options.data_sources.cmses 378 | t: CMSes 379 | - key: options.data_sources.rest_apis 380 | t: REST APIs (Swagger/OpenAPI, json-schema, oData, etc.) 381 | - key: options.data_sources.other_graphql_apis 382 | t: Other GraphQL APIs 383 | - key: options.data_sources.other_api_protocols 384 | t: Other API Protocols (gRPC, SOAP, Apache Thrift, etc.) 385 | 386 | - key: options.code_generation_type.code_first 387 | t: Code-first (JS, TS, JSON, etc.) 388 | - key: options.code_generation_type.schema_first 389 | t: Schema-first (GraphQL SDL-first) 390 | - key: options.code_generation_type.database_first 391 | t: Database-first 392 | 393 | - key: options.code_generation_target.graphql_schema 394 | t: GraphQL schema (SDL) 395 | - key: options.code_generation_target.non_graphql_typings 396 | t: Non-GraphQL (e.g. TypeScript) typings 397 | - key: options.code_generation_target.server_resolvers 398 | t: Server resolvers 399 | - key: options.code_generation_target.fragments_or_queries 400 | t: Client-side fragments and/or queries 401 | - key: options.code_generation_target.client_code 402 | t: Other client-side code (e.g. React hooks) 403 | 404 | - key: options.graphql_strong_points.avoiding_overfetching 405 | t: Avoiding Over-fetching 406 | - key: options.graphql_strong_points.avoiding_overfetching.description 407 | t: Keep API responses smaller by specifying exactly the data you need. 408 | - key: options.graphql_strong_points.introspection 409 | t: Introspection & API Documentation 410 | - key: options.graphql_strong_points.introspection.description 411 | t: Create self-documenting APIs that improve the developer experience. 412 | - key: options.graphql_strong_points.tooling_ecosystem 413 | t: Tooling & Ecosystem 414 | - key: options.graphql_strong_points.tooling_ecosystem.description 415 | t: The different tools, services, and libraries that use GraphQL. 416 | - key: options.graphql_strong_points.type_checking 417 | t: Type-checking 418 | - key: options.graphql_strong_points.type_checking.description 419 | t: Enforcing and validating types for every object in the API. 420 | - key: options.graphql_strong_points.api_aggregation 421 | t: Combining Different APIs 422 | - key: options.graphql_strong_points.api_aggregation.description 423 | t: Being able to combine together different API schemas. 424 | - key: options.graphql_strong_points.aggregating_requests 425 | t: Aggregating Requests 426 | - key: options.graphql_strong_points.aggregating_requests.description 427 | t: Only ever have to make a single request from the client. 428 | - key: options.graphql_strong_points.community 429 | t: Community 430 | - key: options.graphql_strong_points.community.description 431 | t: The people who are active in the GraphQL space. 432 | - key: options.graphql_strong_points.fragment_colocation 433 | t: Fragment Colocation 434 | - key: options.graphql_strong_points.fragment_colocation.description 435 | t: Being able to colocate a component's data requirements next to it. 436 | 437 | - key: options.graphql_pain_points.performance 438 | t: Performance 439 | - key: options.graphql_pain_points.performance.description 440 | t: Performance issues such as the n+1 problem. 441 | - key: options.graphql_pain_points.security 442 | t: Security 443 | - key: options.graphql_pain_points.security.description 444 | t: Security issues such as infinitely nested queries. 445 | - key: options.graphql_pain_points.combining_schemas 446 | t: Combining Different Schemas 447 | - key: options.graphql_pain_points.combining_schemas.description 448 | t: Being able to combine together different API schemas. 449 | - key: options.graphql_pain_points.api_versioning 450 | t: API Versioning 451 | - key: options.graphql_pain_points.api_versioning.description 452 | t: Handling deprecated fields and other versioning concerns. 453 | - key: options.graphql_pain_points.file_upload 454 | t: File Upload 455 | - key: options.graphql_pain_points.file_upload.description 456 | t: Being able to upload files through your GraphQL API. 457 | - key: options.graphql_pain_points.testing 458 | t: Testing 459 | - key: options.graphql_pain_points.testing.description 460 | t: Testing your GraphQL API. 461 | - key: options.graphql_pain_points.error_handling 462 | t: Error Handling 463 | - key: options.graphql_pain_points.error_handling.description 464 | t: Returning errors and managing them on the client. 465 | - key: options.graphql_pain_points.client_side_caching 466 | t: Client-side Caching 467 | - key: options.graphql_pain_points.client_side_caching.description 468 | t: Caching data on the client, updating the cache, optimistic UI, etc. 469 | 470 | # learning methods 471 | - key: options.first_steps_graphql.books 472 | t: Books 473 | - key: options.first_steps_graphql.videos 474 | t: Videos & screencasts 475 | - key: options.first_steps_graphql.school 476 | t: School & higher education 477 | - key: options.first_steps_graphql.courses_free 478 | t: Online courses (free) 479 | - key: options.first_steps_graphql.courses_paid 480 | t: Online courses (paid) 481 | - key: options.first_steps_graphql.podcasts 482 | t: Podcasts 483 | - key: options.first_steps_graphql.bootcamp 484 | t: Coding bootcamp 485 | - key: options.first_steps_graphql.on_the_job 486 | t: On-the-job training 487 | - key: options.first_steps_graphql.self_directed 488 | t: Self-directed learning (Google, Stack Overflow, etc.) 489 | - key: options.first_steps_graphql.mentoring 490 | t: Mentoring 491 | -------------------------------------------------------------------------------- /state_of_graphql.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | namespace: graphql 3 | translations: 4 | ########################################################################### 5 | # General 6 | ########################################################################### 7 | 8 | - key: general.state_of_graphql.intro 9 | t: | 10 | Since being originally created at Facebook in September 2015, many developers have embraced GraphQL as a new and promising way to build APIs. 11 | 12 | Yet a lot of questions still remain: when do you need GraphQL exactly? Should you hand-code your GraphQL API or generate it from your database? And will it ever replace REST? 13 | 14 | The annual State of GraphQL developer survey aims to answer these questions, and many more! 15 | 16 | - key: general.state_of_graphql.description 17 | t: The annual developer survey of the GraphQL ecosystem 18 | ########################################################################### 19 | # Survey 20 | ########################################################################### 21 | 22 | - key: features.graphql_features_intro 23 | t: > 24 | Welcome to the survey! This first part is all about figuring out 25 | which **features** of GraphQL and its ecosystem you know about. 26 | And if you know about something but haven't yet used it, that's fine too! 27 | 28 | - key: tools.graphql_tools_intro 29 | t: > 30 | The next couple sections focus on the **libraries** and **services** that make up 31 | the GraphQL ecosystem. Let us know what you're excited about! 32 | 33 | - key: usage.bracket_intro 34 | t: > 35 | The next question uses a special **bracket** format! For each match-up, pick the item 36 | that you feel is most important to you (note that match-ups are randomized for every respondent). 37 | 38 | ########################################################################### 39 | # Sections 40 | ########################################################################### 41 | 42 | - key: sections.graphql_language.title 43 | t: Language 44 | - key: sections.graphql_language.description 45 | t: The vocabulary of GraphQL. 46 | - key: sections.directives.title 47 | t: Directives 48 | - key: sections.directives.description 49 | t: Augmenting your GraphQL fields. 50 | - key: sections.security_performance.title 51 | t: Security & Performance 52 | - key: sections.security_performance.description 53 | t: Making your API more robust. 54 | - key: sections.other_features.title 55 | t: Other Features 56 | 57 | - key: sections.graphql_servers.title 58 | t: GraphQL Servers 59 | - key: sections.graphql_servers.description 60 | t: How you power your API. 61 | - key: sections.graphql_clients.title 62 | t: GraphQL Clients 63 | - key: sections.graphql_clients.description 64 | t: Querying your API. 65 | - key: sections.api_generators.title 66 | t: API Generators 67 | - key: sections.api_generators.description 68 | t: ORMs, CMSes, and other tools that create an API for you. 69 | - key: sections.web_frameworks.title 70 | t: Web Frameworks 71 | - key: sections.web_frameworks.description 72 | t: Web frameworks that you use in conjunction with GraphQL. 73 | - key: sections.graphql_code_generators.title 74 | t: Code & Schema Generators 75 | - key: sections.graphql_code_generators.description 76 | t: Generators, schema builders, and other libraries that write part of your code for you. 77 | - key: sections.schema_builders.title 78 | t: Schema Builders 79 | - key: sections.schema_builders.description 80 | t: Libraries and utilities that help you build all or part of your GraphQL schema. 81 | - key: sections.usage_graphql.title 82 | t: GraphQL Usage 83 | - key: sections.usage_graphql.description 84 | t: How you use GraphQL. 85 | 86 | - key: sections.tools_others.title 87 | t: Other Tools 88 | - key: sections.tools_others.description 89 | t: Other GraphQL tools. 90 | 91 | - key: sections.resources_graphql.title 92 | t: Resources 93 | - key: sections.resources_graphql.description 94 | t: What GraphQL resources do you consult? 95 | 96 | ########################################################################### 97 | # Features 98 | ########################################################################### 99 | 100 | # common features 101 | - key: features.custom_directives 102 | t: Custom Directives 103 | - key: features.custom_scalars 104 | t: Custom Scalars 105 | - key: features.fragments 106 | t: Fragments 107 | - key: features.unions 108 | t: Unions 109 | - key: features.interfaces 110 | t: Interfaces 111 | 112 | # directives 113 | - key: features.at_skip 114 | t: '@skip' 115 | - key: features.at_include 116 | t: '@include' 117 | - key: features.at_deprecated 118 | t: '@deprecated' 119 | - key: features.at_specified_by 120 | t: '@specifiedBy' 121 | - key: features.at_defer 122 | t: '@defer' 123 | - key: features.at_stream 124 | t: '@stream' 125 | 126 | # security & performance 127 | - key: features.persisted_queries 128 | t: Persisted Queries 129 | - key: features.query_allowlisting 130 | t: Query Allow-listing 131 | - key: features.query_allowlisting.description 132 | t: Only accept queries from a predefined list. 133 | 134 | - key: features.query_timeouts 135 | t: Query Timeouts 136 | - key: features.query_rate_limit 137 | t: Query Rate Limiting 138 | - key: features.query_depth_limit 139 | t: Query Depth Limiting 140 | - key: features.query_amount_limit 141 | t: Query Amount Limiting 142 | - key: features.query_amount_limiting.description 143 | t: Put a ceiling on any pagination count passed as a query argument. 144 | - key: features.query_cost_analysis 145 | t: Query Cost Analysis 146 | - key: features.query_cost_analysis.description 147 | t: Analyzing a set of factors before deciding whether to allow a query. 148 | 149 | - key: features.disabling_introspection 150 | t: Disabling Introspection 151 | - key: features.disabling_introspection.description 152 | t: Disabling introspection in production. 153 | - key: features.ip_allowlisting 154 | t: IP Allow-listing 155 | - key: features.ip_allowlisting.description 156 | t: Only allowing a predefined set of IP addresses to access an API. 157 | - key: features.require_authentication 158 | t: Requiring Authentication 159 | - key: features.require_authentication.description 160 | t: Require authentication before any API access. 161 | 162 | # other features 163 | - key: features.graphql_subscriptions 164 | t: GraphQL Subscriptions 165 | - key: features.live_queries 166 | t: Live Queries 167 | - key: features.apollo_federation 168 | t: Apollo Federation 169 | - key: features.schema_stitching 170 | t: Schema Stitching 171 | 172 | ########################################################################### 173 | # Tools 174 | ########################################################################### 175 | 176 | - key: tools.no_client 177 | t: No Client 178 | - key: tools.no_client.description 179 | t: No dedicated GraphQL client (raw HTTP requests with Fetch, Axios, etc.) 180 | 181 | ########################################################################### 182 | # Other Tools 183 | ########################################################################### 184 | 185 | - key: tools_others.server_languages 186 | t: Server Languages 187 | - key: tools_others.server_languages.description 188 | t: Which language(s) do you use to write your GraphQL back-ends? 189 | - key: tools_others.server_languages.others 190 | t: Other Server Languages 191 | 192 | - key: tools_others.combining_schemas 193 | t: Combining Schemas 194 | - key: tools_others.combining_schemas.description 195 | t: Which tools do you use to combine, aggregate, or merge GraphQL schemas from different APIs? 196 | - key: tools_others.combining_schemas.others 197 | t: Other tools for combining schemas 198 | 199 | - key: tools_others.graphql_ides 200 | t: GraphQL IDEs 201 | - key: tools_others.graphql_ides.description 202 | t: Apps and services that help you query your GraphQL API. 203 | - key: tools_others.graphql_ides.others 204 | t: Other GraphQL IDEs 205 | 206 | - key: tools_others.web_frameworks 207 | t: Web Frameworks 208 | - key: tools_others.web_frameworks.description 209 | t: Web frameworks that you use in conjunction with GraphQL. 210 | - key: tools_others.web_frameworks.others 211 | t: Other Web Frameworks 212 | 213 | - key: tools_others.databases 214 | t: Databases 215 | - key: tools_others.databases.description 216 | t: Which databases do you use in conjunction with GraphQL? 217 | - key: tools_others.databases.others 218 | t: Other Databases 219 | 220 | - key: tools_others.other_tools 221 | t: Other GraphQL Tools 222 | - key: tools_others.other_tools.description 223 | t: Other tools, libraries, or services you use 224 | - key: tools_others.other_tools.others 225 | t: Other GraphQL tools not previously mentioned 226 | 227 | ########################################################################### 228 | # Usage 229 | ########################################################################### 230 | 231 | - key: usage.graphql_experience 232 | t: GraphQL Experience 233 | - key: usage.graphql_experience.description 234 | t: How long have you been using GraphQL for? 235 | 236 | - key: usage.api_type 237 | t: API Types 238 | - key: usage.api_type.description 239 | t: What kind of APIs do you use GraphQL for? 240 | - key: usage.api_type.others 241 | t: Other kind of APIs 242 | 243 | - key: usage.client_type 244 | t: API Clients 245 | - key: usage.client_type.description 246 | t: What kind of clients connect to your APIs? 247 | - key: usage.client_type.others 248 | t: Other types of clients 249 | 250 | - key: usage.data_sources 251 | t: Data Sources 252 | - key: usage.data_sources.description 253 | t: Which kind of data sources are consumed by your GraphQL APIs? 254 | - key: usage.data_sources.others 255 | t: Other data sources 256 | 257 | - key: usage.code_generation_type 258 | t: Code Generation Type 259 | - key: usage.code_generation_type.description 260 | t: If you use code generation, which approaches do you tend to prefer? 261 | - key: usage.code_generation_type.others 262 | t: Other types of code generation 263 | - key: usage.code_generation_target 264 | t: Code Generation Target 265 | - key: usage.code_generation_target.description 266 | t: Which part(s) of your codebase do you generate programatically? 267 | - key: usage.code_generation_target.others 268 | t: Other code generation targets 269 | 270 | - key: usage.industry_sector_graphql 271 | aliasFor: usage.industry_sector 272 | - key: usage.industry_sector_graphql.description 273 | t: Which industry sector(s) are you using GraphQL in? 274 | - key: usage.industry_sector_graphql.others 275 | aliasFor: usage.industry_sector.others 276 | 277 | - key: usage.graphql_strong_points 278 | t: GraphQL Strong Points 279 | - key: usage.graphql_strong_points.description 280 | t: What are the main reasons why you enjoy using GraphQL? 281 | - key: usage.graphql_strong_points.others 282 | t: Other GraphQL Strong Points 283 | 284 | - key: usage.graphql_pain_points 285 | t: GraphQL Pain Points 286 | - key: usage.graphql_pain_points.description 287 | t: What are your main pain points when using GraphQL? 288 | - key: usage.graphql_pain_points.others 289 | t: Other GraphQL Pain Points 290 | 291 | - key: happiness.graphql_servers 292 | t: How happy are you with the overall state of GraphQL servers? 293 | - key: happiness.graphql_clients 294 | t: How happy are you with the overall state of GraphQL clients? 295 | - key: happiness.api_generators 296 | t: How happy are you with the overall state of API generators? 297 | - key: happiness.schema_builders 298 | t: How happy are you with the overall state of schema builders? 299 | - key: happiness.state_of_graphql 300 | t: How happy are you with the overall state of the GraphQL ecosystem? 301 | 302 | ########################################################################### 303 | # Opinions 304 | ########################################################################### 305 | 306 | # - key: opinions.graphql_better_than_rest 307 | # t: GraphQL is superior to REST 308 | # - key: opinions.always_prefer_graphql_apis 309 | # t: I always prefer working with GraphQL APIs 310 | 311 | ########################################################################### 312 | # Resources 313 | ########################################################################### 314 | 315 | - key: resources.first_steps_graphql 316 | t: First Steps With GraphQL 317 | - key: resources.first_steps_graphql.description 318 | t: When first starting out, how did you initially learn GraphQL? 319 | - key: resources.first_steps_graphql.others 320 | t: Other initial learning methods 321 | 322 | # sites & courses 323 | - key: resources.sites_courses_graphql 324 | aliasFor: resources.sites_courses 325 | - key: resources.sites_courses_graphql.description 326 | t: Which GraphQL-related sites/courses/etc. do you use to learn about GraphQL? 327 | 328 | # podcasts 329 | - key: resources.podcasts_graphql.others 330 | aliasFor: resources.podcasts 331 | - key: resources.podcasts_graphql.others.description 332 | t: Which GraphQL-related podcasts do you listen to? 333 | 334 | # people 335 | - key: resources.people_graphql.others 336 | aliasFor: resources.people 337 | - key: resources.people_graphql.others.description 338 | t: People you read, follow, or just want to highlight for their work in the GraphQL ecosystem. 339 | 340 | ########################################################################### 341 | # Options 342 | ########################################################################### 343 | 344 | - key: options.graphql_experience.range_less_than_1 345 | t: Less than one year 346 | - key: options.graphql_experience.range_1_2 347 | t: 1 to 2 years 348 | - key: options.graphql_experience.range_3_5 349 | t: 3 to 5 years 350 | - key: options.graphql_experience.range_6_10 351 | t: 6 to 10 years 352 | - key: options.graphql_experience.range_more_than_10 353 | t: More than 10 years 354 | 355 | - key: options.api_type.public_apis 356 | t: Publicly-available APIs intended for third-party developers 357 | - key: options.api_type.personal_apis 358 | t: Exposed APIs intended for your own website and/or apps 359 | - key: options.api_type.private_apis 360 | t: Private, unexposed APIs for internal usage 361 | 362 | - key: options.client_type.browsers 363 | t: Browsers 364 | - key: options.client_type.mobile_devices 365 | t: Native Mobile Apps 366 | - key: options.client_type.desktop_apps 367 | t: Native Desktop Apps 368 | - key: options.client_type.other_servers 369 | t: Other Servers 370 | 371 | - key: options.data_sources.static_files 372 | t: Static files (YAML, Markdown, etc.) 373 | - key: options.data_sources.databases 374 | t: Databases 375 | - key: options.data_sources.spreadsheets 376 | t: Spreadsheets 377 | - key: options.data_sources.cmses 378 | t: CMSes 379 | - key: options.data_sources.rest_apis 380 | t: REST APIs (Swagger/OpenAPI, json-schema, oData, etc.) 381 | - key: options.data_sources.other_graphql_apis 382 | t: Other GraphQL APIs 383 | - key: options.data_sources.other_api_protocols 384 | t: Other API Protocols (gRPC, SOAP, Apache Thrift, etc.) 385 | 386 | - key: options.code_generation_type.code_first 387 | t: Code-first (JS, TS, JSON, etc.) 388 | - key: options.code_generation_type.schema_first 389 | t: Schema-first (GraphQL SDL-first) 390 | - key: options.code_generation_type.database_first 391 | t: Database-first 392 | 393 | - key: options.code_generation_target.graphql_schema 394 | t: GraphQL schema (SDL) 395 | - key: options.code_generation_target.non_graphql_typings 396 | t: Non-GraphQL (e.g. TypeScript) typings 397 | - key: options.code_generation_target.server_resolvers 398 | t: Server resolvers 399 | - key: options.code_generation_target.fragments_or_queries 400 | t: Client-side fragments and/or queries 401 | - key: options.code_generation_target.client_code 402 | t: Other client-side code (e.g. React hooks) 403 | 404 | - key: options.graphql_strong_points.avoiding_overfetching 405 | t: Avoiding Over-fetching 406 | - key: options.graphql_strong_points.avoiding_overfetching.description 407 | t: Keep API responses smaller by specifying exactly the data you need. 408 | - key: options.graphql_strong_points.introspection 409 | t: Introspection & API Documentation 410 | - key: options.graphql_strong_points.introspection.description 411 | t: Create self-documenting APIs that improve the developer experience. 412 | - key: options.graphql_strong_points.tooling_ecosystem 413 | t: Tooling & Ecosystem 414 | - key: options.graphql_strong_points.tooling_ecosystem.description 415 | t: The different tools, services, and libraries that use GraphQL. 416 | - key: options.graphql_strong_points.type_checking 417 | t: Type-checking 418 | - key: options.graphql_strong_points.type_checking.description 419 | t: Enforcing and validating types for every object in the API. 420 | - key: options.graphql_strong_points.api_aggregation 421 | t: Combining Different APIs 422 | - key: options.graphql_strong_points.api_aggregation.description 423 | t: Being able to combine together different API schemas. 424 | - key: options.graphql_strong_points.aggregating_requests 425 | t: Aggregating Requests 426 | - key: options.graphql_strong_points.aggregating_requests.description 427 | t: Only ever have to make a single request from the client. 428 | - key: options.graphql_strong_points.community 429 | t: Community 430 | - key: options.graphql_strong_points.community.description 431 | t: The people who are active in the GraphQL space. 432 | - key: options.graphql_strong_points.fragment_colocation 433 | t: Fragment Colocation 434 | - key: options.graphql_strong_points.fragment_colocation.description 435 | t: Being able to colocate a component's data requirements next to it. 436 | 437 | - key: options.graphql_pain_points.performance 438 | t: Performance 439 | - key: options.graphql_pain_points.performance.description 440 | t: Performance issues such as the n+1 problem. 441 | - key: options.graphql_pain_points.security 442 | t: Security 443 | - key: options.graphql_pain_points.security.description 444 | t: Security issues such as infinitely nested queries. 445 | - key: options.graphql_pain_points.combining_schemas 446 | t: Combining Different Schemas 447 | - key: options.graphql_pain_points.combining_schemas.description 448 | t: Being able to combine together different API schemas. 449 | - key: options.graphql_pain_points.api_versioning 450 | t: API Versioning 451 | - key: options.graphql_pain_points.api_versioning.description 452 | t: Handling deprecated fields and other versioning concerns. 453 | - key: options.graphql_pain_points.file_upload 454 | t: File Upload 455 | - key: options.graphql_pain_points.file_upload.description 456 | t: Being able to upload files through your GraphQL API. 457 | - key: options.graphql_pain_points.testing 458 | t: Testing 459 | - key: options.graphql_pain_points.testing.description 460 | t: Testing your GraphQL API. 461 | - key: options.graphql_pain_points.error_handling 462 | t: Error Handling 463 | - key: options.graphql_pain_points.error_handling.description 464 | t: Returning errors and managing them on the client. 465 | - key: options.graphql_pain_points.client_side_caching 466 | t: Client-side Caching 467 | - key: options.graphql_pain_points.client_side_caching.description 468 | t: Caching data on the client, updating the cache, optimistic UI, etc. 469 | 470 | # learning methods 471 | - key: options.first_steps_graphql.books 472 | t: Books 473 | - key: options.first_steps_graphql.videos 474 | t: Videos & screencasts 475 | - key: options.first_steps_graphql.school 476 | t: School & higher education 477 | - key: options.first_steps_graphql.courses_free 478 | t: Online courses (free) 479 | - key: options.first_steps_graphql.courses_paid 480 | t: Online courses (paid) 481 | - key: options.first_steps_graphql.podcasts 482 | t: Podcasts 483 | - key: options.first_steps_graphql.bootcamp 484 | t: Coding bootcamp 485 | - key: options.first_steps_graphql.on_the_job 486 | t: On-the-job training 487 | - key: options.first_steps_graphql.self_directed 488 | t: Self-directed learning (Google, Stack Overflow, etc.) 489 | - key: options.first_steps_graphql.mentoring 490 | t: Mentoring -------------------------------------------------------------------------------- /css2021.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # Introduction 5 | ########################################################################### 6 | 7 | - key: general.results.description 8 | t: The 2021 edition of the annual survey about the latest trends in the CSS ecosystem. 9 | 10 | - key: introduction.css2021 11 | t: | 12 | 13 | Do woodworkers have to learn a new, better way to saw a board every couple years? Do painters feel like frauds for still using oil paint? Or is it just us front-end developers who get to experience this constant state of change? 14 | 15 | With container queries and more just around the corner, things are definitely moving fast. And since we need to keep up as well, we took the time to give these survey results a couple new power-ups of their own! 16 | 17 | What this means in practice is that we can now cross-reference two datapoints, such as yearly salaries by experience level; or gender by country. You'll see some of these breakdowns included throughout the results, but we encourage you to explore the data further using [our API](https://api.stateofjs.com/) or by [downloading our data](https://www.kaggle.com/sachag/state-of-css). Let us know if you end up making your own data visualizations! 18 | 19 | And now, let's see what CSS has been up to this year! 20 | 21 | *Note: We've had to push back the 2021 [State of JavaScript](http://stateofjs.com/) survey to January 2022 for lack of time. See you after the holidays!* 22 | 23 | 24 | 25 | ########################################################################### 26 | # Sections Introductions 27 | ########################################################################### 28 | 29 | - key: sections.user_info.description 30 | t: | 31 | This year's survey reached **8,714** developers throughout the world. 32 | 33 | - key: sections.features.description 34 | t: | 35 | CSS's dynamism shows no sign of stopping, as developers make an effort to adopt the current 36 | crop of new features while looking forward to even more innovation in the next few years. 37 | 38 | - key: sections.technologies.description 39 | t: | 40 | With nearly 50% of respondents happily using one or more CSS-in-JS library, it's safe to say that 41 | the category has managed to carve out its niche. Maybe the two sides of the front-end world are 42 | not so far apart after all? 43 | 44 | - key: sections.tools_others.description 45 | t: | 46 | Picking a technology can often come down to a series of tough choices between 47 | competing priorities, and this year we tried to capture this process using a new bracket-style question format. 48 | 49 | - key: sections.environments.description 50 | t: | 51 | Accessibility has long been an after-thought when it comes to web development, but many developers 52 | are now realizing that it should in fact be the foundation on which everything else rests. 53 | 54 | - key: sections.resources.description 55 | t: | 56 | Highlighting blogs, podcasts, and sites is fine, but this year we decided to go one step further 57 | and actually feature the people who make up the CSS community themselves! 58 | 59 | - key: sections.opinions.description 60 | t: | 61 | Whether it's pain points that hold you back today, or missing features that you hope to use 62 | tomorrow, this was your chance to vent and share your gripes with CSS! 63 | 64 | ########################################################################### 65 | # Charts 66 | ########################################################################### 67 | 68 | - key: options.features_categories.layout 69 | aliasFor: sections.layout.title 70 | - key: options.features_categories.shapes_graphics 71 | aliasFor: sections.shapes_graphics.title 72 | - key: options.features_categories.interactions 73 | aliasFor: sections.interactions.title 74 | - key: options.features_categories.typography 75 | aliasFor: sections.typography.title 76 | - key: options.features_categories.animations_transforms 77 | aliasFor: sections.animations_transforms.title 78 | - key: options.features_categories.accessibility 79 | aliasFor: sections.accessibility.title 80 | - key: options.features_categories.media_queries 81 | aliasFor: sections.media_queries.title 82 | - key: options.features_categories.other_features 83 | aliasFor: sections.other_features.title 84 | 85 | ########################################################################### 86 | # Notes 87 | ########################################################################### 88 | 89 | - key: blocks.gender.note 90 | t: | 91 | If you're interested in learning more, we [wrote a blog post](https://dev.to/sachagreif/is-our-survey-biased-against-women-49oj) that addresses the survey's gender dynamics. 92 | 93 | - key: blocks.css_missing_features.note 94 | t: | 95 | You can explore the full dataset of answers to this question in [this side project](https://whatsmissingfromcss.com/). 96 | 97 | - key: blocks.source.note 98 | t: > 99 | 100 | This chart aggregates a mix of referrers, URL parameters, and freeform answers. 101 | 102 | - State of JS: the [State of JS](https://stateofjs.com) mailing list. 103 | 104 | - State of CSS: the State of CSS mailing list; also matches `email`, `by email`, etc. 105 | 106 | - Work: matches `work`, `colleagues`, `coworkers`, etc. 107 | 108 | ########################################################################### 109 | # Awards 110 | ########################################################################### 111 | 112 | - key: award.feature_adoption_delta_award.comment 113 | t: With a **{value}** progression in 2021, CSS comparison functions are becoming a key part of every CSS developer's toolkit. 114 | 115 | # - key: award.tool_usage_delta_award.comment 116 | # t: No other tool comes even close to Tailwind CSS's dramatic **{value}** progression over the last year. 117 | 118 | - key: award.tool_satisfaction_award.comment 119 | t: PostCSS takes the top spot once again with a **{value}** retention ratio. 120 | 121 | - key: award.tool_interest_award.comment 122 | t: With a **{value}** ratio, CSS Modules again generated the most interest among CSS developers this year. 123 | 124 | # - key: award.most_write_ins_award.comment 125 | # t: Many questions also accepted write-in answers, and with **{value}** mentions PhpStorm was the most popular item overall. 126 | 127 | ########################################################################### 128 | # Conclusion 129 | ########################################################################### 130 | 131 | - key: conclusion.css2021 132 | t: | 133 | The way you write CSS is about to change forever 134 | 135 | For many years now, many innovations in writing styles for the web have happened elsewhere: in preprocessors, JavaScript frameworks, or compilers. To be sure, CSS itself has also received some welcome improvements like [aspect-ratio](https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio) or [custom properties](https://developer.mozilla.org/en-US/docs/Web/CSS/--*). Yet we still reach for libraries and other helpers on a daily basis. 136 | 137 | But there's a change coming. The core CSS language is getting shaken up and renewed, and we're right at the forefront of accelerated evolution. 138 | 139 | [Container Queries](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries) will bring in an entirely new era of responsive design, and [Cascade Layers](https://developer.mozilla.org/en-US/docs/Web/CSS/@layer) will make our use of frameworks, theming and managing complex codebases significantly easier. 140 | 141 | When we look a little further ahead, we can also see the [@when/else conditional](https://css-tricks.com/proposal-for-css-when/) coming up, which will let us combine media, container and supports queries into a single at-rule. 142 | 143 | And fingers crossed, 2022 is the year we finally see some movement on native CSS nesting. Those of us that work with tools like Sass and PostCSS already couldn't imagine another way of working. 144 | 145 | All of this together means that 2022 is likely to be a year where the way you write CSS is going to fundamentally change. It's an incredibly exciting period, and we look forward to all the amazing implementations in the year to come. 146 | 147 | - key: conclusion.css2021.bio 148 | t: Web developer and creator of Polypane 149 | 150 | ########################################################################### 151 | # Picks 152 | ########################################################################### 153 | 154 | - key: picks.my_pick.css2021 155 | t: "My 2021 Pick: " 156 | - key: picks.intro 157 | t: We asked members of the CSS community to share their “pick of the year” 158 | 159 | - key: picks.george_francis.name 160 | t: The CSS Paint API 161 | - key: picks.george_francis.bio 162 | t: Developer, writer, and generative artist. 163 | - key: picks.george_francis.description 164 | t: | 165 | The Paint API allows us to create images programmatically, 166 | to use in our CSS. It unlocks a whole world of creativity, 167 | and I am very excited about it! 168 | 169 | - key: picks.cassidy_williams.name 170 | t: Lynn Fisher 171 | - key: picks.cassidy_williams.bio 172 | t: Developer advocate, educator, and startup advisor. 173 | - key: picks.cassidy_williams.description 174 | t: | 175 | I'd love to pick Lynn Fisher. She's consistently surprised 176 | and delighted the CSS community with her creative projects and experiments, 177 | and I love how much folks can learn from her! 178 | 179 | - key: picks.josh_comeau.name 180 | t: Amelia Wattenberger 181 | - key: picks.josh_comeau.bio 182 | t: Software developer and creator of [CSS for JavaScript Developers](https://css-for-js.dev/). 183 | - key: picks.josh_comeau.description 184 | t: | 185 | Amelia is creating some of the most amazing 186 | interactive blog posts about CSS and JS. 187 | Check out this post about how percentages work in CSS! 188 | 189 | - key: picks.kevin_j_powell.name 190 | t: Stephanie Eckles 191 | - key: picks.kevin_j_powell.bio 192 | t: CSS Evangelist 193 | - key: picks.kevin_j_powell.description 194 | t: | 195 | I'm constantly blown away by Stephanie's continued initiatives 196 | to help share her knowledge of modern CSS techniques, 197 | as well as her contagious enthusiasm for CSS. 198 | 199 | - key: picks.manuel_matuzovic.name 200 | t: aspect-ratio 201 | - key: picks.manuel_matuzovic.bio 202 | t: Front-end developer from Vienna, and creator of [htmhell.dev](https://htmhell.dev). 203 | - key: picks.manuel_matuzovic.description 204 | t: | 205 | All major browsers shipped support for aspect-ratio in 2021. 206 | At first I underestimated it, but there are so many 207 | situations where this property comes in handy. 208 | 209 | - key: picks.gift_egwuenu.name 210 | t: Kevin Powell 211 | - key: picks.gift_egwuenu.bio 212 | t: Frontend Developer and Content Creator 213 | - key: picks.gift_egwuenu.description 214 | t: | 215 | Kevin creates CSS content on YouTube and I really enjoy watching his videos a lot. 216 | He does a really good job teaching CSS concepts in a way that's easy and fun 217 | to understand. 218 | 219 | - key: picks.eric_w_bailey.name 220 | t: Miriam Suzanne 221 | - key: picks.eric_w_bailey.bio 222 | t: Inclusive Design and \#a11y advocate. 223 | - key: picks.eric_w_bailey.description 224 | t: | 225 | CSS is about to go from good to great. 226 | Miriam's work on Container Queries and Cascade Layers is going 227 | to revolutionize how CSS is written. 228 | 229 | - key: picks.samuel_kraft.name 230 | t: Vanilla Extract 231 | - key: picks.samuel_kraft.bio 232 | t: Frontend & design 233 | - key: picks.samuel_kraft.description 234 | t: | 235 | Lately I've loved working with Vanilla Extract, it's like CSS Modules but 236 | fully typed with a magical developer experience. 237 | 238 | - key: picks.sacha_greif.name 239 | t: Open Props 240 | - key: picks.sacha_greif.bio 241 | t: State of JS and State of CSS creator 242 | - key: picks.sacha_greif.description 243 | t: | 244 | It's really cool to see the feedback loop between new CSS features and new 245 | projects taking advantage of them! And I think Adam Argyle's Open Props 246 | is a great use of Custom Properties (CSS variables). 247 | 248 | - key: picks.ahmad_shadeed.name 249 | t: Container Queries 250 | - key: picks.ahmad_shadeed.bio 251 | t: Author of [Debugging CSS](https://debuggingcss.com/), Writing at [ishadeed.com](http://ishadeed.com) 252 | - key: picks.ahmad_shadeed.description 253 | t: | 254 | CSS container queries again! We got the chance to play with them in a browser. 255 | Thanks to Miriam Suzanne for moving this forward! 256 | I can't wait to use them without a flag. 257 | 258 | # - key: picks.georgedoescode.name 259 | # t: 260 | # - key: picks.georgedoescode.bio 261 | # t: 262 | # - key: picks.georgedoescode.description 263 | # t: | 264 | 265 | - key: picks.adam_argyle.name 266 | t: CSS Noise 267 | - key: picks.adam_argyle.bio 268 | t: CSS at Google 269 | - key: picks.adam_argyle.description 270 | t: | 271 | CSS generated texture and randomness makes for unique and 272 | interesting paint jobs in your design. 273 | Noise tools have made the technique accessible. 274 | 275 | - key: picks.stephanie_walter.name 276 | t: Miriam Suzanne 277 | - key: picks.stephanie_walter.bio 278 | t: UX Researcher and CSS lover 279 | - key: picks.stephanie_walter.description 280 | t: | 281 | Miriam is an artist and an activist who creates software and art that celebrate the queer complexity of human experience. She's a CSS expert, and is doing an amazing job on the specifications for CSS Container Queries. 282 | 283 | - key: picks.michelle_barker.name 284 | t: “Building a Color Scheme” by Adam Argyle 285 | - key: picks.michelle_barker.bio 286 | t: Senior Front End Developer 287 | - key: picks.michelle_barker.description 288 | t: | 289 | I love this article because although custom properties have been around for a while now, it really takes them to a different level and showcases their power. I hope it makes some people think of them in a different way, as more than simple variables. 290 | 291 | # - key: picks.christianoliff.bio 292 | # t: Front-end developer for Trimble MAPS 293 | # - key: picks.christianoliff.description 294 | # t: | 295 | # One thing I've really started using and appreciating this year though is Purge CSS- an awesome tool for removing unused CSS. It can greatly reduce the size of your CSS, and its fast and easy to use. 296 | 297 | - key: picks.kilian_valkhof.name 298 | t: prefers-reduced-data 299 | - key: picks.kilian_valkhof.bio 300 | t: Web developer and creator of Polypane 301 | - key: picks.kilian_valkhof.description 302 | t: | 303 | We need more devs to ask browsers about this feature, and to realize how big a difference it can make. With 64% of respondents not knowing it though, we have work to do! 304 | 305 | # - key: picks.piccalilli_.bio 306 | # t: Freelance designer & dev who runs piccalil.li 307 | # - key: picks.piccalilli_.description 308 | # t: | 309 | # This blog is an absolute gold mine of CSS knowledge. Michelle is a CSS legend and every post or tutorial they write is heaped with useful content. 310 | 311 | # - key: picks.piccalilli_.bio 312 | # t: Freelance designer & dev who runs piccalil.li 313 | # - key: picks.piccalilli_.description 314 | # t: | 315 | # This blog is an absolute gold mine of CSS knowledge. Michelle is a CSS legend and every post or tutorial they write is heaped with useful content. 316 | 317 | # - key: picks.sarasoueidan.bio 318 | # t: Independent UI/design engineer 319 | # - key: picks.sarasoueidan.description 320 | # t: | 321 | # My pick is a person, namely Rachel Andrew. She taught CSS Grid to a whole generation of developers. 322 | 323 | # - key: picks.5t3ph.bio 324 | # t: Software Engineer @ Microsoft 325 | # - key: picks.5t3ph.description 326 | # t: | 327 | # In this conference talk, Manuel Matuzovic provides thoughtfully 328 | # crafted examples that are engaging, approachable, and actionable. 329 | 330 | # - key: picks.hugogiraudel.bio 331 | # t: Non-binary accessibility & diversity advocate 332 | # - key: picks.hugogiraudel.description 333 | # t: | 334 | # Fela is an amazing piece of software. 335 | # It’s pretty powerful, relatively easy to use and very performant 336 | 337 | # - key: picks.foolip.bio 338 | # t: Software Engineer @ Google 339 | # - key: picks.foolip.description 340 | # t: | 341 | # Sergio has recently fixed lots of Flexbox in WebKit and even some in Chromium, 342 | # notably bringing flex gap to WebKit, 343 | # which means that soon it will be available on all modern browsers. 344 | 345 | # - key: picks.jina.bio 346 | # t: Design systems advocate and practitioner 347 | # - key: picks.jina.description 348 | # t: | 349 | # The media query to reduce motion, which helps avoid 350 | # triggering dizziness and discomfort. 351 | 352 | ########################################################################### 353 | # Sponsors 354 | ########################################################################### 355 | 356 | - key: sponsors.frontendmasters.description 357 | t: Advance your skills with in-depth, modern front-end engineering courses. 358 | - key: sponsors.polypane.description 359 | t: The browser for ambitious devs. Build responsive, accessible and fast websites with ease. 360 | - key: sponsors.google_chrome.description 361 | t: Thanks to the Google Chrome team for supporting our work. 362 | 363 | ########################################################################### 364 | # FAQ/About 365 | ########################################################################### 366 | 367 | - key: about.content.css2021 368 | t: > 369 | The 2021 State of CSS survey ran from October 5 to November 2 2021, and collected 8714 responses. The survey is run by me, [Sacha Greif](https://sachagreif.com/), with help from a team of open-source contributors and consultants. 370 | 371 | 372 | This year's logo and t-shirt were designed and animated by [Christopher Kirk-Nielsen](http://chriskirknielsen.com/). 373 | 374 | ### Survey Goals 375 | 376 | This survey, along with the [State of JavaScript](https://stateofjs.com/) survey, was created to identify upcoming trends in the web development ecosystem in order to help developers make technological choices. 377 | 378 | 379 | As such, these surveys are focused on anticipating what's coming over the next few years rather than analyzing what's popular now, which is why the features or technologies that are currently most widespread are not always included. 380 | 381 | ### Survey Design 382 | 383 | The survey was designed in part based on last year's survey, with an open feedback period where the survey outline was discussed [on GitHub](https://github.com/StateOfJS/StateOfCSS-2020/issues/8). 384 | 385 | All survey questions were optional. 386 | 387 | ### Survey Audience 388 | 389 | The survey was openly accessible online and respondents were not filtered or selected in any way. Respondents were primarily a mix of respondents from past surveys (alerted through a dedicated mailing list) and social media traffic. 390 | 391 | ### Representativeness & Inclusivity 392 | 393 | While we believe it's important to give a voice to every community, the reality is that an open survey like this one will always struggle to properly represent everybody, especially when operating through systems that already carry their own inherent biases. 394 | 395 | 396 | In order to counter-balance this, we are implementing three distinct strategies: 397 | 398 | 399 | - **Outreach**: this year, we reached out to 23 organizations representing BIPOC and LGBTQ developers in the hopes of partnering up. While very few of them replied, we will keep looking for ways to reach out beyond our current audience. 400 | 401 | - **Data Analysis**: through features like facets and variants, we're always trying to make it easier to surface the voices of any demographic segment, no matter how minoritized it might be in our data. 402 | 403 | - **Barrier Lowering**: making the survey too long, inaccessible, slow to load, English-only, etc. can all contribute to imposing an "effort tax" that cuts off the parts of the community that can't afford to pay it. Fixing these issues can lower the barrier to entry and in the process make our audience more diverse. 404 | 405 | ### Project Funding 406 | 407 | Funding from this project comes from a variety of sources: 408 | 409 | 410 | - **T-shirt sales**. 411 | 412 | - **Sponsored links**: the links to recommended resources at the bottom of each page are provided by our partner [Frontend Masters](https://frontendmasters.com/). 413 | 414 | - **Other Funding**: this year, the [Google Chrome](https://www.google.com/chrome/) team set aside a small budget to help hire an [accessibility consultant](https://fossheim.io/) to work on the survey. 415 | 416 | 417 | Despite these funding sources, the surveys remains mostly a self-funded project overall and any contribution or sponsorship would be greatly appreciated. I would especially like to work closely with more browser vendors, since they play such a central role in the web ecosystem. 418 | 419 | ### Technical Overview 420 | 421 | You can find a more in-depth technical overview of how the surveys are run [here](https://dev.to/sachagreif/how-the-state-of-js-css-surveys-are-run-4lnb). 422 | 423 | - **Data collection**: custom [Vulcan.js](http://vulcanjs.org/) app. 424 | 425 | - **Data storage/processing**: MongoDB & MongoDB Aggregations. 426 | 427 | - **Data API**: Node.js GraphQL API. 428 | 429 | - **Results Site**: [Gatsby](https://www.gatsbyjs.com/) React app. 430 | 431 | - **Data Visualizations**: [Nivo](https://nivo.rocks/) React dataviz library. 432 | 433 | - **Type**: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [Bebas Neue](https://fonts.google.com/specimen/Bebas+Neue). 434 | 435 | - key: general.css2021.survey_intro 436 | t: | 437 | Hey CSS, what have you been up to lately? Oh really, `@container`? Oh and 438 | intrinsic sizing? And `@property` too?! Wow, you've been busy! 439 | 440 | Even though the pandemic kept on making everybody's lives harder throughout 2021, somehow 441 | dedicated contributors around the world managed to keep CSS moving forward. 442 | And so once more it's time to survey the CSS ecosystem and figure out 443 | where this is all going. And maybe learn about a few new things while you're at it! 444 | -------------------------------------------------------------------------------- /js2021.yml: -------------------------------------------------------------------------------- 1 | locale: en-US 2 | translations: 3 | ########################################################################### 4 | # General 5 | ########################################################################### 6 | 7 | - key: general.results.description 8 | t: The 2021 edition of the annual survey about the latest trends in the JavaScript ecosystem. 9 | 10 | - key: general.livestream_announcement 11 | t: Make sure to tune in for our [special survey results livestream](https://dev.to/sachagreif/state-of-javascript-2021-livestream-24a5) on February 22! (English) 12 | 13 | ########################################################################### 14 | # Introduction 15 | ########################################################################### 16 | 17 | - key: introduction.js2021 18 | t: | 19 | 20 | A lot happened in 2021. So much in fact that the survey was pushed back all the way to 2022! 21 | 22 | 23 | Between a slew of faster build tools and a new crop of back-end frameworks, the JavaScript world kept evolving. And we did our best to keep up, giving this survey a couple new power-ups ([read more about what's new](https://dev.to/sachagreif/whats-new-in-the-2021-state-of-javascript-survey-4eej)) such as new question types, the ability to cross-reference two datapoints (such as yearly salaries by experience level), and even a way to customize the charts to surface your own insights! Read more about [what's new this year](https://dev.to/sachagreif/whats-new-in-the-2021-state-of-javascript-survey-4eej) (English). 24 | 25 | 26 | It wasn't all smooth sailing, though. We had to deal with a [data leak](https://dev.to/sachagreif/disclosing-a-state-of-javascriptstate-of-css-data-breach-2lg1) that thankfully didn't seem to have any bad consequences. And we're constantly making efforts to make the survey more inclusive, more accessible, and more fair. 27 | 28 | 29 | Still, even though the survey can ever only represents a tiny, tiny part of the JavaScript ecosystem, we hope you'll find the resulting data interesting! 30 | 31 | 32 | 33 | 34 | ########################################################################### 35 | # Tshirt 36 | ########################################################################### 37 | 38 | - key: sections.tshirt.title 39 | t: T-shirt 40 | 41 | - key: sections.tshirt.description 42 | t: | 43 | ## Support the Survey With the State of JavaScript T-Shirt 44 | 45 | Between the bad video quality, the bulky cassettes, and having to rewind, there's not much to miss about the VHS era. But one thing we *do* miss are the amazing 90s visuals that used to adorn blank VHS tapes. 46 | 47 | But now, thanks to the talented Christopher Kirk-Nielsen you can enjoy all this retro radness while also celebrating your love for JavaScript at the same time! 48 | 49 | - key: tshirt.about 50 | t: About the T-shirt 51 | 52 | - key: tshirt.description 53 | t: | 54 | We use a high-quality, super-soft tri-blend shirt with a slim fit printed by our partners at Cotton Bureau. 55 | 56 | - key: tshirt.getit 57 | t: Get It 58 | 59 | - key: tshirt.price 60 | t: USD $29 + shipping 61 | 62 | - key: tshirt.designer.heading 63 | t: About the Designer 64 | 65 | - key: tshirt.designer.name 66 | t: Christopher Kirk-Nielsen 67 | 68 | - key: tshirt.designer.bio 69 | t: | 70 | Originally from France but now based in the United States, Chris is not just an amazing front-end developer, but also a talented illustrator who specializes in retro visuals. In fact, we encourage you to also check out his [other t-shirt designs](https://chriskirknielsen.com/designs)! 71 | 72 | ########################################################################### 73 | # Sections 74 | ########################################################################### 75 | 76 | - key: sections.user_info.description 77 | t: | 78 | This year, **16,085** respondents took part in the survey. 79 | 80 | - key: sections.features.description 81 | t: | 82 | JavaScript may move fast, but it seems like JavaScript developers move even faster, as many relatively new features already show high adoption levels. 83 | 84 | - key: sections.technologies.description 85 | t: | 86 | This year's results point to a high degree of fragmentation in the JavaScript world. But while this can sometimes cause headaches, all that competition does make for a very dynamic ecosystem. 87 | 88 | - key: sections.tools_others.description 89 | t: | 90 | Picking a technology can often come down to a series of tough choices between 91 | competing priorities, and this year we tried to capture this process using a new bracket-style question format. 92 | 93 | - key: sections.environments.description 94 | t: | 95 | Accessibility has long been an after-thought when it comes to web development, but many developers 96 | are now realizing that it should in fact be the foundation on which everything else rests. 97 | 98 | - key: sections.resources.description 99 | t: | 100 | Highlighting blogs, podcasts, and sites was a good start, but this year we decided to go one step further 101 | and actually feature the people who make up the JavaScript community! 102 | 103 | - key: sections.opinions.description 104 | t: | 105 | Whether it's pain points that hold you back today, or missing features that you hope to use 106 | tomorrow, this was your chance to vent and share your gripes with JavaScript! 107 | 108 | ########################################################################### 109 | # Charts 110 | ########################################################################### 111 | 112 | - key: options.features_categories.language 113 | aliasFor: sections.language.title 114 | - key: options.features_categories.browser_apis 115 | aliasFor: sections.browser_apis.title 116 | - key: options.features_categories.other_features 117 | aliasFor: sections.other_features.title 118 | 119 | - key: blocks.tools_quadrant.description 120 | t: | 121 | This chart shows each technology's **retention ratio** over its total **user count**. 122 | It can be divided into four quadrants: 123 | 124 | - **1**: Low usage, high retention. Technologies worth keeping an eye on. 125 | 126 | - **2**: High usage, high retention. Safe technologies to adopt. 127 | 128 | - **3**: Low usage, low retention. Technologies that are harder to recommend currently. 129 | 130 | - **4**: High usage, low retention. Reassess these technologies if you're currently using them. 131 | 132 | ########################################################################### 133 | # Notes 134 | ########################################################################### 135 | 136 | - key: blocks.gender.note 137 | t: | 138 | If you're interested in learning more, we [wrote a blog post](https://dev.to/sachagreif/is-our-survey-biased-against-women-49oj) that addresses the survey's gender dynamics. 139 | 140 | - key: blocks.css_missing_features.note 141 | t: | 142 | You can explore the full dataset of answers to this question in [this side project](https://whatsmissingfromcss.com/). 143 | 144 | - key: blocks.source.note 145 | t: > 146 | 147 | This chart aggregates a mix of referrers, URL parameters, and freeform answers. 148 | 149 | - State of JS: the [State of JS](https://stateofjs.com) mailing list. 150 | 151 | - State of CSS: the State of CSS mailing list; also matches `email`, `by email`, etc. 152 | 153 | - Work: matches `work`, `colleagues`, `coworkers`, etc. 154 | 155 | ########################################################################### 156 | # Awards 157 | ########################################################################### 158 | 159 | - key: award.feature_adoption_delta_award.comment 160 | t: With a **{value}** progression in 2021, the nullish coalescing operator (??) has quickly become an integral part of JavaScript. 161 | 162 | - key: award.tool_usage_delta_award.comment 163 | t: esbuild is barely two years old, but with a **{value}** progression over the last year it's already gaining ground. 164 | 165 | - key: award.tool_satisfaction_award.comment 166 | t: Vite takes the top spot with a sky-high **{value}** retention ratio! 167 | 168 | - key: award.tool_interest_award.comment 169 | t: With a **{value}** interest ratio, Vite once again wins the gold! 170 | 171 | - key: award.most_write_ins_award.comment 172 | t: Many questions also accepted write-in answers, and with **{value}** mentions Elm was the most popular item overall. 173 | 174 | ########################################################################### 175 | # Conclusion 176 | ########################################################################### 177 | 178 | - key: conclusion.js2021 179 | t: | 180 | 181 | JavaScript is in a tremendously better state today compared to 2016. 182 | 183 | Back when the first State of JS survey took place, only 21% of you used TypeScript compared to 69% today. Whereas we used to joke about a new front end framework releasing every day, **React** and **Vue** have now been dominant for 6 years running. And the percentage of people reporting that "JS is moving too fast" is down from 59% to 38%. 184 | 185 | This is not to say that the language has stood still. The **Optional Chaining** and **Nullish Coalescing** APIs have rocketed up to be the most used new APIs in our survey, despite only being 2 years old. And more good things are on the way from TC39: you reported that date management is a top missing feature, and the Temporal API recently reached [Stage 3](https://github.com/tc39/proposal-temporal). 186 | 187 | The tooling ecosystem is also seeing its own rapid evolution, and it's fair to say that 2021 has been the year of **Vite**. Vite not only debuted at 98% retention, but usage is already at 30% in its first year on our survey, even eclipsing esbuild. Vite isn't alone in trying to improve the state of JavaScript build tools - 8 of the 12 tools we track today are less than two years old! And while **pnpm**, **Turborepo**, and **Nx** took the top spots in our first year tracking monorepo tooling, only 25% report being happy with the state of that category, showing that a lot of work remains to be done. 188 | 189 | Also notable: many new entrants like **Deno**, **Rome**, **Astro**, **Remix**, and more are now supported by venture-backed companies, perhaps charting a viable alternative to the fragile open-source funding environment. 190 | 191 | As the [Third Age of JavaScript](https://www.swyx.io/js-third-age/) enters its third year, the opportunities for aspiring open sourcerors and entrepreneurs continue to unfold, and I'm excited to see what the next couple years bring! 192 | 193 | - key: conclusion.js2021.bio 194 | t: Head of DX at Temporal 195 | 196 | ########################################################################### 197 | # Picks 198 | ########################################################################### 199 | 200 | - key: picks.my_pick.js2021 201 | t: "My 2021 Pick: " 202 | - key: picks.intro 203 | t: We asked members of the JavaScript community to share their “pick of the year” 204 | 205 | - key: picks.lee_robinson.name 206 | t: SvelteKit 207 | - key: picks.lee_robinson.bio 208 | t: Director of Developer Relations at Vercel 209 | - key: picks.lee_robinson.description 210 | t: | 211 | SvelteKit is a fresh take on building for the web and has an 212 | incredibly passionate, growing community of supporters. 213 | 214 | - key: picks.vadim_makeev.name 215 | t: Server-Side Rendering 216 | - key: picks.vadim_makeev.bio 217 | t: DevRel, Podcaster & Web Standards Advocate 218 | - key: picks.vadim_makeev.description 219 | t: | 220 | The time has come to get our priorities straight. 221 | UX > DX, and it has always been like that. Performance FTW! 222 | 223 | - key: picks.ben_ilegbodu.name 224 | t: Lee Robinson 225 | - key: picks.ben_ilegbodu.bio 226 | t: Ben Ilegbodu, Principal Frontend Engineer @ Stitch Fix 227 | - key: picks.ben_ilegbodu.description 228 | t: | 229 | Lee has been great at shepherding and advocating for Next.js. 230 | He's helped me a ton with Next and continues to build excitement 231 | for where it's going 232 | 233 | - key: picks.shawn_wang.name 234 | t: Supabase 235 | - key: picks.shawn_wang.bio 236 | t: Head of DX at Temporal 237 | - key: picks.shawn_wang.description 238 | t: | 239 | Supabase is making Postgres accessible to more developers and showing 240 | everyone how a small focused team can out-ship peers 10x their size. 241 | 242 | - key: picks.sarah_drasner.name 243 | t: Pawel Kozlowski 244 | - key: picks.sarah_drasner.bio 245 | t: Director of Engineering, Core Developer Web at Google 246 | - key: picks.sarah_drasner.description 247 | t: | 248 | Pawel Kozlowski is the kind of developer who can be open-minded to different 249 | approaches with humility and curiosity with the interest of improving things. 250 | 251 | - key: picks.sara_vieira.name 252 | t: Paul Henschel 253 | - key: picks.sara_vieira.bio 254 | t: International Agent of JS Bullshit 255 | - key: picks.sara_vieira.description 256 | t: | 257 | Paul's work on animations and ReactThreeFiber 258 | have made doing any kind of 3D work on the web way easier. 259 | 260 | - key: picks.mark_erikson.name 261 | t: Ryan Carniato 262 | - key: picks.mark_erikson.bio 263 | t: Redux Maintainer 264 | - key: picks.mark_erikson.description 265 | t: | 266 | Ryan's reactive JS framework SolidJS hit 1.0, 267 | and he wrote numerous articles analyzing advanced 268 | JS framework implementation concepts. 269 | 270 | - key: picks.miguel_angel_duran.name 271 | t: Vite 272 | - key: picks.miguel_angel_duran.bio 273 | t: Front End Dev & Twitch Coding Streamer 274 | - key: picks.miguel_angel_duran.description 275 | t: | 276 | In addition to esbuild and swc, fantastic tools pushing forward the ecosystem, 277 | I'm enjoying Vite. It has a delightful DX, and it's rich in features. 278 | 279 | - key: picks.alyssa_nicoll.name 280 | t: BroccoDev's Twitch Stream 281 | - key: picks.alyssa_nicoll.bio 282 | t: Sr. Developer Advocate at Progress 283 | - key: picks.alyssa_nicoll.description 284 | t: | 285 | Mike Brocchi recently started streaming to Twitch. He is a brilliant programmer, 286 | developer, and most importantly teacher. 287 | I always have a blast watching his streams and learning from him. 288 | 289 | - key: picks.michael_jackson.name 290 | t: esbuild 291 | - key: picks.michael_jackson.bio 292 | t: Co-founder of Remix 293 | - key: picks.michael_jackson.description 294 | t: | 295 | We have been building the Remix compiler on top of esbuild and it 296 | has definitely raised the bar as far as JS bundlers are concerned. 297 | It's incredibly fast and the plugin API allows us to do pretty much anything we want. 298 | 299 | - key: picks.david_khourshid.name 300 | t: Remix 301 | - key: picks.david_khourshid.bio 302 | t: Pianist and founder of Stately 303 | - key: picks.david_khourshid.description 304 | t: | 305 | Remix is a full-stack web framework that feels old-school, but in a good way, 306 | by putting you on the path to create fast, complex, and accessible modern web apps. 307 | 308 | - key: picks.kent_c_dodds.name 309 | t: Fly.io 310 | - key: picks.kent_c_dodds.bio 311 | t: Director of Developer Experience, Remix 312 | - key: picks.kent_c_dodds.description 313 | t: | 314 | Fly enabled me (a frontend engineer with a distain for DevOps) 315 | to confidently deploy a real-world, globally-distributed, production-grade 316 | app. 317 | 318 | - key: picks.tejas_kumar.name 319 | t: Joe Haddad 320 | - key: picks.tejas_kumar.bio 321 | t: Web Developer, Conference Speaker, and Director of DevRel at Xata 322 | - key: picks.tejas_kumar.description 323 | t: | 324 | Joe works on Next.js at Vercel and is constantly looking to proudly 325 | demonstrate its power while actively listening 326 | to feedback from the community to support them better. 327 | 328 | - key: picks.wes_bos.name 329 | t: TC39 Proposals 330 | - key: picks.wes_bos.bio 331 | t: JavaScript Teacher & Podcast Host 332 | - key: picks.wes_bos.description 333 | t: | 334 | A Git repo full of all the things that have been proposed to be added to JavaScript. It's really fun to read through all the ideas people have for the language and see them go through the stages. 335 | 336 | - key: picks.scott_tolinski.name 337 | t: SvelteKit 338 | - key: picks.scott_tolinski.bio 339 | t: Creator of Level-Up Tuts, co-host of Syntax 340 | - key: picks.scott_tolinski.description 341 | t: | 342 | Svelte Kit provides the amazing developer experience of Svelte with all 343 | of the modern features of expected from a web platform. 344 | 345 | - key: picks.xxxx.name 346 | t: 347 | - key: picks.xxxx.bio 348 | t: 349 | - key: picks.xxxx.description 350 | t: | 351 | ########################################################################### 352 | # Sponsors 353 | ########################################################################### 354 | 355 | - key: sponsors.frontendmasters.description 356 | t: Advance your skills with in-depth, modern front-end engineering courses. 357 | - key: sponsors.polypane.description 358 | t: The browser for ambitious devs. Build responsive, accessible and fast websites with ease. 359 | - key: sponsors.google_chrome.description 360 | t: Thanks to the Google Chrome team for supporting our work. 361 | 362 | ########################################################################### 363 | # FAQ/About 364 | ########################################################################### 365 | 366 | - key: about.content.js2021 367 | t: > 368 | The 2021 State of JS survey ran from January 13 to February 2 **2022**, and collected 16,085 responses. The survey is run by me, [Sacha Greif](https://sachagreif.com/), with help from a team of open-source contributors and consultants. 369 | 370 | This year's logo and t-shirt were designed by [Christopher Kirk-Nielsen](http://chriskirknielsen.com/). 371 | 372 | ### Survey Goals 373 | 374 | This survey, along with the [State of CSS](https://stateofcss.com/) survey, was created to identify upcoming trends in the web development ecosystem in order to help developers make technological choices. 375 | 376 | As such, these surveys are focused on anticipating what's coming over the next few years rather than analyzing what's popular now, which is why the features or technologies that are currently most widespread are not always included. 377 | 378 | They should also be taken as a **snapshot of a specific subset of developers**, and are not meant to speak for the entire ecosystem. 379 | 380 | ### Survey Design 381 | 382 | The survey was designed in part based on last year's survey, with an open feedback period where the survey outline was discussed [on GitHub](https://github.com/StateOfJS/Monorepo/issues/56). 383 | 384 | All survey questions were optional. 385 | 386 | ### Survey Audience 387 | 388 | The survey was openly accessible online and respondents were not filtered or selected in any way. Respondents were primarily a mix of respondents from past surveys (alerted through a dedicated mailing list) and social media traffic. 389 | 390 | Note that frameworks, libraries, etc. were free to encourage their audience to participate in the survey and some of them did take advantage of this via banners, tweets, etc. A detailed breakdown of traffic sources is included in the "Sources" chart. 391 | 392 | ### Representativeness & Inclusivity 393 | 394 | While we believe it's important to give a voice to every community, the reality is that an open survey like this one will always struggle to properly represent everybody, especially when operating through systems that already carry their own inherent biases. 395 | 396 | 397 | In order to counter-balance this, we are implementing three distinct strategies: 398 | 399 | 400 | - **Outreach**: we always try to reach out to different organizations (such as BIPOC- or LGBTQ-focused organizations, or online teaching platforms) to try and diversify our own audience. 401 | 402 | - **Data Analysis**: through features like facets and variants, we're always trying to make it easier to surface the voices of any demographic segment, no matter how minoritized it might be in our data. 403 | 404 | - **Barrier Lowering**: making the survey too long, inaccessible, slow to load, English-only, etc. can all contribute to imposing an "effort tax" that cuts off the parts of the community that can't afford to pay it. Fixing these issues can lower the barrier to entry and in the process make our audience more diverse. 405 | 406 | ### Project Funding 407 | 408 | Funding from this project comes from a variety of sources: 409 | 410 | 411 | - **T-shirt sales**. 412 | 413 | - **Chart Sponsorships**: members of the community can donate to the survey in exchange for having their name featured in the report. 414 | 415 | - **Sponsored links**: the links to recommended resources at the bottom of each page are provided by our partner [Frontend Masters](https://frontendmasters.com/). 416 | 417 | - **Other Funding**: this year, the [Google Chrome](https://www.google.com/chrome/) team set aside a small budget to help hire an [accessibility consultant](https://fossheim.io/) to work on the CSS and JS surveys. 418 | 419 | 420 | Despite these funding sources, the surveys remains mostly a self-funded project overall and any contribution or sponsorship would be greatly appreciated. I would especially like to work closely with more browser vendors, since they play such a central role in the web ecosystem. 421 | 422 | ### Technical Overview 423 | 424 | You can find a more in-depth technical overview of how the surveys are run [here](https://dev.to/sachagreif/how-the-state-of-js-css-surveys-are-run-4lnb). 425 | 426 | - **Data collection**: custom [Vulcan.js](http://vulcanjs.org/) app. 427 | 428 | - **Data storage/processing**: MongoDB & MongoDB Aggregations. 429 | 430 | - **Data API**: Node.js GraphQL API. 431 | 432 | - **Results Site**: [Gatsby](https://www.gatsbyjs.com/) React app. 433 | 434 | - **Data Visualizations**: [Nivo](https://nivo.rocks/) React dataviz library. 435 | 436 | - **Type**: [IBM Plex Mono](https://fonts.google.com/specimen/IBM+Plex+Mono) and [Bebas Neue](https://fonts.google.com/specimen/Bebas+Neue). 437 | 438 | - key: general.js2021.survey_intro 439 | t: | 440 | First the 2020 Olympics got pushed back to 2021, 441 | and now the 2021 State of JavaScript survey is happening now, in 2022! 442 | 443 | It's true: between work, family, and and all the turmoil in the world, 444 | some things got disrupted a little. 445 | 446 | But while the year may be off-by-one, we hope the data provided by the 447 | survey itself will be just as informative and insightful as ever. 448 | And don't worry, there will be another survey towards the end of this year to set things straight again! 449 | --------------------------------------------------------------------------------