verification
use it
# add to stunt.yaml
services:
gsheets:
adapter: embedded:gsheets-style
# then
$ stunt upThe embedded: source extracts this adapter from the binary — no git clone, fully offline.
how to mock the Google Sheets API locally
Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of Google Sheets API. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real Google Sheets API v4 surface — the data is fake, the behavior is real.
backing stores
spreadsheetscells
api surface (10)
generated from the adapter manifest — exactly what boots, nothing more · covers 58% of the real API's 17 routes (derived from sdk google-api-go-client @ v0.293.0)
10 routes
POST/v4/spreadsheets
GET/v4/spreadsheets/{spreadsheetId}/values:batchGet
POST/v4/spreadsheets/{spreadsheetId}/values:batchGet
POST/v4/spreadsheets/{spreadsheetId}/values:batchUpdate
POST/v4/spreadsheets/{spreadsheetId}/sheets
POST/v4/spreadsheets/{ss_id_or_verb}
GET/v4/spreadsheets/{spreadsheetId}
GET/v4/spreadsheets/{spreadsheetId}/values/{range}
PUT/v4/spreadsheets/{spreadsheetId}/values/{range}
POST/v4/spreadsheets/{spreadsheetId}/values/{range_verb}
SDK-verified behaviors (8)
- ✓Spreadsheets.Create + Get round-trip
- ✓Values.Update + Values.Get round-trip an A1 range
- ✓Values.Get MajorDimension=COLUMNS transposes the grid
- ✓Values.Append writes after the last populated row
- ✓Values.BatchUpdate writes multiple ranges in one call
- ✓Values.BatchGet reads a range over GET query params
- ✓Spreadsheets.BatchUpdate addSheet adds a tab Values can write to
- ✓Get on an unknown spreadsheet -> googleapi 404
Not implemented (4)
- No row-only A1 ranges (1:5) or quoted sheet titles
- No copyTo, named ranges, developer metadata, or byDataFilter endpoints
- batchUpdate limited to 4 request types; no insertDimension, mergeCells, sortRange
- No valueRenderOption or dateTimeRenderOption on values reads
Differs from the real API (3)
- Repeated ranges query params collapse to the first value (engine query params are single-valued)
- Cell values always come back as strings; numeric cells stringify as floats (42 -> "42.0"), no USER_ENTERED/RAW typing
- Spreadsheet get ignores fields= and returns the full object
want more of the Google Sheets API surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.