When organizing a Rust application, it’s important to follow a folder structure that is both maintainable and scalable. A well-organized folder structure makes it easier for developers to understand the code, contribute to the project, and scale the application as it grows. Below is a recommended structure for a typical Rust application, with explanations for each part.
Recommended Folder Structure
my_rust_app/
├── Cargo.toml # Project configuration (dependencies, metadata)
├── Cargo.lock # Lock file (generated after running `cargo build`)
├── src/ # Source files
│ ├── main.rs # Main entry point (binary application)
│ ├── lib.rs # Common library code (if applicable)
│ ├── bin/ # Additional binaries (optional)
│ ├── models/ # Data models (e.g., structs, enums, etc.)
│ ├── services/ # Business logic / services
│ ├── handlers/ # Request handlers (e.g., for web servers)
│ ├── utils/ # Utility modules (e.g., helpers, utils)
│ ├── db/ # Database-related code (e.g., migrations, queries)
│ ├── config/ # Configuration and environment setup
│ └── tests/ # Unit and integration tests
├── examples/ # Example projects or usage demonstrations
├── target/ # Build output directory (auto-generated by Cargo)
├── tests/ # Integration tests (optional, alternative to `src/tests`)
├── scripts/ # Utility scripts (e.g., setup, data generation)
└── README.md # Project documentation
Explanation of Folders and Files
1. Cargo.toml
& Cargo.lock
Cargo.toml
: This is the main configuration file for the Rust project. It contains metadata, dependencies, and build configuration for the project.Cargo.lock
: This file is automatically generated when you run cargo build
or cargo install
to lock the dependencies to specific versions. You should commit this file to ensure consistent builds.
2. src/
This folder contains the core source code of the project.