botocore
Low-level, data-driven core of boto 3.
This package has a good security score with no known vulnerabilities.
Community Reviews
Powerful but bare-bones AWS SDK foundation with rough developer experience
The biggest pain point is the complete absence of type hints, making IDE autocompletion nearly useless. You're constantly referring to documentation to remember parameter names and structure. Error messages can be cryptic, often returning generic botocore.exceptions.ClientError without clear guidance on what went wrong. The documentation exists but feels more like an API reference than developer-friendly guides.
Migration between versions usually goes smoothly since breaking changes are rare, but you may encounter subtle behavioral changes tied to updated service definitions. If you're building standard AWS integrations, strongly prefer boto3 instead—it provides a much better abstraction layer. Only drop down to botocore when you need fine-grained control over request signing, endpoint resolution, or custom retry logic.
Best for: Building custom AWS SDK wrappers, debugging boto3 internals, or implementing specialized request signing and retry logic.
Avoid if: You're building standard AWS integrations where boto3's higher-level abstractions and better DX would suffice.
Solid AWS foundation with strong security defaults, but error handling needs care
The exception hierarchy is well-structured with ClientError containing detailed error codes, but you need to be careful about logging these exceptions—they can expose sensitive information like resource ARNs, account IDs, and sometimes partial credential data in error responses. Input validation is primarily AWS service-side, so you're responsible for sanitizing data before sending. The data-driven service models mean the library updates frequently with new AWS features, but this also means dependency churn.
The biggest security win is that botocore makes it hard to accidentally do insecure things. No plaintext HTTP allowed, signatures are automatic, and the credential provider chain prevents hardcoded secrets in most workflows.
Best for: Any project requiring direct AWS API access with strong security defaults and proper credential handling.
Avoid if: You need stable dependencies with infrequent updates or have strict vendoring requirements due to package size.
Powerful but low-level: Better to use boto3 unless you need fine control
The lack of type hints is particularly painful in modern Python development. IDE autocomplete is minimal, forcing constant reference to documentation. The docs are technically complete since they're generated from service definitions, but they read like API specifications rather than developer guides. You won't find many practical examples or common usage patterns.
That said, botocore is rock-solid stable and gives you absolute control over AWS API interactions. If you're building abstraction layers, need fine-grained request/response manipulation, or are debugging boto3 issues, working at this level makes sense. For day-to-day AWS operations, though, boto3's higher-level abstractions are far more ergonomic.
Best for: Building custom AWS client abstractions, debugging boto3 internals, or needing fine-grained control over request/response handling.
Avoid if: You're doing standard AWS operations where boto3's resource/client interfaces would be more ergonomic and developer-friendly.
Sign in to write a review
Sign In