GPIO Pin Hover
Hover over a Raspberry Pi GPIO pin in Python code to see exactly where it is on
the header, browse the pinout of every Pi model from the sidebar, and catch pin
mistakes before you wire anything up.

Features
Hover diagrams
Hover a pin used with RPi.GPIO, gpiozero, lgpio or pigpio to see the
header for your board with that pin highlighted, plus its physical number, BCM
number, alternate functions (I2C, SPI0/SPI1, UART, PWM, PCM, GPCLK, 1-Wire,
HAT EEPROM) and notes such as the fixed I2C pull-ups. Links at the bottom of
the hover open the full pinout, the board panel, or the board picker.
Pins passed through named constants are resolved too: hover LED_PIN in
GPIO.setup(LED_PIN, GPIO.OUT) or the 17 in LED_PIN = 17.
Click the GPIO Pin Hover icon in the Activity Bar:
- Pick any board, from the 2012 Pi 1 Model B (Rev 1) to the Pi 5 and Pi 500, grouped by family, with its chip, release year and quirks.
- The correct header for each board, including the 26-pin Rev 1 and Rev 2 layouts.
- Search pins by number or function (
17, pin 11, SDA, PWM, GND…).
- Toggle labels between names (
GPIO17) and functions (SPI1 CE1).
- Click a pin for its full details.
- Pins used in the Python file you're editing are highlighted live, with a warning if any don't exist on the selected board.
- Use for hover & warnings makes the selected board the active one.
Board-aware warnings
Yellow squiggles for:
- the same GPIO set up or claimed more than once in a file,
- pins that are also a commonly enabled interface (I2C, SPI0, serial UART) or reserved for the HAT EEPROM,
- power/ground pins used as GPIO, and pin numbers that don't exist on the selected board,
import RPi.GPIO when the board is a Pi 5 or Pi 500 (RPi.GPIO doesn't support the RP1 chip).
Calls inside comments, docstrings and strings are ignored.
Numbering modes
GPIO.setmode(GPIO.BCM) / GPIO.setmode(GPIO.BOARD) is tracked through the
file, so each RPi.GPIO call is read in the mode in effect at that point.
gpiozero, lgpio and pigpio always use BCM, except gpiozero
"BOARD11"-style strings, which are physical pin numbers.
Full pinout view
GPIO Pin Hover: Show Pinout (Command Palette, or the button in the sidebar
title bar) opens the header with every pin in the current file highlighted, plus
a table of each usage and its line number.
Supported libraries
| Library |
Detected |
RPi.GPIO |
setup, output, input, add_event_detect, add_event_callback, remove_event_detect, wait_for_edge, event_detected, PWM, gpio_function, including list/tuple channels like setup([17, 18], …) |
gpiozero |
LED, PWMLED, RGBLED, Button, Buzzer, TonalBuzzer, Servo, AngularServo, Motor, PhaseEnableMotor, Robot, PhaseEnableRobot, DistanceSensor, MotionSensor, LightSensor, LineSensor, RotaryEncoder, TrafficLights, LEDBoard, LEDBarGraph, ButtonBoard, Digital*/PWMOutputDevice; positional pins, pin keywords (pin=, echo=, trigger=, forward=, backward=, enable=, red=…), tuples like left=(4, 14), and "GPIO17" / "BOARD11" / "17" strings |
lgpio |
lgpio.gpio_claim_output/input/alert, gpio_write, gpio_read, gpio_free (pin is the argument after the chip handle) |
pigpio |
pi.write, pi.read, pi.set_mode, pi.set_pull_up_down, pi.callback, pi.set_PWM_*, pi.set_servo_pulsewidth, only on the conventional pi variable name |
Try it
Open samples/gpio_sample.py. It covers every
detection case above, including constants, multi-pin devices, both numbering
modes and each kind of warning. Switch boards with GPIO Pin Hover: Select
Board (or click the board name in the status bar) to see the board-specific
warnings appear.
Settings
| Setting |
Default |
Description |
gpioPinHover.board |
generic-40 |
Board your code targets; drives the hover diagram and board-specific warnings. Saved per workspace when set from the picker or sidebar. |
gpioPinHover.defaultNumberingMode |
BCM |
Mode assumed for RPi.GPIO calls before any GPIO.setmode(...) in the file. |
Known limitations
- Pins are resolved from literals and simple module-level constants (
NAME = 17). Computed values, function arguments and imports from other files aren't followed.
pigpio detection is limited to calls on a variable named pi.
- Warnings are per file; pin usage isn't tracked across modules.
- Compute Modules aren't included (they use an edge connector, not the GPIO header).
Development
npm install
npm run compile # or: npm run watch
npm test # parser and pin-table unit tests (node:test, no extra deps)
Press F5 in VS Code with this folder open to launch an Extension Development
Host with samples/gpio_sample.py already open.
License
MIT
| |