Skip to main content

tiinyapp.farm

Community apps for the Tiiny AI Pocket Lab that run beside the device on your own computer. Browse at https://tiinyapp.farm, install with one command, share the device without collisions.

Brought to you by Titanium Bot. Made by Titanium Computing.

  • manifests/ one JSON file per app, the whole catalog.
  • farm/ the installer: farm install <app>, farm start, farm stop, farm update, farm list.
  • site/ the static catalog, built from the manifests.
  • .github/workflows/ the checks a submitted manifest must pass.

See SPEC.md.

Install the farm command-line tool (farm)

Python 3.9 or newer on macOS, Linux or Windows; runtime dependencies are all standard library.

pip install tiinyapp-farm
farm device
farm install titanium-tiiny-bot
farm start titanium-tiiny-bot
farm status
farm stop titanium-tiiny-bot

If the package is not yet published, or you want to work from source:

git clone https://github.com/Titanium-Devops/tiinyapp-farm.git
cd tiinyapp-farm
python3 -m pip install .

A manifest with a pending release can be validated with --allow-pending, but installation is refused until its checksum is set. Read each current manifest for release readiness. The bundled Lite archive is available for local checks; this phase did not verify public release availability. Nothing is downloaded or run by manifest validation. The installer displays permissions and requirements and asks once; --yes explicitly accepts that prompt for automation.

python3 scripts/check-manifest.py --allow-pending manifests/story-lantern.json
FARM_CATALOG="$PWD/manifests" python3 farm/farm.py list
python3 -m unittest

FARM_CATALOG defaults to https://tiinyapp.farm/manifests/. It also accepts a local directory or file:// directory URL. Local catalogs may refer to local tar archives by absolute/relative path or file:// URL. Remote catalogs must use HTTP(S) release URLs. For farm list, a remote catalog directory serves either a JSON array of app IDs (or objects with id) or HTML links to its manifest JSON files.

Installed versions live in ~/tiinyapps/<id>/<version>; current is an atomically written version pointer. launcher.json registers the entry for farm start. The app runs in its version directory with FARM_DATA_DIR and TIINY_DATA_DIR pointing at ~/tiinyapps/<id>/data. Standard output and errors append to farm.log; farm.pid holds the process ID. On POSIX, a runtime file lock distinguishes a live process from a stale PID; Windows checks the process creation time before stopping it. Entries run directly, without a shell. Apps must remain in the foreground and, on POSIX, keep inherited descriptors open; daemonizing/closing all inherited file descriptors is not supported by this launcher.

farm device reads both the base URL and API key without echo and atomically saves ~/.tiinyapps/device.json with mode 0600 on macOS and Linux. Windows permissions are best effort and follow the user-folder ACL; existing ~/tiinyapps/device.json settings remain readable until you run farm device again. If a secure terminal is unavailable, it refuses to fall back to echoed input. Scripts can import settings with farm device --base http://device:8800/v1 --key-stdin < private-key-file, or run farm device with TIINY_BASE and TIINY_KEY in the environment. Both forms save the configuration for later launches. Explicit options take precedence over the environment; incomplete scripted input fails without prompting. Keys never need to appear in command arguments. The launcher passes TIINY_BASE, TIINY_KEY, and the derived TIINY_HOST. Cooperating apps share ONELANE_DIR=~/tiinyapps/.onelane. Story Lantern additionally receives LANTERN_HOME, its database/log paths, and PORT; its upstream device management still expects plain HTTP port 8800. Story Lantern currently retries contention but has not adopted OneLane, so merely setting the shared path cannot guarantee cross-app serialization for that app.

farm start <id> rejects already-listening ports, then waits up to ten seconds for all declared ports while checking that the child remains alive. A manifest's optional "health": "/api/health" requests HTTP GET on its first port, returning a JSON object (with version, and optional ok); other ports use TCP connections. Failed startup exits 1, prints the last ten log lines, and removes process records. Apps without declared ports receive a short process-liveness check.

farm start <id> --port 7790 overrides the primary port and exports TIINYAPP_PORT. Lite also receives TIINY_PORT and an updated --port argument; Story Lantern receives PORT. Other apps must honor TIINYAPP_PORT. farm status displays the recorded ports and compares the health-reported version with the installed manifest, suggesting a restart on mismatch. Without health version data it uses the launch record and labels unavailable health data.

farm update <id> installs only a newer version, preserves data and previous code, and stops a running old version after the new archive is verified and unpacked. Start it again with farm start <id>. farm stop <id> sends SIGINT to the process group and escalates to SIGKILL after five seconds. farm remove <id> stops it and keeps data/; farm remove <id> --purge deletes that app's data too. Shared device settings and locks survive app removal. OneLane is a library: it can be installed, but farm start onelane explains that it has no runnable entry.

Archives are tar/tar.gz, bounded to 512 MiB downloaded and 2 GiB unpacked. Traversal, links, special files and duplicate file entries are refused. Checksums and byte sizes must match before extraction. These checks do not sandbox installed app code; permissions describe what the author declares. verified remains false until CI and human review. The static site and submission checks are included.

Submit an app

Read the contributor guide. PR checks validate changed manifests, verify archive checksums and sizes, safely unpack them, and scan for unsafe code, undeclared network access and secret patterns. A declared "selfcheck": true runs the entry with --selfcheck in an offline container for at most 120 seconds. Shell/subprocess use is forbidden. Microphone access is declared, not detected. Checks report one PR comment; only a maintainer sets verified: true after review.

Publish the farm CLI

Update project.version in pyproject.toml, then push its matching v* tag (for example v0.1.0). The workflow tests, builds a wheel and source distribution, smoke-tests farm, and publishes through PyPI trusted publishing without a token secret. Before the first release, a maintainer must configure PyPI's trusted publisher for this repository, workflow publish.yml, and environment pypi, and configure the GitHub pypi environment as appropriate. A tag alone does not create that PyPI trust relationship. No package has been published by this change.

The site workflow builds and tests before deploying a push to main. Pushes that change only docs/ skip the site workflow; PR builds still run.

Metadata

Release files for tiinyapp-farm 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tiinyapp-farm 0.1.1
File Size Uploaded Provenance
tiinyapp_farm-0.1.1.tar.gz 50.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tiinyapp-farm 0.1.1
File Interpreter ABI Platform
tiinyapp_farm-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 69.7 kB

Release files / tiinyapp_farm-0.1.1.tar.gz

Download URL tiinyapp_farm-0.1.1.tar.gz
Size 50.2 kB
Tags Source
SHA-256 checksum
How to use checksums
2630a06efc834780a3586019b861cb639c1d465ccc1f4b5af399f3fd99079194
BLAKE2b-256 checksum
How to use checksums
737e7eb0ade1158badcd36ddf3806cc1af2868dd04821f5ece48b153ad41a16b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / tiinyapp_farm-0.1.1-py3-none-any.whl

Download URL tiinyapp_farm-0.1.1-py3-none-any.whl
Size 19.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1298c3da1b612bd69a47c645c31578fcf6e62f16808990514fc66c9043e0bde
BLAKE2b-256 checksum
How to use checksums
d4756919cd47aa2935921c30d8ae3a0deb5db40b86b972ddcb1e981dbf3fa0be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Security for tiinyapp-farm 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page