Skip to content

Download a GitHub folder as a ZIP

Paste a link to any public or private GitHub directory. GitHub Folder lists the files, downloads them in your browser, and saves a zip of that subdirectory. A full repository works the same way.

Paste a github.com folder, file, or repository URL.

Used for folder and file downloads. A full public repository keeps the name GitHub gives its archive.

GitHub token Optional

A personal access token downloads private repositories and raises the API limit from 60 to 5,000 requests an hour. It is saved in localStorage on this device and sent only to api.github.com.

Create a classic tokenCreate a fine-grained token

Classic tokens need the repo scope for private repositories. Fine-grained tokens need read access to Contents. Public repositories accept a token with no scopes.

Frequently asked questions

These answers cover the download itself: folder URLs, private repositories, tokens, rate limits, large trees, and what stays on your device.

How do I download a GitHub folder?

Paste the folder’s GitHub URL into the box and choose Download ZIP. A folder address looks like https://github.com/owner/repo/tree/branch/path/to/folder. GitHub Folder lists the files with the GitHub API, downloads them in your browser, and saves a zip.

How do I download a subdirectory from a GitHub repository?

Open the subdirectory on GitHub and copy the address from the browser bar. The path includes /tree/, the branch name, and the folder path. The zip contains that folder and its subfolders.

Can I download a whole GitHub repository?

Paste the repository URL, such as https://github.com/owner/repo, or a branch URL that ends at the branch name. Public repositories download through GitHub’s own archive. Private repositories are zipped in your browser after the file list is read with your token.

Can I download a private GitHub directory?

Save a GitHub personal access token that can read the repository. Classic tokens need the repo scope. Fine-grained tokens need read access to Contents. Create one at https://github.com/settings/tokens/new?description=githubfolder.com&scopes=repo or https://github.com/settings/personal-access-tokens/new. The token is stored in this browser and sent only to api.github.com.

Do I need a token for a public repository?

Public repositories download with no token. Anonymous GitHub API access allows about 60 requests an hour from one IP address. A personal access token raises that limit to 5,000 requests an hour, which helps when you download several folders or a very large tree.

Where is the GitHub token stored?

The token is saved in this browser under the localStorage key githubfolder.token. It stays there until you clear it or clear site data for githubfolder.com. The site is static and has no server that receives the token.

How do automatic download links work?

Open https://githubfolder.com/?url= followed by a GitHub folder URL. The page reads the url parameter and starts the download. Add filename to choose the zip name for folder and file downloads. A full public repository still uses GitHub’s archive name. Example: https://githubfolder.com/?url=https://github.com/github/gitignore/tree/main/.github&filename=gitignore-meta

Why are some files skipped?

A path containing malware, virus, or trojan is skipped so browser Safe Browsing filters do not treat the archive as harmful. Submodules are skipped because their files live in a separate repository. The status panel lists these skips.

What happens with a very large repository?

The file list comes from GitHub’s Git Trees API in one request. If GitHub marks that tree as truncated, GitHub Folder walks the folder with the Contents API. That fallback takes longer and uses more API requests. A single directory listing stops at 1,000 entries. For enormous repositories, git sparse checkout is a better fit.

Why do I see a rate limit error?

GitHub limits anonymous API requests to about 60 an hour for each IP address. When the limit is reached, add a personal access token or wait until it resets. Open the token panel and choose Check rate limit to see the requests you have left.

The download stopped with a network error. What should I try?

Check your connection and start again. Public file contents are fetched from raw.githubusercontent.com, and content blockers sometimes block that host. Allow this site and GitHub, then retry. Each file is retried a few times before the download stops.

Can I download a GitHub folder on a phone?

The page works in mobile browsers. If the browser blocks the automatic save, use the Save ZIP button that appears when the archive is ready. Very large folders need enough free memory to build the zip on the device.

Does GitHub Folder keep a copy of the files?

The zip is built in your browser. Files move from GitHub to your device. GitHub Folder does not host repository contents, and a personal access token never leaves this browser except in requests your browser sends to GitHub.

How to download a GitHub directory

GitHub’s archive button packs an entire branch. To download a subdirectory from GitHub, copy the folder URL while that folder is open, then paste it here. The address contains /tree/, the branch, and the folder path.

  1. 1

    Copy the folder URL

    On GitHub, open the directory you want and copy the address from the browser. A repository home URL downloads the whole default branch.

  2. 2

    Paste it and start the download

    Add a personal access token first when the repository is private. Choose Download ZIP. The status line shows listing, downloading, and zipping as they happen.

  3. 3

    Save the archive

    Your browser fetches each file from GitHub and JSZip builds the archive locally. If the automatic save is blocked, use the Save ZIP button.

URL anatomy

URL
https://github.com/owner/repository/tree/branch/path/to/folder
owner
The user or organization that owns the repository.
repository
The project name, without a trailing .git.
branch
A branch, tag, or commit. Names that contain slashes are detected automatically.
path/to/folder
The directory to zip. Leave it off to download the whole repository at that branch.

Example folder URLs

Use one of these public examples to see the downloader run. Each button fills the form. You still choose Download ZIP.

A subdirectory

The .github folder from github/gitignore. Three files, including one nested workflow file.

https://github.com/github/gitignore/tree/main/.github

Open on GitHub

A whole repository

Octocat’s Hello World repository. Public repositories download through GitHub’s archive.

https://github.com/octocat/Hello-World

Open on GitHub

A single file

The Hello World README. A file URL is packed into a one-file zip.

https://github.com/octocat/Hello-World/blob/master/README

Open on GitHub

Private repositories and rate limits

Public folders download with no account. GitHub allows about 60 anonymous API requests an hour for each IP address, so a busy network can hit that ceiling quickly. A personal access token raises the limit to 5,000 requests an hour and unlocks private repositories your account can already read.

Classic tokens need the repo scope for private code. Fine-grained tokens need Contents set to read-only. A token with no scopes is enough for public repositories. The token panel stores it in localStorage under githubfolder.token and can show how many requests remain.

Large folders and skipped files

The file list comes from one Git Trees API request. When GitHub truncates that tree, the downloader switches to the Contents API and walks the directory. That path is slower and spends more of the rate limit. Listings stop at 1,000 entries in a single directory. For a huge monorepo, git sparse checkout is the more reliable tool.

Paths containing malware, virus, or trojan are left out of the zip so Safe Browsing does not flag the download. Submodules are left out because their contents belong to another repository. Git LFS files are fetched from GitHub’s media host when the repository file is an LFS pointer.

Listing, downloading, and zipping all happen on your device. The page is static. Repository bytes travel from GitHub to your browser, and the finished zip is saved by the browser.