JavaScript SDK changelog
TL;DR Two public releases.
0.5.7was the initial public release;0.6.0(2026-09-15, the current version) has exactly one breaking change:Score.criteriais now an ordered sequence instead of a dictionary keyed by integers. If you are on 0.5.7, rewritescore("...", {0: "low", 1: "high"})asscore("...", ["low", "high"]).
Releases
| Version | Changelog date | npm publish date | Nature |
|---|---|---|---|
0.0.0-bootstrap.0 |
not in any changelog | 2026-09-12 | registry placeholder; not a usable release |
0.5.7 |
2026-09-11 | 2026-09-12 | initial public release |
0.6.0 |
2026-09-15 | 2026-09-15 | breaking: score criteria become an ordered sequence |
The changelog dates come from the upstream changelog (identical in raw/docs/sdk__javascript__changelog.md and raw/github/typesafe-sdk-js/docs/changelog.md); the npm publish dates are from the registry listing recorded during ingestion. The two disagree for 0.5.7: the changelog says 2026-09-11, npm records the publish on 2026-09-12. Treat 2026-09-11 as the release-tag date and 2026-09-12 as the registry timestamp.
0.0.0-bootstrap.0 appears only in the npm version list; it has no changelog entry, no git tag in the ingested repository, and is the conventional placeholder used to claim a package name before the first real publish (inferred).
v0.6.0 (2026-09-15)
Upstream changelog, verbatim:
Breaking changes
- accept
Score.criteriaas an ordered sequence instead of a dictionary keyed by integers
That is the entire entry. Nothing else is listed as changed, added, or fixed.
What it means in the JS SDK
ScoreCriteria in 0.6.0 is a tuple type with a two-entry minimum:
type ScoreCriteria = readonly [EntryType, EntryType, ...EntryType[]];
and score() rejects a map at runtime:
if (!Array.isArray(criteria)) {
throw new TypeSafeError(
"Score criteria must be a list of descriptions indexed by score from zero, not a map.",
);
}
validateQuestions, which systemOne() runs before every request, repeats the check per question and also enforces the minimum length:
Score question "<name>" has criteria that are not a list; score criteria must be a list of descriptions indexed by score from zero.Score question "<name>" has N criteria; at least two scores are required.
Migration:
// 0.5.7 — dictionary keyed by integers
const urgency = score("How urgent is this ticket?", {
0: "can wait",
1: "this week",
2: "today",
3: "right now",
});
// 0.6.0 — ordered sequence, index 0 first
const urgency = score("How urgent is this ticket?", [
"can wait",
"this week",
"today",
"right now",
]);
The score keys are unchanged — index 0 is still the lowest rubric level — so ScoreResponse.score, .legend and .probabilities keep the same meaning. What improves is inference: with a literal array and the const type parameter on score(), ScoreOf<T> narrows to "0" | "1" | "2" | "3" instead of number, so legend["3"] and probabilities["0"] are typed. See JavaScript SDK interfaces and type aliases.
Nothing else in the public surface is documented as changed. VERSION was bumped to "0.6.0" in src/version.ts (kept in sync with package.json and enforced by npm run check:version), and jsr.json carries the same 0.6.0.
v0.5.7 (2026-09-11)
Upstream changelog, verbatim:
This is the initial public release of TypeSafe JavaScript and TypeScript SDK. Learn more in the documentation.
No feature list is published for 0.5.7. Everything documented on JavaScript/TypeScript SDK: install, client, choice/score/noul describes 0.6.0; the only 0.5.7 difference recorded anywhere in raw/ is the score-criteria shape.
The jump straight to 0.5.7 for a first public release (rather than 0.1.0) is not explained in any source.
Repository state
| Fact | Value |
|---|---|
| Repo | https://github.com/typesafe-ai/typesafe-sdk-js |
| Ingested commit | 66880ccded6cb642dc1809620c2b108c33730214 |
| Commit date | 2026-09-15 |
| Commit subject | Release v0.6.0 |
package.json version |
0.6.0 |
jsr.json version |
0.6.0 |
src/version.ts |
export const VERSION = "0.6.0"; |
| License | MIT |
| Language | TypeScript |
The ingested checkout contains a single commit (Release v0.6.0), so per-commit history before 0.6.0 is not available locally; the repository is listed as last pushed 2026-09-15.
Changelogs are generated with git-cliff (pinned at 2.13.1 in devDependencies), which is why the docs site changelog and docs/changelog.md in the repo are byte-identical apart from bullet markers (* vs -).
Version policy notes
VERSIONis exported as a literal type (const VERSION: "0.6.0" = "0.6.0"), so a dependency bump changes the type, not just the value.npm run check:version(scripts/check-version.mjs) is part of thecheckpipeline that runs onprepublishOnly, guarding againstsrc/version.tsdrifting frompackage.json.- The package is pre-1.0, and 0.6.0 already shipped a breaking change in a minor bump. Pin exactly (
"@typesafe-ai/sdk": "0.6.0") rather than with a caret if you care about stability. - The Python SDK ships the same version number
0.6.0with the sameScore.criteriabreaking change — see Python SDK changelog. The two SDKs are versioned in lockstep across the releases recorded here (inferred from the matching version numbers and identical breaking change).
Related
- JavaScript/TypeScript SDK: install, client, choice/score/noul — the 0.6.0 API surface
- JavaScript SDK interfaces and type aliases —
ScoreCriteria,ScoreOf,ScoreLegend - JavaScript SDK error classes, RetryPolicy, RequestOptions — errors thrown by the new validation
- Python SDK changelog — the parallel Python release history
- Versions and timeline (models, SDKs, API, company) — models, SDKs, API and company dates in one place
- Score questions — what an ordered rubric means to the model
Sources
- raw/docs/sdk__javascript__changelog.md (https://docs.typesafe.ai/sdk/javascript/changelog)
- raw/github/typesafe-sdk-js/docs/changelog.md (https://github.com/typesafe-ai/typesafe-sdk-js)
- raw/github/typesafe-sdk-js/package.json, jsr.json, src/version.ts, src/questions.ts, src/types.ts (commit 66880ccded6cb642dc1809620c2b108c33730214, 2026-09-15)
- raw/MANIFEST.json (commit pin for raw/github/typesafe-sdk-js)
- npm registry listing for
@typesafe-ai/sdkrecorded 2026-09-17: 0.0.0-bootstrap.0 and 0.5.7 published 2026-09-12, 0.6.0 published 2026-09-15