Your scripts, as tools your team can run

Add @deploy to a Python function and push. Shipfn turns it into a form with schedules and run history.

How it works

Free for 30 days · No credit card required

tools/refunds.py
1
1

Write a normal Python function in your editor.

From a function to a tool in one push

01

Write a function

Plain Python with type hints. Add @deploy, a title and the secrets it needs.

02

Push to GitHub

Every push builds and deploys. Roll back to any version that's still around.

03

Your team runs it

Each function becomes a form in the web app, and a command in the terminal.

Start with the SDK

Install it where you write your scripts. shipfn init sets up a project with a starter function and a guide, and shipfn local runs any function on your machine before you push.

Python today. More languages are coming, and they all deploy the same way.

01Install the SDK
$pip install "shipfn @ git+https://github.com/TheRizzock/shipfn-sdk"
02Add it to a project: a starter function, the guide and requirements
$shipfn init
03Check your functions before you push
$shipfn check
Needs Python 3.10 or newerRead the guide

The type hints are the interface

No front end to build or keep in sync. The same signature drives the web form, the input checks and the command line, so they can't drift apart.

  • Literal and Enum become dropdowns, bool a checkbox, date a date picker
  • Return a list of dicts for a table, a str for Markdown, or a file to download
  • shipfn check finds problems before you push; shipfn local runs it on your machine
tools/refunds.py
from typing import Literal

from shipfn import deploy


@deploy(title="Refund an order", secrets=["STRIPE_KEY"])
def refund(
    order_id: str,
    reason: Literal["Damaged", "Late", "Other"],
    notify_customer: bool = True,
) -> str:
    """Refunds the order in Stripe and records why."""
    ...
    return f"Refunded {order_id}"

Everything around the function, handled

Forms from type hints

Dropdowns from Literal, dates, files, lists and models. Validation matches the function exactly.

Schedules

Run anything on a cron, in any time zone, as the person who set it up.

Run history

Every run keeps its inputs, logs, result and files. Tables download as CSV.

Secrets by scope

Team, project or single function. Injected at run time, never shown to the people running it.

Share with the right people

Give the whole team or chosen people run or manage access, per function.

Flows

Offer next steps on each result row: find a user, then make them an admin, in one click.

Ship the script you keep running by hand

Free for 30 days, no credit card. Connect a GitHub repo, and your first function is live after one push.