Cacti

Cacti Commit Audit
Project Status
Translation Status
Average issue resolution time
Open issues


Overview

Cacti is an open-source network monitoring and graphing platform built on RRDtool.

It provides a scalable framework to collect, store, and visualize time-series data from network devices, servers, and applications.

Core capabilities include:

  • Automated device discovery
  • Local and remote data collection
  • Graph, data source, and RRA templating
  • SNMP polling (v1/v2/v3) and IPv6 support
  • Role-based access control (RBAC)
  • Plugin framework
  • Dynamic graph viewing and export options

Release Branches

Cacti maintains two primary branches:

Branch Purpose
1.2.x Stable long-lived release series
develop Active development toward Cacti 1.3.x

For the latest published version, see GitHub Releases.


System Requirements

Minimum supported dependencies by branch:

Dependency Cacti 1.2.x Cacti develop (1.3.x)
MariaDB 5.6+ 10.2.x+
MySQL 5.6+ 8.0+
PHP 8.1+ 8.1+
RRDtool 1.4+ 1.8+
Net-SNMP 5.5+ 5.8+

Notes:

  • RRDtool 1.9+ is recommended for newer dynamic graph features in 1.3.x.
  • Net-SNMP 5.9+ is recommended for broader SNMPv3 protocol coverage.
  • A web server with PHP support is required.
  • PHP should be available as CLI or CGI for scheduled polling and maintenance scripts.
  • php-snmp is optional; validate behavior carefully if you depend on IPv6 and SNMPv3.
  • To force the Net-SNMP binaries while php-snmp remains installed, set $php_snmp_support = false; in include/config.php.

Operating system guidance:

  • 1.2.x: RHEL/Rocky/Alma 8+ (or equivalent) is a common baseline.
  • 1.3.x: RHEL/Rocky/Alma 9+ or CentOS Stream 9+ is preferred for modern PHP packaging.
  • Debian and Ubuntu are also well supported.

Installation (Source Checkout)

Clone the repository:

git clone https://github.com/Cacti/cacti.git
cd cacti

Dependency management:

  • For a source checkout on both 1.2.x and develop, install dependencies with Composer.
  • Use composer update only when intentionally refreshing dependency versions.

Install dependencies:

composer install

Windows users may need:

composer install --ignore-platform-req=ext-pcntl --ignore-platform-req=ext-posix

Then configure your database and web server, and complete setup using the official docs:

https://github.com/Cacti/documentation


Database Upgrades and Schema Checks

When running from source (especially develop), schema updates may be required after pulling changes.

Upgrade the database schema:

sudo -u cacti php -q cli/upgrade_database.php --forcever=`cat include/cacti_version`

If needed, force a re-upgrade from an earlier version:

php -q cli/upgrade_database.php --forcever=<older_version>

Audit schema consistency:

php cli/audit_database.php --report

Data Collection and Polling

Cacti collects data through data sources, which can use:

  • SNMP
  • Scripts
  • Command output
  • Databases
  • Custom input methods

Polling engines:

Poller Description
PHP Poller Built-in polling engine
Spine High-performance C-based poller

Spine supports SNMPv1/v2 and SNMPv3 with IPv6, with some advanced protocol support depending on how Net-SNMP is compiled on your platform.


Features

  • Device discovery and automation workflows
  • Reusable templates for graphs and data sources
  • Distributed remote data collectors
  • Plugin architecture for extensibility
  • Dynamic graph interactions (time navigation, realtime view, CSV export)
  • Fine-grained user and group permissions using RBAC
  • Broad RRDtool graphing support (including VDEFs and stacked lines)

Documentation

Official documentation is maintained in a separate repository:

https://github.com/Cacti/documentation


Contributing

Contributions are welcome.

  1. Fork this repository.
  2. Create a branch for your change.
  3. Submit a pull request.

You can also help improve docs in:

https://github.com/Cacti/documentation


Community

Community support is available on the Cacti forums:

https://forums.cacti.net


Contributors

Thanks go to these wonderful people (emoji key):

Ian Berry
Ian Berry

πŸ’»πŸ›‘οΈπŸ“–πŸŽ¨
Reinhard Scheck
Reinhard Scheck

πŸ’»πŸ›‘οΈπŸ“–
Tony Roman
Tony Roman

πŸ’»πŸ›‘οΈπŸ“–πŸŒβš οΈπŸŽ¨
Andy Blyler
Andy Blyler

πŸ’»
Larry Adams
Larry Adams

πŸ’»πŸ›‘οΈπŸ“–πŸš‡πŸŒβš οΈπŸŽ¨πŸš§πŸ‘€
Mark Brugnoli-Vinten
Mark Brugnoli-Vinten

πŸ’»πŸ›‘οΈπŸ“–πŸš‡πŸŒβš οΈπŸŽ¨πŸš§πŸ‘€
Jimmy Conner
Jimmy Conner

πŸ’»πŸ›‘οΈπŸ“–πŸŒβš οΈπŸŽ¨πŸš§πŸ‘€
Petr Macek
Petr Macek

πŸ’»πŸ›‘οΈπŸ“–πŸ‘€
Andreas Braun
Andreas Braun

πŸ’»πŸ“–πŸŒπŸŽ¨πŸ‘€
Jing Chen
Jing Chen

πŸ’»πŸ›‘οΈπŸ“–πŸ‘€
Thomas Vincent
Thomas Vincent

πŸ’»πŸ›‘οΈπŸ“–πŸš‡πŸŒβš οΈπŸš§πŸ‘€
Sean Mancini
Sean Mancini

πŸ’»πŸ“–πŸš‡βš οΈπŸ‘€
J.P. Pasnak, CD
J.P. Pasnak, CD

πŸ’»πŸ“–βš οΈ
Chris Bell
Chris Bell

πŸ’»
Paul Gevers
Paul Gevers

πŸ’»πŸ“–πŸŒβš οΈ
Morten Stevens
Morten Stevens

πŸ’»
iankberry
iankberry

πŸ’»
ronytomen
ronytomen

πŸ’»πŸ‘€
reboot1983
reboot1983

πŸ’»πŸ‘€
micke2k
micke2k

πŸ’»πŸŽ¨
EkaterinePapava
EkaterinePapava

πŸ’»πŸŒ
hljtql
hljtql

πŸ’»πŸŒ
yeager
yeager

πŸ’»
YongBoLiu
YongBoLiu

πŸ’»πŸ‘€
arjanoosting
arjanoosting

πŸ’»
Coool
Coool

πŸ’»πŸŒ
kim-fitness
kim-fitness

πŸ’»πŸ‘€
earendilfr
earendilfr

πŸ’»
purplegrape
purplegrape

πŸ’»πŸŒ
Π‘Π΅Ρ€Π³Π΅ΠΉ
Π‘Π΅Ρ€Π³Π΅ΠΉ

πŸ’»πŸŒ
DavidLiedke
DavidLiedke

πŸ’»πŸ›‘οΈπŸ“–
MSS970
MSS970

πŸ’»πŸ‘€
SjonHortensius
SjonHortensius

πŸ’»
thurban
thurban

πŸ’»πŸ‘€
riversdev0
riversdev0

πŸ’»πŸ‘€
chilek
chilek

πŸ’»πŸ‘€
MarcBanyard
MarcBanyard

πŸ’»
bernisys
bernisys

πŸ’»
ka1lie
ka1lie

πŸ’»
Dmitry
Dmitry

πŸ’»πŸŒ
sysres-dev
sysres-dev

πŸ’»πŸ‘€
rb83
rb83

πŸ’»πŸ‘€
click0
click0

πŸ’»
smiles1969
smiles1969

πŸ’»
gadzet21
gadzet21

πŸ’»
rlaager
rlaager

πŸ’»
paulcalabro
paulcalabro

πŸ’»
mhoran
mhoran

πŸ’»πŸ‘€
Javier
Javier

πŸ’»πŸŒ
frontierliu
frontierliu

πŸ’»πŸ‘€
xbolshe
xbolshe

πŸ’»
arno-st
arno-st

πŸ’»
c72578
c72578

πŸ’»
C00kiekiller
C00kiekiller

πŸ’»
nuno-silva
nuno-silva

πŸ’»
pautiina
pautiina

πŸ’»πŸ‘€
interduo
interduo

πŸ’»
seanmancini
seanmancini

πŸ’»βš οΈ
jav4
jav4

πŸ’»
fabriciotm
fabriciotm

πŸ’»
eriksejr
eriksejr

πŸ’»
hb9xar
hb9xar

πŸ’»
nightflyza
nightflyza

πŸ’»
nbz6
nbz6

πŸ’»
iaohkut
iaohkut

πŸ’»
Nakayama Kito
Nakayama Kito

πŸ’»πŸŒ
SMark-Black
SMark-Black

πŸ’»
Givo29
Givo29

πŸ’»
GregOriol
GregOriol

πŸ’»
gvde
gvde

πŸ’»πŸ‘€
dallenk
dallenk

πŸ’»πŸ‘€
dvzrv
dvzrv

πŸ’»
ctrowat
ctrowat

πŸ’»
Beuc
Beuc

πŸ’»πŸ›‘οΈ
panlinux
panlinux

πŸ’»
begemoti
begemoti

πŸ’»
dsclassen
dsclassen

πŸ’»
scline
scline

πŸ’»
sky93
sky93

πŸ’»
SergioChan
SergioChan

πŸ’»
ShaunR
ShaunR

πŸ’»
sebastienwarin
sebastienwarin

πŸ’»
tbriceno-hub
tbriceno-hub

πŸ’»
tyearke
tyearke

πŸ’»
Vladyslav78956785786576
Vladyslav78956785786576

πŸ’»
aliuzzz
aliuzzz

πŸ’»
UnAfraid
UnAfraid

πŸ’»
robwdwd
robwdwd

πŸ’»
Poslik
Poslik

πŸ’»
Xake
Xake

πŸ’»
Cosmologist
Cosmologist

πŸ’»
PVi1
PVi1

πŸ’»
OhWelp
OhWelp

πŸ’»
TheNetworkIsDown
TheNetworkIsDown

πŸ’»
tersmitten
tersmitten

πŸ’»
F-i-f
F-i-f

πŸ’»
terrellgf
terrellgf

πŸ’»βš οΈ
surfermarty
surfermarty

πŸ’»
aqr199
aqr199

πŸ’»
snsupersharp
snsupersharp

πŸ’»
skyjou
skyjou

πŸ’»
skeletorgithub
skeletorgithub

πŸ’»
richud
richud

πŸ’»
oshiewan
oshiewan

πŸ’»
oderturm
oderturm

πŸ’»
stevenseeley
stevenseeley

πŸ’»
mcnc-clovett
mcnc-clovett

πŸ’»
m8522s
m8522s

πŸ’»
linusat
linusat

πŸ’»
kruegerj
kruegerj

πŸ’»
kotso
kotso

πŸ’»
jsgh
jsgh

πŸ’»
jkbzh
jkbzh

πŸ’»
itaxer
itaxer

πŸ’»
dwpaulx
dwpaulx

πŸ’»
ahouston
ahouston

πŸ’»
xavloose
xavloose

πŸ’»
evansa
evansa

πŸ’»
eduardomozart
eduardomozart

πŸ’»
edewillians10
edewillians10

πŸ’»
dimaslv
dimaslv

πŸ’»πŸ‘€
simfishing
simfishing

πŸ’»
duhow
duhow

πŸ’»
dschall
dschall

πŸ’»
dschultzca
dschultzca

πŸ’»
kripper
kripper

πŸ’»
3bars
3bars

πŸ’»
kornrunner
kornrunner

πŸ’»
carryel
carryel

πŸ’»
dabeani
dabeani

πŸ’»
xubowin
xubowin

πŸ’»
barreljan
barreljan

πŸ’»πŸ‘€
athos-ribeiro
athos-ribeiro

πŸ’»
apinheiro
apinheiro

πŸ’»
sashashura
sashashura

πŸ’»
A200K
A200K

πŸ’»
k0pak4
k0pak4

πŸ’»
TheBlueMatt
TheBlueMatt

πŸ’»
mchorsley
mchorsley

πŸ’»πŸ‘€
luismrsilva
luismrsilva

πŸ’»
daniel-lucio
daniel-lucio

πŸ’»
Luhrel
Luhrel

πŸ’»
stslayer1
stslayer1

πŸ’»
KrisShannon
KrisShannon

πŸ’»
devsibwarra
devsibwarra

πŸ’»πŸ‘€
kersten-lohmeyer
kersten-lohmeyer

πŸ’»
Harry-Junhua-Huang
Harry-Junhua-Huang

πŸ’»
jsoref
jsoref

πŸ’»βš οΈπŸ‘€
JonBogan
JonBogan

πŸ’»
jayaich
jayaich

πŸ’»
jab60
jab60

πŸ’»
jkrinke
jkrinke

πŸ’»
JamesTilt
JamesTilt

πŸ’»
neclimdul
neclimdul

πŸ’»
hmorandell
hmorandell

πŸ’»
gdsotirov
gdsotirov

πŸ’»
inode64
inode64

πŸ’»
00gh
00gh

πŸ‘€
Dmitrii
Dmitrii

πŸ‘€
Patrick
Patrick

🌍
Daniel Nylander
Daniel Nylander

🌍
Anton Zhuravlev
Anton Zhuravlev

🌍
John Horne
John Horne

🌍
Vladyslav V. Prodan
Vladyslav V. Prodan

🌍
Ronny Preiss
Ronny Preiss

🌍
Rostyslav Haitkulov
Rostyslav Haitkulov

🌍
Nicolas BUTIN
Nicolas BUTIN

🌍

This project follows the all-contributors specification. Contributions of any kind are welcome.


License

Cacti is licensed under the GNU General Public License v2.0.

See LICENSE for details.

Copyright Β© 2004-2026 The Cacti Group, Inc.

v0.3.3[beta]