Button guide
Web UI for bash scripts OliveTin, Script Server, webhook, Rundeck and Button compared on setup, login and file uploads
If you already run a server and only people on your LAN need access, self-hosted tools like OliveTin or Script Server are free and fit well. When you want invite-by-email sign-in and file inputs without hosting anything yourself, Button puts a web form in front of the script on your own computer. The Free plan is $0 for 1 published tool, up to 3 invited colleagues and 100 runs per month, with file uploads up to 25 MB each.
The five options at a glance
Here is how the five tools compare (checked October 2026):
| Tool | Setup | Login | File uploads | License / Cost |
|---|---|---|---|---|
| OliveTin | Self-hosted server (Go), YAML config | Local users, OAuth2, access control lists | None (open feature request issue #939 since March 2026) | AGPL-3.0 (free) |
| Script Server | Self-hosted Python web server or Docker image | LDAP, Google OAuth, htpasswd | Yes, plus output file downloads | Apache 2.0 (free) |
| webhook | Small self-hosted server for HTTP requests | Not a web UI | Not a form UI | MIT (free) |
| Rundeck Open Source | Self-hosted Java 17+ server + production database | Built-in login | Yes, file job options | Apache 2.0 (free) / commercial PagerDuty edition |
| Button | One-line runner installer on your computer, no server to host | Invite by email; Google or one-time email code | Up to 8 files per run (25 MB each, 100 MB total) | Free ($0) or Pro ($15/month, $144/year) |
OliveTin
OliveTin is an open-source Go program (AGPL-3.0) that reads predefined shell commands from a YAML config and turns them into web buttons. It is self-hosted only, with no SaaS version. Arguments can be typed (text, numbers, dates, passwords, checkboxes, dropdowns and more), and logins work through local users, OAuth2 and access control lists.
What it lacks is a file upload argument. A feature request for attachments as input (issue #939) has been open since March 2026, so if your bash script needs a user's CSV or archive as input, OliveTin won't take it yet. Pick OliveTin when you want a self-hosted button board on your LAN and your scripts only take text, numbers or dropdown choices.
Script Server
Script Server is a free, open-source Python web server you install and host yourself, with Linux as its primary target and a Docker image available. It turns script parameters into form fields, including file uploads, shows live output in the browser, and offers output files for download when the run finishes. It also handles LDAP, Google OAuth and htpasswd logins, and keeps execution history and audit logs.
The catch is release cadence: its latest tagged release is 1.18.0 from August 2023, though the main branch still gets commits. If you already run a Linux box on your network and want a free, self-hosted form with file uploads and downloads, Script Server covers all of that.
webhook
webhook (github.com/adnanh/webhook) is a small, MIT-licensed self-hosted server that runs shell commands when it receives HTTP requests.
It doesn't give your colleagues a web page, a login screen or a form to fill out, so if people need to click a button in a browser, you would still have to build and host the HTML frontend yourself. Use it when another system needs to trigger a bash script over HTTP, not when humans need a UI.
Rundeck Open Source
Rundeck Open Source, maintained by PagerDuty alongside its commercial PagerDuty Runbook Automation edition, is the heavy option here. Job options show up to users as a form with text, file and multi-line options, allowed values and regex checks, and jobs can run locally on the Rundeck server or on remote nodes over SSH or WinRM.
To run it in production, though, you need a Java 17+ server and a database - MySQL/MariaDB, PostgreSQL, SQL Server or Oracle. If you are already setting up a central automation server for a fleet of nodes, Rundeck makes sense. For sharing a couple of bash scripts without maintaining Java and a database, it's a lot of machinery.
Button
Button (https://button.bitgate.dev) takes a different approach: you don't host a server at all. You install the Button runner on your own computer (Linux, macOS or Windows), and when a colleague fills in the web form and presses Run, the job executes on your machine while Button's servers relay the form values and files between their browser and your computer.
Your computer does need to be on and online when people use the tool (its page shows Ready, Busy or Offline), and you get one computer per workspace on every plan - pairing a new computer replaces the previous one. Each computer runs one job at a time, for up to 30 minutes per run, with logs up to 1 MB per run. Files can be up to 25 MB each, up to 8 files and 100 MB per run. Inputs are deleted 24 hours after a run ends, and outputs after 7 days.
On 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 in between, and a value can't start with "-". If you change a tool, your colleagues 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.
The Free plan is $0 and includes 1 published tool, 3 people, 100 runs per month and 1 GB of file transfer per month. Pro is $15/month, or $144/year ($12/month), for 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, not you; runs per month include your own runs; downgrading deletes nothing). Recipients install nothing and never pay.
Putting a web UI on a bash script with Button
Before you wire up the form, make sure your script takes its inputs as command-line arguments ($1 and $2 in bash, or argparse in Python, commandArgs() in R, or a param() block in PowerShell) instead of interactive prompts or hard-coded paths. Take each input file path as an argument, and write any result files into an output folder whose path is also passed as an argument:
#!/usr/bin/env bash
set -euo pipefail
input_file="$1"
region="$2"
out_dir="$3"
grep "$region" "$input_file" > "$out_dir/filtered.csv"
Fixed flags go into the command you approve during setup; colleagues only supply the values for the form fields.
- Sign in at button.bitgate.dev.
- Install the Button runner on your computer using the one-line command the site shows you (
curlon Linux and macOS, PowerShell on Windows). - In the runner's local setup page, pick your script or program (shell scripts, Python, Node, R, PowerShell and compiled binaries all work).
- Describe its inputs - text, number, yes/no, choice or files - and publish the tool so Button gives it its own page.
- 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.
FAQ
Where do the scripts actually run with Button?
Jobs run on your own computer where you installed the runner, never in Button's cloud. Button's servers relay the form values and files between the colleague's browser and your computer, and your machine has to be on and online for the tool page to show Ready.
Do my colleagues need a Button subscription or anything installed?
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, and run the form.
How does Button stop someone from injecting shell commands through a form field?
The runner only executes the exact command you approved on that computer (pinned by hash), and every form value is passed to the program as its own argument with no shell. Form values also can't start with "-", so a colleague cannot pass unexpected flags to your script.
What happens if two people press Run at the same time?
Each computer runs one job at a time, for up to 30 minutes per run. While a job is running, the tool page shows Busy instead of Ready.
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.