Python Client Changelog
All notable changes to the GoFigr Python client (gofigr).
Current version: v2.3.3
v2.3.3 — June 1, 2026
Section titled “v2.3.3 — June 1, 2026”- New notebooks auto-enable GoFigr — a Jupyter contents manager turns on capture for newly created notebooks automatically (used on Managed Compute instances)
v2.3.2 — May 13, 2026
Section titled “v2.3.2 — May 13, 2026”- Added
GoFigr.request(), a typed HTTP helper for calling the GoFigr API from your own code
v2.3.1 — April 7, 2026
Section titled “v2.3.1 — April 7, 2026”Patch release with Clean Room execution improvements.
Improvements
Section titled “Improvements”- Auto-injected
publish—publish()is now available in Clean Room code execution without an explicit import extra_globalsthreading — extra globals are now propagated through Clean Room execution
Bug Fixes
Section titled “Bug Fixes”- Fixed package install names for several Clean Room dependencies
v2.3.0 — April 7, 2026
Section titled “v2.3.0 — April 7, 2026”Minor release improving watermark sizing and @reproducible ergonomics.
Improvements
Section titled “Improvements”- Short ID watermarks — watermark size calculation now uses short IDs, producing smaller and cleaner QR codes
- QR library migration — switched from
pyqrcodengtopython-qrcode @reproduciblecontainer support — decorator now handles tuples, numpy arrays, and nested containers
Bug Fixes
Section titled “Bug Fixes”- Fixed
pad_for_watermarkwidening images beyond the figure’s intended width - Fixed
PosixPathserialization error inFileData.read
v2.2.0 — March 29, 2026
Section titled “v2.2.0 — March 29, 2026”Minor release introducing Auth0 device login in gfconfig and short ID watermark support.
Highlights
Section titled “Highlights”- Auth0 Device Authorization Flow —
gfconfignow supports Auth0 device-code login, automatically opening the browser gfconfigUX improvements — clearer API key prompt and auto-launch of the verification URL- Short ID support for watermarks — produces compact QR codes
- Auto-assign integration — detects when AI is disabled and skips title auto-assignment
- Matplotlib DPI capture — clean room manifest now records matplotlib DPI for accurate Pyodide rendering
Breaking Changes
Section titled “Breaking Changes”- Removed
--legacyflag fromgfconfig— legacy auth path is no longer supported in the configuration tool
Bug Fixes
Section titled “Bug Fixes”configure()now resets state so the extension doesn’t appear ready from a prior autoconfig run
v2.1.0 — March 19, 2026
Section titled “v2.1.0 — March 19, 2026”Major release replacing the JupyterLab frontend extension with kernel-side notebook detection.
Highlights
Section titled “Highlights”- Simplified installation —
pip install gofigrno longer requires Node.js or JupyterLab build tools NotebookResolver— New unified detection chain (VSCode, Databricks, JPY_SESSION_NAME, JS Proxy) with resolution logging for debugging- JPY_SESSION_NAME detection — Notebook name resolution now completes in under 1ms via the environment variable set by
jupyter_server(JupyterLab 3+, Notebook 7+, JupyterHub) - Analysis-scoped asset sync — File syncs (
gf.sync) are now deferred when usingNotebookName()until the analysis resolves, preventing unscoped assets - Organization logo — New
logofield ongf_Organizationwithlogo_imagePIL convenience property
Bug Fixes
Section titled “Bug Fixes”- Fixed widget logo images not rendering due to invalid MIME type (
data:image;base64→data:image/png;base64) - Fixed
inject_notebook_metadatausing raw proxy-format metadata instead of resolved format, causing silentKeyErrorin deferred sync processing - Fixed manual
notebook_name/notebook_pathinconfigure()not feeding into the resolver - Fixed stale display trap after reconfiguring with
auto_publish=False - Fixed duplicate resolution log entries from
resolve_analysis()
Breaking Changes
Section titled “Breaking Changes”- Removed
nest-asynciodependency — code that transitively relied on GoFigr importing it will need to add it explicitly - Removed JupyterLab extension — notebook detection is now handled entirely kernel-side
v2.0.6 — March 12, 2026
Section titled “v2.0.6 — March 12, 2026”- Fixed stale display trap causing
auto_publish=Falseto be ignored on extension reload
v2.0.5 — March 12, 2026
Section titled “v2.0.5 — March 12, 2026”- Fixed pickle filename crash when
revision_indexis None (client-side UUID)
v2.0.4 — March 12, 2026
Section titled “v2.0.4 — March 12, 2026”- Fixed display crash on older IPython by falling back to
IPython.core.display
v2.0.3 — March 12, 2026
Section titled “v2.0.3 — March 12, 2026”- Fixed
importlib.resources.files()AttributeError on Python 3.8
v2.0.2 — March 12, 2026
Section titled “v2.0.2 — March 12, 2026”Patch release with bug fixes and new configuration options.
Improvements
Section titled “Improvements”auto_configureswitch — New option to disable automatic configuration on Jupyter extension load- Client-side UUID generation — Revision UUIDs are now generated client-side, reducing two API calls to one during figure publication
Bug Fixes
Section titled “Bug Fixes”- Fixed
sorted()TypeError for list fields containing dicts - Fixed null publisher crash when
auto_configureis disabled
v2.0.1 — March 5, 2026
Section titled “v2.0.1 — March 5, 2026”Patch release improving widget resilience and @reproducible ergonomics.
Improvements
Section titled “Improvements”- Graceful anywidget fallback — When
anywidgetis missing or its JupyterLab extension is not registered, interactive figures now fall back to non-interactive rendering with a warning banner instead of crashing check_anywidget_health()utility — New diagnostic function for step-by-step troubleshooting of widget issues (checks package installation, traitlets, Jupyter kernel, and provides frontend extension guidance)- Bare
@reproduciblesupport — The decorator can now be used without parentheses (@reproducibleis equivalent to@reproducible())
Files Changed
Section titled “Files Changed”gofigr/reproducible.py— +142 lines:_ANYWIDGET_WARNING_HTML,check_anywidget_health(),_run_interactive_fallback(), updatedreproducible()signature
v2.0.0 — March 5, 2026
Section titled “v2.0.0 — March 5, 2026”Major release introducing Clean Room reproducibility and Pyodide support.
Clean Room: Reproducible Figures
Section titled “Clean Room: Reproducible Figures”@reproducibledecorator — Capture source code, parameters, and package dependencies with every published figure- Interactive parameter widgets —
SliderParam,DropdownParam,CheckboxParam,TextParam, andStaticParamfor in-browser figure re-rendering - Parameter serialization supports JSON (primitives) and Parquet (DataFrames) with 100MB size limit
- Cross-language parameter model enables future R client support
Pyodide Support
Section titled “Pyodide Support”PyodidePublisher— Publish figures from browser-based Python environments (e.g., JupyterLite)- SVG added to default Pyodide image formats for vector export
- Guarded all optional imports (
IPython,blake3,git,py3Dmol, etc.) for restricted environments
Performance & Compatibility
Section titled “Performance & Compatibility”- API v1.4 —
Workspace.list()uses shallow serialization, significantly speeding upconfigure()in Jupyter - Watermark stabilization — Padding no longer causes figure size shifts on publish
- Python 3.12 compatibility — Replaced
pkg_resourceswithpathlib.Pathand updatedimportlib.resourcesAPIs - Switched from
pyqrcodetopyqrcodeng - Added
pyarrowdependency for Parquet support
Breaking Changes
Section titled “Breaking Changes”- API version bumped from v1.3 to v1.4 — requires server v2.5.0+
Workspace.list()no longer returns nested analyses/assets/stories; call.fetch()on individual workspaces for full details
v1.3.2 and earlier
Section titled “v1.3.2 and earlier”Previous releases focused on core figure publishing, Jupyter integration, and workspace management. See the GitHub repository for the full commit history.