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.2

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.2
File Size Uploaded
jmfts_web-0.6.2.tar.gz 200.1 kB Details

Built distribution (wheel)

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

Total release size: 420.5 kB

Release files / jmfts_web-0.6.2.tar.gz

Download URL jmfts_web-0.6.2.tar.gz
Size 200.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e8167a494f3416127d72c73f73f848ec1251e59403067a888cd85c913fd9bad6
BLAKE2b-256 checksum
How to use checksums
265d5deb16111d60bf52209a291e49286032a7f5fceea3d860da245bdd5d8839
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.2-py3-none-any.whl

Download URL jmfts_web-0.6.2-py3-none-any.whl
Size 220.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2171e04e3561b69ebc4a8a50d92f089dcb045e64f3b57d56d6e12d8cec689726
BLAKE2b-256 checksum
How to use checksums
1c2a155c6917b0a477fe6c6c588e9c1a63a5b8b14e4f32cf68d1b96c1fb5cecf
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

This release

0.6.2 This release

2 release files

0.6.1

2 release files

0.6.0

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