appsmithorg/appsmith · error · Error
Save page failed
Error message
Save page failed
What it means
Error thrown when SAVE_PAGE_ERROR wins the race against SAVE_PAGE_SUCCESS while adding a building block to the canvas. The skeleton widget was inserted, but the layout save that must precede pasting the building block failed, so the saga aborts before calling addBuildingBlockActionsToApplication.
Source
Thrown at app/client/src/sagas/BuildingBlockSagas/BuildingBlockAdditionSagas.ts:204
const loadWorkspaceId: string = yield select(getCurrentWorkspaceId);
const existingCopiedWidgets: unknown = yield call(getCopiedWidgets);
const buildingBlockDragStartTimestamp: number = yield select(
getBuildingBlockDragStartTimestamp,
);
// start loading for dropping building blocks
yield put({
type: ReduxActionTypes.DRAGGING_BUILDING_BLOCK_TO_CANVAS_INIT,
});
// makes sure updateAndSaveLayout completes first for initial skeletonWidget addition
const saveResult: unknown = yield race({
success: take(ReduxActionTypes.SAVE_PAGE_SUCCESS),
failure: take(ReduxActionErrorTypes.SAVE_PAGE_ERROR),
});
if (typeof saveResult === "object" && "failure" in saveResult!) {
throw new Error("Save page failed");
}
const response: ApiResponse<ImportBuildingBlockToApplicationResponse> =
yield call(addBuildingBlockActionsToApplication, dragDetails);
const isValid: boolean = yield validateResponse(response);
if (isValid) {
yield saveBuildingBlockWidgetsToStore(response);
// remove skeleton loader just before pasting the building block
yield put({
type: WidgetReduxActionTypes.WIDGET_SINGLE_DELETE,
payload: {
widgetId: skeletonLoaderId,
parentId: buildingBlockWidget.widgetId,
disallowUndo: true,
isShortcut: false,
},View on GitHub (pinned to 8cd9021c24)
Solutions
- Retry the drag-and-drop after confirming the server is reachable.
- Reduce the existing page size (remove unused widgets) if the save payload is rejected for size.
- Check the debugger / network response for the SAVE_PAGE error reason.
- Avoid concurrent building-block drops; one editor at a time on the page.
Defensive patterns
Strategy: retry
Prevention
- Confirm the server is reachable before dropping building blocks.
- Avoid two editors dropping blocks onto the same page simultaneously.
- Keep page widget count reasonable so save payloads are not rejected.
When it happens
Trigger: updateAndSaveLayout rejects server-side (validation error in the new skeleton, throttling, 5xx, network drop); concurrent save attempts collide; the page layout is too large and the server rejects it.
Common situations: Workspace offline briefly; large pages exceeding server limits; two editors dropping blocks at the same instant; backend deploy in progress.
Related errors
- Unable to fetch newly created actions
- ${extractExecutionErrorMessage(e)}
- Failed to load JS libraries
- Failed importing template
- The script at ${url} cannot be installed.
AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12).
Data as JSON: /api/errors/18ccb2014ce93f54.
Report an issue: GitHub.