Build declarative, interactive HTML forms with JSON Schema
Project description
urljsf
docs | install | build |
---|---|---|
Build statically-hostable, interactive HTML forms for making web requests
Powered by
react-json-schema-form
andreact-
bootstrap
.
Visitors to a urljsf
-built page see:
- one or more interactive HTML forms...
- defined by and validated against a JSON Schema, optionally with...
- deep customizable user interface
- pre-filled data
- custom validation checks
Once the data is validated, the user sees a button which gets a URL, which can be:
- downloaded as a file
- opened in a new browser window
- copy and pasted
- submitted to an HTTP endpoint, either by opening a new window, or directly.
- open native applications like email
urljsf
doesn't ship a server, so that part is up to you!
Site builders write TOML, JSON, YAML or python, then can use urljsf
as:
... to create JavaScript/HTML forms that helps visitors provide good data for:
- pull requests
- issues
- galleries
- surveys
- on-demand build services
- precise test descriptions
- linter rules
Install
From PyPI
urljsf
is distributed on PyPI, with several optional extras to help ensure
tested versions are available:
pip install urljsf
# ... or urljsf[sphinx] for sphinx
# ... or urljsf[mkdocs] for mkdocs and pymdown-extensions
# ... or urljsf[yaml] for build time YAML parsing
# or...
uv install urljsf
# etc.
From conda-forge
urljsf
is also distributed on conda-forge
, with similar extras:
pixi add urljsf
# ... or urljsf-with-sphinx
# ... or urljsf-with-mkdocs
# ... or urljsf-with-yaml
# or...
micromamba install -c conda-forge urljsf
# or...
mamba install -c conda-forge urljsf
# or...
conda install -c conda-forge urljsf
# etc.
Development
See the contributing guide for a development install.
Usage
urljsf
work with some JSON schema constrained files as a:
- (not-recommended) hot-linked
script
- a standalone site generator for simple sites
- a plugin for the
sphinx
andmkdocs
documentation systems
JSON Schema
A urljsf
is built from a number of JSON schema-constrained files. Writing these in
plain JSON is tedious, so TOML and YAML are also supported inputs for any of the methods
below. Learn more on the schema documentation.
JS Script
A very simple, but limited, usage is an .html
file that links to urljsf
and
bootstrap
resources on the internet.
<script type="application/vnd.deathbeds.urljsf.v0+toml">
[forms.url.schema]
title = "pick an xkcd"
description = "this will redirect to `xkcd.com`"
type = "object"
required = ["xkcd"]
properties.xkcd = {type="integer", minimum=1, maximum=2997}
[forms.url.ui_schema.xkcd."ui:options"]
widget = "range"
[templates]
url = "https://xkcd.com/{{ data.url.xkcd }}"
submit_button = "see xkcd #{{ data.url.xkcd }}"
</script>
<script
type="module"
src="https://deathbeds.github.io/urljsf/_static/index.js"
></script>
This technique has many limitations, and is not recommended.
Some ways to improve:
- download a GitHub release and unpack it, serving the files next to it
- ensure bootstrap is loaded before the script, with a
link
tag in ahead
. - on the
script
element, use asrc
to point to a validurljsf
definition - use the CLI or a documentation extension for
sphinx
ormkdocs
Command Line
The urljsf
command line generates a ready-to-serve, standalone site with all required
static assets. Written in python
, it can reuse the extensive JSON schema support in
the python ecosystem, such as msgspec
or pydantic
.
prsf --help
urljsf
requires at least a definition file, but offers many command line options: see
the documentation for more.
Sphinx
After installing with the [sphinx]
extra, add urljsf.sphinxext
to
conf.py
:
# conf.py
extensions = [
# ... other extensions
"urljsf.sphinxext",
]
Then use the urljsf
directive in source files:
.. urljsf: # a relative path to a description as a TOML, YAML, or JSON file or python
:toml:
# a form definition in TOML
See the documentation for more about configuring urljsf.sphinxext
, the
urljsf
directive, and more advanced use cases.
Mkdocs
After installing with the [mkdocs]
extra, add urljsf
to mkdocs.yml
:
# mkdocs.yml
plugins:
- urljsf
Then use the urljsf
fenced code block in source files:
```urljsf {path=path/to/defnition.toml}
```
See the documentation for more about configuring urljsf
, the urljsf
fence, and more advanced use cases.
Limitations
react-json-schema-form
cannot represent all possible data structures, such as writing a new JSON schema in JSON schema, or many features added after Draft 7- the generated scripts won't work when served from
file://
due to browser CORS headers requirements fortype="module"
scripts - the
sphinx
integration is only tested with thehtml
builder, the basicalabaster
theme, andpydata-sphinx-theme
(by way ofurljsf
's own documentation) - the
mkdocs
integration is only tested with the default theme
Open Source
urljsf
itself is licensed under the BSD-3-Clause
license. You can do whatever you
want with it, but if you change it a lot, it's not the maintainers' problem.
urljsf
distributes third-party JavaScript and CSS in various forms, licensed under the
MIT
, BSD-3-Clause
, and ISC
licenses.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file urljsf-0.1.1.tar.gz
.
File metadata
- Download URL: urljsf-0.1.1.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.13.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ddbc45a46e25b307c95cb2b4afd7f285bb7ae217edc9aa7d9d43b410adfa75a5 |
|
MD5 | 97b69a693606460ce283b36b4311118b |
|
BLAKE2b-256 | d0db31c70329aee333bd0a852a9a53b8a2631e2ddcdd9a62f1b33a3fc6572499 |
File details
Details for the file urljsf-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: urljsf-0.1.1-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.13.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b78ac9f39815d203930ac3a7981b2eddc659efcdc9cf8859297c1564d17de3d0 |
|
MD5 | 066c8972fe84bfd304466fe3f410df9b |
|
BLAKE2b-256 | 8036a1760792c54444d76d7638b1e86a797c11db26b328b821985ed8b0712924 |