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 file mode (4.3), schedules and webhooks launch pipelines (7.11), proxy is prebuilt (8.10), and JSX rendering uses template (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 .root pipeline or a wrapper (7.10); named infra is selected with infra:<name> (10.7).
  • dataset single-dataset mode — becomes a plain data mount, so client paths change (records move under a dataset container).
  • userUrlPattern — RS2 resolves users from the users dataset 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-PUT to the new query mount as RS2 envelopes. ${name} placeholders carry over (now structural in JSON templates, 6.3); $0 subpath 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 .root pipeline wrapping or the single-inline-pipeline wrapper service.

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 .root pipeline 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 →