Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Optimistic store update is hidden after a local derived-store write inside an action

Closed
#3,796 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Domain
frontend

Research direction

The report provides a playground reproduction but names no source files or tests. Start by running the reproduction and tracing how createOptimisticStore handles the local derived-store write and the following optimistic write while the action is pending. Done means the view shows New / saving: true during the save and reconciles to the authoritative source after completion.

Written by the indexing model from the issue text.

Description

Describe the bug

On experimental build 6f77b1b, writing a client-only flag to a writable derived store inside an action prevents a subsequent optimistic store update from appearing while that action is pending.

The optimistic store wraps the derived store. The local write only sets failed = false; the optimistic write changes title to "New" and sets saving = true. A direct JSX binding keeps showing "Old" and saving: false until the action completes.

const [cards, setOptimistic] = createOptimisticStore(local);

const save = action(function* () {
  setLocal(draft => { draft[0].failed = false; });
  setOptimistic(draft => {
    draft[0].title = "New";
    draft[0].saving = true;
  });
  yield completion;
});

Removing the setLocal call makes the optimistic update appear. The reproduction uses a normal component and direct text binding, without For, Show, routing, or external data loading.

Your Example Website or App

https://s.olid.uk/id/d27cf7de-2cc1-45a8-9144-6868e307a78f

Steps to Reproduce the Bug or Issue
  1. Open the playground and click Run once.
  2. During the two-second simulated save, observe Old / saving: false instead of the optimistic values.
  3. After completion, the display changes to New / saving: false. The report records both states.
  4. Reload and remove the marked setLocal call to compare: the optimistic values appear during the save.
Expected behavior

The optimistic view should immediately show New / saving: true while the action is pending, including when the action first writes to its underlying local store. After completion, it should follow the authoritative source with the temporary saving flag removed.

Platform
Additional context

The identical reproduction with published RC.13 is here: https://s.olid.uk/id/cf602874-eee9-400c-bd96-3022a77b7291

With the local flag write RC.13 6f77b1b
During the pending action New / saving: true Old / saving: false
After completion Old / saving: false New / saving: false

RC.13 shows the optimistic update correctly but suppresses the later source reconciliation discussed in #3733. The newer build reconciles correctly after completion, but loses the optimistic display while pending. Both playgrounds have Tailwind disabled.

Dominant language
TypeScript
Stars
36.1k
Forks
1.1k
Avg merge
11h 42m
Merged PRs (30d)
326

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from solidjs/solid

All issues in solidjs/solid

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.