December 13 - 16, 2024
In collaboration with
👍
👏
😆
😲
🎉
🚀
📝
* Use Note emoji to mark highlights, we'll generate clips and save to your bookmarks
useDoner Track
useDoner Track Q&A Rooms
useFalafel Track
useFalafel Track Q&A Rooms
Discussion rooms
Opening Ceremony
Making an Emulator in JavaScript? icon
Sara Vieira «‎Making an Emulator in JavaScript?»
Lightning Talks
Break
From Redux to Zustand to Jotai to Zustand to Custom: Our State Management Horror Story icon
Giulio Zausa «‎From Redux to Zustand to Jotai to Zustand to Custom: Our State Management Horror Story»
Make the Web Weird Again icon
Elian Van Cutsem «‎Make the Web Weird Again»
Break
React Server Components in AI Applications icon
Tejas Kumar «‎React Server Components in AI Applications»
React Query - The Bad Parts icon
Dominik Dorfmeister «‎React Query - The Bad Parts»
The Age of Universal React: What’s the Catch?
React 19 and the Compiler for the Rest of Us icon
Johannes Goslar «‎React 19 and the Compiler for the Rest of Us»
Fine-Grained Reactivity Without Any Compiler icon
Nicolas Dubien «‎Fine-Grained Reactivity Without Any Compiler»
Closing
Opening Ceremony
React Compiler - The Missing Piece for Optimizing React Applications icon
Tapas Adhikary «‎React Compiler - The Missing Piece for Optimizing React Applications»
Atomic Power: the Story of StyleX icon
Naman Goel «‎Atomic Power: the Story of StyleX»
Decoding Vector Search and Embeddings for React Developers icon
Shivay Lamba «‎Decoding Vector Search and Embeddings for React Developers»
ESLint One for All Made Easy icon
Anthony Fu «‎ESLint One for All Made Easy»
Case Study: Building Accessible Reusable React Components at GitHub icon
Siddharth Kshetrapal «‎Case Study: Building Accessible Reusable React Components at GitHub»
How I Support Over 100 Languages in My React app...and You Can Too! icon
Richard Carrigan «‎How I Support Over 100 Languages in My React app...and You Can Too!»
Future-Proof Your UI: Building With Web Components icon
Darko Bozhinovski «‎Future-Proof Your UI: Building With Web Components»
Testing Our Way to a Better Developer Experience icon
Will Klein «‎Testing Our Way to a Better Developer Experience»
How to Train Your Designer? icon
Dora Makszy «‎How to Train Your Designer?»
Closing
Opening Ceremony
Make Real: Tldraw’s Accidental AI Play icon
Steve Ruiz «‎Make Real: Tldraw’s Accidental AI Play»
React via Rust and Rescript: Why and How? icon
Dmitry Kovalenko «‎React via Rust and Rescript: Why and How?»
Break
Building Web Applications with Signals at Grammarly  icon
Oleksii Levzhynskyi «‎Building Web Applications with Signals at Grammarly »
From Hip-Hop to Code icon
Elizabet Oliveira «‎From Hip-Hop to Code»
Break
Enhancing Forms with React Server Components icon
Aurora Scharff «‎Enhancing Forms with React Server Components»
What Makes a Design System Win icon
Will Klein «‎What Makes a Design System Win»
The State of the Web: Key Insights From the HTTP Almanac 2024 icon
Burak Güneli «‎The State of the Web: Key Insights From the HTTP Almanac 2024»
Meet React Flight and Become a RSC Expert icon
Mauro Bartolomeoli «‎Meet React Flight and Become a RSC Expert»
Closing
Opening Ceremony
Beyond React Testing Library: Testing React Libraries (and library-like code) icon
Lenz Weber-Tronic «‎Beyond React Testing Library: Testing React Libraries (and library-like code)»
How to Code Images in React with SVG icon
Hunor Márton Borbély «‎How to Code Images in React with SVG»
How to Show 10 Million of Something: Frontend Performance Beyond Memoization icon
Christopher Ehrlich «‎How to Show 10 Million of Something: Frontend Performance Beyond Memoization»
Mastering Cache Control: Optimizing Performance for React Applications icon
Yael Balla «‎Mastering Cache Control: Optimizing Performance for React Applications»
The Superpower of ASTs: How We Saved 16% on Our Bundle Size icon
Omri Lavi «‎The Superpower of ASTs: How We Saved 16% on Our Bundle Size»
From Lag to Lightning: Boosting React Native Performance icon
Sweta Tanwar «‎From Lag to Lightning: Boosting React Native Performance»
Critical CSS icon
Sergey Labuts «‎Critical CSS»
Plants vs Thieves: Automated Tests in the World of Web Security icon
Ramona Schwering «‎Plants vs Thieves: Automated Tests in the World of Web Security»
Closing
Published recordings
See all
How to Train Your Designer?
React Day Berlin 2024React Day Berlin 2024
17 min
How to Train Your Designer?
Hello, I'm Dora Moxie, a UX designer with experience in software development. Training a designer benefits the whole development process, ensuring smooth delivery. Designers have a unique perspective and prioritize problems by involving engineers and testing solutions. Effective communication and documentation lead to faster delivery. Designers empathize with the customer and understand the problem and business requirements. Collaboration between designers and developers is crucial for solving problems. The product trio of product management, engineering, and design work together as equal partners. Collaboration and iterative design lead to learning, growth, and stronger solutions. Be open-minded and collaborate with designers and involve users to solve real problems and increase satisfaction.
Testing Our Way to a Better Developer Experience
React Day Berlin 2024React Day Berlin 2024
21 min
Testing Our Way to a Better Developer Experience
I want to talk about the importance of testing and how it can improve the developer experience. Lack of tests can lead to issues and breakdowns in productivity. The challenges of using TDD and testing last are discussed, along with the benefits of writing tests early. Effective tests provide valuable feedback and save time. Prioritizing user-focused testing and using tests as documentation are recommended. Tests should resemble user behavior, and enhancing testing capabilities with linters and custom matchers is suggested. Advanced testing techniques can improve developer productivity.
Future-Proof Your UI: Building With Web Components
React Day Berlin 2024React Day Berlin 2024
27 min
Future-Proof Your UI: Building With Web Components
Today, Darko discusses the use of web components to futureproof UIs and their compatibility with multiple frameworks. He addresses the challenges of web components and introduces the Solid Element tool for better developer experience. The demo showcases the usage of props and slots in web components and explores event handling. Darko also demonstrates how to integrate web components with React. He emphasizes that web components are not a silver bullet but are valuable for specific use cases and can be replaced with frameworks. He highlights the usefulness of web components for design systems and projects like SuperTokens. Web components are also suitable for widgets and leaf components.
Plants vs Thieves: Automated Tests in the World of Web Security
React Day Berlin 2024React Day Berlin 2024
25 min
Plants vs Thieves: Automated Tests in the World of Web Security
Hello everyone, and I'm so happy to see you here in React Day Berlin. This talk is on security and testing, two topics I'm passionate about. It's a wonderful allegory on web security using Plants vs. Zombies as inspiration. There are reasons to focus on testing as a line of defense. Learn your application and its vulnerabilities. Tests are the messenger, listen to them. Use OWASP's top 10 ranking to understand the most important security risks, including broken access control and cryptographic failure. Injection is a major security risk. Writing proper tests and using test cases can help mitigate this issue. To test for injection vulnerabilities, write negative tests that simulate extra injections in input fields. Test content security policies using Cypress. Implementing best practices and multiple defenses can keep attackers at bay. Automation is essential for detecting security issues in your app. Write test cases, use the features of test frameworks, and consider using different types of testing.
How I Support Over 100 Languages in My React app...and You Can Too!
React Day Berlin 2024React Day Berlin 2024
28 min
How I Support Over 100 Languages in My React app...and You Can Too!
I'm Richard Kerrigan, and I'm thrilled to be here today to show you how you can add multilingual support into your React apps. The problem we're trying to solve is that most websites, web apps, only publish content in one language, which is not convenient for users and is not inclusive for people for whom that language is not their primary language. We need a way to support other languages and dialects on our websites and web apps without adversely affecting our team's productivity. Now there are various ways we could approach solving the problem, depending on the resources we have available to us. But for the sake of this talk, let's assume that we don't have much budget to dedicate to this feature, nor do we have a team that can translate content for us. This is a fantastic use case for AI and automation. When my team started tackling this problem, we found the Azure AI translator service. It offers ad hoc text translation and document translation, with key features such as language support, cost-effectiveness, and accuracy. It also allows the use of custom glossaries to tweak the translation process. However, there are some limitations, such as compatibility with certain file types and the need for result validation and possible tweaking. Let's now focus on designing the workflow for translating content stored as JSON. Here's an example of how you could achieve this. We're taking the pieces of data that need to be translated and sending each piece through the translator. Then, we send the translated content as a response. For JSON content, the translation can be done at runtime in a React server component or an API route. For HTML or Markdown files, the translation can be incorporated into the CI-CD workflow, involving Azure Blob Storage, Azure Function App, and the app's source code files. Instead, we've moved the translation process to our GitHub Actions workflow. We provision the necessary resources in Azure, build and deploy the function app, and then perform the translation process. We configure the translation endpoint, specify the glossary for tweaking translations, and execute the translation. Once the translation is complete, we create a new blob in the output location. Our GitHub workflow ensures that all translations are done before proceeding to the next step, where we upload and download the artifact for deployment. This ensures that all content is translated and avoids errors for missing files. When setting up the translation process, it felt like magic. The pipeline for translating Markdown content is the same as for HTML content. The difference lies in how the metadata is handled. In HTML, the metadata is stored in the head of the file, while in Markdown, it is within the front matter section. When translating HTML files, the head needs to be translated as part of the process. For Markdown files, the metadata needs to be translated separately due to issues with Azure AI Translator. The translation function parses and translates the original files' metadata, then combines it with the translated files' content. The GitHub actions workflow provisions Azure resources, builds and deploys the function app, and runs the translation process for both HTML and Markdown files. The process is now deploying the ARM template that includes the necessary resources. We discussed the problem of limited language support on websites and web apps, the benefits of Azure AI Translator, and alternative solutions. We also explored different versions of the app for translating JSON, HTML, and markdown content without learning a new language. If interested, you can find more information and resources on GitHub and Azure AI Translator. The workflow is now deploying and translating the markdown files. It ensures all files are translated before deployment. Once the translation is complete, the files are put back into the repository. The deployment process guarantees the presence of all necessary resources. After a brief wait, the web app is ready to be viewed. The blog contains multiple posts. The metadata provides the title and excerpt for each post. The markdown is parsed into HTML for rendering. Formatting is preserved in different languages. Feel free to connect with me on LinkedIn or X.
Critical CSS
React Day Berlin 2024React Day Berlin 2024
18 min
Critical CSS
In this talk, we'll explore what critical CSS is, when to use it or not, how to implement it effectively, and some common challenges and use cases. The critical rendering path is a sequence of steps the browser takes to convert HTML, CSS, and JavaScript into visible content on the screen. Time and CPU are crucial factors in rendering content quickly, especially for mobile devices. Critical CSS matters because the CSOM can't be built incrementally, and the order of CSS rules affects their specificity. There are two primary ways to add CSS to your HTML: inline styles using style tags or external stylesheets using link tags. Critical CSS aligns only the styles needed to render the above-default content, reducing the size of render-blocking styles. There are manual and automatic tools for identifying critical CSS. Critical CSS is commonly used for static websites with statically generated pages. Testing the effect of critical CSS can be done using Lighthouse, Chrome Performance tab, or WebPageTest.org. BISTIs requires some extra handling but offers better performance. Over-inlining CSS and wrong style order can cause issues with critical styles. Implement optimization at build time.
Case Study: Building Accessible Reusable React Components at GitHub
React Day Berlin 2024React Day Berlin 2024
22 min
Case Study: Building Accessible Reusable React Components at GitHub
Hey, I'm Sid, and I work on the design systems team at GitHub. Let's talk about building accessible React components with a focus on screen readers. Use the correct HTML element for accessibility. For example, on GitHub, there are three tabs with options. These tabs are made using buttons. Let's see how a visually impaired person using a screen reader would access this website. What do they see? I'm going to enable the screen reader and walk you through what happens. When turning on the screen reader, it sets the context and tells you where you are. For example, on the React app, a button labeled 'Code' has focus and a menu popup. Inside the popup, there are several buttons with different labels. Something interesting happens. If I can't see the UI, I'm hearing buttons but no tabs. Screen readers cannot infer things like tabs from visual design. To provide this information, we can use the ARIA spec and its roles. By adding a role tab list to the div and role tab to each button, the semantics are conveyed. The role overrides HTML semantics. Screen reader identifies tabs, pronounces 'code spaces'. Default behavior of a tab is auto-focus. We can add aria-selected attribute to specify selection. Using React, I'm using an expression to set aria-selected based on the selected tab. The navigation into the tab panel is disorienting. There are separate groups for the tab list and tab panel, and there is a need for navigation between them. Use arrow keys to navigate within the widget. Remove tabs from the tab index, only the selected tab should be focusable. Implement arrow keys for navigation. Press tab to enter the tab panel. Press shift tab to go back up. Keyboard navigation is a common pattern extracted into a hook. Decide which keys to bind based on the widget type. Change selected tab on focus. Consider the ARIA authoring practices guide for keyboard interactions. Differentiate between instant and activated tabs. Follow the ARIA spec and use the APG as an informative resource. Screen readers may not always follow the ARIA authoring practices guide. Use correct HTML elements, add ARIA roles, properties, and states. Implement keyboard navigation. Use a GitHub example of notification settings with proper semantic elements. When selecting notification channels, the options are presented in a pop-up. The focus is on the first checkbox, indicating that it is the first option. The screen reader reads the status of each option. After selecting the desired option, the form can be submitted. The change is saved and the user is notified. The focus is recontextualized on the collapsed menu popup button. Not rendering the fourth option in certain conditions hides it from screen users. Removing the conditional and disabling the fourth checkbox until necessary eliminates this issue. Using IR disabled instead of disabled makes the element accessible for screen reader and keyboard users without affecting styling or click cancellation. You have to add your own class name and make sure it is disabled. It is accessible by keyboards. Voiceover on Mac uses 'dimmed' to signify IR disabled. Adding another span that requires at least one channel. Additional descriptions can be added using aria-describeby. SCREEN READER Only notify for failed workflows. Requires at least one channel to be selected. Dimmed unticked. Tick box. Now you know the label, why it is disabled, and that it's dimmed. And let's see if it's If I mean. Never. Menu popup collapsed. This flow seems more intuitive. You know all your options up ahead. One option was disabled, enabled something else, and it became enabled again. Much more clear. Feels like a better UI. We need to design with accessibility in mind. Accessibility isn't something that you can just sprinkle on in the end. We have to bring it way earlier in the stage. Be careful when disabling elements. Use RLDisabled. Short list of six things to consider. Links on my website. Follow me on Blue Sky.
From Lag to Lightning: Boosting React Native Performance
React Day Berlin 2024React Day Berlin 2024
17 min
From Lag to Lightning: Boosting React Native Performance
Hello, everyone. Today I'll talk about boosting React Native app performance. We'll explore optimization techniques, practical strategies, tools, and examples. Performance is crucial for mobile apps. Slow apps lead to frustration, abandonment, and revenue loss. We need to maintain 60 frames per second and overcome performance challenges. Let's understand the React Native architecture, legacy model, and the new architecture with JSI, fabric renderer, and turbo modules. Performance issues in React Native arise due to the single-threaded nature of JavaScript. The React Native bridge can be overwhelmed by large payloads, so using JSI for direct native communication is a more efficient solution. Profiling tools like Flipper, Chrome dev tools, React dev tools, Xcode instruments, and Android profiler help identify bottlenecks. Offloading heavy computations to web workers or JSI can improve JavaScript performance. Enable Hermes engine for improved performance. Optimize flatlist usage, delay non-urgent tasks, and prevent memory leaks for better app performance. Use initial numToRender and maxToRenderPerBatch props, memoize render item, and clean up side effects for optimized rendering. Preload and cache images, delegate gesture processing to the native thread, and continuously test the app under real-world conditions for smooth rendering and fluid UI.
ESLint One for All Made Easy
React Day Berlin 2024React Day Berlin 2024
21 min
ESLint One for All Made Easy
Hello everyone! I'm Anthony Fu, a coaching member of Vit, Vue, and Nuxt. Today, I'll share my findings and practices in exploring ESLink and its ecosystem. ESLink v9.0 released 7 months ago with the new FlatConfig, which simplifies plugin configuration and provides full control and customization in JavaScript. Migrate legacy config to FlatConfig with eslink-migrate-config CLI and use eslink-config-inspector for visualized step tool. Flag config utilities make config customization easier and allow project-aware configs. ESLink is a powerful AST toolkit and can be used as a formatter. Use ESLink for maintaining stylistic rules and customize it to fit your project's needs.
The Superpower of ASTs: How We Saved 16% on Our Bundle Size
React Day Berlin 2024React Day Berlin 2024
20 min
The Superpower of ASTs: How We Saved 16% on Our Bundle Size
Our story is about a super tool that reduces bundle size without changing code. It removes input statements, improves performance, and reduces bundle size. ASTs are used to optimize constant files by removing references and replacing with values. Bubble is a tool for code manipulation using ASTs. Manipulating code with Bubble paths allows for removing unnecessary variable declarations. Careful handling and testing are necessary when using AST tools. Guarding assumptions and writing exec tests are key practices. Completing the AST development lifecycle ensures correct code updates. ASTs are a powerful tool for software development.

Free perks

Full-access remote attendee gets

hands-on workshops with field experts
Participate in hands-on sessions and get certificates
Speakers’ personal video rooms
Hang out with well-know JavaScript developers and ask them anything
Q&A Discord channels
Enjoy chatting with the speakers in Discord space

Discussions

Join discussions focusing on specific technologies. Hang out with people who are on the same page. Discussion rooms on December 13 will be held in a hybrid format, while on December 16 in a remote format.

Maintaining an OS Project logo

Maintaining an OS Project

DiscussionRoom
Dec. 13, 13:30
Dominik Dorfmeister closeupLenz Weber-Tronic closeupNicola Corti closeupMauro Bartolomeoli closeupElian Van Cutsem closeupChristopher Ehrlich closeup
Dominik Dorfmeister, Lenz Weber-Tronic, Nicola Corti, Mauro Bartolomeoli, Elian Van Cutsem, Christopher Ehrlich,
Don't Burn Out! logo

Don't Burn Out!

DiscussionRoom
Dec. 13, 14:30
Mauro Bartolomeoli closeupDaniel Rios Pavia closeupSylwia Vargas closeupChristopher Ehrlich closeupDora Makszy closeup
Mauro Bartolomeoli, Daniel Rios Pavia, Sylwia Vargas, Christopher Ehrlich, Dora Makszy,
AI in our Day to Day Jobs logo

AI in our Day to Day Jobs

DiscussionRoom
Dec. 16, 15:30
Shivay Lamba closeupMichele Bonazza closeupRichard Carrigan closeupChristopher Ehrlich closeupSweta Tanwar closeupOmri Lavi closeup
Shivay Lamba, Michele Bonazza, Richard Carrigan, Christopher Ehrlich, Sweta Tanwar, Omri Lavi,
React Compiler logo

React Compiler

DiscussionRoom
Dec. 16, 17:00
Johannes Goslar closeupWill Klein closeupSweta Tanwar closeup Tapas Adhikary closeup
Johannes Goslar, Will Klein, Sweta Tanwar, Tapas Adhikary,

Our MCs

Kevin Lewis avatar
Kevin Lewis
Developer Advocate
Kevin runs Developer Relations at Directus and is Director of You Got This - a learning hub to help developers improve their core skills. He is an avid boardgamer, tired dad, and shameless Disney adult. He is based in Berlin with his partner and two kids.
Nathaniel Okenwa avatar
Nathaniel Okenwa
Twilio
Nathaniel is a Developer Evangelist at Twilio working to create magical moments for developers with their products. He is a die hard fan of JavaScript, sports, superheroes and mixed martial arts. His life goals are to have Batman's brains, Deadpool's humour, T'Challa's fashion sense, Killmonger's Wokeness, and Thanos' determination! He serves the Javascript community in the UK and the rest of Europe.
Kim Ngan Le Dang avatar
Kim Ngan Le Dang
Zattoo
Software Developer | Speaker | Writer | Cat mom | Dancer
Jani Eväkallio avatar
Jani Eväkallio
Software Engineer
Jani Eväkallio is a full-stack software engineer living the startup life in London.

Sponsors


Would like to join the community and improve your tech brand?
Check out the sponsors' offers

Gold
  • Sentry logo
  • Porsche Digital logo
  • Grammarly logo
Tech
  • FocusReactive logo
  • Hygraph logo
Media
  • German Tech Jobs logo
  • JSMastery logo
  • React Status logo
  • Cosden Solutions logo
  • BigEvent logo
  • Peli O Manta logo
  • TechnicalBeep logo
Community
  • Unicorn Club (Black logo) logo
  • BarcelonaJS logo
  • Kiel React (Native) Meetup logo
  • GrazJS logo
  • Software Craft Luxembourg logo
  • React Play logo
  • DeveD logo
  • BeerJS Skopje  logo
  • LuxembourgJS logo
  • This Week In React logo
  •  Angular Rome logo
  • React Brussels logo
  • Meet.js Poland logo
  • React Wroclaw Meetup logo
  • Gluestack logo
  • Infoshare logo
  • CopenhagenJS logo
  • React Vienna logo
  •  ReactJS Göteborg logo
  • GreeceJS logo
  • WeAreDevelopers World Congress 2024 logo
  • She Can Code logo
  • Node.js Israel logo
  • FrankenJS logo
  • Web Engineering Düsseldorf logo
  • React Africa logo
  • React India logo
  • React JS Milano logo
  • Hypertune logo
  • Double loop logo
  • Hamburg React.js Meetup logo
  • AdvancedJS Amsterdam logo
  • Element logic logo