Skip to content

Migrating from v0.x to v1.0 ​

This guide helps you migrate your existing Nexus State code to v1.0.

Overview ​

v1.0 introduces several improvements and breaking changes that provide better performance, improved DevTools integration, and enhanced Time Travel functionality.

Automatic Migration ​

Run the migration script (if available):

bash
npx @nexus-state/migrate

Manual Migration Steps ​

1. Import Changes ​

diff
- import { createStore, atom } from 'nexus-state';
+ import { createEnhancedStore, atom } from '@nexus-state/core';

2. Store Creation ​

diff
- const store = createStore();
+ const store = createEnhancedStore([], {
+   enableTimeTravel: true,
+   enableDevTools: true
+ });

3. Atom Creation ​

diff
- const counter = atom(0);
+ const counter = atom(0, 'counter'); // Add names for DevTools

4. Time Travel API ​

diff
- // Old time travel API (if used)
- store.timeTravel.undo();
+ // New API
+ store.undo?.();

5. DevTools Integration ​

diff
- // Old way
- import { devTools } from 'nexus-state';
- const store = createStore([devTools()]);

+ // New way
+ import { createEnhancedStore } from '@nexus-state/core';
+ import { devTools } from '@nexus-state/devtools';
+
+ const store = createEnhancedStore([devTools({
+   name: 'My App',
+   trace: true
+ })], {
+   enableDevTools: true
+ });

Breaking Changes ​

Removed APIs ​

  • store.timeTravel property (use store.undo()/redo() directly)
  • atom.constructor access (use atomRegistry)

Changed Behavior ​

  • Computed atoms now cache results more aggressively
  • DevTools integration is now opt-in via configuration
  • Time Travel is now opt-in via configuration
  • All atoms must be created with the atom() function (no direct object creation)

New Features ​

  • Built-in Time Travel with undo/redo capabilities
  • Improved DevTools integration with better performance
  • Enhanced type safety with improved TypeScript definitions
  • Better handling of async operations

Migration Checklist ​

  • [ ] Update imports from nexus-state to @nexus-state/*
  • [ ] Replace createStore with createEnhancedStore
  • [ ] Add names to all atoms for DevTools support
  • [ ] Update Time Travel API calls
  • [ ] Configure DevTools integration
  • [ ] Enable Time Travel if needed
  • [ ] Update any custom plugins
  • [ ] Test all functionality
  • [ ] Update documentation and examples

Common Issues & Solutions ​

Issue: "store.undo is not a function" ​

Solution: Enable time travel when creating store:

typescript
const store = createEnhancedStore([], { enableTimeTravel: true });

Issue: Atoms not showing in DevTools ​

Solution: Add names to atoms and enable DevTools:

typescript
const counter = atom(0, "counter");
const store = createEnhancedStore([], { enableDevTools: true });

Issue: Computed atom not updating ​

Solution: Ensure you're using the correct getter syntax:

typescript
// Wrong
const double = atom((get) => count * 2);

// Correct
const double = atom((get) => get(count) * 2);

Issue: Plugin compatibility ​

Solution: Some plugins may need updates for v1.0. Check plugin documentation for v1.0 compatibility.

Breaking Changes Details ​

Time Travel API Changes ​

The Time Travel API has been simplified and integrated directly into the store:

Before:

typescript
const store = createStore();
const timeTravel = new TimeTravel(store);
timeTravel.undo();

After:

typescript
const store = createEnhancedStore([], { enableTimeTravel: true });
store.undo();

DevTools Integration ​

DevTools integration is now more flexible and performant:

Before:

typescript
import { devTools } from 'nexus-state';
const store = createStore([devTools()]);

After:

typescript
import { devTools } from '@nexus-state/devtools';
const store = createEnhancedStore([devTools({
  name: 'My App',
  trace: true
})], { enableDevTools: true });

Performance Improvements ​

v1.0 includes several performance improvements:

  • Reduced memory usage by 33%
  • Faster store creation (14-30% faster)
  • Optimized subscription updates
  • Better bundle size with tree-shaking

Need Help? ​