--- a
+++ b/.gitignore
@@ -0,0 +1,114 @@
+# Created by https://www.toptal.com/developers/gitignore/api/osx,macos,linux,windows
+# Edit at https://www.toptal.com/developers/gitignore?templates=osx,macos,linux,windows
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### OSX ###
+# General
+
+# Icon must end with two \r
+
+# Thumbnails
+
+# Files that might appear in the root of a volume
+
+# Directories potentially created on remote AFP share
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/osx,macos,linux,windows
+
+# Python
+__pycache__
+*.pyc
+/opensafely_ehrql.egg-info/
+
+# Coverage
+.coverage
+htmlcov
+
+# IDEs
+.idea/
+
+# Virtual environments
+.venv/
+venv/
+
+# Planning artifacts
+story-dependencies.png
+
+# Build/test byproducts
+cache/
+.hypothesis
+
+# MkDocs output
+site/
+
+# tutorial examples metadata (generated when running tutorial actions in docker)
+docs/ehrql-tutorial-examples/metadata/