An interactive USA presidential, senate, house, and governor election map. Created with HTML/CSS/JS, map svg outlines from YAPms & US District Shapefiles, and map data from MIT Election Lab & Dave Leip's Atlas.
- Interactive and detailed map sources
- Projection data for the 2024 presidential election from FiveThirtyEight and Polymarket
- Projection data for the 2024 senate elections from Polymarket
- Past results for presidential (1788-2020, counties for 1992-2020), senatorial (1960-2020), house (1976-2020), and gubernatorial (1980-2020) elections, with victory margin and voteshare breakdowns for each state & district
- Pie chart for electoral vote counts by party and margin, national popular vote totals for past elections
- Flip states and counties between election cycles
- Fully editable custom maps that can be downloaded and uploaded as JSON or CSV files
- Comparisons between different map sources
- Can show shift between elections for states and counties
- Can show margins of error between projections and election results
- Countdown timer to upcoming elections and important events
- Keyboard controls for advanced usage
Running a fork locally is simple since this code only uses the base HTML/CSS/JS stack. Just clone the repo and open index.html in your browser to run.
Since the site uses svg files in the local svg-sources
folder, your browser might prevent them from loading over the file://
protocol due to CORS restrictions (this is a well known issue: see more info and solution).
- For Safari: go to Develop > Developer Settings > Disable local file restrictions.
- For Chrome: open via command line to disable CORS:
- Mac:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --allow-file-access-from-files
- Windows:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files
- Mac:
- For Firefox: go to
about:config
and set thesecurity.fileuri.strict_origin_policy
flag tofalse
Another way to address the CORS issue is to run a local http server. On Mac (via Homebrew):
brew install http-server
cd <local repo path>
http-server
Then open the address provided in the Terminal window (by default, it seems to be http://localhost:8080).
See the project issue board for upcoming features.
If you have any questions, suggestions, or feature ideas, feel free to open an issue here on GitHub. Alternatively, you can email [email protected].