Local Data
Use this page when teammates need personal test data without merge conflicts.
The two recommended patterns
| What changes locally | Mechanism |
|---|---|
| Scalar config like URLs, IDs, flags | .env.local and .env.local.secrets |
| Structured request bodies or example rows | *.local.json next to shared data files |
Local env files
Keep the team baseline committed and personal overrides gitignored:
.env # committed — team defaults
.env.secrets # gitignored — team credentials
.env.local # gitignored — personal overrides
.env.local.secrets # gitignored — personal credentialsSwitch to personal env files locally with:
glubean run --env-file .env.localLocal JSON data
For structured examples, keep shared and personal files in the same directory:
data/create-user/
shared.json
zz-alice.local.jsonfromDir() and fromDir.concat() load every matching file and append rows in
sorted filename order. fromDir.merge() shallow-merges object files in sorted
filename order, so later filenames win on duplicate keys.
There is no special runtime switch for local files. The convention is simpler:
- Keep
*.local.json,*.local.yaml, and*.local.ymlgitignored. - Local runs can see personal files that exist on your machine.
- CI sees only committed shared files because gitignored local files are absent.
- If you intentionally want personal values to win for duplicate keys with
fromDir.merge(), name the local file so it sorts later, such aszz-alice.local.json.
When you need an explicit shared-only run on your own machine, keep shared and
personal data in separate directories or pass an ext/directory choice that
matches only the shared files.
Next
Last updated on