Programiranje temeljeno na toku je metoda projektiranja računalnih aplikacija i arhitektura koja je za razliku od tradicionalnih strukturiranih metoda dizajna aplikacija u kojoj su podaci namijenjeni za obradu u toku od strane komponenti koje nisu povezane jedna s drugom i koriste vanjski sustav za razmjenu poruka za komunikaciju . Pod programiranjem temeljenim na protoku, fokus je stavljen na transformaciju podataka korištenjem različitih komponenti, koje su u biti inkapsulirani moduli ili funkcije koje nemaju izravnu vezu s drugim komponentama u programu. Svaki od tokova podataka i drugih događaja upravlja se vanjskim sustavom prosljeđivanja poruka koji nije za razliku od nekih vrsta mrežnih protokola, u kojima se informacijski paket (IP) isporučuje modulu korištenjem apstraktnog porta. Ovaj prikaz dizajna koji se temelji na komponentama omogućuje aplikaciji da ima zasebno razvijene module koda koji samo trebaju odgovoriti na poruku sustava, obraditi IP i zatim vratiti IP u sustav. Ovaj pristup je koristan na distribuiranim sustavima, mrežama i s internetskim i web-baziranim programskim arhitekturama kao što su poslužitelji e-trgovine.
Jedan od temeljnih građevnih blokova programiranja temeljenog na toku je ideja izoliranog čvora, procesa ili modula. Ovo se može smatrati dijelom izvornog koda programa koji nema nikakve izravne ovisnosti o bilo kojem drugom modulu, gotovo da modul čini samostalnim dijelom aplikacije koji se može pozvati kad god je to potrebno. Svaka komponenta se ne oslanja na sekvencijalno pozivanje s drugom komponentom, tako da se komponente aplikacije mogu rasporediti i koristiti bilo kojim redoslijedom, dopuštajući postojanje više jedinstvenih tokova podataka dok se informacije kreću kroz sustav.
Svaki od pojedinačnih modula u programiranju temeljenom na protoku prihvaća podatke kroz apstraktno sučelje poznato kao port, koji djeluje slično kao podatkovni port unutar računalne mreže. Podaci se šalju portu kroz međuspremnik koji je ograničene veličine, ali pretvara više IP-ova u tok koji se stalno dovodi u port. Jedan port se može odnositi na nekoliko instanci jedne komponente, čineći strukturu jednostavnom za korištenje na distribuiranom sustavu ili za paralelnu obradu.
Podacima sadržanim u informacijskom paketu manevriraju se kroz module pomoću vanjskog sustava za razmjenu poruka. U programiranju temeljenom na protoku, ovaj sustav za razmjenu poruka odvojen je od modula i IP-ova i upravlja tijekom programa samo korištenjem međuspremnika koji su vezani za portove. Sustav za razmjenu poruka u osnovi nema znanja o tome što moduli rade ili rade i nema stvarne brige o tome koji su podaci sadržani unutar IP-ova koje moduli obrađuju.
Podjele i modularnost svake od komponenti koje čine aplikacije za programiranje temeljene na protoku, dobro su pogodne za procese kao što su otklanjanje pogrešaka i timski orijentirani razvoj. Velik dio koda je inkapsuliran, tako da izvorni kod ima veliki potencijal ponovne upotrebe. To također znači da nadogradnja ili skaliranje aplikacije koja koristi programiranje temeljeno na protoku može biti lakša nego s integriranijom aplikacijom, jer se sustav za razmjenu poruka, moduli i sustav portova mogu nezavisno mijenjati bez utjecaja na veći program.