Introduction
Since Ansible 2.10, the project split into two distinct packages: ansible-core (the engine) and ansible (the community package with batteries included). This change confused many users, especially when pip installing one vs the other produced very different results.
This article explains what each package contains, how versioning works, which one to install for your use case, and how the two packages relate to each other.
The Split: What Happened After Ansible 2.9
Before Ansible 2.10, there was a single ansible package that contained everything — the runtime, all modules, and all plugins. With thousands of modules growing faster than core could release, the project restructured:
Ansible 2.9 (monolithic)
↓
Ansible 2.10+ (split)
├── ansible-core (engine + builtin plugins)
└── ansible (community package = ansible-core + curated collections)
ansible-core
What Is ansible-core?
ansible-core is the minimal Ansible engine. It contains:
- CLI tools:
ansible,ansible-playbook,ansible-galaxy,ansible-vault,ansible-doc,ansible-pull,ansible-config,ansible-inventory,ansible-console - The Ansible language: YAML playbook parsing, Jinja2 templating, variable precedence, conditionals, loops, blocks, handlers
- Builtin plugins: A small set of essential modules and plugins in
ansible.builtin— includingdebug,copy,file,template,command,shell,setup,apt,yum,service,user,group,lineinfile,uri, and others - The plugin architecture: Framework for loading collections, modules, callback plugins, connection plugins, etc.
Versioning
ansible-core continues the "classic" Ansible versioning:
| ansible-core Version | Python Support (Controller) | Release Date |
|---|---|---|
| 2.14 | Python 3.9-3.11 | Nov 2022 |
| 2.15 | Python 3.9-3.11 | May 2023 |
| 2.16 | Python 3.10-3.12 | Nov 2023 |
| 2.17 | Python 3.10-3.12 | May 2024 |
| 2.18 | Python 3.11-3.13 | Nov 2024 |
| 2.19 | Python 3.11-3.13 | May 2025 |
| 2.20 | Python 3.12+ | Nov 2025 |
Maintenance policy: The latest version plus two older versions are maintained with bugfix and security releases.
Installation
# Install ansible-core only
pip install ansible-core
# Install a specific version
pip install ansible-core==2.17.0
# Check version
ansible --version
When to Use ansible-core
Choose ansible-core when:
- You only need specific collections and want to install them individually
- You want a minimal installation footprint
- You are building a container image and need to minimize size
- You are developing Ansible modules or plugins
- You are running in a CI/CD pipeline and need fast installs
ansible Community Package
What Is the ansible Community Package?
The ansible community package bundles ansible-core with a curated set of 85+ collections containing thousands of modules and plugins:
ansible (community package)
├── ansible-core (engine)
├── amazon.aws
├── ansible.netcommon
├── ansible.posix
├── ansible.windows
├── community.general
├── community.crypto
├── community.docker
├── community.mysql
├── community.postgresql
├── google.cloud
├── kubernetes.core
├── ... (85+ collections)
Versioning
The community package uses semantic versioning starting from version 3.0.0:
| ansible Version | Bundled ansible-core | Release Date |
|---|---|---|
| 7.x | 2.14.x | Nov 2022 |
| 8.x | 2.15.x | Jun 2023 |
| 9.x | 2.16.x | Nov 2023 |
| 10.x | 2.17.x | Jun 2024 |
| 11.x | 2.18.x | Nov 2024 |
| 12.x | 2.19.x | Jun 2025 |
| 13.x | 2.20.x | Nov 2025 |
Maintenance policy: Only the latest major version is maintained. When ansible 10.x releases, 9.x stops receiving updates.
Minor releases: New minor versions every ~3 weeks with backward-compatible features and bug fixes.
Installation
# Install the full community package (includes ansible-core)
pip install ansible
# Install a specific version
pip install ansible==9.0.0
# Verify
ansible --version
ansible-galaxy collection list
When to Use the ansible Community Package
Choose the full package when:
- You are getting started with Ansible and want everything available
- Your playbooks use modules from many different collections
- You don't want to manage individual collection installations
- You prefer convenience over minimal footprint
Side-by-Side Comparison
| Feature | ansible-core | ansible (community) |
|---|---|---|
| Modules included | ~70 builtin only | 5,000+ across 85+ collections |
| Install size | ~15 MB | ~200 MB |
| Versioning | 2.x (e.g., 2.17) | Semantic (e.g., 10.0.0) |
| Maintenance | Latest + 2 older | Latest only |
| Collection management | Manual (ansible-galaxy) | Pre-bundled |
| Releases per year | 2 major | 2 major, minor every 3 weeks |
| pip package | ansible-core | ansible |
| Dependency | Standalone | Requires ansible-core |
Version Mapping
Understanding which ansible version bundles which ansible-core version:
# Check which ansible-core is bundled
pip show ansible | grep -i requires
# Output: Requires: ansible-core (>=2.17.0,<2.18.0)
Managing Collections Independently
With ansible-core, you install collections as needed:
# Install a single collection
ansible-galaxy collection install community.general
# Install from requirements file
ansible-galaxy collection install -r requirements.yml
# List installed collections
ansible-galaxy collection list
requirements.yml:
---
collections:
- name: community.general
version: ">=8.0.0"
- name: ansible.posix
version: ">=1.5.0"
- name: community.docker
version: ">=3.0.0"
Common Mistakes
1. Installing Both Packages
# ❌ Don't install both - ansible already includes ansible-core
pip install ansible ansible-core
# ✅ Install one or the other
pip install ansible # full package
pip install ansible-core # minimal
2. Confusing Version Numbers
# This installs ansible-core 2.14, NOT ansible community 2.14
pip install ansible-core==2.14.0
# This installs ansible community 9.x (which includes ansible-core 2.16)
pip install ansible==9.0.0
3. Missing Modules After Switching to ansible-core
If you switch from ansible to ansible-core, modules like community.general.ini_file will no longer be available:
# Error after switching
ERROR! couldn't resolve module/action 'community.general.ini_file'
# Fix: install the needed collection
ansible-galaxy collection install community.general
Migration Guide
From ansible 2.9 to Modern Packages
# 1. Remove old ansible
pip uninstall ansible
# 2. Install modern ansible (includes ansible-core + collections)
pip install ansible
# 3. Or install ansible-core + only needed collections
pip install ansible-core
ansible-galaxy collection install -r requirements.yml
From ansible Community to ansible-core
# 1. Document which collections you use
ansible-galaxy collection list > my_collections.txt
# 2. Create requirements.yml with only needed collections
# 3. Uninstall ansible, install ansible-core
pip uninstall ansible
pip install ansible-core
ansible-galaxy collection install -r requirements.yml
Checking Your Installation
# Show ansible-core version
ansible --version
# Show installed collections
ansible-galaxy collection list
# Show where a module comes from
ansible-doc -t module community.general.ini_file
Best Practices
- Pin versions in your
requirements.txtandrequirements.ymlfor reproducible environments - Use ansible-core in CI/CD with explicit collection requirements for faster, smaller builds
- Use the ansible community package for development environments where convenience matters
- Always use FQCN (Fully Qualified Collection Names) like
ansible.builtin.copyinstead of justcopy— this makes your playbooks work regardless of which package is installed - Test against the ansible-core version you plan to deploy with
Related Articles
Conclusion
The split between ansible-core and the ansible community package gives users flexibility — a minimal engine for those who want control, or a batteries-included package for those who want convenience. Use ansible-core for minimal, controlled environments (CI/CD, containers); use the ansible community package when you need broad module coverage out of the box. Either way, always use FQCNs and pin your versions for reproducible automation.