Dådet genomfördes i närheten av flera barer, främst London pub och Per på Hjørnet, vid C J Hambros pass i centrala Oslo klockan 01:15, natten mot lördagen.
Gärningsmannen hindrades av människor på plats. Han greps av polis 01:19.
21 personer skadades, varav ett tiotal allvarligt men inte livshotande.
Mannen är norsk medborgare men har iransk bakgrund. Han hade två vapen, varav ett var ett automatvapen av äldre modell.
Mannen är tidigare känd hos den norska säkerhetspolisen PST (Politiets sikkerhetstjeneste) sedan åtminstone 2015, och och han misstänks att ha ingått i ett extremislamistiskt nätverk i Norge.
PST genomförde ett samtal med mannen i maj, då han sade att han inte hade några tankar om att genomföra våldsdåd.
Mannens psykiska hälsa har tidigare uppmärksammats i flera rättsprocesser.
Mannens advokat, John Christian Elden förväntar sig att mannen ska genomgå en rättspsykiatrisk undersökning. Detta tillstyrktes av polisåklagare Børge Enoksen.
PST bedömde masskjutningen som en extremistisk islamistisk terrorhandling och höjer hotnivån i Norge till den högsta.
Arrangörerna till prideparaden i Oslo, som skulle genomförts på lördagen, beslutade att ställa in paraden efter samråd med polis och PST.
Norges statsminister Jonas Gahr Støre, Arbeiderpartiet, sade på en presskonferens på lördagseftermiddagen att man inte tror att det finns ytterligare gärningsmän.