> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tablixhq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Error Handling

> How Tablix surfaces errors across saving, sharing, AI, Python, SQL, and charts — exact messages, retry behavior, and what triggers them.

Tablix doesn't use a single global "something crashed" screen. Instead, each subsystem (saving, AI, Python, SQL, sharing) surfaces its own errors close to where they happen — as an inline status, a browser alert, or a chat message — so you know exactly what failed and can retry that specific thing.

<Note>
  This page is a technical reference for **what each error means and why it happens**. For step-by-step fixes, see [Troubleshooting](/troubleshooting).
</Note>

## Saving & Sync Errors

Autosave runs in the background: **5 seconds** after your first edit to a new file, then every **2 minutes** while the file has unsaved changes. A small sync status is tracked as `idle` → `syncing` → `saved` / `error`.

| Message                                                                                    | Cause                                                                                                                                |
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| *"Failed to save changes. Please check your permissions."*                                 | Saving to a shared file failed on the server side                                                                                    |
| *"You do not have permission to save changes to this file."*                               | You opened a shared link in **Viewer** mode and tried to edit — see [Sharing & Collaboration](/sharing#access-mode-viewer-vs-editor) |
| *"Access Denied or File Not Found: You may not have permission to view this spreadsheet."* | The shared link's token is invalid, expired, or the owner set the file back to Private                                               |
| *"You have reached the limit of 10 Google Drive files on the free plan..."*                | You're on the Starter plan and tried to save an 11th file — see [Payment & Billing](/payment)                                        |
| *"Google Drive not connected. Please go to Integrations to connect."*                      | Your Drive session expired or was never connected                                                                                    |

<Info>
  If saving fails because your Google session expired (an authentication error), reconnect Drive from **Integrations** and try saving again — your unsaved edits stay in the browser tab until you do.
</Info>

## AI Assistant Errors

| Situation                                               | What happens                                                                                                                                                           |
| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Not logged in                                           | *"Please log in to use AI features."* — sign in with Google or Microsoft first                                                                                         |
| The AI service is temporarily overloaded (HTTP 429/503) | Tablix **automatically retries up to 3 times**, waiting 2s, then 4s, then 8s between attempts, before giving up                                                        |
| You click stop mid-request                              | The in-flight request (and any pending retry) is cancelled immediately                                                                                                 |
| Generated code throws a runtime error                   | The error is shown in the chat/console with a **"Fix with AI"** button that resubmits the error for an automatic fix — see [AI Assistant](/ai-assistant#fixing-errors) |
| Agent mode step fails                                   | The agent automatically writes a fix on the *next* step using the previous error, rather than stopping — see [Agent Mode](/agent#self-correction)                      |
| Agent mode doesn't finish in 5 steps                    | *"Agentic loop reached maximum steps limit."* — see [Agent Mode](/agent#how-the-loop-works)                                                                            |

## Python Errors

Tablix's Python engine (Pyodide) loads from a CDN the first time you open the code editor, showing **"Loading Python runtime..."** then **"Initializing Python..."**. If this never finishes, it usually means your network is blocking that CDN request.

| Message                                                                                                                                                     | Cause                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *"Python engine not ready"*                                                                                                                                 | You ran code before Pyodide finished loading — wait for initialization to complete                                                                          |
| A Python traceback (e.g. `NameError`, `TypeError`, `AttributeError`)                                                                                        | An error in the code itself — shown in the console with the failing line underlined where possible                                                          |
| `AttributeError: Can only use .str accessor with string values!`                                                                                            | A column wasn't converted to string before using text functions — cast it with `.astype(str)` first                                                         |
| Silent `NaN` results in a calculation                                                                                                                       | A numeric column still contains currency symbols, `%`, or commas — strip them with `pd.to_numeric(..., errors='coerce')` before doing math                  |
| `SyntaxError` from unexpected characters                                                                                                                    | Emoji or special unicode characters inside Python code/strings — remove them                                                                                |
| *"Failed to serialize cell updates"* / *"...structural updates"* / *"...sort\_table payload"* / *"...apply\_filter payload"* / *"...clear\_filter payload"* | The data passed to a bridge function (`update_cells`, `insert_col`/`insert_row`, `sort_table`, `apply_filter`, `clear_filter`) wasn't in the expected shape |

<Tip>
  The AI is specifically instructed to clean numeric columns and cast text columns before operating on them, and to avoid emojis in generated code — so these particular errors are more common in hand-written Python than AI-generated Python. See [Python](/python) for the full bridge API.
</Tip>

## SQL Errors

| Message                                                 | Cause                                                                                                                     |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| *"SQL engine not ready"*                                | You ran a query before the in-browser SQLite engine finished initializing                                                 |
| A SQLite error (e.g. "no such table", "no such column") | Your query referenced the wrong table name (must be `sheet`) or an unsanitized column name — see [SQL](/sql#how-it-works) |

## Chart Errors

| Message                                                                 | Cause                                                                           |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| *"Could not generate chart image. Please check if the chart has data."* | The chart's selected range has no data to render                                |
| *"Chart download failed: ..."*                                          | The PNG export step failed — try again, or check the chart still has valid data |

## Other In-App Messages

| Message                                                  | Cause                                                                                          |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| *"'{text}' not found."*                                  | Find & Replace couldn't find your search text                                                  |
| *"Font '{name}' is already in the list."*                | You tried to add a custom font that's already been added                                       |
| *"Failed to update sharing settings. Please try again."* | The sharing backend rejected the settings update — try again or contact support if it persists |
| *"Error connecting to sharing service."*                 | A network issue while opening or saving Share settings                                         |

## General Pattern

Across all of these, Tablix follows the same shape:

<Steps>
  <Step title="The failing action is isolated">
    A failed save, a failed chart render, or a failed AI call doesn't take down the rest of the app — the grid, other sheets, and unrelated features keep working.
  </Step>

  <Step title="The message tells you what to do next">
    Messages point at a concrete next step: reconnect Drive, upgrade your plan, fix the code, or try again.
  </Step>

  <Step title="Retries happen automatically where it's safe to do so">
    AI calls retry on overload automatically; saves and chart renders do not auto-retry, so re-trigger them yourself if they fail.
  </Step>
</Steps>

For guided fixes to the most common issues, see [Troubleshooting](/troubleshooting).
