Skip to main content
Start by identifying the exact deployment. A squid name or tag alone is not enough when several slots are running.

First checks

  1. Confirm the organization, squid name, slot, and processor name.
  2. Confirm the deployed commit and manifest are the ones you intended.
  3. Compare the failing slot with a local run of the same commit.
  4. Inspect logs from the first error, not only the latest retry.
  5. Check processor progress and lag, not only the Cloud health badge.
  6. Check the upstream Portal, SQD Network dataset, or RPC separately.
  7. Check database storage, connections, slow queries, and migration status.

Copyable support packet

Provide this information when requesting support:
Include a short log window around the first error. Remove deployment keys, API keys, database URLs, and other credentials.

“Secrets outdated. Please restart the squid”

Creating, removing, or changing an organization secret does not modify environment variables inside running processes. Restart the affected slot:
A normal restart preserves the database. Verify that the new secret exists in the same organization as the deployment and is referenced correctly in squid.yaml.

Stuck in Building, Deploying, or Starting

Run these checks in order:
  1. Install the current CLI and verify it:
  2. Build and run the exact project locally:
  3. Confirm required files are present:
    • package.json
    • package-manager lockfile
    • tsconfig.json
    • commands.json
    • src/
    • squid.yaml
  4. Check the init, processor, and API commands in the manifest.
  5. Inspect the relevant container:
If init fails, processor and API services do not start.

Healthy, but no new blocks are indexed

“Healthy” means that the service is running. It does not prove that the processor is advancing.
  1. Check whether sqd_processor_last_block changes.
  2. Compare it with sqd_processor_chain_height.
  3. Search processor logs for RPC, rate-limit, timeout, and data-range errors:
  4. Confirm the RPC has the required historical range. A non-archive endpoint can work near the head but fail during a replay.
  5. Confirm the selected Portal or Network dataset covers the requested blocks and data fields.
  6. Check whether the processor is blocked by a long database transaction.
Repeated HTTP 429 or 5xx responses are normally an upstream-source issue. The SDK may retry while indexing appears stalled.

Works locally, but not in Cloud

Compare configuration rather than changing code first:
  • Is Cloud running the same commit and lockfile?
  • Does the manifest start the same command used locally?
  • Are required variables declared under deploy.env or the service-level env?
  • Are secrets stored in the correct organization, and was the slot restarted after changing them?
  • Does local .env contain a value that Cloud never receives?
  • Is Cloud using a different RPC or Portal endpoint?
  • Did the init service apply the expected migrations?
Cloud injects its own Postgres connection fields when the Postgres addon is enabled. They override manifest variables named DB_URL, DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASS, and DB_SSL.

Models or columns are missing

Check the migration container first:
Then verify:
  1. Generated entity code is included in the build.
  2. The migration file is committed.
  3. deploy.init.cmd applies migrations.
  4. The API and processor point to the same Cloud-provided database.
  5. You are querying the intended slot URL.
A schema migration does not populate historical values. Follow Schema changes and backfills when the new model depends on old blocks.

Multi-processor status is missing

Multi-processor squids commonly store processor state in separate schemas. If a processor uses:
its status table is:
Inspect each processor’s stateSchema; do not assume every status row is in squid_processor.status. If two processors write to the same application tables, ensure they cannot update the same record concurrently. Serialization failures usually indicate a data-ownership or transaction-isolation problem, not a Cloud restart problem.

Database query blocks indexing

Long work started through ctx.store runs inside the batch transaction. If it times out or deadlocks, the batch rolls back.
  • Move periodic aggregates to a background job.
  • Add indexes for frequent filters and joins.
  • Use a statement timeout.
  • Break backfills into bounded, resumable batches.
  • Inspect and tune update-heavy tables.

Out of disk space

Check whether growth comes from indexed data, indexes, dead tuples, or a temporary backfill. Increase storage only after identifying the cause:
See Postgres scaling.

API URL changes after deployment

A generated slot URL is intentionally tied to one deployment:
Applications should use a stable tag URL:
Follow Slots and tags to move the production tag after validation.

Manifest validation errors

Current naming rules:
  • Squid name: 3 to 30 lowercase letters, numbers, or dashes.
  • Slot: 2 to 6 lowercase letters, numbers, or dashes.
  • Tag: 2 to 32 lowercase letters, numbers, or dashes.
  • Names cannot start or end with a dash.
  • slot, tag, and deprecated version cannot be used together.
  • Multi-processor names must be unique.
Use manifest_version, not deprecated manifestVersion.

Avoid destructive recovery

Do not use sqd deploy --hard-reset as a general troubleshooting step. It drops and recreates all deployment resources, including the database, and causes API downtime. If a clean replay is required, prefer a fresh slot, validate it, move the production tag, and retain the old slot temporarily for rollback.