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 runcargo build
orcargo 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.