Import from GitHub

Bring a repository in as reference material for the AI to build from.

On this page

Import from GitHub reads a repository's files and hands them to the AI as reference for whatever you ask it to build next. It is not a migration and not a sync. Nothing is copied into your site automatically, editing the source repository afterward does not change your project, and Modulify never writes back to it.

Where to find it

Import from GitHub sits in the + menu next to the chat box, under Import, both on the prompt that starts a new site and inside an already open project's chat. The mobile app has it in the + sheet of its prompt box, for a new site.

Pick a repository

Open the import dialog

Click +, then From GitHub under Import. The dialog reads Pick a repository connected to Modulify. We read its files and use them as reference for whatever you ask us to build.

Point it at a repository

Pick one from the Repository dropdown, where each repository is marked Private or Public, or use Or paste a public repository URL to import any public repository by address, no connection required. With more than 10 repositories, the dropdown opens with a Search box. Manage repositories, pinned at the bottom of the dropdown, opens the workspace GitHub tab, where you connect GitHub accounts and choose which repositories the Modulify app can reach.

With no GitHub account connected yet, the dropdown is replaced by No GitHub accounts, Connect a GitHub account to import repositories., and a Connect GitHub account button. With accounts connected but none of them verified, it is replaced by No verified accounts, Verify a GitHub account to list repositories., and a Verify GitHub account button. Both buttons open the workspace GitHub tab, and pasting a public URL still works in either case.

Confirm you have the rights to use it

Check I own this repository, or I have permission to use its content, then Confirm.

Starting a new site, the confirmed repository shows as a pill above the prompt box, which you can still edit or remove until you send the message that creates the site. Inside an existing project's chat, it is attached immediately with a Repository imported toast, Mention it in your next message and the AI will read it.

Not every repository can be picked from the list

Pasting a public repository's URL works for anyone, on any plan.

Picking a repository from the dropdown needs its GitHub account connected to your workspace first, and connecting a new GitHub account requires a paid plan. Only accounts that are connected and verified show up. A personal GitHub account can be connected for this too. See Plans and Move your code to GitHub for connecting and verifying an account. On the Free plan, paste the repository's public URL instead.

A private repository can be read only through a GitHub account that is connected and verified in the same workspace as the site. That applies both to picking it from the list and to pasting its URL. Anything else, including a private repository of an account connected to a different workspace, answers That repository could not be read!, exactly as for a repository that does not exist.

The repository is read with the access of the workspace the site is in now, so after a site moves to another workspace a private repository is read only if that workspace has its account connected.

If GitHub cannot be reached

When GitHub does not answer, the check stops with GitHub could not be reached, so that repository was not checked. Try again in a moment! When GitHub's hourly limit on requests is used up, it stops with GitHub's hourly request limit is used up, so that repository was not checked. and says how long to wait. Either way nothing is attached, so try again once GitHub responds.

A workspace that checks a great many repositories and sites for import in one day is asked to wait, with You have checked a lot of sites today, try again in followed by how long.

Inside a project, a repository that could not be read because GitHub was unreachable or its hourly limit was used up is not marked as read. It is read again with the next message you send.

What gets read

Only files that look like source, not binaries. Images, fonts, lockfiles, and anything inside node_modules, .git, dist, build, .next, .turbo, .vercel, coverage, out, vendor or .cache are skipped.

The first read takes at most 40 files and 200 KB combined. It starts with the files nearest the top of the repository and leaves tests, specs, mocks, fixtures, stories and minified files for last. A file over 40 KB is not part of it. A repository past those limits is read partially rather than refused, and the AI is told how many source files it has not read yet, with the path and size of up to 150 of them.

It can look at more than the first read

That cap only limits what lands automatically in the message right after the import. Beyond that, the AI can look further into the repository itself, listing its full file tree or reading a specific file it did not already get, whenever it decides it needs to. You do not have to reattach the repository for this, just ask for whatever you need and it goes and reads it.

A file over 40 KB is read in parts of up to that size, one after another, so a large file is not out of reach. Only a file over 2 MB, or one that is not text, is refused.

Reattach if it forgets

The repository is read once, for the message that follows the import. If a long conversation later gets summarized and the AI no longer seems to remember it, open +, From GitHub under Import, and pick the same repository again. It gets read again for your next message.

Next