Skip to main content

jmfts-web

The browser front end for a JMFTS retrieval appliance.

pip install 'jmfts[web]'
uvicorn jmfts_core.rest.main:app --host 0.0.0.0 --port 8100
# then open http://localhost:8100/app/

This wheel carries built static files and one module that says where they are. It has no dependencies: everything the front end does it does in the browser, over the same REST API any other client calls. Installing it adds no Python package to the appliance.

It is not useful on its own — there is nothing to import and nothing to run. jmfts[web] depends on it, and jmfts_core.rest.main mounts it at /app when it is present. An appliance without it starts normally and serves no /app.

One generated client, and one event per call

jmfts_web/static/client/ is the only way this front end talks to an appliance. Four of its files are generated from the appliance's own /openapi.json, the way jmfts-client's _verbs.py is generated from the route table:

python -m scripts.generate_ts_client            # in a jmfts source checkout
python -m scripts.generate_ts_client --check    # exit 1 if the bundle is stale

The other six are the hand-written runtime — the request path, the three copy-out printers, and the entry point. tests/test_ts_client_codegen.py refuses a stale generated file and refuses a file that is in neither set.

Every call emits one event: {op_id, method, path, path_params, query, body, status, response, ms}. Three things follow from that.

  • Replay. An event is a call plus its arguments, so client.replay(event, {…}) re-sends it with any of them edited.
  • Verifiable thinness. A view showing something the call log has no event for computed it in the browser. That is readable from the log rather than arguable from the source.
  • Copy-out. asCurl, asPython and asFetch print any event three ways — and none of them prints the credential. Each names the environment variable it lives in instead.

There is no build step and no bundler: these are ES modules the browser runs as they stand, with .d.ts declarations beside them for TypeScript consumers. Nothing loads from a CDN, a font host or anywhere but the appliance's own origin, because this appliance is expected to run air-gapped.

Why a separate distribution

An extra guards dependencies. Static files inside the server package would ship with the appliance whether or not an extra named them, so jmfts[web] over a bundle in the main wheel would have been a flag that guards nothing. Dockerfile.worker builds a worker that drains the ingest queue and never serves a page.

Versioning

One number, three wheels, one tag — jmfts, jmfts-client and jmfts-web release in lockstep. The front end is written against the appliance's own route table, so a UI one release behind its server renders controls for operations that have moved.

Licence

MIT. See LICENSE.

Metadata

Release files for jmfts-web 0.6.0

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

Source distribution (sdist)

Source distribution for jmfts-web 0.6.0
File Size Uploaded
jmfts_web-0.6.0.tar.gz 199.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jmfts-web 0.6.0
File Interpreter ABI Platform
jmfts_web-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 419.2 kB

Release files / jmfts_web-0.6.0.tar.gz

Download URL jmfts_web-0.6.0.tar.gz
Size 199.6 kB
Tags Source
SHA-256 checksum
How to use checksums
eb3b8ca2d43c0fcbdd776da676444f33c26d31b854743508f4ecaeac9721439e
BLAKE2b-256 checksum
How to use checksums
ad1f6ded8ddba357b701a6a50b913c871550e6c0a5346308d6442dcdb6e0c6b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / jmfts_web-0.6.0-py3-none-any.whl

Download URL jmfts_web-0.6.0-py3-none-any.whl
Size 219.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a430f20c103c307ac60d819192ab84f4562ae6927bc3af2125689b066f06d318
BLAKE2b-256 checksum
How to use checksums
ef41b8c9d4e4e5356e94a32d63f31671baccf4cc79a5fa788605865377ab8c52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.6.2

2 release files

0.6.1

2 release files

This release

0.6.0 This release

2 release files

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