Guides
How to Upload Your App to GitHub Without the Terminal
The terminal scares many first-time makers — and that is fine. You can still put your project on GitHub using visual tools. GitHub Desktop is the most reliable no-terminal path: point it at your folder, review what will upload, commit, and publish. This guide walks through that process step by step, with extra focus on what you must not upload and how to confirm your repo is safe before you connect a hosting platform.
Updated July 2026 · 8 min read
Written for AI makers using tools like Cursor, Bolt, Lovable, Replit, Claude, and ChatGPT.
Quick answer
Install GitHub Desktop, add your local project folder, verify .env and node_modules are excluded via .gitignore, commit your files, and click Publish repository. Choose private if you are not ready for public code. Then open github.com and confirm the upload looks correct.
Who this is for
- You have a project folder on your computer and want it on GitHub
- You prefer clicking buttons over typing Git commands
- You built an app with AI tools and need the next step toward deployment
- You want to avoid accidentally publishing secrets or huge dependency folders
What you'll need
- Your project folder (complete app, not just one file)
- A free GitHub account at github.com
- GitHub Desktop installed from desktop.github.com
- A
.gitignorefile (or use our safe-upload tool to generate one) - 10–20 minutes for your first upload
Before you open GitHub Desktop
Uploading to GitHub is not the same as backing up your entire hard drive. You upload one project folder — the app itself. Take two minutes to scan that folder for files that should never be public.
The biggest risk for AI-built apps is the .env file. AI tools create it automatically with real API keys, database passwords, and third-party tokens. If .env appears in GitHub Desktop’s file list, stop and add .env to .gitignore before committing.
Run through a safe-upload checklist. It is faster than revoking leaked Stripe or OpenAI keys later.
- Locate your project root folder (contains
package.json,README, or similar) - Check for
.env, .pem keys, and local database files - Create or update
.gitignorebefore the first commit
Install and sign in to GitHub Desktop
Download GitHub Desktop from desktop.github.com — it is free for macOS and Windows. Install it, open the app, and sign in with your GitHub account. If you do not have an account, create one at github.com first.
Once signed in, you will see an empty window with options to clone a repository, create a new one, or add a local repository. You want “Add local repository” because your app already exists on your computer.
Add your project and review the file list
Click File → Add local repository (or the “Add” button on first launch). Browse to your project folder and select it. If GitHub Desktop says it is not a Git repository, click “create a repository” and keep the default branch name main.
The left panel shows every file Git wants to include in your first commit. Scroll through carefully. You should see source code, config files, and README. You should not see node_modules/, .next/, dist/, .env, or .venv/ if your .gitignore is correct.
If unwanted files appear, cancel, fix .gitignore, and refresh. On GitHub Desktop, changes to .gitignore may require restarting the app or making a small edit to trigger a refresh.
- Green plus icons = files that will be uploaded
- If
.envis listed, add it to.gitignoreimmediately - Large folders (
node_modules) should not appear — if they do,.gitignoreis missing or wrong
What not to upload (critical)
Some files are dangerous to upload; others are just wasteful. Both cause problems — secrets get scraped by bots within minutes of a public push; huge folders make uploads fail or time out.
Never upload: .env files with real values, private keys (.pem, id_rsa), production database dumps, Stripe secret keys, OpenAI API keys, or any live credential. If these ever hit GitHub, rotate the keys immediately.
Usually ignore via .gitignore: node_modules/, build output (.next/, dist/, build/), Python virtual environments (.venv/, __pycache__/), OS junk (.DS_Store), and local SQLite databases unless you explicitly want them in version control.
- Secrets → security incident if uploaded
node_modules→ upload fails or repo becomes unusably large.env.examplewith fake values → safe and helpful to uploadREADME.md→ safe and helpful to upload
How .gitignore protects you
A .gitignore file is a plain text file in your project root. Each line is a pattern telling Git to skip matching files. When .env is in .gitignore, GitHub Desktop will not offer it for commit — even if the file exists on your laptop.
AI tools sometimes generate a basic .gitignore; sometimes they do not. If yours is missing or thin, use a stack-specific template or our safe-upload tool. At minimum, include .env, node_modules/, and your framework’s build folder.
Important: .gitignore only prevents future commits. If you already committed .env once, adding it to .gitignore later does not remove it from GitHub history. You must delete the file, commit, and rotate any exposed secrets.
.envnode_modules/.next/ordist/orbuild/- .venv/ and __pycache__/
- .DS_Store
Commit and publish to GitHub
Write a short commit summary in the bottom-left box — “Initial commit” is fine for your first upload. Click “Commit to main.” Your files are saved locally in Git’s history but not yet on GitHub’s servers.
Click “Publish repository” in the top bar. Choose a name (usually your project folder name). Add an optional description. Decide public vs private (see next section). Click Publish repository.
After publishing, GitHub Desktop shows “Fetch origin” instead of Publish — that means you are live on GitHub. Click Repository → View on GitHub to open your repo in the browser.
Public vs private repository
A public repository is visible to anyone on the internet. They can read your code, copy it, and browse your commit history. A private repository hides code from the public but still works with most hosting platforms when you connect your account.
For first-time makers, private is a sensible default. You can switch to public later in Settings → Danger zone → Change repository visibility. Public does not mean “production ready” — it only means anyone can see the source.
Private repos are not safe storage for secrets. Never commit live API keys even in a private repo. Collaborators, integrations, and accidental misconfigurations still happen.
- Private → good for learning and pre-launch code
- Public → good when you want open source or portfolio visibility
- Both work with Vercel, Railway, Render, and similar hosts
- Neither replaces proper secret management
Verify your upload on github.com
Always open your repository in a browser after the first publish. Click through the file tree. Confirm you see source files and README. Confirm you do not see .env, node_modules, or unexpected personal files from outside your project.
Check the latest commit message and timestamp. If something looks wrong, fix .gitignore locally, commit the fix, and push — GitHub Desktop will show a “Push origin” button when you have unpushed commits.
Once verified, you are ready to connect a hosting platform or run a launch readiness scan. Your code is backed up and deployable.
- Open github.com/your-username/your-repo-name
- Browse files — no secrets visible
- Read
README— does it describe the project? - Note the repo URL for hosting setup
Common mistakes
Publishing before checking the file list
How to fix it: Always scroll through staged files in GitHub Desktop. One
.envupload can compromise every key inside it.Uploading
node_modulesbecause “the app needs it”How to fix it: Hosts install dependencies from
package.jsonduring build.node_modulesshould never be in Git.Assuming private means you can commit secrets
How to fix it: Use environment variables on your host. Keep
.envlocal and out of Git entirely.Selecting the wrong folder (Desktop or Documents parent)
How to fix it: Point GitHub Desktop at the project root — the folder that contains
package.jsonor your main app files.
Copy-ready prompt
Prompt for your AI coding tool
Paste this into Cursor, Claude, ChatGPT, Bolt, Lovable, or your AI coding tool.
Ready to paste
Help me prepare this project for GitHub without using the terminal. 1. Review my folder and list files that must NOT be uploaded (.env, node_modules, build output, local databases). 2. Create or update .gitignore with patterns for my stack. 3. Create .env.example with variable names and placeholder values only. 4. Tell me if any secrets appear to be hardcoded in source files. 5. Give me a short checklist to verify the upload in GitHub Desktop before I click Publish.
Paste this into Cursor, Claude, ChatGPT, Bolt, Lovable, or your AI coding tool.
Ready check
Beginner checklist
- GitHub account created
- GitHub Desktop installed and signed in
.gitignorecovers.env,node_modules, and build output- Safe-upload checklist reviewed
- Local repository added in GitHub Desktop
- File list reviewed — no secrets staged
- Initial commit created
- Repository published (public or private)
- Upload verified on github.com
Frequently asked questions
- What if upload fails because files are too large?
- You are probably trying to upload
node_modules, build output, or media assets. Add them to.gitignore, remove them from tracking if already staged, and try again. GitHub has a 100MB per-file limit. - Can I change from public to private later?
- Yes. Go to your repo on github.com → Settings → General → Danger zone → Change repository visibility. Remember: if secrets were ever public, rotating keys is still required.
- Does GitHub Desktop work on Linux?
- GitHub Desktop officially supports macOS and Windows. Linux users typically use their editor’s Git integration or the terminal. Cursor and VS Code both have Source Control panels.
- How do I upload updates after the first publish?
- Edit files locally. GitHub Desktop shows changed files. Write a commit message, commit, and click Push origin. Your GitHub repo updates within seconds.
- Can I use Cursor instead of GitHub Desktop?
- Yes. Open the Source Control panel, initialize the repo, commit, and use “Publish to GitHub” when signed in. The same
.gitignoreand safety rules apply.