起义的爆发至正四年()五月,黄河暴溢,北决白茅堤、金堤(今河南兰考东北)。沿河州郡先遇水灾,又遭旱灾、瘟疫,灾区人民死者过半。黄河决堤后,冲坏山东盐场,严重影响元朝政府的国库收入。十一年四月,顺帝命贾鲁为工部尚书、总治河防使,发汴梁(今河南开封)、大名等十三路十五万民工及庐州(今安徽合肥)等十八翼两万军队,开凿两百八十里新河道,使黄河东去,合淮河人海,时紧工迫,官吏乘机舞弊,人民痛苦更深。十年底,顺帝又决定变更钞法,滥发纸币,造成物价飞腾。“开河”和“变钞”促使元末社会矛盾进一步激化。
贾鲁开河后,北方白莲教首领韩山童及其教友刘福通等决定抓住这一时机,发动武装起义。他们一面加紧宣传“弥勒下生”、“明王出世”,一面又散布民“石人一只眼,挑动黄河天下反”,并暗地里凿了一个独眼石人,埋在即将挖掘的黄陵岗附近河道上。独眼石人挖出后,河工们惊诧不已,消息传出,大河南北,人心浮动。元末农民起义示意图至正十一年五月初,韩山童、刘福通、杜遵道、罗文素、盛文蓑、韩咬儿等,聚众三千人于颍州颍上(今安徽颍上),杀黑牛白马,誓告天地,准备起义。刘福通等宣称山童为宋徽宗八世孙,当为中国主,福通自称南宋名将刘光世后代,当辅之。山童发布文告,称:“蕴玉玺于海东,取精兵于日本贫极江南,富称塞北。”又打出“虎贲三千,直抵幽燕之地龙飞九五,重开大宋之天”的战旗,表示推翻元朝,恢复大宋的决心。不幸谋泄,遭到地方官镇压,韩山童被捕牺牲,其妻杨氏、子韩林儿逃到武安(今江苏徐州)。刘福通等仓促起兵,于五月初三一举攻克颍州(今安徽阜阳)。起义军头裹红巾为标志,故称红巾军起义军多为白莲教徒,烧香拜佛,故又称香军。红巾军占领颍州后,元廷遣枢密院同知赫厮、秃赤率阿速军及各路汉军前往镇压,被击败,接着,红巾军占领亳州(今安徽亳州)、项城(今河南项城南)、朱皋(今河南固始北)。九月,克汝宁府,又克息州(今河南息县)、光州(今河南潢川),众至十万。江淮各地纷纷起兵响应。
元廷把刘福通领导的主力红巾军,视为“心腹大患”。至正十一年九月,顺帝令知枢密院事也先帖木儿、卫王宽彻哥率诸卫兵十余万人前往镇压。十月,又派军增援。十二月,元军攻陷上蔡,韩咬儿被俘遇害。十二年三月,元军屯兵汝宁沙河岸,被刘福通击溃。但畏吾儿人察罕帖木儿、罗山人李思齐纠集地主武装,号称“义兵”,与红巾军为敌,对刘福通起义军威胁很大。
刘福通在颍州发动起义成功后,对在江淮一带从事秘密活动的南方白莲教僧人彭莹玉及其门徒鼓舞很大。至正十一年夏,彭莹玉(又名彭翼)及其徒赵普胜等起兵巢湖,八月,麻城(今湖北麻城)铁工邹普胜、罗田布贩徐寿辉等在蕲水(今湖北浠水)发动起义,他们宣传“弥勒佛下生,当为世主”,攻克蕲水、蕲州(今湖北蕲春南)。十月,以蕲水为都,建立政权,国号天完,改元治平,徐寿辉称帝,邹普胜为太师,设中书省(称莲台省)及六部。天完政权建立后,分兵四出,从至正十二年正月开始,先后攻占湖广、江西、福建的许多地区,其中由彭莹玉、项普略(又名项甲、项奴儿)率领的一支东去江州(今江西九江),到安徽,抵浙江,又折回浙西、安徽、江西,转战数千里,影响很大。南方红巾军提出“摧富益贫”的口号,具有很大号召力。至正十三年十二月,元廷集中兵力攻陷天完的都城蕲水,徐寿辉等被迫遁人黄梅山及沔阳湖中。曾转战江浙一带、拥有百万之众的巢湖水师也被迫退守巢湖。江淮的起义军处于不利境地,起义进入低潮。
其他非红巾军系统的起义军,以方国珍、张士诚两支最强大,活动范围最广。盐贩方国珍,早在至正八年春即起义于台州黄岩(今浙江黄岩),聚集数千人,劫夺漕运粮,扣留元海运官员。元廷招降,国珍屡降屡反。盐贩张士诚于至正十三年正月,与其弟士义、士德、士信及李伯升等十八人,招集盐丁,起兵反元,乘胜攻下泰州,连克兴化、高邮。十四年正月,自称诚王,国号大周,改元天事祐。九月,脱脱总制诸王各爱马、诸省各翼军马,出征高邮,号称百万。高邮正危在旦夕时,脱脱受到中书平章哈麻等弹劾,被免职流放,元廷另以河南行省左丞相太不花等代领其兵。由于临阵易将,元军不战自溃,张士诚则乘机出击,元军解体。从此元军丧失了优势。
起义的发展和失败高邮之战对整个战局发生了有利于农民起义军的变化。北方红巾军从至正十五年()开始主动出击。二月,刘福通将韩林儿从砀山夹河迎至亳州,建立北方红巾军的政权——宋,建元龙凤。韩林儿为帝,又号“小明王”。中央设有中书省、枢密院、御史台和六部,地方设行省。以杜遵道、盛文郁为丞相,罗文素、刘福通为平章,福通弟刘六为知枢密院事。杜遵道擅权,为刘福通所杀,福通为丞相,封太保。从十六年起,福通分兵出击,三路北伐。
至正十六年九月,李武、崔德率领的西路军猛攻潼关。次年初,李武、崔德占领商州(今陕西商州),二月,进逼陕西行省首府奉元(今陕西西安)。元廷令察罕帖木儿、李思齐等解围,红巾军战败。闰九月,白不信、大刀敖、李喜喜等入陕,夺取兴元路(今陕西汉中),又克秦(今甘肃天水)、陇(今陕西陇县),进据巩昌(今甘肃陇西)。十月,红巾军攻凤翔(今陕西凤翔),察罕帖木儿往援,红巾军失利。十八年一部分西路红巾军在李喜喜等率领下进入四川,称“青巾”,后投奔陈友谅。李武、崔德等向李思齐投降。
东路军由毛贵率领。毛贵原是赵君用的部将,至正十七年二月,从海宁州(今江苏连云港市西南)由海道入山东,连克胶州(今山东胶县)、莱州(今山东莱州)、益都路(今山东益都)、滨州(今山东滨县西北)、莒州(今山东莒县)等地。七月,元镇守黄河义兵万户田丰响应毛贵起义。十八年二月,毛贵攻克济南。至此,山东各地大部分已为毛贵、田丰所占领。宋政权在山东设益都等处行中书省,以毛贵为平章。毛贵设“宾兴院”,选用以前的元官,并派姬宗周等为地方官,又于莱州屯田,以储备粮食。官民田十收二分。在攻克济田丰、王士诚杀察罕帖木儿。察罕帖木儿养子扩廓帖木儿袭父职,继续围攻益都。十一月,益都陷。田丰、王士诚被杀,陈猱头被俘送大都。山东红巾军被镇压下去。陈友谅墓中路军由关先生(即关铎)、破头潘(即潘诚)、冯长舅、沙刘二等率领。至正十七年九月,越太行山,进入山西。至正十八年二月,毛贵遣其部将王士诚、续继祖等与中路军汇合。由于元军在山西、河北的兵力很强,中路军的主力转向晋北,原拟由山西入河北,与毛贵军会合的计划未能实现。九月,毛贵进军河北,三月,克蓟州(今天津蓟县),至济州枣林、柳林(均在今北京通县境内),进逼大都。但因孤军深入,败于柳林,遂退师济南。十九年四月,淮安赵君用奔山东,杀毛贵。七月,转战至辽阳的毛贵部将续继祖折回益都,杀赵君用。山东红巾军各部由于自相仇杀,从此一蹶不振。二十一年夏,察罕帖木儿进攻山东,田丰、王士诚等投降。十月,察罕帖木儿进围益都,毛贵原部将陈猱头等坚守。次年六月,克完州(今河北完县),十月,占领大同、兴和(今河北张北)等路。十二月,克上都,破全宁路(今内蒙古翁牛特旗乌丹城)、辽阳路(今辽宁辽阳)。十九年十一月,红巾军进入高丽。二十二年正月,关先生、沙刘二等在高丽战死,余众在破头潘率领下败退辽阳。四月,破头潘在辽阳被俘。
在三路北伐的同时,刘福通也开始出击。至正十八年五月,刘福通攻占汴梁,定为宋政权都城。这时,北方红巾军出现了鼎盛局面。但由于三路北伐相继失利,形势逆转。察罕帖木儿和孛罗帖木儿率领的两支元军,对宋政权的包围进一步紧缩。十九年八月,汴梁城破,刘福通保护韩林儿冲出重围,逃奔安丰。