---
title: "How Migrating from Vanilla Redux to Redux Toolkit Improved State Management in Shopify POS"
description: "Shopify’s React Native Point of Sale team migrated its production state management from Vanilla Redux to Redux Toolkit (RTK) after developers found boilerplate and debugging difficult. They rejected a full rewrite in favor of incremental reducer-by-reducer conversion, allowing Vanilla reducers and RTK slices to coexist and limiting rollback and destabilization risk. Most reducers adopted RTK’s mutable syntax and generated action creators, while asynchronous logic retained a hybrid thunk approach because RTK Query did not support GraphQL and wholesale use of pending and fulfilled actions would split logic between thunks and reducers. The roughly three-month migration deleted 3,500 lines of boilerplate and was released gradually to production. The team also identified explicit TypeScript typing for dispatch, selector, and store hooks, plus dispatch().unwrap() for awaited calls, as important details, while atypical reducers were deferred to separate projects."
---

# How Migrating from Vanilla Redux to Redux Toolkit Improved State Management in Shopify POS

[Shopify](https://yomu.fyi/company/shopify) · 2023-10-18 · Mar 31, 2023

**Type:** Explainer

## Summary

Shopify’s React Native Point of Sale team migrated its production state management from Vanilla Redux to Redux Toolkit (RTK) after developers found boilerplate and debugging difficult. They rejected a full rewrite in favor of incremental reducer-by-reducer conversion, allowing Vanilla reducers and RTK slices to coexist and limiting rollback and destabilization risk. Most reducers adopted RTK’s mutable syntax and generated action creators, while asynchronous logic retained a hybrid thunk approach because RTK Query did not support GraphQL and wholesale use of pending and fulfilled actions would split logic between thunks and reducers. The roughly three-month migration deleted 3,500 lines of boilerplate and was released gradually to production. The team also identified explicit TypeScript typing for dispatch, selector, and store hooks, plus dispatch().unwrap() for awaited calls, as important details, while atypical reducers were deferred to separate projects.

## Context

Near the end of 2022, the Point of Sale team reconsidered state management in its React Native app. Vanilla Redux had been in production for about two years, and developers were unhappy with its boilerplate and the effort required to trace bugs through action creators and types. Because the existing logic was complex, the team wanted to reduce code while reusing it rather than rewriting everything.

## Approach / What changed

A task force incrementally converted reducers from Vanilla Redux to RTK, allowing both Vanilla reducers and RTK slices to coexist in the root reducer. The team generally adopted RTK’s mutable syntax and generated action creators, but retained a hybrid thunk approach for asynchronous logic because RTK Query did not support GraphQL and a full pending/fulfilled conversion would have split logic between thunks and reducers. Refactored reducers were merged and released one at a time so changes could be rolled back with a smaller debugging surface.

## Takeaways

- The incremental strategy prioritized faster estimation, code reuse, and lower destabilization risk over a fully idiomatic RTK rewrite.
- RTK Query was not usable for the app’s web requests because it did not support GraphQL, so the team used a modified createAsyncThunk approach.
- The migration removed 3,500 lines of boilerplate; awaited dispatch calls require dispatch().unwrap(), and explicit typing of dispatch, selector, and store hooks avoids TypeScript warnings.

**Tags:** [Architecture](https://yomu.fyi/topic/architecture), [GraphQL](https://yomu.fyi/topic/graphql), [Refactoring](https://yomu.fyi/topic/refactoring), [TypeScript](https://yomu.fyi/topic/typescript)

- Source: [Shopify](https://shopify.engineering/react-redux-toolkit-migration)
- Source URL: https://shopify.engineering/react-redux-toolkit-migration
- Ingested by Yomu: 2026-08-30T13:21:21.882Z

[Read original post](https://shopify.engineering/react-redux-toolkit-migration)
