张昌年轻时在平氏县担任县吏,武力过人,喜欢议论攻战谋略,同伴们全都嘲笑他。
太安二年(303年),当时李流侵犯蜀地,张昌潜逃半年,聚集数千人,盗窃得到旗帜仪仗,谎称自己接受朝廷的命令,招募兵士讨伐李流。正逢荆州根据朝廷颁布的壬午诏书,征发武士乡勇到益州讨伐李流,号称“壬午兵”。自从天下战乱,占卜人说当有帝王在江东兴起,因此此次征调,百姓都不愿意西征,张昌的党羽于是欺骗迷惑百姓,使得百姓都不肯前去。但诏书的催促严厉急迫,在经过的一个地方耽搁五天,该地的二千石官员就要罢免官职,因此郡县负责官员都亲自出去驱逐催促,这些被征发的人辗转行军没有多远,便聚合又成为新的强盗群体。当时江夏郡粮食大丰收,百姓到此求生的有几千人。
张昌因此欺骗迷惑百姓,自己改换姓名为李辰,在距离江夏郡治所八十里的安陆县石岩山屯聚,招募百姓,各方流民和逃避戍守劳役的人大多前来投靠张昌。江夏太守弓钦派兵讨伐张昌,但多次战败没有成功。张昌的徒众日益增多,便进攻江夏治所。弓钦出战,被张昌打的大败,于是带着家人南逃沔口。镇南大将军、新野王司马歆派遣骑兵都督靳满在随郡以西讨伐张昌,两军大战,结果靳满战败逃走,张昌获得官军的器械,于是占据江夏郡,拥有府库。张昌制造煽动人心的谣言说:“该有圣人出现为百姓作主。”
张昌招得山都县小官吏丘沈,将他改名为刘尼,假托说是汉朝皇室的后代,尊奉为天子,说:“这就是圣人。”并设置百官,张昌自封为相国,他的哥哥张味为车骑将军,弟弟张放为广武将军,各自带兵。在山岩中建筑宫殿,又伪造凤凰、玉玺等祥瑞吉兆,立年号为神凤。郊祀礼仪、服装颜色装饰,全都按照汉代过去的程式。有不接受招募的人,就对他处以灭族的惩罚,士绅百姓没有谁敢不服从。又散布流言说:“长江、淮水以南地区都发生反叛,官军大规模进发,将要把他们全部诛杀。”百姓们互相煽动,人们的心情都很惶惑惊恐。长江、沔水地区都起兵响应张昌,一月之间聚众达三万,士卒都戴深红色的帽子,用马尾当作须髯。朝廷下诏书派监军华宏讨伐张昌,结果华宏在障山被张昌打败。当时,江夏、义阳士庶大都追随,惟有江夏旧姓江安县令王伛、秀才吕蕤不肯随从。张昌以三公之位征召他们,王伛、吕蕤悄悄地带着家室北逃汝南,投奔豫州刺史刘乔。乡人期思县令李权、常安县令吴凤、孝廉吴畅纠合正义之士,得到五百多家,追随王伛等,不肯参与张昌谋逆之事。
新野王司马歆向朝廷上书,陈述形势,请求各军分三路救援。朝廷让屯骑校尉刘乔任豫州刺史,宁朔将军刘弘任荆州刺史。又诏令河间王司马颙派雍州刺史刘沈带领一万州兵,加上在西府征发的五千人从蓝田关出兵讨伐张昌。司马颙不听从诏令,刘沈自己带领州兵到蓝田,但司马颙强行剥夺了他的部众。于是刘乔在汝南屯兵,刘弘和前将军赵骧、平南将军羊伊援在宛地屯兵。张昌派他的部将黄林为大都督,率领两万人向豫州进军,前锋李宫要抢掠汝水两岸的居民,刘乔命将军李杨迎击,大败黄林军。黄林等向东攻打弋阳,弋阳太守梁桓据城固守。张昌又派将领马武攻陷武昌,杀害武昌太守,张昌把郡中兵众安置在自己麾下。西攻宛城,大败赵骧,并杀害羊伊。继而进攻襄阳,杀害新野王司马歆。七月,张昌党羽石冰进犯扬州,打败扬州刺史陈徽,扬州各属郡全部陷落。石冰又攻陷江州,属将陈贞攻打武陵、零陵、豫章、武昌、长沙,全部攻陷,临淮人封云也起兵进犯徐州来响应石冰。于是荆、江、徐、扬、豫等五个州的辖境,大多被张昌占据。张昌重新派设州牧郡守等地方长官,这些人都是行凶盗窃之类的小人,没有禁令法度,专门以抢劫掠夺为职业,使得人心渐渐离散。
同年,朝廷诏令以宁朔将军、领南蛮校尉刘弘镇守宛城,刘弘派遣司马陶侃、参军蒯桓、皮初等率领军队在竟陵攻打张昌,刘乔又派将军李杨、督护尹奉集中军队进攻江夏。陶侃等与张昌苦战许多天,最终大败张昌军,前后斩杀几万人,张昌逃窜到下俊山,他的部众全部投降。第二年秋天,擒获张昌,将其斩首,并把他的首级传送到京师,同党全被诛灭三族。