This document provides an overview of Puppet, a system configuration management tool. Puppet uses a declarative language to define system resources and their desired state. It has a client-server architecture where the client collects facts, receives a configuration from the server, checks the current state, and runs required transactions to achieve the desired state. The Puppet server compiles configurations, acts as a file server and certificate authority, and handles reports. Puppet provides resource abstractions, templates, and modules to define reusable configurations. It aims to provide a more declarative, semantic, reproducible, and shareable approach to system administration compared to previous imperative methods.