23.3 Directory Structure

A newly created or initialized Cargo project typically looks like this:

my_project/
├── Cargo.toml
├── Cargo.lock
├── src/
│   └── main.rs    (or lib.rs for libraries)
└── target/
  • Cargo.toml: Main configuration (metadata, dependencies, build settings).
  • Cargo.lock: Locks specific versions of each dependency.
  • src: Source code directory. For binary crates, main.rs; for libraries, lib.rs.
  • target: Directory for build artifacts (debug or release).

Typically, target/ is ignored in version control. Many projects also include a .gitignore to exclude compiled artifacts. The cargo new or cargo init commands create initial files like main.rs or lib.rs, and you can add further modules in src or subfolders. As described in Chapter 17, library projects can also contain application binaries (by creating a bin/ folder under src/).