GATT
Generic Attribute Profile -- the framework defining how BLE devices discover and exchange data using services and characteristics.
What Is GATT?
The Generic Attribute Profile (ATT">GATT) is the application-level framework that governs how two BLE devices discover, organize, and exchange data once a connection is established. Every BLE data transaction you encounter -- reading a sensor value, writing a command, or subscribing to notifications -- flows through GATT.
Architecture Overview
GATT sits on top of the Attribute Protocol (ATT) and relies on it for the actual read/write mechanics. The profile defines a strict hierarchy of containers:
- Profile -- a use-case specification (e.g., Heart Rate Profile) that bundles one or more services.
- Service -- a collection of logically related data points, identified by a UUID.
- Characteristic -- an individual data value with defined properties (read, write, notify, indicate).
- Descriptor -- optional metadata attached to a characteristic, such as the CCCD.
Client-Server Model
GATT uses a client-server architecture that is independent of the GAP central/peripheral roles. The GATT server hosts the attribute database and exposes services. The GATT client discovers and interacts with those services. A peripheral typically acts as the GATT server (e.g., a heart-rate strap), while the central acts as the client (e.g., a smartphone), though the roles can be reversed or even simultaneous.
Service Discovery
Before exchanging application data, the client must discover the server's attribute table. It sends a series of ATT requests -- Discover All Primary Services, Discover Characteristics, and Discover Descriptors -- to enumerate the full hierarchy. Many stacks cache this information after bonding to skip discovery on reconnection, which can save several hundred milliseconds.
Practical Considerations
The GATT database is typically defined at compile time in firmware using an SDK such as Zephyr RTOS or vendor-specific toolchains. Each attribute consumes a handle from a finite 16-bit handle space (0x0001 -- 0xFFFF). Developers should keep the database compact and group related services to simplify client-side discovery. The maximum ATT payload per operation is bounded by the negotiated MTU, so large reads or writes may require segmentation through ATT Long Read or Prepare Write procedures.
Related Terms
Related Content
What Is Bluetooth Low Energy? A Complete Introduction
Getting Started…data exchange. Once connected, data is exchanged using GATT — a hierarchical structure of services and…
BLE vs Bluetooth Classic: Key Differences Explained
Getting Started…BLE uses an asynchronous, event-driven model with GATT for structured data exchange via L2CAP . Dual-mode chips…
Understanding BLE Architecture: Protocol Stack Overview
Getting Started…Responsibility Application Host Business logic, user data GATT Host Service/characteristic data model ATT Host Attribute…
BLE Version History: From 4.0 to 6.0 Compared
Getting Started…Year Key Additions 4.0 2010 BLE foundation: advertising , GATT , ATT , SMP 4.1 2013 Improved coexistence with LTE, LE…
ESP32 BLE Development with ESP-IDF
Development…only) Mesh networking Yes No Maintenance Active Legacy GATT Server Example GATT services are declared as static tables…
BLE GATT Server Implementation Guide
DevelopmentGATT Server Implementation A GATT server hosts BLE data — it…
Android BLE Development: From Scanning to Data Transfer
Development…if scan results are not used for location. GATT Callback and Threading Android's GATT callbacks arrive on…
Web Bluetooth API: BLE from the Browser
Development…on desktop and Android, it exposes a subset of the GATT client role through an async JavaScript API. Browser…
Frequently Asked Questions
Our glossary covers 90+ BLE technical terms organized by category. Each term includes a definition, related terms, and links to relevant chips and guides.