Elyra
Elyra The coding agent eTerm The terminal that knows where each command ends Starf An activity monitor for Apple silicon that never invents a number e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Elyra SQL Server MySQL-compatible SQL server in Rust Elyra Félagi Agents as teammates on one board Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra Sjá SEO & GEO workspace for macOS Elyra DataGrid Server-driven data grid for Laravel
Licence & updates
Licensing
Updates
Elyra

Licensing

Starf is free. Every measurement, every tab, every diagnostic page works without a licence, now and later. A licence removes an occasional reminder, and that is the whole of what it does.

This is an honour-system purchase at https://elyracode.com/starf — a small one-off payment from people who find the thing useful.

What the reminder does and does not do

Appears after seven days of use, then at most once every five days, at launch
Blocks nothing — it is a sheet you dismiss
Limits nothing — no feature, number or page is withheld
Expires nothing — there is no trial and no countdown
Sends nothing — see below

The three buttons are the same size and weight. Declining is not a lesser act, and a reminder that disguised its own dismissal would be worse than no reminder at all.

The reminder is recorded as shown the moment it appears, so closing it any way at all counts. There is no way to make it reappear by dismissing it "wrongly".

It is checked on this machine

Starf keeps every measurement on the machine, and the only thing that may use the network is the update check, which asks first. A licence check that phoned home would put a second, unavoidable request in front of everyone — licensed and unlicensed alike — so keys are verified against an Ed25519 public key compiled into the binary. No network at all, works offline, and the purchase leaves no trace in the application beyond the address on the key.

A key is a signature over the buyer's email address. Editing the address invalidates the key, because the signature covers it. The application shows "Licensed to …" so a key is visibly someone's.

Which also means it can be copied

An offline key can be shared, and no amount of cleverness changes that. That is accepted rather than fought. Obfuscation, machine binding and activation servers cost real complexity and inconvenience honest buyers most; people who were going to pay, pay.

Where the state lives

~/Library/Application Support/no.gets.starf/license.json:

{
  "key": "STARF-1-…",
  "firstSeen": 1785761299033.9,
  "lastReminder": 1789217304070.3
}

Deleting the file is the same as a fresh installation. To see the reminder without waiting a week, set firstSeen back forty days and clear lastReminder:

python3 - <<'PY'
import json, pathlib, time
p = pathlib.Path.home() / "Library/Application Support/no.gets.starf/license.json"
p.write_text(json.dumps({"key": None, "firstSeen": (time.time() - 40*86400) * 1000,
                         "lastReminder": None}))
PY

The status is also in the status bar, at the right: Licensed or Unlicensed, and clicking it opens the licence panel at any time.

What the rules are, in code

src-tauri/src/license.rs. The timing rule is one pure function with tests covering a new installation, the first reminder, the gap between reminders, a licensed copy, and a clock that has gone backwards — a negative age is a clock problem, not a reason to ask for money.

Key verification has tests for a genuine key, whitespace from an email client, an edited address, a key from a different signer, and assorted nonsense. One test asserts the shipped public key is a real key and not a placeholder of zeroes, which would otherwise make every licence fail silently.