Configure local testing

Testing your data project locally ensures your resources work as expected before deploying to Tinybird Cloud.

You can validate and test with these workflows:

  • Check the deployment before creating it.
  • Create fixture files in your project.
  • Ingest sample data through local APIs.
  • Run and update YAML tests with tb test.

Check deployment

After finishing development, run tb deploy --check to validate the deployment before creating it.

tb deploy --check

Connection checks

When you run tb deploy --check (local) or tb --cloud deploy --check (cloud), Tinybird validates external connections to S3, Kafka, GCS, and databases referenced via table functions.

For local checks:

  • Use tb secret set to store connection secrets.
  • If you use S3 locally, start Tinybird Local with tb local start --use-aws-creds.

Fixture files

Fixtures are sample files stored in the fixtures/ folder.

my-app/
├─ datasources/
│  ├─ user_actions.datasource
│  └─ ...
├─ fixtures/
│  ├─ user_actions.ndjson
│  └─ ...

Create fixtures manually. For example:

cat > fixtures/user_actions.ndjson <<'EOF'
{"timestamp":"2026-01-01 00:00:00","action":"CLICKED","user_id":"u_1"}
{"timestamp":"2026-01-01 00:01:00","action":"VIEWED","user_id":"u_2"}
EOF

When fixture files match the data source name (for example, fixtures/user_actions.ndjson for datasources/user_actions.datasource), tb build loads them automatically.

If you use custom fixture filenames, append them manually:

tb datasource append user_actions --file fixtures/custom_user_actions.ndjson

Call the ingest APIs

You can also test by calling local ingest APIs:

Get a token with tb token ls, then call your local endpoint:

curl \
      -X POST 'http://localhost:7181/v0/events?name=<your_datasource>' \
      -H "Authorization: Bearer <your_token>" \
      -d $'<your_data>'

Create a test suite

Create test YAML files manually in the tests/ folder.

Example tests/user_action_insights_widget.yaml:

- name: user_action_insights_widget_clicked
  description: Returns user actions filtered by CLICKED
  expected_http_status: 200
  parameters: action=CLICKED
  expected_result: |
    {"action":"CLICKED", "user_id":"u_1"}

Then run tests:

tb test run

To refresh expected results for a test file or resource:

tb test update user_action_insights_widget

Copy Pipes write into target data sources instead of returning rows directly. To test them:

  1. Create a YAML test file for the copy pipe in tests/.
  2. Run tb copy run <copy_pipe> to populate the target data source.
  3. Run tb test update <copy_pipe> to capture expected results.

Next steps

Updated