11.2 What is warned, adjusted, or skipped
The migrator is explicit about its limits. Everything it can't carry across cleanly is printed as a warning — review every one before deploying. They fall into three groups.
Warned and skipped/adjusted
- Services the migrator cannot translate mechanically — it still warns and
skips v1 static-site, email, timers, webhooks, proxy, templates, and similar
service definitions. Some now have direct RS2 building blocks: static-site is
a
filemode (4.3), schedules and webhooks launch pipelines (7.11),proxyis prebuilt (8.10), and JSX rendering usestemplate(6.6). Re-express the intent; do not assume a skipped v1 config has no RS2 equivalent. prePipeline/postPipeline/caching(where modal) /infraName/adapterSource— not carried. RS2's pre/post wrapping is done with a.rootpipeline or awrapper(7.10); named infra is selected withinfra:<name>(10.7).datasetsingle-dataset mode — becomes a plaindatamount, so client paths change (records move under a dataset container).userUrlPattern— RS2 resolves users from theusersdataset instead (5.2), so the v1 user-URL mechanism doesn't carry.- v1 query files — they live in the v1 query service's private store and must
be re-
PUTto the newquerymount as RS2 envelopes.${name}placeholders carry over (now structural in JSON templates, 6.3);$0subpath params carry over as trailing URL segments (6.2).
Does not carry over by design
These are intentional architectural breaks, not gaps:
- v1 Deno/TS service implementations — re-bundle against the RS2 contract.
The message API is intentionally similar, so the port is usually small:
rs2 new --js+rs2 deploy --bundle(Part 8). - JWTs — users re-authenticate (the signing key is new). bcrypt password hashes verify as-is (5.2), so users don't reset passwords; new hashes are argon2id.
- Chords — expand to explicit mounts.
- The
()outer-service mechanism — replaced by.rootpipeline wrapping or the single-inline-pipelinewrapperservice.
The mental model for the gaps
Most "missing" v1 features map to one of two RS2 idioms:
- Wrapping/ordering behavior (pre/post pipelines, outer services, modal
manage) → a
.rootpipeline that wraps the mount on any verb. - Custom logic (email, webhooks, bespoke services) → a custom service.
So migration is less "find the equivalent setting" and more "re-express this as a pipeline or a small service" — which is the RS2 way of doing it regardless of where you came from.
The final section is the checklist to take a migrated config to a working tenant.
← Previous: 11.1 What rs2 migrate carries over · Manual home · Next: 11.3 Post-migration checklist →