Rust's module system uses mod to define modules and pub to control visibility. Modules can be inline (mod name { ... }) or in separate files (mod name; loads name.rs). By default, items are private; use pub to expose them. I organize code into modules by feature or layer (controllers, models, services). pub(crate) makes items public within the crate but private externally. For nested modules, use super::* or use crate::module::Item imports. The pub use re-export pattern creates a clean public API. Rust's module system enforces encapsulation and makes refactoring safer.