Button guide
Where to host a Python script so coworkers can run it PythonAnywhere, Render, Streamlit Cloud, Hugging Face, or your own computer
If your script needs to be up 24/7 or handle several coworkers running it at the same time, put it on a hosted service like PythonAnywhere, Render, Streamlit Community Cloud or Hugging Face Spaces. If the script relies on files, drivers, licenses or network access that already live on your machine - or you just don't want to turn a plain script into a web app - use Button (https://button.bitgate.dev) to give coworkers a web form that runs the script right on your computer. Button's Free plan is $0 for 1 published tool, 3 people and 100 runs per month, and each run can take up to 30 minutes and 100 MB of files.
Quick comparison
All facts and prices below were checked in October 2026.
| Option | Where the code runs | Free tier limits | Sleep and wake rules | Starting paid price |
|---|---|---|---|---|
| PythonAnywhere | Hosted server | 1 web app, 100 CPU-seconds/day, outbound internet only to an allowlist of sites | Free web app expires after 1 month unless you renew it | $10/month (Developer) |
| Render | Hosted server | Free web service (512 MB RAM) | Spins down after 15 minutes without traffic; takes about a minute to wake up | $7/month (512 MB instance) |
| Streamlit Community Cloud | Hosted server (from GitHub) | 1 private app at a time, about 2.7 GB memory, 200 MB default upload limit | Sleeps after 12 hours with no traffic; wakes on next visit | No paid tier on Community Cloud |
| Hugging Face Spaces | Hosted server (Gradio or Streamlit) | CPU Basic: 2 vCPU, 16 GB RAM, 50 GB non-persistent disk | Sleeps after 48 hours of inactivity; wakes on next visit | $0.03/hour for CPU Upgrade (8 vCPU, 32 GB RAM) |
| Button | Your own computer (macOS, Linux, Windows) | $0 for 1 tool, 3 people, 100 runs/month, 1 GB transfer/month; max 25 MB/file, 8 files and 100 MB/run, 30 min/run | Available whenever your computer is on and online; 1 job at a time | $15/month, or $144/year ($12/month) for Pro |
When a hosted server is the better choice
Use PythonAnywhere, Render, Streamlit Community Cloud or Hugging Face Spaces when the tool has to work while your laptop is shut in your backpack, or when several people need to run jobs at the same time. Button runs jobs on your own computer, one at a time, so the tool shows Offline while your machine sleeps and Busy while another run is going.
Each hosted option comes with its own tradeoffs:
PythonAnywhere gives you a place to host a Python web app without managing a full server, though you still need to wrap your script in a web framework. The free Beginner account gives you 1 web app and 100 CPU-seconds per day. Outbound internet on the free tier only reaches an allowlist of sites, so if your script pulls data from an arbitrary API, it won't connect until you pay for the Developer plan at $10/month. You also have to log in and renew the free web app every month so it doesn't expire.
Render is straightforward if you already have a web service ready to deploy. The catch on the free tier is the spin-down: after 15 minutes without traffic, the service goes to sleep, and the next coworker who opens it has to wait about a minute for it to wake up.
Streamlit Community Cloud suits you if you're happy writing a UI in Python with Streamlit. You use st.file_uploader (200 MB per file by default) and st.download_button to return results, push the code to GitHub, and deploy. The free tier gives you one private app at a time, where invited viewers sign in with Google or an emailed link. Apps sleep after 12 hours without traffic and wake on the next visit.
Hugging Face Spaces hosts Streamlit and Gradio apps. The free CPU Basic tier gives you 2 vCPU, 16 GB of RAM and 50 GB of non-persistent disk, and Spaces can be public, protected or private. Free Spaces sleep after 48 hours of inactivity and wake on the next visit. CPU Upgrade gives you 8 vCPU and 32 GB of RAM for $0.03 per hour.
When keeping the script on your own computer wins
Sometimes moving a script to the cloud is more trouble than the script itself. If your script reads from a local folder, talks to a database only your machine can reach, uses a local software license or hardware driver, or calls internal systems that aren't open to the public internet, copying all of that onto Render or Hugging Face is a headache. And if the script is just 80 lines of Python that takes a CSV and spits out an Excel file, building and maintaining a web app around it is wasted work.
That's what Button is for. Your script stays on your macOS, Linux or Windows computer, and Button puts a web form in front of it. When a coworker fills out the form and presses Run, Button's servers relay the form values and files between their browser and the runner on your computer, your computer runs the job, and the browser gets the output files back.
You don't have to stick to Python, either. Any program works: Node, R, PowerShell, shell scripts, compiled binaries.
How to set up a Python script on Button
First, make sure your script takes its inputs as command-line arguments instead of hard-coded paths or interactive input() prompts. In Python, use argparse (in R you'd use commandArgs(), in PowerShell a param() block, and in bash $1 and $2). Take each input file path as an argument, and write the results as files into an output folder that is also passed in as an argument.
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument("--input", required=True)
parser.add_argument("--currency", required=True)
parser.add_argument("--outdir", required=True)
args = parser.parse_args()
# Read args.input, process it, and write output files into args.outdir
out_path = os.path.join(args.outdir, "report.csv")
Once the script runs cleanly from your terminal, put it on Button:
- Sign in at
button.bitgate.dev. - Install the Button runner on your computer using the one-line command the site shows you (it uses
curlon macOS and Linux, and PowerShell on Windows). - Open the local setup page, pick your program, and describe its inputs. You can add text, number, yes/no, choice and file fields. Fixed flags like
--currencyare part of the command you approve; your colleagues only supply the values for the form fields. - Publish the tool. Button gives it its own page and sends invite emails to the colleagues you specify.
- When a colleague opens the link from their invite email, they sign in with Google or a one-time email code, fill in the form, press Run, and download the results. They install nothing and never pay.
Security, limits and pricing to keep in mind
Because coworkers are triggering commands on your computer, the runner is locked down. It only executes the exact command you approved on that computer, pinned by hash. Every form value is passed to your program as its own argument with no shell involved, and a value can't start with -, so nobody can inject extra flags. If you change a tool, people have to confirm the new version before running it. Every run is logged with who ran it and when, and you can revoke a coworker's access or set it to expire at any time.
The limits are straightforward:
- Up to 25 MB per file, and up to 8 files and 100 MB total per run.
- Up to 30 minutes per run, and 1 MB of logs per run.
- One run at a time per computer, and one computer (runner) per workspace on every plan. Pairing a new computer replaces the previous one.
- Button's servers delete inputs 24 hours after a run ends, and outputs after 7 days.
"People" only counts the distinct colleagues you have invited (you don't count), while runs per month include your own runs. If you ever downgrade, it deletes nothing.
FAQ
What happens if my computer is turned off when a coworker tries to run my Button tool?
Your computer has to be on and online for the tool to work. Each tool page shows its live status as Ready, Busy or Offline, so your coworker will see right away that your machine isn't available.
Do my files stay completely on my computer when I use Button?
No. While the job itself executes on your computer and never in Button's cloud, the form values and files pass through Button's servers to get between your colleague's browser and your machine. Button deletes input files 24 hours after a run ends and output files after 7 days.
Can I just run Streamlit on my own computer for free instead of using a cloud host or Button?
Yes, running streamlit run app.py gives you a Network URL on your LAN IP that anyone on the same network can open. Just keep in mind there is no login by default, and even if you set up st.login() with an OpenID Connect provider, you still have to write the email allowlist check yourself in code using st.user.email and st.stop().
Do my coworkers need to pay or install Python to run a Button tool?
No, recipients never pay and don't install anything. They open the link from their invite email in a browser, sign in with Google or a one-time email code, fill out the form, and download the output files.
Last updated
Put your script behind a form
Button turns a script on your computer into a web form. Colleagues sign in, fill it in, press Run and download the results. Free for 1 tool and 3 people.