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,asPythonandasFetchprint 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)
| File | Size | Uploaded | |
|---|---|---|---|
| jmfts_web-0.6.0.tar.gz | 199.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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