In-System Programming (インシステム プログラミング、ISP) とは、ある種のPLDマイクロコントローラやその他プログラム可能な電子部品において、事前にプログラムを書き込んでからシステムに組み込むのではなく、組み込み済みの状態でプログラムを書き込むことである。

この機能の主な利点は、システムの組み立て前に書き込み段階を別途設ける必要が無く、電子機器の製造者がプログラムの書き込みとテストを一つの製造工程で行なえることである。書き込み済みチップをそのメーカーや代理店から購入する代わりに、製造者がシステムの製造ラインでチップへの書き込みができるので、生産期間の途中でもコードや設計の変更が可能となる。

一般的に ISP をサポートしたチップは、書き込みに必要なすべての電圧をシステムの通常の供給電圧から作り出す回路を内部に持っており、ライタとはシリアルプロトコルで通信する。多くの PLD では、自動化したテスト手順との統合が簡単になるように、ISP に JTAG プロトコルの一種を使っている。それ以外のデバイスでは、通常は独自のプロトコルや古い規格で定義されたプロトコルを使う。ある程度の規模のグルーロジックが必要となるような複雑なシステムでは、JTAG に対応していないフラッシュメモリマイクロコントローラのようなデバイス用に、JTAG 制御の書き込みサブシステムを実装した設計が行なわれることもある。そのようにすれば、書き込みとテストのすべての手順を一つのプロトコルの制御下で行なえるからである。