I have an Elixir module in which I am trying to call out to Pdfcpu to modify existing PDFs. Pdfcpu is written in Go and has a CLI and an API, and I am trying to use the API. I am using Wasmex to run the WASM code and interface with Elixir.
This might or might not be relevant, but anyway: I try to validate and challenge the Elixir skill packages with new projects, and this seemed like a new one with wasm and everything. Iām not a Go person, and Claude insisted using Go with WASM and Elixir had at least 2-3 hurdles to pass before getting there. Hence the switch to Rust and WASM and Elixir, the Extism library for the bridging, and the Rust lopdf library for the pdf.
The showcase is working with a Phoenix Liveview to upload pdf files, various operation per the library, and a preview pane showing the page for rotation and delete etc.
The production Docker release did not go smooth, so I got my own purpose fulfilled - hole in Claude skills located. (Will update once it is fixed). Having a PDF library around is handy so that is nice too, although I think I prefer a Rustler NIF to the WASM setup.
Any particular reason for the WASM setup? Portability, crash safety?
It was a new one to me, but Claude insisted this was the one to use for Elixir Rust WASM setup. So as Iām exploring anyway I figured lets give it a try.
I will look your wasm_showcase, as well as just using a Rustler NIF. It looks like it could do the trick.
I have absolutely no reason for using WASM, Go or Pdfcpu, it just looked like an interesting solution (I have never worked with any of them). This is a just a small side project, but PDF manipulation comes up often enough that I would like to figure it out.
Yes, I figured PDF was common enough to just to give it a background run. Learning some about WASM and this Extism library/ framework was also interesting.
A Rustler NIF will likely be many times faster than going with WASM. On the other hand WASM seems like a good solution for portability and crash safety. In general Iāve found that Elixir and Rust work very well together.