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 — including debug, 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 VersionPython Support (Controller)Release Date
2.14Python 3.9-3.11Nov 2022
2.15Python 3.9-3.11May 2023
2.16Python 3.10-3.12Nov 2023
2.17Python 3.10-3.12May 2024
2.18Python 3.11-3.13Nov 2024
2.19Python 3.11-3.13May 2025
2.20Python 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 VersionBundled ansible-coreRelease Date
7.x2.14.xNov 2022
8.x2.15.xJun 2023
9.x2.16.xNov 2023
10.x2.17.xJun 2024
11.x2.18.xNov 2024
12.x2.19.xJun 2025
13.x2.20.xNov 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

Featureansible-coreansible (community)
Modules included~70 builtin only5,000+ across 85+ collections
Install size~15 MB~200 MB
Versioning2.x (e.g., 2.17)Semantic (e.g., 10.0.0)
MaintenanceLatest + 2 olderLatest only
Collection managementManual (ansible-galaxy)Pre-bundled
Releases per year2 major2 major, minor every 3 weeks
pip packageansible-coreansible
DependencyStandaloneRequires 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

  1. Pin versions in your requirements.txt and requirements.yml for reproducible environments
  2. Use ansible-core in CI/CD with explicit collection requirements for faster, smaller builds
  3. Use the ansible community package for development environments where convenience matters
  4. Always use FQCN (Fully Qualified Collection Names) like ansible.builtin.copy instead of just copy — this makes your playbooks work regardless of which package is installed
  5. Test against the ansible-core version you plan to deploy with

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.