digraph Rojo { concentrate = true; node [fontname = "sans-serif"]; plugin [label="Roblox Studio Plugin"] session [label="Session"] rbx_tree [label="Instance Tree"] imfs [label="In-Memory Filesystem"] fs_impl [label="Filesystem Implementation\n(stubbed in tests)"] fs [label="Real Filesystem"] snapshot_subsystem [label="Snapshot Subsystem\n(reconciler)"] snapshot_generator [label="Snapshot Generator"] user_middleware [label="User Middleware\n(MoonScript, etc.)"] builtin_middleware [label="Built-in Middleware\n(.lua, .rbxm, etc.)"] api [label="Web API"] file_watcher [label="File Watcher"] session -> imfs session -> rbx_tree session -> snapshot_subsystem session -> snapshot_generator session -> file_watcher [dir="both"] file_watcher -> imfs snapshot_generator -> user_middleware snapshot_generator -> builtin_middleware plugin -> api [style="dotted"; dir="both"; minlen=2] api -> session imfs -> fs_impl fs_impl -> fs }