1561년(명종 16) 진사가 되고, 1564년 성균관 유생들을 이끌고 요승 보우(普雨)의 주살을 청원하기도 하였다. 1568년(선조 1) 증광 문과에 병과로 급제하고, 예문관 검열 · 봉교(奉敎), 수찬(修撰) 등을 거쳐 1576년 수원 현감으로 나가서는 명망이 높았다. 한때 파직되었다가 다시 장령(掌令) · 사옹원정을 거쳐 1583년에 응교(應敎)가 되고, 뒤에 여러번 사인(舍人)을 지냈다.
동서분당 때 동인으로 분류되었다. 그 뒤 이발(李潑)과 틈이 생기자 우성전은 남산에 살아서 남인, 이발은 북악(北岳)에 살아서 북인으로 분당되었다. 남인의 거두로 앞장을 섰으며, 동서분당 때나 남북의 파쟁에 말려 미움도 사고 화를 당하기도 하였다. 1591년 1591년 서인인 정철(鄭澈)의 당(黨)이라 하여 북인에게 배척되고 관직을 삭탈당하였다.
이듬해 임진왜란이 일어나자 풀려나와 경기도에서 의병을 모집해 군호(軍號)를 ‘추의군(秋義軍)’이라 하고, 소금과 식량을 조달해 난민을 구제하였다. 또한 강화도에 들어가서 김천일(金千鎰)과 합세해 전공을 세우고, 강화도를 장악해 남북으로 통하게 하였다. 병선을 이끌어 적의 진격로를 차단하였으며, 권율(權慄)이 수원 독성산성(禿城山城)에서 행주에 이르자 의병을 이끌고 지원하였다.
그 공으로 봉상시정에서 대사성으로 서용되었다. 그 뒤 계속 활약하였으며, 용산의 왜적을 쳐서 양곡을 확보해 관군과 의군의 식량을 마련하였다. 그 뒤 퇴각하는 왜군을 경상우도 의령까지 쫓아갔으나, 과로로 병을 얻어 경기도 부평에서 사망하였다.
이조 판서에 추증되었다. 저서로 『계갑록(癸甲錄)』 · 『역설(易說)』 · 『이기설(理氣說)』 등이 있다. 시호는 문강(文康)이다.