Programiranje, ki temelji na toku, je metoda oblikovanja računalniških aplikacij in arhitektur, ki je za razliko od tradicionalnih strukturiranih metod oblikovanja aplikacij, saj so podatki namenjeni obdelavi v toku s komponentami, ki niso povezane med seboj in uporabljajo zunanji sistem za sporočanje za komunikacijo. . Pri programiranju, ki temelji na toku, je poudarek na preoblikovanju podatkov z uporabo različnih komponent, ki so v bistvu inkapsulirani moduli ali funkcije, ki nimajo neposredne povezave z drugimi komponentami v programu. Vsak od podatkovnih tokov in drugih dogodkov upravlja zunanji sistem posredovanja sporočil, ki ni drugačen od nekaterih vrst omrežnih protokolov, pri katerih se informacijski paket (IP) dostavi modulu z uporabo abstraktnih vrat. Ta pogled oblikovanja, ki temelji na komponentah, omogoča aplikaciji, da ima ločeno razvite kodne module, ki se morajo samo odzvati na sistemsko sporočilo, obdelati IP in nato sprostiti IP nazaj v sistem. Ta pristop je uporaben v porazdeljenih sistemih, omrežjih ter pri internetnih in spletnih programskih arhitekturah, kot so strežniki za e-trgovino.
Eden od temeljnih gradnikov programiranja, ki temelji na toku, je ideja izoliranega vozlišča, procesa ali modula. To lahko razumemo kot del programske izvorne kode, ki nima neposredne odvisnosti od drugih modulov, zaradi česar je modul skoraj samostojen del aplikacije, ki ga je mogoče poklicati, kadar koli je to potrebno. Vsaka komponenta se ne zanaša na zaporedno klicanje z drugo komponento, zato je mogoče komponente aplikacije razporediti in uporabiti v poljubnem vrstnem redu, kar omogoča, da obstaja več edinstvenih tokov podatkov, ko se informacije premikajo po sistemu.
Vsak od posameznih modulov v programiranju, ki temelji na toku, sprejema podatke prek abstraktnega vmesnika, znanega kot vrata, ki delujejo podobno kot podatkovna vrata v računalniškem omrežju. Podatki se pošiljajo v vrata prek medpomnilnika, ki je omejene velikosti, vendar spremeni več IP-jev v tok, ki se nenehno dovaja v vrata. Posamezna vrata se lahko nanašajo na več primerkov ene komponente, zaradi česar je struktura enostavna za uporabo v porazdeljenem sistemu ali za vzporedno obdelavo.
Podatki, ki jih vsebuje informacijski paket, se upravljajo skozi module z zunanjim sistemom za sporočanje. Pri programiranju, ki temelji na toku, je ta sistem za sporočanje ločen od modulov in IP-jev in upravlja tok programa samo z uporabo medpomnilnikov, ki so vezani na vrata. Sistem za sporočanje v bistvu nima znanja o tem, kaj moduli počnejo ali počnejo, in ni resnične skrbi glede tega, kateri podatki so v IP-jih, ki jih moduli obdelujejo.
Razdelitev in modularnost vsake od komponent, ki tvorijo aplikacije za programiranje, ki temeljijo na toku, so primerne za procese, kot sta odpravljanje napak in timsko usmerjen razvoj. Velik del kode je enkapsuliran, zato ima izvorna koda velik potencial ponovne uporabe. To tudi pomeni, da je lahko nadgradnja ali skaliranje aplikacije, ki uporablja programiranje, ki temelji na toku, lažja kot pri bolj integrirani aplikaciji, saj je sistem za sporočanje, module in sistem vrat mogoče spreminjati neodvisno, ne da bi to vplivalo na večji program.