朱元璋为御侮防患,在位期间曾两次分封诸子为藩王。藩王各拥重兵,坐镇一方,其中尤以秦、晋、燕、宁诸王势力最强。洪武二十五年(1392年)太子朱标病故,继立为皇太孙的朱允炆对诸王势大难制深感忧虑。朱元璋晚年,功臣宿将被诛杀殆尽,北方军事均以诸王主之。不久,秦王朱樉、晋王朱棡先后死去,而燕王朱棣与周王朱橚及齐、代诸王均拥兵自重,多行不法,朝廷孤危。故1399年朱允炆即位后,即与齐泰、黄子澄等密议削藩。以燕王朱棣势大难图,故削藩自朱棣同母弟周王始,周、代、岷、湘、齐诸王先后削夺,湘王自焚,余皆废为庶人。
为图朱棣,朱允炆令张昺为北平布政使,谢贵、张信掌北平都指挥使司,以谢贵控制北平(今北京),另以都督宋忠、徐凯、耿瓛屯兵开平、临清、山海关一带,并调检燕府护卫军士,加强防燕措施。建文元年六月,齐泰将燕使邓庸下狱审讯,具得朱棣将举兵反状,乃发兵逮燕府官属,并密敕张信逮捕朱棣。张信为朱棣旧部,此时遂降朱棣,朱棣随即为备。七月,朱棣以计擒杀张昺、谢贵(装疯以麻痹二人),并命燕府护卫指挥张玉、朱能率兵乘夜攻夺北平九门,遂据北平。后以尊祖训、诛“奸臣”齐泰、黄子澄,为国“靖难”为名,誓师出征。
战事之初,因北方诸将多朱棣旧部,降朱棣从战者甚多。朱棣军先后下通州、蓟州、怀柔等城,宋忠等战死。八月,朱允炆以太祖旧将耿炳文(擅长于防守)为大将军,率师三十万伐朱棣。先锋抵雄县,为朱棣所袭,九千人全部战死。复战于真定(今河北正定),又大败。
朱允炆遂以勋戚李景隆代耿炳文,调兵五十万伐燕,筑垒九门,围攻北平。十月,朱棣亲自率精骑袭大宁,执宁王朱权及其妃妾世子,得其部朵颜三卫骑兵(相当于雇佣兵,均为蒙古骑兵,战斗力极强),兵力骤增。李景隆乘虚攻北平,但不能克(朱棣长子朱高炽镇守,用冰冻住城墙,使李景隆无法破城)。燕王师自大宁返回后,于郑灞大破李景隆军。朱允炆被迫罢兵部尚书齐泰、太常寺卿黄子澄职,以缓燕师。建文二年四月,双方又战于白沟河,李景隆再次战败,燕师乘胜围攻济南。山东参政铁铉固守济南,以逸待劳,燕师久攻不下,败还。九月,朝廷升铉为山东布政使,改命盛庸代李景隆。
十二月,盛庸率师与燕军会战于东昌(今山东聊城),燕师大败,主将张玉战死。建文帝于三年复齐、黄职。二月,燕师再度南下。三月,败盛庸于滹沱河,再败吴杰等于藁城。朱允炆以放逐齐、黄为名,使其外出募师勤王。当时,朱棣虽多胜,但损失颇重,而朝廷军源颇广,燕军于河北、山东一带所攻下的城邑,兵回后又为朝廷兵所据。
同年底,有内臣自京师告密,朱棣知南京空虚可图,决计改变战略,于四年正月率师南下。四月,连破何福、平安师,五月克泗州、扬州。建文帝遣庆成郡主至燕师,乞割地求和,燕王不许。六月,江防都督陈瑄以舟师降燕,燕师渡江,下镇江,直逼南京。谷王朱橞与李景隆开金川门降,南京城陷,宫中火起,朱允炆不知所终。
朱棣攻下南京后,在拒绝了他的支持者们反复几天的劝进之后,于1402年7月17日即皇帝位,但不是继承朱允炆的帝位,而是继承明太祖朱元璋的帝位(废除建文年号,建文四年改称洪武三十五年)。
下令大力搜索齐泰、黄子澄等建文朝臣五十余人,朱棣还令尽复建文所改的一切太祖皇帝制定的成法和官制,以表明其起兵目的在于恢复祖训。靖难之役是明初围绕皇权斗争日趋激化的必然结果,朱棣以强藩起兵夺取皇位后,北方不再有强藩存在。