Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ jobs:
retention-days: 7
- name: Verify downloadable playground projects
run: |
python -m pip install fullbleed==2.5.8
python -m pip install fullbleed==2.5.11 pypdf==6.19.0
node tools/verify_project_export.mjs
python -I tools/verify_project_export.py
- uses: actions/upload-artifact@v4
Expand Down
504 changes: 503 additions & 1 deletion docs/assets/playground/LICENSES.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/assets/playground/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ function clearOutput() {
el('placeholder').hidden = false;
el('placeholder').textContent = 'Render your document to see it here.';
el('page-count').textContent = '—';
el('result').textContent = 'Fullbleed 2.5.8';
el('result').textContent = 'Fullbleed 2.5.11';
el('previous').disabled = el('next').disabled = true;
setDownload(false);
}
Expand Down
6 changes: 3 additions & 3 deletions docs/getting-started/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ With Rust 1.85 or newer and a working native Rust toolchain:
```bash
cargo new invoice-demo
cd invoice-demo
cargo add fullbleed@=2.5.8
cargo add fullbleed@=2.5.11
```

Replace `src/main.rs` with:
Expand Down Expand Up @@ -67,7 +67,7 @@ cargo run --release --locked --manifest-path examples/rust/Cargo.toml --bin from
Open `output/rust-invoice/document.pdf` or `page-1.png` in the same directory.
Replace both `invoice` input filenames with `report` for the report design,
and choose a new output directory. The report produces three
pages. These examples pin Fullbleed 2.5.8 and include a Cargo lockfile.
pages. These examples pin Fullbleed 2.5.11 and include a Cargo lockfile.

For the service notice or your own edits, choose **Download project** in the
playground. Extract the ZIP into `my-project` in this repository, then run:
Expand Down Expand Up @@ -115,7 +115,7 @@ designed example and downloaded playground projects use the same path.

Use [the latest hosted Rust API reference](https://docs.rs/fullbleed/latest/fullbleed/)
for `FullBleed`, its builder, compiled templates, and document types. The
[2.5.8 source](https://github.com/fullbleed-engine/fullbleed-official/blob/v2.5.8/src/lib.rs)
[2.5.11 source](https://github.com/fullbleed-engine/fullbleed-official/blob/v2.5.11/src/lib.rs)
matches the version pinned by these examples. Check
[CSS coverage](../css-coverage.md) before adapting a web layout, and inspect
your actual output when changing fonts or content. These examples use trusted
Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ Pick your application stack. Generate a PDF locally or download one from the bro
```bash
cargo new invoice-demo
cd invoice-demo
cargo add fullbleed@=2.5.8
cargo add fullbleed@=2.5.11
```

Replace `src/main.rs` with:
Expand Down Expand Up @@ -265,6 +265,6 @@ Fullbleed uses static HTML/CSS as its layout language. Read the [CSS coverage](c

## Open source, with inspectable evidence

Fullbleed is [MIT licensed](https://github.com/fullbleed-engine/fullbleed-official/blob/master/LICENSE). The [2.5.8 release](https://github.com/fullbleed-engine/fullbleed-official/releases/tag/v2.5.8) includes downloadable wheels and retained engineering evidence. See the [smaller-PDF before/after check](guides/pdf-size.md) and the [performance report](guides/performance.md) for specific measured workloads and their limits.
Fullbleed is [MIT licensed](https://github.com/fullbleed-engine/fullbleed-official/blob/master/LICENSE). The [2.5.11 release](https://github.com/fullbleed-engine/fullbleed-official/releases/tag/v2.5.11) includes downloadable wheels and retained engineering evidence. See the [smaller-PDF before/after check](guides/pdf-size.md) and the [performance report](guides/performance.md) for specific measured workloads and their limits.

[Read the Python API](engine/pdf-engine.md) · [Set up a coding agent](guides/ai-agents.md) · [Report an issue](https://github.com/fullbleed-engine/fullbleed-official/issues) · [Support Fullbleed](support.md)
14 changes: 9 additions & 5 deletions docs/playground.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ hide:
- toc
---

<link rel="stylesheet" href="../assets/playground/playground.css?v=engine-258">
<link rel="stylesheet" href="../assets/playground/playground.css?v=engine-2511">

<div class="fb-playground" id="playground">
<div class="pg-intro">
Expand All @@ -28,7 +28,7 @@ hide:
<section class="pg-output" aria-label="PDF preview" aria-busy="true">
<div class="pg-pane-top"><span class="pg-output-label">THE PRINTED PAGE</span><div class="pg-pagination"><button id="pg-previous" aria-label="Previous PDF page" disabled>←</button><span id="pg-page-count">—</span><button id="pg-next" aria-label="Next PDF page" disabled>→</button></div></div>
<div class="pg-canvas"><p id="pg-placeholder">Preparing your first PDF…</p><img id="pg-preview" alt="" hidden></div>
<div class="pg-output-foot"><span id="pg-result">Fullbleed 2.5.8</span><a href="../examples/">Explore the full gallery ↗</a></div>
<div class="pg-output-foot"><span id="pg-result">Fullbleed 2.5.11</span><a href="../examples/">Explore the full gallery ↗</a></div>
</section>
</div>
<p id="pg-status" class="pg-status" role="status" aria-live="polite">Loading the examples…</p>
Expand All @@ -51,7 +51,7 @@ python render.py

Open `output/document.pdf`; PNG previews are in `output/preview/`. Edit
`input.html` or `style.css`, then run the script again. The project uses Fullbleed
2.5.8 to match this demo. Use a Python 3.10 or newer virtual environment. The ZIP
2.5.11 to match this demo. Use a Python 3.10 or newer virtual environment. The ZIP
is assembled on your device, using the source present when you click the button.
It does not upload your document.

Expand All @@ -72,12 +72,16 @@ or `notice`. You can keep editing and add `--watch` to rebuild after each save.
[Run the Python notebook](getting-started/notebook.md){ .md-button }
[CSS support](css-coverage.md){ .md-button }

The playground uses the released **Fullbleed 2.5.8** Rust engine, compiled to
The playground uses the released **Fullbleed 2.5.11** Rust engine, compiled to
WebAssembly. Page previews are rendered from the same PDF you download, including
the report's gradient chart fills. It accepts static
HTML/CSS, with Inter, DM Serif Display, and Bebas Neue embedded fonts. JavaScript
inside your document is not executed, and remote assets are not loaded. Use inline SVG for artwork.

Unembedded Helvetica, Times, and Courier variants also produce visible previews.
The [font-preview guide](engine/assets.md#standard-14-native-previews) explains
the bundled substitute fonts used for those faces.

This demo handles up to **6 pages and 200 KB of HTML/CSS**, with a 30-second render
limit. These are playground limits; the local
Python and Rust packages support larger jobs. Sample organizations and data are
Expand All @@ -89,7 +93,7 @@ fictional.
· [Project download checks](assets/playground/project-verification.json)
· [Third-party licenses](assets/playground/LICENSES.txt)

<script type="module" src="../assets/playground/app.js?v=engine-258"></script>
<script type="module" src="../assets/playground/app.js?v=engine-2511"></script>

Build this into your own web app: [download the browser SDK starter](guides/browser-pdf.md),
with editable templates and local PDF downloads.
4 changes: 2 additions & 2 deletions examples/rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "MIT"
publish = false

[dependencies]
fullbleed = "=2.5.8"
fullbleed = "=2.5.11"

[[bin]]
name = "hello"
Expand Down
2 changes: 1 addition & 1 deletion examples/rust/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Fullbleed from Rust

These examples use the published `fullbleed` 2.5.8 crate. They require Rust
These examples use the published `fullbleed` 2.5.11 crate. They require Rust
1.85 or newer and a working native Rust toolchain; they do not require Python.

From the root of this documentation repository:
Expand Down
15 changes: 10 additions & 5 deletions playground/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Fullbleed browser playground

An optional static website adapter for the unchanged published `fullbleed = 2.5.8`
An optional static website adapter for the unchanged published `fullbleed = 2.5.11`
Rust crate. It compiles to `wasm32-wasip1` and runs inside a Web Worker using
`@bjorn3/browser_wasi_shim` 0.4.2. It adds no dependencies to the Python wheel or
the core Rust crate. The engine produces the PDF, then renders PNG page previews
Expand Down Expand Up @@ -28,8 +28,9 @@ python tools/check_site.py site
The build uses both lockfiles, publishes a toolchain/hash record, and retains
the generated verification report next to the browser assets. The verification
script compares native and WASI PDF and PNG bytes for the invoice, report, and
notice, an edited invoice, and three gradient cases; checks expected gradient
colors and that an edit changes the output; and exercises source/page limits and
notice, an edited invoice, three gradient cases, and all 12 unembedded Latin
standard font faces; checks expected gradient colors and visible text in every
standard-font row; and exercises source/page limits and
recovery. The browser UI is additionally reviewed with actual downloaded PDFs.
These checks establish the recorded fixtures only, not universal platform parity
or ISO conformance.
Expand All @@ -49,14 +50,16 @@ are checked against the existing attribution manifest before export. After
building the playground, verify the complete handoff with:

```sh
python -m pip install fullbleed==2.5.8
python -m pip install fullbleed==2.5.11 pypdf==6.19.0
node tools/verify_project_export.mjs
python -I tools/verify_project_export.py
```

The verifier checks ZIP integrity, exact source and font/license bytes, export
replay, failure recovery, and Python/WASI PDF and PNG equality for the invoice,
report, notice, an edited invoice, and three gradient cases. Extracted projects run from paths with
report, notice, an edited invoice, three gradient cases, and the standard-font
fixture. An independent PDF reader verifies that all 12 font faces remain
unembedded and their text is intact. Extracted projects run from paths with
spaces and a different current working directory. Results are retained in
`playground/project-verification`.

Expand All @@ -68,4 +71,6 @@ recover; no server process is created.

`docs/assets/playground/fonts` contains the licensed fonts used by the showcase.
Their upstream attribution is retained in `LICENSES.txt` and `font-sources.json`.
`LICENSES.txt` also includes the licenses for substitute fonts compiled into the
engine's standard-font preview renderer.
The demo's limits and embedded assets are not the full local engine feature set.
4 changes: 2 additions & 2 deletions playground/engine/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion playground/engine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ license = "MIT"
publish = false

[dependencies]
fullbleed = "=2.5.8"
fullbleed = "=2.5.11"

[profile.release]
lto = true
Expand Down
2 changes: 1 addition & 1 deletion playground/engine/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ fn render() -> Result<(), Box<dyn std::error::Error>> {
std::fs::write(
"result.json",
format!(
"{{\"engine\":\"2.5.8\",\"pages\":{},\"missing_glyphs\":{}}}",
"{{\"engine\":\"2.5.11\",\"pages\":{},\"missing_glyphs\":{}}}",
pages.len(),
glyphs.missing().len()
),
Expand Down
Loading
Loading