Published at https://docs.fullbleed.dev/ using GitHub Pages.
python -m pip install -r requirements.txt
rustup target add wasm32-wasip1
python tools/build_playground.py
node tools/verify_playground.mjs
python tools/build_browser_starter.py
python tools/build_react_starter.py
python tools/build_vue_starter.py
python -m mkdocs build --strict
python tools/prepare_css_corpus_site.py site
python tools/check_site.py site
python -m http.server 8000 --directory siteChanges to main build, check internal links and metadata, then deploy through .github/workflows/docs.yml. Pull requests run the same build checks without deployment.
The CSS evidence browser uses docs/assets/css-corpus/published.json to pin an
existing release archive by SHA-256. prepare_css_corpus_site.py verifies its
published-wheel identity, complete inventory and original file manifest before
copying PDFs and previews into the built site. Large evidence files stay in
release storage. Pass --archive /path/to/verified.zip to use a local copy.
After another MkDocs build, run the preparation step again before serving site.
With Playwright 1.63.0, its Chrome browser, and pypdf 6.19.0 installed, run
python tools/check_css_explorer.py --site site --out output/css-explorer-ui.
It checks filters, shared URLs, original PDF downloads, mobile layouts and an
unavailable-index fallback. Choose a new output directory for each evidence run.
Building all browser demos needs Rust and Node 22.12 or newer. CI uses Rust 1.97.0 and Node 22. Its locked adapter compiles the published engine; it does not modify or vendor the engine source. See playground/README.md for limits, privacy behavior, and native/WASI verification.
The browser, React, and Vue builds also create edit-online.html beside each
verified project ZIP. These plain HTML forms open the exact source files in
StackBlitz through the POST API.
Keep the homepage and respective guides linked to these generated launchers so
package updates reach both the download and the online editor. All use
tools/online_starter.html; run tools/check_online_starter.py with browser,
react, or vue to verify the submitted files locally without creating
third-party projects.
Reference pages come from the engine repository's release tag. Keep hand-authored introductions and guides here; import API, CLI, CSS, architecture, print, and performance references with:
python tools/sync_reference.py --source /path/to/fullbleed-official --ref v2.5.22docs/reference-source.json records the exact source commit. Use a built, installed release wheel to rerun examples and review the final PDFs and previews before replacing downloadable artifacts. docs/assets/examples/verification.json records the checks performed on published examples.
Run python -I tools/verify_quickstarts.py in an environment with that reference
release installed. It executes the Python snippets directly from five introductory
pages, checks their PDF text and page counts, and exercises the documented project
commands. CI retains the PDFs, previews, and structured report. Older showcase,
playground, and tutorial downloads keep their own verified release pins.
The tagged C# notice lives in examples/dotnet-accessibility. When updating it,
restore its lockfile from public NuGet, render both ua1 and ua2, and review
the final PDFs and native preview before replacing docs/assets/dotnet-accessibility.
Run python tools/build_dotnet_accessibility_starter.py to rebuild the stable
ZIP and source manifest, then python tools/verify_dotnet_accessibility.py.
The verifier needs the .NET 10 SDK, Java 21 or later, and pypdf==6.19.0; it
downloads a checksum-pinned veraPDF 1.30.2 validator. These are maintainer checks,
not dependencies of the console application. Pass --refresh-evidence when
updating the downloadable reports; it writes verification.json,
verapdf-ua1.json and verapdf-ua2.json only after rendering and validation pass.
CI verifies the actual ZIP in isolated published applications on Windows and
Linux and checks that the retained reports still describe those specimens.
The C# component invoice lives in examples/dotnet-components. Its two C# files,
fonts and licenses retain the exact source hashes in upstream.json; the standalone
project uses a pinned NuGet dependency and .NET 10. Restore the public package lock,
run python tools/build_dotnet_component_starter.py, then
python tools/verify_dotnet_component_starter.py --out output/new-component-check.
The verifier extracts the actual ZIP into a fresh consumer, executes the unchanged
program, tests five data edits, and compiles all six C# blocks from the public guide.
It requires .NET 10, pypdf 6.19.0, pypdfium2 5.14.0 and Pillow 12.3.0. Use
--refresh-assets only when reviewing new downloadable PDF and PNG output, then
rebuild the ZIP manifest. Windows and Linux checks gate deployment. Older HTML/CSS,
web and accessibility starters retain their own verified package pins.
When changing the canonical domain, update site_url, docs/robots.txt, and this README, configure GitHub Pages, and verify DNS, HTTPS, sitemap URLs, and redirects. Keep the GitHub Pages URL until the custom domain is working.
Fullbleed is MIT licensed. Do not publish unsupported performance comparisons, standards conformance claims, or stale licensing statements. Retain old page URLs through the redirect map when consolidating reference material.
The Matplotlib report lives in examples/matplotlib-report. Install its pinned
requirements and the independent PDF readers from the matplotlib CI job, then
run python tools/build_matplotlib_starter.py and
python tools/verify_matplotlib_starter.py. The verifier extracts the actual ZIP,
executes its source and the guide snippet, inspects vector/PDF content, and tests
replay, customization and invalid data. Use --update-assets only after reviewing
both report pages; otherwise the verifier compares the output to the published
PDF. New evidence runs need a fresh --out directory. CI retains Windows and
Linux results and requires both jobs before deployment.
The Laravel queued-PDF example lives in examples/laravel-pdf. Run
python tools/build_laravel_starter.py to rebuild its deterministic ZIP. The
verifier, python tools/verify_laravel_starter.py --browser chromium, needs PHP,
Composer, the pinned Fullbleed wheel, independent PDF readers and Playwright.
It extracts the ZIP into a new output directory, installs the Composer lockfile,
then exercises real HTTP, database queues, retries, expiry and browser downloads.
Use --refresh-assets only when replacing the reviewed specimen and report.
CI tests PHP 8.4 and 8.5 on Linux and verifies that PHP 8.3 is rejected before
configuration is created. SQLite's immediate transaction locking is required
for concurrent submissions; the pinned Laravel version applies it only on PHP
8.4 and later. Evidence uploads exclude
the extracted application's generated .env, private database and vendor tree.
The Streamlit sales-report app lives in examples/streamlit-report. Install its
pinned requirements plus the readers and Playwright from the streamlit CI job.
Run python tools/build_streamlit_starter.py, then
python tools/verify_streamlit_starter.py --browser chromium after installing
Playwright's Chromium. The verifier tests the actual extracted ZIP, independent
PDF readers and two real browser sessions. Use a fresh --out directory for
each run. --refresh-assets replaces the specimen, PDFium thumbnails, app
screenshot and verification record after the checks pass; review those images
before committing. Windows and Linux checks gate deployment.
The site publishes an XML sitemap and crawlable canonical URLs. When the optional
INDEXNOW_KEY repository secret is configured, deployment also hosts its ownership
file for IndexNow. Keep the key out of
source and logs. Pull-request builds do not receive it.
After a substantive content update or migration, notify IndexNow of the changed
docs.fullbleed.dev URLs using its documented API. Do not repeatedly resubmit
unchanged pages. An accepted notification means the URLs were received; it does
not establish search indexing or ranking.