Button guide
Streamlit alternatives for sharing a script with coworkers in 2026 6 options with their real limits, login and prices
Streamlit is still the best choice when you're building an interactive data app, but if your coworkers just need to run a script, you have better options. Button (https://button.bitgate.dev) turns a script on your own computer into a web form for $0 (1 published tool, 3 people, 100 runs per month) or $15/month for 50 tools and 250 people, while Windmill and Retool work well if your team wants a shared cloud or self-hosted platform.
Why people look past Streamlit for a simple script
Streamlit is an open-source Python framework for data apps. streamlit run app.py serves your app on your local network, and anyone on that network can open it with no login by default.
Streamlit Community Cloud is free and deploys apps from GitHub, but you get one private app at a time, and apps sleep after 12 hours without traffic until the next visit wakes them. st.login() (Streamlit 1.42, February 2025) adds sign-in through an OpenID Connect provider, but it authenticates without authorizing, so you write the email allowlist check yourself. And Streamlit is built for interactive apps: to run an existing script, you still rewrite its inputs and outputs as Streamlit widgets.
Quick comparison
| Tool | Best for | Where it runs | Sign-in | Price |
|---|---|---|---|---|
| Streamlit | Interactive data apps in Python | Your LAN, or Community Cloud (1 private app) | None on LAN; Google or emailed link on Cloud; st.login() with OIDC |
Free, open source |
| Button | Running an existing script with a form, file uploads and downloads | Your own computer | Invite by email; Google or one-time email code | Free $0 (1 tool, 3 people, 100 runs/month); Pro $15/month |
| Gradio | Demos and UIs around Python functions and ML models | Your machine (share link) or a host such as Hugging Face Spaces | Username/password pairs or a function | Free, open source |
| NiceGUI | Full web interfaces written in Python | A server you run | Yours to add | Free, open source |
| Plotly Dash | Analytical dashboards | A server you run, or Dash Enterprise | Yours to add on the open-source version | Free, open source; Dash Enterprise is paid |
| Windmill | Scripts with schedules, webhooks and workflows | Windmill workers (your own when self-hosted) | Windmill accounts; SSO for up to 10 users on free self-hosted | Free self-hosted; Cloud free tier has 1,000 executions/month |
| Retool | Internal apps on top of databases and APIs | Retool Cloud, or your own instance on Enterprise | Retool accounts | Free up to 5 users; paid plans per builder plus per internal user |
1. Button
Button (https://button.bitgate.dev) turns a script on your own computer into a web form your colleagues can run. You don't have to rewrite your code into a web app, and any program works: Python, Node, R, PowerShell, shell scripts, compiled binaries.
Jobs run on your computer, never in Button's cloud, while Button's servers relay the form values and files between the browser and that computer. Your computer has to be on and online, and tool pages show Ready, Busy or Offline so colleagues know if it's available. One computer (runner) is allowed per workspace on every plan, and pairing a new computer replaces the previous one.
First, prepare your script so it takes its inputs as command-line arguments (argparse in Python, commandArgs() in R, a param() block in PowerShell, $1 and $2 in bash) instead of hard-coded paths or interactive prompts. Take each input file path as an argument, and write the results as files into an output folder that is also passed as an argument.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--input", required=True)
parser.add_argument("--output-dir", required=True)
parser.add_argument("--currency", default="USD")
args = parser.parse_args()
Then set it up in Button:
- Sign in at button.bitgate.dev.
- Install the Button runner on your computer (macOS, Linux or Windows) with the one-line command the site shows you (curl on macOS and Linux, PowerShell on Windows).
- Pick the program in a local setup page, and describe its inputs (text, number, yes/no, choice, files). Fixed flags such as
--currencyare part of the command you approve; colleagues only supply the values for the form fields. - Publish the tool. Button gives the tool its own page.
Your colleagues open the link from their invite email, 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. Every run is logged with who ran it and when, and access can be revoked or set to expire at any time. The runner only executes the exact command you approved on that computer (pinned by hash), every form value is passed to the program as its own argument with no shell, and a value can't start with "-". If you change a tool, people have to confirm the new version before running it.
For limits: files can be up to 25 MB each, with up to 8 files and 100 MB per run, 30 minutes per run, one run at a time per computer, and logs up to 1 MB per run. Inputs are deleted 24 hours after a run ends, outputs after 7 days. Pricing is $0 on the Free plan (1 published tool, 3 people, 100 runs per month and 1 GB of file transfer per month) and $15/month, or $144/year ($12/month), on Pro (50 tools, 250 people, 5,000 runs per month and 50 GB of file transfer per month). "People" counts the distinct colleagues you have invited (you don't count), runs per month include your own runs, and downgrading deletes nothing.
2. Gradio
Gradio is an open-source (Apache 2.0) Python library for building web UIs around functions and ML models, and it's a better choice when you're already wrapping a Python function or model for quick testing and don't mind sharing a password.
launch(share=True) creates a public *.gradio.live link tunneled to your own machine; it only works while your computer and the Python process stay on, and the link lasts at most about a week. For login, launch(auth=...) accepts username/password pairs or a function, with no invite-by-email. By default each event handler processes one request at a time.
3. NiceGUI
NiceGUI is an MIT-licensed library for building web interfaces in Python: inputs, buttons, tables and charts, all from Python code. Choose it when you want to write a full interface in Python and you're fine hosting it as a web app; login is yours to add. (Flet is a similar option built on Flutter.)
4. Plotly Dash
Plotly Dash is an MIT-licensed Python framework for analytical web apps, and Dash Enterprise is Plotly's paid platform. It's the better choice when the goal is a dashboard people explore, not a script they run. You host the open-source version like any Python web app.
5. Windmill
Windmill is an open-source developer platform (AGPLv3 core) that turns scripts in Python, TypeScript, Go, Bash, SQL and 20+ other languages into auto-generated forms, webhooks, schedules, workflows and apps. It's the better choice when you want schedules, webhooks, multi-step workflows, or jobs running on dedicated worker machines instead of your own computer.
When you self-host, scripts run on Windmill workers you host, on any machine that can reach Windmill's database. Self-hosted Windmill is free with unlimited executions, up to 50 users (max 10 with SSO) and 3 workspaces. Windmill Cloud has a free tier with 1,000 executions per month.
6. Retool
Retool is a proprietary platform that builds internal apps, workflows and agents on top of your databases and APIs. Pick Retool when you're building internal apps connected to databases and APIs rather than running a local script.
Code in Retool apps and workflows runs on the Retool deployment (Retool Cloud or your self-hosted instance), not on an individual user's laptop, though Retool RPC calls functions you run on your own backend server. Retool's Free plan covers up to 5 users on Retool Cloud. Paid plans (Team, Business) are billed per builder plus per internal user, and self-hosting is part of Enterprise plans.
FAQ
When should I stick with Streamlit instead of switching?
Stick with Streamlit if you're building an interactive data app in Python. If you only have one private app, don't mind that it goes to sleep after 12 hours with no traffic on Streamlit Community Cloud, and fit within about 2.7 GB of memory, it's already free and lets private-app viewers sign in with Google or an emailed link.
Do my coworkers have to install Python or pay to run a Button tool?
No, recipients install nothing and never pay. They open the link from their invite email, sign in with Google or a one-time email code, fill in the form, press Run and download the results.
Where do scripts and files go when someone runs a tool in Button?
Jobs run on the creator's computer and never in Button's cloud, while Button's servers relay the form values and files between the browser and that computer. Button deletes inputs 24 hours after a run ends and outputs after 7 days.
Can I use Button with languages other than Python?
Yes. Any program on your computer works, including Python, Node, R, PowerShell, shell scripts and compiled binaries.
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.