Skip to content

SWC

⚠️ Note: These plugins are experimental. Feedback is welcome in the Github repo. Please file issues in the separate repo instead of jotai repo.

This plugin adds support for React Refresh for Jotai atoms. This makes sure that state isn’t reset, when developing using React Refresh.

Install it with:

Terminal window
npm install --save-dev @swc-jotai/react-refresh

You can add the plugin to .swcrc:

{
"jsc": {
"experimental": {
"plugins": [["@swc-jotai/react-refresh", {}]]
}
}
}

You can use the plugin with the experimental SWC plugins feature in Next.js.

module.exports = {
experimental: {
swcPlugins: [['@swc-jotai/react-refresh', {}]],
},
}

Examples can be found below.

Jotai is based on object references and not keys (like Recoil). This means there’s no identifier for atoms. To identify atoms, it’s possible to add a debugLabel to an atom, which can be found in React devtools.

However, this can quickly become cumbersome to add a debugLabel to every atom.

This SWC plugin adds a debugLabel to every atom, based on its identifier.

The plugin transforms this code:

export const countAtom = atom(0)

Into:

export const countAtom = atom(0)
countAtom.debugLabel = 'countAtom'

Default exports are also handled, based on the file naming:

countAtom.ts
export default atom(0)

Which transform into:

countAtom.ts
const countAtom = atom(0)
countAtom.debugLabel = 'countAtom'
export default countAtom

Install it with:

Terminal window
npm install --save-dev @swc-jotai/debug-label

You can add the plugin to .swcrc:

{
"jsc": {
"experimental": {
"plugins": [["@swc-jotai/debug-label", {}]]
}
}
}

Or you can use the plugin with the experimental SWC plugins feature in Next.js.

module.exports = {
experimental: {
swcPlugins: [['@swc-jotai/debug-label', {}]],
},
}

Examples can be found below.

You can enable the plugins for your custom atoms. You can supply them to the plugins like below:

module.exports = {
experimental: {
swcPlugins: [
['@swc-jotai/debug-label', { atomNames: ['customAtom'] }],
['@swc-jotai/react-refresh', { atomNames: ['customAtom'] }],
],
},
}

Open in StackBlitz