AngelScript is structured around an engine where the application should register the functions, properties, and even types, that the scripts will be able to use. The scripts are then compiled into modules, where the application may have one or more modules, depending on the need of the application. The application can also expose a different interface to each module through the use of access profiles. This is especially useful when the application works with multiple types of scripts, e.g. GUI, AI control, etc.
As the scripts are compiled into bytecode AngelScript also provides a virtual machine, also known as a script context, for executing the bytecode. The application can have any number of script context at the same time, though most applications will probably only need one. The contexts support suspending the execution and then resuming it, so the application can easily implement features such as concurrent scripts and co-routines. The script context also provides an interface for extracting run-time information, useful for debugging scripts.
The memory management in AngelScript is based on reference counting with an incremental garbage collector for detecting and freeing objects with circular references. This provides for a controlled environment without application freezes as the garbage collector steps in to free up memory.