Програмування в обмеженнях (або програмування обмеженнями) є парадигмою програмування, в якій відношення між змінними вказані у формі обмежень. Обмеження відрізняються від загальних примітивів мов імперативного програмування тим, що вони визначають не послідовність кроків для виконання, а властивості шуканого рішення. Це робить програмування в обмеженнях формою декларативного програмування. Обмеження, які використовуються в програмуванні в обмеженнях, бувають різних видів: ті, які використовуються в задачі задоволення обмежень (наприклад, «А або В істинно»), ті, які вирішуються симплекс-алгоритму (наприклад, «x ≤ 5») та інші. Обмеження, як правило, вбудовані в мову програмування або здійснюються через окремі програмні бібліотеки.
Програмування в обмеженнях тісно пов'язане з теорією задоволення обмежень, яка пропонує зручний апарат і просту формальну схему для подання і розв'язання комбінаторних задач штучного інтелекту.
Програмування в обмеженнях почалося з логічного програмування з обмеженнями (ЛПО), яке є вкладанням обмежень в логічне програмування. Поява цього варіанту логічного програмування пов'язане з іменами Jaffar і Lassez, які розширили в 1987 році певний клас обмежень, які були введені в Prolog II. Першими реалізаціями логічного програмування в обмеженнях були Пролог III, CLP (R) і CHIP. Деякі інтерпретатори логічного програмування в обмеженнях існують і сьогодні, наприклад GNU Prolog.
Крім логічного програмування, обмеження можуть бути змішані з функціональним програмуванням, переписування термів та імперативним мовою. Мови програмування з вбудованою підтримкою обмежень включають Oz (функціональне програмування) і Kaleidoscope (імперативне програмування). Головним чином, обмеження здійснюються в імперативних мовах через інструментальні засоби для рішення задач з обмеженнями, які є окремими бібліотеками для існуючих імперативних мов
Тимчасові обмеження паралельного програмування (КТС) і недетерміновані тимчасові обмеження паралельного програмування (NTCC) є варіантами програмування в обмеженнях, які можуть мати справу з часом.
CHIP був першим мовою ЛПО, використовують поширення обмежень. Іншими прикладами систем ЛПО можуть служити бібліотеки підтримки обмежень ILOG і COSYTEC, а також мови логічного програмування в обмеженнях Prolog III, Prolog IV, CLP(R), ECLiPSe, CIAO, CLP(FD). Використовуючи ці системи, багато складні прикладні завдання були успішно вирішені за допомогою технологій програмування в обмеженнях. У числі прикладів згадаємо перевірку електронних схем, календарне планування, розподіл ресурсів, складання розкладів, керуючі системи, графічні інтерфейси, а також безліч комбінаторних задач.