Button guide

Stop running your script for coworkers who email you files give them their own Run button, free for 1 tool and 3 people

You can get out of the file-running loop by wrapping your local script in a web form with Button (https://button.bitgate.dev). Your coworkers upload their own files and download the output in their browser while the script still executes on your machine. The Free plan costs $0 and covers 1 published tool, 3 invited people, and 100 runs per month (up to 25 MB per file).

The "email me the CSV" loop

You wrote a quick script to solve a problem, and now you're the service desk for it. Someone emails you a CSV, or drops it in chat, and asks you to run your script when you have a minute. You stop what you're doing, download their attachment, change the hard-coded file path in your editor, run the command, and email the output back.

It only takes a couple of minutes each time, so you just do it. But those interruptions break your focus across the week. If you're on holiday or out sick, their work stalls until you get back. And after a few rounds of "sorry, use this file instead," your downloads folder is full of similarly named spreadsheets and nobody is quite sure which version produced which output.

Your four options for handing it off

Before you change anything, look at the ways people usually try to get out of this and pick the one that fits your script.

  • Teach them to run it themselves. You help them install Python, R, or Node on their laptops, set up the dependencies, and show them how to use the terminal. This costs nothing, but now you're tech support every time an environment breaks or you change a line of code.
  • Bundle it as an executable (PyInstaller). For Python scripts, PyInstaller bundles your code and its packages into a program your coworker can double-click. It isn't a cross-compiler, so you build the Windows .exe on Windows and the Mac app on a Mac. Antivirus false positives are a known PyInstaller issue, and whenever you update the script you have to send everyone a new build so they don't keep running the old one.
  • Build and host a web app (Streamlit). If your script is in Python, Streamlit lets you build a web interface around it with st.file_uploader and st.download_button. streamlit run app.py serves it on your local network with no login by default; st.login() adds sign-in through an OpenID Connect provider, and you write the email allowlist check yourself. Streamlit Community Cloud hosts one private app for free from GitHub, and it sleeps after 12 hours without traffic until the next visit.
  • Put a Button web form in front of your local script. Button turns the script already sitting on your computer into a web form. Button's servers relay the form values and files between your coworker's browser and your computer, and the job runs on your machine. It works with any program: Python, Node, R, PowerShell, shell scripts, or compiled binaries.
Feature / Limit Button (Free / Pro) Streamlit (Community Cloud / Local) PyInstaller
Language support Python, Node, R, PowerShell, shell scripts, compiled binaries Python Python
Where it runs Your computer (macOS, Linux, Windows) Streamlit's cloud or your LAN Coworker's computer (build on each OS)
File size limit 25 MB per file; up to 8 files and 100 MB per run 200 MB default (server.maxUploadSize) No upload; runs on their files locally
Access & login Invite email; sign in with Google or one-time email code 1 private app on Cloud (Google/email link); DIY allowlist with st.login() locally You distribute the binary file
Cost $0 Free (1 tool, 3 people, 100 runs/mo) / $15/mo Pro ($144/yr) Free on Community Cloud Free (open source)

When another tool is the better choice

Use Streamlit Community Cloud if your script is pure Python, needs uploads bigger than 25 MB, or has to be available when your computer is off (the app sleeps after 12 hours without traffic and wakes on the next visit). Use PyInstaller if your coworkers need to run a Python program offline on their own machines, or if their files are larger than 25 MB each.

Use Button when your script isn't in Python (or mixes R, PowerShell, bash, or compiled binaries), when you don't want to rewrite your script into a UI framework or push it to GitHub, or when your script relies on local tools and setups that are already working on your computer.

How to hand off your script with Button

Setting up a tool takes a quick tweak to how your script reads inputs, followed by installing the runner.

  1. Change your script to take command-line arguments. Instead of hard-coding file paths or using interactive prompts, take inputs from the command line (argparse in Python, commandArgs() in R, a param() block in PowerShell, or $1 and $2 in bash). Set it up so each input file path is passed as an argument, and have your script write its output files into an output folder whose path is also passed as an argument. (Fixed flags will be part of the command you approve; your coworkers only supply values for the form fields.)
  2. Sign in at button.bitgate.dev.
  3. Install the Button runner on your computer. Run the one-line command the site shows you - curl on macOS and Linux, or PowerShell on Windows. You can pair one computer per workspace on every plan; pairing a new computer replaces the previous one.
  4. Pick your program and describe its inputs. In the runner's local setup page, select your script and set up the form fields for the arguments it needs: text, number, yes/no, choice, or files.
  5. Publish and invite your colleagues. Once you publish, Button gives the tool its own page and sends invite emails to the coworkers you add.

On the security side, the runner 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 without a shell, and values can't start with -, so nobody can sneak extra flags into your script. If you ever change the tool, people have to confirm the new version before running it. You also get a log of every run showing who ran it and when, and you can revoke a coworker's access or set it to expire whenever you want.

What your coworker sees (and what happens when your laptop is shut)

From your coworker's side, there is nothing to install and they never pay. They open the link from their invite email, sign in with Google or a one-time email code, fill in the form fields you set up, drop in their file, and press Run. When the script finishes on your machine, they download the results right from the page.

Because jobs execute on your computer and never in Button's cloud, your computer has to be on and online for them to run the tool. Only one run happens at a time per computer, and each run can take up to 30 minutes (producing up to 1 MB of logs).

Your coworkers don't have to guess or message you to find out if your machine is awake. The tool page shows one of three states:

  • Ready: Your computer is online and free. They can hit Run.
  • Busy: Someone else's run (or yours) is currently executing on your computer.
  • Offline: Your computer is asleep, turned off, or disconnected from the internet.

Once a run finishes, Button deletes the input files after 24 hours and the output files after 7 days.

FAQ

What are the file and usage limits on the Free plan?

The Free plan is $0 and includes 1 published tool, 3 invited people (you don't count toward the 3), 100 runs per month (which includes your own test runs), and 1 GB of file transfer per month. Every plan supports files up to 25 MB each, up to 8 files and 100 MB total per run, and a 30-minute run limit.

What if I have more than 3 coworkers or 1 script?

You can upgrade to the Pro plan for $15/month, or $144/year ($12/month). Pro gives you 50 tools, 250 invited people, 5,000 runs per month, and 50 GB of file transfer per month. If you ever downgrade back to Free, nothing gets deleted.

Do the files stay only on my computer?

No. While the script itself runs on your computer, Button's servers relay the form values and files between your coworker's browser and your machine. Inputs are deleted from Button 24 hours after a run ends, and outputs are deleted after 7 days.

Can a coworker break my script by typing a flag like --delete into a text field?

No. The runner passes each form value to your program as a separate argument with no shell involved, and it blocks any value that starts with -. It will only ever run the exact command you approved, pinned by hash.

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.