Skip to content

Timeline

noodle stores response history for every request under <collection>/.timeline/. One file per request, mirroring the request ID structure.

Timeline entries for a request in the response pane

.collection/
├── .timeline/
│ ├── get-users.yml # Timeline for request "get-users"
│ ├── get-users.yml.bodies/ # Compressed bodies larger than 10 KB
│ │ └── <entry-id>-response.gz
│ └── users/
│ └── login.yml # Timeline for request "users/login"

Each timeline file is a YAML array of entries. Max 50 entries, newest first (prepended on save). Request and response bodies larger than 10 KB are stored in a sibling .yml.bodies/ directory as gzip-compressed sidecars, so the full body remains available without bloating the YAML file.

- timestamp: 1783374564216
envName: development
request:
id: users/get-users
name: Get Users
method: GET
url: https://api.example.com/users
headers: {}
params:
- name: page
value: "1"
auth:
type: inherit
response:
status: 200
statusText: OK
headers:
content-type: application/json
body: "[...]"
timeMs: 56.27
size: 27520
Field Type Description
timestamp number Unix timestamp in ms
id string Unique entry ID used to name body sidecars
envName string Active environment name when sent
request object Snapshot of the request at send time
response object Response data (present on success)
error object Error data (present on failure, instead of response)
Field Type Description
status number HTTP status code
statusText string HTTP status text
headers map Response headers
body string Response body, when it is stored inline
bodyRef object Reference to a gzip sidecar for a body larger than 10 KB
timeMs number Response time in milliseconds
size number Response body size in bytes
Field Type Description
message string Error description

Timeline request snapshots resolve ordinary environment variables but redact declared environment secrets, proxy/TLS settings secrets, sensitive headers, and literal auth credentials before persistence. Network messages and errors receive the same known-secret redaction. Server response status text, headers, and bodies remain exactly as received, and ordinary variables are not treated as secrets.

The stored snapshot represents the environment selected when the request was sent; switching environments does not rewrite old entries. Timeline YAML and compressed sidecars can still contain sensitive public variables or response payloads, so do not commit .timeline/.

When a request or response body exceeds 10 KB, the corresponding body field is omitted and replaced with a bodyRef:

bodyRef:
file: <entry-id>-response.gz
encoding: gzip
size: 27520

The file path is relative to that request’s .yml.bodies/ directory. Noodle removes sidecars when entries are evicted by the 50-entry limit or when the timeline is cleared. Treat sidecars as application-managed files.

Agents and scripts can analyze timeline data:

  • Average response time: Sum response.timeMs / count
  • Success rate: Count response.status in 2xx range / total count
  • Recent errors: Filter entries where error is present
  • Response size trend: Compare response.size across entries
  • Environment usage: Which envName was used per entry