The names changed and there’s no compatibility layer for the old ones, so this is a small migration rather than a version bump. The tables below list every option, method, event and React prop the old packages had and where each one went. They’re typed against both APIs, so if a row is here, it’s current.
Swap the dependency first. page-flip becomes the core package and react-pageflip becomes the React one (which needs the core package beside it, and React 19):
Then the shape of things, which the tables don’t quite say on their own:
new PageFlip(el, opts) followed by loadFromHTML(pages) is one call now, createBook(el, opts). The container’s children are the pages, and the stylesheet is a separate import. The quick start is the full version.
The animated turns return a promise that resolves when the page lands, and the getters became plain properties. Everything the old class exposed for its own internals is gone.
Event names are the same. The handler gets a typed event with the fields named (e.page, e.orientation, e.state) instead of e.data, and on hands back the unsubscribe function.
In React, the ref is the book itself, so ref.current.pageFlip().flipNext() is just ref.current.flipNext(). Pages don’t need refs any more.
The default is 0.35, not 1, and the turning page has a hairline edge (the --opf-page-edge CSS variable). shadowOpacity: 1 with --opf-page-edge: transparent is the original's look.
The default is now click: "edges": a strip along each page's outer edge, wider than the old corner boxes, where the edge also furls and a drag starts. disableFlipByClick: false (the old default) is click: "anywhere"; "off" turns clicks off entirely.