This document introduces meta-programming in Scala. It discusses how Scalameta allows treating programs as data by providing APIs to read, analyze, transform and generate Scala programs. Scalameta represents programs as syntax trees and provides utilities like Scalafmt and Scalafix. SemanticDB extracts semantic information from programs to enable features like code navigation and semantic code analysis. The document provides examples of using Scalameta to work with syntax trees and SemanticDB.