I'm trying to understand what the bundle exactly is and what its purpose is, what I can or can't do with it, ...
I see that when you run the command 'react-native start' the packager is initialized which will be used when you're running the app on a device/simulator with 'react-native run-android' or '.. run-ios'. In the output of the packager you can see a package being built. You can also see this package being built when using android gradle commands like 'gradle assembleRelease' in the android folder.
I know that it bundles the javascript code. I've also seen some info on how to 'use an offline bundle'. (What does that mean exactly?)
I appreciate any help in finding clear information on this, as I would really want to know why people would use an offline bundle for example.
The bundle is indeed 'the javascript'. In development the bundle likely will come from your react-native start
development server. That way if your code is changed the server will send a request to the client, through a websocket, to download the new code or update the code on the fly. So, you could say the bundle is dynamically generated from your source code. In production you probably want to use an offline bundle so that your code is already on the device and does not need to be downloaded.
For more info: Running on Device (http://reactnative.dev/)