Button guide
Share a Python script with non-technical coworkers a web form they run in the browser, no Python install, free for 3 people with Button
If you have a Python script that already works on your laptop, Button (https://button.bitgate.dev) turns it into a web form your colleagues can run from their browser without installing Python. The Free plan is $0 for 1 published tool, up to 3 people and 100 runs per month, and the script executes directly on your own computer when they press Run. If they need to run the script while your computer is off, you'll want to host a Streamlit or Flask app on a server instead.
Your four options (and what they cost you later)
Before setting anything up, it helps to look at the four ways people hand off a script like a two-week finance export cleaner, and what you end up maintaining afterwards.
1. Send the .py file and install Python on their machine.
You sit with your coworker, install Python, run pip install for your packages, and show them how to run the command. Next month a path changes, or you update the script and need a new library, and you're back on a screen share fixing their environment.
2. Build an executable with PyInstaller. PyInstaller bundles your script and its packages into a program your coworker can double-click. It isn't a cross-compiler, so a Windows exe has to be built on Windows and a Mac app on a Mac. Antivirus false positives are a known PyInstaller issue, and every time you fix a bug in the script you rebuild the executable and send it around again.
3. Host a Streamlit or Flask app.
With Streamlit you wrap the script in a small app: st.file_uploader for the input file and st.download_button for the result. streamlit run app.py serves it on your local network with no login by default. Streamlit Community Cloud hosts it for free from GitHub, but you get one private app at a time, and apps with no traffic for 12 hours go to sleep until the next visit. On a server you run yourself, st.login() connects to an OpenID Connect provider such as Google or Microsoft Entra ID; it confirms who someone is, and you write the check for which email addresses are allowed.
With Flask (BSD) or FastAPI (MIT), you have to write the routes and HTML form yourself, handle file uploads and temporary files, add login logic, run long jobs in the background instead of inside the web request, and host the app somewhere with HTTPS.
4. Give them a Button form. You leave the script on your own computer, install a small runner, and tell Button what inputs the script takes. Button gives your tool a web page and handles the invites, sign-in, file uploads, and result downloads. The catch: your computer has to be on and online when your colleague runs it.
| Option | Coworker installs | Where it runs | Login included | Free tier |
|---|---|---|---|---|
Send .py file |
Python + packages | Their computer | No | Free |
| PyInstaller | Your built executable | Their computer | No | Free |
| Streamlit Community Cloud | Nothing (browser) | Streamlit's cloud (sleeps after 12 hours idle) | Yes, on 1 private app | 1 private app |
| Flask / FastAPI | Nothing (browser) | A server you host and manage | You build it | Framework is free; you pay for hosting |
| Button | Nothing (browser) | Your computer | Yes (Google or email code) | $0 for 1 tool, 3 people, 100 runs/mo, 1 GB transfer/mo |
When another tool is the better choice
Button runs jobs on your computer, never in Button's cloud. If you're on vacation with your laptop shut in your bag and finance needs to clean an export right then, Button won't help them - the tool page will show Offline.
Go with Streamlit Community Cloud or a hosted Flask/FastAPI app if your coworker needs the tool while your machine is asleep or off. You also need another option if a single file is over 25 MB (Streamlit's uploader takes 200 MB by default), if a run takes longer than 30 minutes, or if several people need to run heavy jobs at the exact same moment, since a Button runner executes one run at a time per computer.
If the script runs during normal working hours when your computer is awake at your desk, Button saves you from rewriting your script into a web app or managing a cloud deployment.
How to share your Python script with Button
Setting this up takes a tiny adjustment to how your script receives its file paths, and then a few minutes in the Button setup page.
Step 1: Make your script take command-line arguments
If your script currently has hard-coded file paths like C:\Users\me\Desktop\export.csv or uses input() prompts, change it to use Python's standard argparse module. Take each input file path as an argument, and write the output files into a folder that is also passed in as an argument.
Here is what that looks like for a script that cleans a CSV and takes a currency code:
import argparse
import os
import csv
parser = argparse.ArgumentParser()
parser.add_argument("--input-file", required=True)
parser.add_argument("--currency", required=True)
parser.add_argument("--output-dir", required=True)
args = parser.parse_args()
out_path = os.path.join(args.output_dir, "cleaned_export.csv")
with open(args.input_file, newline="", encoding="utf-8") as infile, \
open(out_path, "w", newline="", encoding="utf-8") as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
for row in reader:
# your cleaning logic here
writer.writerow(row + [args.currency])
When you set this up in Button, fixed flags like --input-file, --currency and --output-dir are part of the command you approve on your machine. Your colleague only supplies the values for the form fields.
Step 2: Sign in and install the Button runner
- Sign in at
https://button.bitgate.dev. - Copy the one-line install command shown on the site and run it on your computer (it uses
curlon macOS and Linux, or PowerShell on Windows).
Each workspace has one computer (runner) on every plan, and pairing a new computer replaces the previous one.
Step 3: Pick your script and describe the inputs
- In the runner's local setup page on your computer, pick your Python program.
- Describe the inputs you want on the web form. Button supports text, number, yes/no, choice and file fields. For the script above, you'd add a file input for the raw CSV and a choice or text input for the currency.
- Approve the command and publish the tool.
Under the hood, the runner pins the exact command you approved by hash and only executes that command. When someone runs the form, every form value is passed to your program as its own argument with no shell involved, and Button blocks any value that starts with -. (If you later edit the tool, your colleagues have to confirm the new version before running it.)
Step 4: Invite your coworkers
- From your published tool's page, invite your coworkers by email. On the Free plan you can invite up to 3 distinct people (you don't count toward that limit), and the Pro plan ($15/month, or $144/year which is $12/month) covers up to 50 tools, 250 people, 5,000 runs per month and 50 GB of file transfer per month.
- Your colleague opens the link from their invite email and signs in with Google or a one-time email code. They don't install anything and they never pay.
- They see whether your computer is Ready, Busy or Offline, fill in the form, press Run, and download the files your script wrote to the output folder.
Every run is logged with who ran it and when, and you can revoke someone's access or set it to expire whenever you want.
FAQ
Does our data stay on my computer?
The script itself runs on your computer, but the form values and files are relayed through Button's servers between your colleague's browser and your machine. Button deletes input files 24 hours after a run ends, and deletes output files after 7 days.
What are the file size and runtime limits?
A run can include up to 8 files, up to 25 MB per file and 100 MB total per run, with logs up to 1 MB. Each run can take up to 30 minutes, and your computer runs one job at a time.
Do my own test runs count toward the monthly limit?
Yes, the monthly run allowance (100 runs per month on Free, 5,000 on Pro) includes your own runs alongside your colleagues' runs. You don't count toward the people limit, though - that only counts the distinct colleagues you've invited, and if you ever downgrade from Pro to Free, nothing is deleted.
Can I use this with R, PowerShell or bash scripts too?
Yes, any program that runs on your computer works: Python, Node, R, PowerShell, shell scripts or compiled binaries. Just make the script take its inputs and output folder as command-line arguments (commandArgs() in R, a param() block in PowerShell, or $1 and $2 in bash) the same way you would with argparse in Python.
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.