Секция [package]
Cargo.toml — манифест вашего проекта. Секция [package] описывает кто вы, что за проект и для кого он.
Обязательные поля
Минимально рабочий Cargo.toml выглядит так — именно это создаёт cargo new:
[package]
name = "my_app"
version = "0.1.0"
edition = "2021"
name
crates.io при публикации. Дефисы в имени автоматически заменяются на подчёркивания внутри Rust-кода (my-app → используется как my_app).version
MAJOR.MINOR.PATCH. Подробнее о SemVer — ниже.edition
2015, 2018, 2021. Влияет на некоторые синтаксические правила. Всегда используйте 2021 для новых проектов — это последняя edition с улучшенным синтаксисом.Необязательные, но важные поля
Для личных проектов хватит трёх обязательных полей. Для публикации на crates.io — нужны дополнительные. Вот полный пример:
[package]
name = "my_awesome_tool"
version = "1.2.3"
edition = "2021"
authors = ["Иван Петров <ivan@example.com>"]
description = "Инструмент для автоматизации задач"
license = "MIT OR Apache-2.0"
readme = "README.md"
homepage = "https://example.com"
repository = "https://github.com/user/my_awesome_tool"
keywords = ["cli", "automation", "tool"]
categories = ["command-line-utilities"]
exclude = ["tests/fixtures/*", "*.log"]
authors
Список авторов. Формат: "Имя <email>". Отображается на crates.io.
description
Краткое описание (до 140 символов). Обязательно для публикации на crates.io.
license
Лицензия в формате SPDX. Обязательно для публикации. Самые распространённые: "MIT", "Apache-2.0", "MIT OR Apache-2.0" (двойная лицензия — стандарт в Rust-экосистеме).
keywords
Ключевые слова для поиска на crates.io. Максимум 5 штук.
categories
Категории из фиксированного списка crates.io. Максимум 5. Полный список: crates.io/category_slugs.
exclude / include
exclude — паттерны файлов, которые не включаются в публикуемый пакет. include — явный список того, что включать. Используйте одно из двух, не оба.
Semantic Versioning (SemVer)
Cargo строго следует SemVer. Формат версии: MAJOR.MINOR.PATCH. Каждая цифра означает конкретное обещание пользователям вашей библиотеки:
0.x.y — нестабильный API.0.1.0 → первая рабочая версия, API ещё может меняться
0.1.1 → починили баг
0.2.0 → добавили новые функции (несовместимости нет)
1.0.0 → API стабилен, готово к продакшену
1.0.1 → bugfix
1.1.0 → новая фича, всё совместимо
2.0.0 → сломали совместимость (переименовали функции, убрали старый API)
version — но и для указания требований к версиям зависимостей. Именно поэтому важно понимать правила: от них зависит что Cargo скачает при cargo add.Тест
3 вопроса