From easier to more difficult, I would say:
- Using the daml-lf interface library to load LF packages. While changes will happen, you are likely to get help from scalac for adapting to them.
- Loading the LF packages with protobuf (preferred protobuf gens work) and basically writing your own version of the interface library based on that. Not trivial, but way better than…
- Parsing daml code. Seriously not recommended. There’s a reason all our navigator and codegen stuff is based on interpreting LF packages rather than daml code directly.