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.8.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.8.0
File Size Uploaded Provenance
jmfts_web-0.8.0.tar.gz 201.1 kB With provenance Details

Built distribution (wheel)

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

Total release size: 422.4 kB

Release files / jmfts_web-0.8.0.tar.gz

Download URL jmfts_web-0.8.0.tar.gz
Size 201.1 kB
Tags Source
SHA-256 checksum
How to use checksums
9c926b1aaee49139ebcbc48c7266d672724f01acc427ae566ba5bac4f045d006
BLAKE2b-256 checksum
How to use checksums
ffdda1b13202fe93d64ec2114c72cc51a393a9597cd67879cf6dc319ed63c760
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

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

Download URL jmfts_web-0.8.0-py3-none-any.whl
Size 221.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
30f6accdcf361de8d9357006a70768b3171d81e3f46dfb0b860770b28b5a829f
BLAKE2b-256 checksum
How to use checksums
8548dd2f4ff0b4d2fa4f651c9440fee2df94dc1bd9fd431d03ef35d27f4f8665
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Security for jmfts-web 0.8.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for jmfts_web-0.8.0.tar.gz

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 24, 2026.

Transparency log

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