Button guide

OliveTin alternatives with file uploads and invite-by-email login Script Server, Rundeck, Windmill and Button compared

If you need file uploads or a simple way to share scripts outside your own network, Script Server, Rundeck, Windmill and Button all handle file inputs. Button (https://button.bitgate.dev) turns scripts on your computer into web forms with email-invite login and files up to 25 MB each (up to 8 files and 100 MB per run), and has a $0 free plan for 1 tool, 3 people and 100 runs per month.

Where OliveTin stops

OliveTin is great when you have predefined shell commands on a server or home lab and want to give them a web button from a YAML config. It's open source (AGPL-3.0, written in Go), self-hosted only with no SaaS version, and its latest release was in October 2026. You get typed arguments like text, int, email, url, datetime, password, checkbox and dropdown choices, plus local users, OAuth2 and access control lists.

What it doesn't have is a file upload argument. A feature request for attachments as input (issue #939) has been open since March 2026. And because it's self-hosted only, sharing a tool with someone outside your home network is up to you to host and set up.

How the alternatives compare

Tool Hosting File uploads Login and sharing Free tier / License
OliveTin Self-hosted only No (issue #939 open since March 2026) Local users, OAuth2, access control lists AGPL-3.0
Script Server Self-hosted (Linux first, Docker image available) Yes, plus output file downloads LDAP, Google OAuth, htpasswd Apache 2.0
Rundeck Open Source Self-hosted (Java 17+ server and production database) Yes Rundeck users with access control policies Apache 2.0 (v6.3.0, October 2026)
Windmill Self-hosted or Windmill Cloud Yes (auto-generated forms) Up to 50 users self-hosted (max 10 with SSO) AGPLv3 core; 1,000 cloud executions/month free
Button Runner on your computer, web form on button.bitgate.dev Up to 8 files (25 MB each, 100 MB/run) and output downloads Invite by email; Google or one-time email code $0 for 1 tool, 3 people, 100 runs/month; Pro $15/month

Script Server

Script Server (github.com/bugy/script-server) is the closest thing to OliveTin if you want to keep self-hosting a lightweight web UI for scripts. It's an open-source Python web server under the Apache 2.0 license, built for Linux first with a Docker image available.

Script parameters become form fields, including file uploads, and it shows live output and offers output files for download. It also supports LDAP, Google OAuth and htpasswd logins, and keeps execution history and audit logs. The catch is the release cadence: its latest tagged release is 1.18.0 from August 2023, though the main branch still gets commits.

Use Script Server over Button if you want an open-source tool you host yourself on Linux or Docker, or if you need LDAP or htpasswd logins.

Rundeck

Rundeck Open Source (Apache 2.0) is maintained by PagerDuty, and the commercial edition is PagerDuty Runbook Automation. Version 6.3.0 shipped in October 2026.

In Rundeck, job options appear to users as a form with text, file and multi-line options, allowed values and regex checks. Jobs run commands locally on the Rundeck server or on nodes over SSH or WinRM. It's a much heavier setup than OliveTin, though, because Rundeck needs a Java 17+ server and, in production, a database (MySQL/MariaDB, PostgreSQL, SQL Server or Oracle).

Rundeck is the better choice when you already run a Java 17+ server with a database and need to run jobs across multiple nodes over SSH or WinRM.

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.

You can host it yourself or use Windmill Cloud. Self-hosted Windmill is free with unlimited executions, up to 50 users (max 10 with SSO) and 3 workspaces, and when you self-host, scripts run on Windmill workers you host. Windmill Cloud has a free tier with 1,000 executions per month.

Pick Windmill instead of Button if you need webhooks, schedules, multi-step workflows, SQL scripts or more than one worker machine.

Button

Button (https://button.bitgate.dev) takes a different approach: you don't host a web server at all. It turns a script on your own computer (macOS, Linux or Windows) into a web form your colleagues can run, whether that's Python, Node, R, PowerShell, shell scripts or compiled binaries.

Jobs still run on your computer, never in Button's cloud, while Button's servers relay the form values and files between the browser and your machine. Because it runs on your machine, your computer has to be on and online (tool pages show Ready, Busy or Offline), and each workspace supports one computer on every plan - pairing a new computer replaces the previous one.

For security, 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 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. Every run is logged with who ran it and when, and you can revoke access or set it to expire at any time.

Here is how you set up a script on Button:

  1. Update your script so it takes its inputs as command-line arguments (argparse in Python, commandArgs() in R, a param() block in PowerShell, or $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. Fixed flags are part of the command you approve; colleagues only supply the values for the form fields.
  2. Sign in at button.bitgate.dev and install the Button runner on your computer with the one-line command the site shows you (curl on macOS and Linux, PowerShell on Windows).
  3. Pick your program in the local setup page and describe its inputs (text, number, yes/no, choice, files), then publish. Button gives the tool its own page.
  4. Invite your colleagues by email. 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. They install nothing and never pay.

Button's limits are 25 MB per file, 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, and outputs after 7 days.

The Free plan is $0 with 1 published tool, 3 people and 100 runs per month; Pro is $15/month, or $144/year, with 50 tools, 250 people and 5,000 runs per month. Downgrading deletes nothing.

FAQ

Does OliveTin support file uploads?

No. OliveTin supports typed arguments like text, int, email, url, datetime, password, checkbox and dropdown choices, but not file uploads. A feature request for attachments as input (issue #939) has been open since March 2026.

Where do scripts run when someone uses a Button form?

Jobs run on the creator's own computer, never in Button's cloud. Button's servers relay the form values and files between the user's browser and that computer. The creator's computer has to be on and online for the tool to run.

Do colleagues have to pay or install anything to run a Button tool?

No, recipients never pay and don't install anything. They open the link from their invite email, sign in with Google or a one-time email code, fill out the form, press Run and download the results.

What happens if a colleague puts shell commands into a Button form field?

The Button runner only executes the exact command the creator 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 "-", so a typed command arrives as plain text. It stays harmless as long as your script doesn't hand that value to a shell or eval itself.

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.