Docs

Upgrading

Move between Proa versions and find what broke.

Open Markdown

Proa is pre-1.0. Minor versions carry breaking changes. Each is listed in CHANGELOG.md, with larger ones under a Breaking marker and a guide under docs/migrations/ (0.3 standalone, shared WebContext).

Read the changelog first, then upgrade one minor version at a time:

cargo update -p proa
cargo proa check

cargo proa check runs the template lints and the RSJS linker together, which is where most upgrade breakage surfaces. A plain cargo check will miss link-time errors.

Upgrading to 0.4

Applications can replace direct rendering and framework dependencies with the proa facade:

[dependencies]
proa = { version = "0.4", features = ["axum"] }

Import common types and macros from proa::, loaders from proa::stream, and Axum integration from proa::axum. Add actions or react only when needed. RSJS and build-time font dependencies retain their own package versions. Direct implementation-crate dependencies remain supported for advanced uses.

Managed metadata uses render_head, explicit Page/Layout roles, and a head outlet. Markdown macros use one string body, and content_part! wrappers are removed. Review which outgoing URLs need the application mount and use cx.url(path) for those. See metadata, Markdown, and rendering responses.

Upgrading to 0.3

0.3 was a consolidation release. Six surfaces were removed and one buffer became the standard.

ChangeWhat to do
Standard render bufferReplace bespoke writers with RenderBuffer. See WriteBuf
Component-tree ownership movedComponents take ownership of children rather than borrowing
Native-mobile surface removedNo replacement. The crate no longer targets it
Runtime-template and Vm* surface removedTemplates are compile-time only. Move dynamic templates to data-driven components
Documentation-build adapters removedUse proa_docs_build. See Proa Docs
Product-specific route codegen removedAuthor routes directly. See Routes and layouts

Upgrading past 0.3

Breaking changes since 0.3 affect how components are authored and linked, how fonts are declared, and how Markdown components receive their context:

Good to know: The linked-pipeline change is the one most likely to surprise CI. If your pipeline runs cargo build, switch it to cargo proa build. See CI / GitHub Actions.

When an upgrade breaks the build

Work in this order, because each step rules out the next:

  1. Read the changelog entry for every version you crossed. Breaking changes are marked.
  2. Run cargo proa check, not cargo check. Template lints and linker errors only appear in the former.
  3. Check the RSJS boundary. Most post-0.3 breakage is a component that used to be implicitly analysed and now needs an explicit #[rsjs(component)] or #[rsjs(component, client)].
  4. Check your buffer. If a custom writer stopped compiling, move to RenderBuffer.
  5. Search Troubleshooting for the exact diagnostic text.

Next steps

Search

Type at least 2 characters