Design Token Migration Review
Pricing
$100.00 / 1,000 completed reports
Design Token Migration Review
Compare design-token snapshots for additions, removals, value changes and alias-reference issues. Get one deterministic JSON report with affected alias paths. Supports a bounded number, dimension and duration profile; no automatic fixes.
Pricing
$100.00 / 1,000 completed reports
Rating
0.0
(0)
Developer
Picknotes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Compare two design-token snapshots before a migration. Get a deterministic JSON report of added, removed and changed tokens, alias-reference issues, and potentially affected alias paths.
This Actor supports the bounded dtcg-2025.10-scalar-alias/1 profile described below. It is a review tool: it does not modify your files or automatically fix a migration.
Quick start
Run the bundled synthetic example with this input:
{"useDemo": true}
Leave tokenProfile, baselineTokensJson and candidateTokensJson absent in demo mode. The demo uses the same report and pricing path as your own inputs; it is not a free preview.
For your own token files, use the five fields below. The two catalogs must be JSON-encoded strings, not nested objects in the Actor input:
{"useDemo": false,"authorizedNonpersonalNonconfidentialData": true,"tokenProfile": "dtcg-2025.10-scalar-alias/1","baselineTokensJson": "{\"spacing\":{\"$type\":\"dimension\",\"small\":{\"$value\":{\"value\":8,\"unit\":\"px\"}},\"button\":{\"$type\":\"dimension\",\"$value\":\"{spacing.small}\"}}}","candidateTokensJson": "{\"spacing\":{\"$type\":\"dimension\",\"small\":{\"$value\":{\"value\":10,\"unit\":\"px\"}},\"button\":{\"$type\":\"dimension\",\"$value\":\"{spacing.small}\"}}}"}
This example changes spacing.small from 8px to 10px. The report also identifies the changed resolved value of spacing.button and includes that alias in the affected paths for spacing.small.
Only submit data you are authorized to send to Apify, and only nonpersonal, nonconfidential material. Set the authorization field to true only when that statement is accurate. Extra input fields are rejected.
Supported token format
Each catalog is a UTF-8 JSON object containing named groups and tokens.
- Types:
number,dimensionanddurationonly. - A number literal uses a JSON number as
$value. - A dimension literal uses
{"value": 8, "unit": "px"}or unitrem. - A duration literal uses
{"value": 100, "unit": "ms"}or units. - An alias uses the whole-string form
"{spacing.small}". Each alias must declare its own$typeexplicitly. - Literal tokens may inherit
$typefrom an enclosing group. - Tokens allow only
$type,$valueand optional$description. Groups may contain child groups/tokens,$typeand$description. - Names start with an ASCII letter or underscore, followed by ASCII letters, digits, underscores or hyphens. Dots separate path segments; they are not allowed within names.
Descriptions are counted as ignored metadata and do not produce token-change findings. Duplicate JSON keys, unsupported properties or types, malformed values and unsupported syntax are rejected.
This is a limited profile, not full DTCG compatibility. Color, typography, shadow, gradient and other composite tokens are not supported. There is no unit conversion: 100ms and 0.1s are reported as numeric and unit changes rather than treated as equivalent.
What the report checks
- Added, removed, changed and unchanged token paths
- Type, literal/alias representation and alias-target changes
- Changes to normalized numeric values, units and resolution state or terminal target
- Missing alias targets, references to groups, type mismatches, cycles and unresolved dependencies
- Transitive alias paths affected by each changed token, traced separately in the baseline and candidate snapshots
Impact paths describe token-reference relationships, not proven UI breakage. The Actor does not inspect application code, render components, test accessibility or infer the intent of a change. It does not fetch URLs or follow external references from token input.
Output
A successfully delivered report is one item in the run's default dataset, not one item per token. The item contains:
reportJson: the complete report as a JSON string; parse this string to inspect the reportreportSha256andreportBytes: the hash and UTF-8 byte length of that exact report stringinputManifest: each catalog's role, byte length and SHA-256 hash- Run, contract, delivery and source-version identifiers, plus a receipt
The parsed report contains summary, per-token results, reference_issues, ignored_metadata, all_values_resolved, limits and input hashes. Each result includes the baseline and candidate token state, change_codes and impacted_alias_paths.
status: "issues" means there are changes or reference issues in either snapshot. It does not mean the Actor failed. status: "ok" means no token changes or reference issues were found within the supported profile. Determinism applies to report content for identical input bytes; run and delivery identifiers vary between runs.
Limits
- Each catalog: at most 1,048,576 UTF-8 bytes
- Each snapshot: at most 1,000 tokens and 1,000 groups, including the root group
- JSON nesting: at most 32 levels
- Paths: at most 16 segments, 64 ASCII characters per segment and 512 ASCII characters total
- Alias chains: at most 32 edges
- Each description: at most 1,024 Unicode code points
- Numbers: at most 28 significant digits, 128 ASCII characters, and exponent bounds of ±12, including the adjusted exponent for nonzero values
- Report: at most 2,097,152 bytes, 2,000 changed rows and 2,000 total changed-token/affected-alias pairs
- Entire serialized Actor input: at most 4,500,000 UTF-8 bytes, including escaping and whitespace
Inputs within individual size limits can still exceed the combined graph, report-size or processing-time limits. Unsupported or oversized inputs are rejected rather than silently truncated.
Pricing and reruns
The configured price is USD 0.10 per delivered report, with platform usage included. One dataset-item event is configured per report; both demo and own-input runs use this path.
The receipt records expected pricing and delivery consistency. It is not proof of platform billing or owner settlement; its settlementStatus is not_verified.
If a run fails after attempting delivery, inspect its dataset and billing status before rerunning. An accepted report may remain present or billable even when the final run status indicates a failure. A rerun is a separate run and may incur another charge.
Data handling
Apify stores Actor input before execution and stores output under your Apify account's access settings and the platform's retention rules. Full reports retain token identifiers, normalized values and alias relationships. This is not a local-only workflow or a promise of private storage.
No anonymization, secret scanning or automatic deletion is provided. The processing region has not been verified. Review your account's storage access and retention settings before submitting data, and use only authorized nonpersonal, nonconfidential input.