Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
361b564
ci: harden pytest and lint gates
ObservedObserver Jun 19, 2026
dde489d
feat: validate data query comm payloads
ObservedObserver Jun 19, 2026
0ac2ef5
refactor: extract pygwalker spec manager
ObservedObserver Jun 19, 2026
598e765
refactor: extract pygwalker data bridge
ObservedObserver Jun 19, 2026
a780ab4
style: enforce ruff formatting
ObservedObserver Jun 19, 2026
6683b7d
refactor: extract pygwalker comm handler
ObservedObserver Jun 19, 2026
a0aad2c
test: cover integration api entrypoints
ObservedObserver Jun 19, 2026
2abf0f9
refactor: extract pygwalker props builder
ObservedObserver Jun 19, 2026
1e6aa3f
refactor: extract pygwalker render manager
ObservedObserver Jun 19, 2026
865b100
feat: type save comm payloads
ObservedObserver Jun 19, 2026
4c1cfc2
feat: mark pygwalker as typed
ObservedObserver Jun 19, 2026
9d1bda6
feat: type chart comm payloads
ObservedObserver Jun 19, 2026
4677991
feat: type cloud upload comm payloads
ObservedObserver Jun 19, 2026
ac733f0
feat: add telemetry opt-out notice
ObservedObserver Jun 19, 2026
99f7685
fix: clarify unsupported dataset errors
ObservedObserver Jun 19, 2026
6653021
ci: rebuild frontend during package builds
ObservedObserver Jun 19, 2026
176e618
fix: reject live computation for static html
ObservedObserver Jun 19, 2026
89ff83d
docs: document local development workflow
ObservedObserver Jun 19, 2026
9978602
docs: mark translated readmes community maintained
ObservedObserver Jun 19, 2026
325f5bc
feat: add unified computation option
ObservedObserver Jun 19, 2026
541d7d1
docs: sync walk api reference with signature
ObservedObserver Jun 19, 2026
4315ed5
feat: add explicit spec path option
ObservedObserver Jun 19, 2026
b6b548d
fix: return connector sql query results
ObservedObserver Jun 19, 2026
793d09c
ci: enforce frontend typecheck
ObservedObserver Jun 19, 2026
ed14655
fix: modernize notebook extra dependencies
ObservedObserver Jun 19, 2026
44b0fe4
feat: type communication responses
ObservedObserver Jun 19, 2026
82eeaa3
fix: make frontend telemetry opt-in state idempotent
ObservedObserver Jun 19, 2026
419322a
feat: type empty communication responses
ObservedObserver Jun 19, 2026
1ea5cf7
fix: keep preview rendering on daemon worker
ObservedObserver Jun 19, 2026
ece1ec3
feat: map frontend communication actions
ObservedObserver Jun 19, 2026
0e08a91
fix: clarify missing frontend asset errors
ObservedObserver Jun 19, 2026
4753474
feat: add public walker object api
ObservedObserver Jun 19, 2026
05ab94a
feat: accept walker objects in html export
ObservedObserver Jun 19, 2026
b01baf2
feat: render walker objects in streamlit
ObservedObserver Jun 19, 2026
3e0b309
feat: serve walker objects with webserver
ObservedObserver Jun 19, 2026
e86c5b4
feat: render walker objects in notebook widgets
ObservedObserver Jun 19, 2026
31e6bac
feat: walk existing walker objects in jupyter
ObservedObserver Jun 19, 2026
0b82ca2
refactor: share walker adapter validation
ObservedObserver Jun 19, 2026
50a6dba
feat: default jupyter rendering to anywidget
ObservedObserver Jun 19, 2026
b18c141
test: add frontend playwright smoke
ObservedObserver Jun 19, 2026
03e0240
feat: validate communication message envelopes
ObservedObserver Jun 19, 2026
c4873f1
feat: type frontend communication envelopes
ObservedObserver Jun 19, 2026
c308e0d
test: cover communication transport envelopes
ObservedObserver Jun 19, 2026
68c2943
refactor: validate comm handler requests at registration
ObservedObserver Jun 19, 2026
86867b9
refactor: extract jupyter display manager
ObservedObserver Jun 19, 2026
02853a2
refactor: extract chart export manager
ObservedObserver Jun 19, 2026
37fd840
refactor: extract props tracking
ObservedObserver Jun 19, 2026
eb2b5e0
test: cover metrics tools
ObservedObserver Jun 19, 2026
ddf4a6b
refactor: extract desktop import service
ObservedObserver Jun 19, 2026
4fd0603
refactor: extract cloud communication service
ObservedObserver Jun 19, 2026
d94759d
refactor: extract data communication service
ObservedObserver Jun 19, 2026
273c14e
refactor: extract spec communication service
ObservedObserver Jun 19, 2026
e032bcf
refactor: extract data upload communication service
ObservedObserver Jun 19, 2026
b2931aa
refactor: extract desktop communication service
ObservedObserver Jun 19, 2026
68dc6e1
docs: align frontend validation workflow
ObservedObserver Jun 19, 2026
76f69d0
fix: default privacy to update-only
ObservedObserver Jun 19, 2026
b111a18
test: guard repo hygiene artifacts
ObservedObserver Jun 19, 2026
b98e823
test: guard frontend props contract
ObservedObserver Jun 19, 2026
77ac68a
test: guard communication endpoint maps
ObservedObserver Jun 19, 2026
c92da5a
test: guard pydantic compatibility boundary
ObservedObserver Jun 19, 2026
5b5800a
test: cover update-only check update behavior
ObservedObserver Jun 19, 2026
a076f03
docs: sync walk api reference
ObservedObserver Jun 19, 2026
494168b
test: cover invalid static html computation
ObservedObserver Jun 19, 2026
d59350c
fix: classify unknown comm actions as invalid requests
ObservedObserver Jun 19, 2026
e095465
test: cover spec parsing failure modes
ObservedObserver Jun 19, 2026
5aec679
test: guard typed package marker
ObservedObserver Jun 19, 2026
a27e44f
fix: enable frontend dev source maps
ObservedObserver Jun 19, 2026
3ec9dda
feat: export walker spec as code
ObservedObserver Jun 19, 2026
efe7da5
fix: load frontend telemetry only after opt in
ObservedObserver Jun 19, 2026
0116cc3
fix: reject unknown comm payload fields
ObservedObserver Jun 19, 2026
a23ce60
feat: add spec migration helper
ObservedObserver Jun 19, 2026
bca35cd
docs: add contributing entrypoint
ObservedObserver Jun 19, 2026
6f1edb6
build: upgrade frontend to vite 6
ObservedObserver Jun 19, 2026
96e3a24
refactor: lazy load frontend modals
ObservedObserver Jun 19, 2026
7fde897
refactor: deprecate legacy jupyter transports
ObservedObserver Jun 19, 2026
026cda9
docs: mark legacy jupyter transports deprecated
ObservedObserver Jun 19, 2026
eb80bc5
test: isolate cloud computation core tests
ObservedObserver Jun 19, 2026
d654b8c
fix: validate empty communication payloads
ObservedObserver Jun 19, 2026
e6a5ea6
chore: type empty communication requests
ObservedObserver Jun 19, 2026
5055d70
fix: avoid deprecated polars dtype groups
ObservedObserver Jun 19, 2026
ea32dbe
test: capture legacy computation warnings
ObservedObserver Jun 19, 2026
ce8037e
fix: lazy load ipylab preview dependency
ObservedObserver Jun 19, 2026
99efe28
ci: fail on pygwalker deprecation warnings
ObservedObserver Jun 19, 2026
a2610cc
fix: type update spec chart data
ObservedObserver Jun 19, 2026
5484678
refactor: type communication responses
ObservedObserver Jun 19, 2026
95c7006
fix: preserve legacy kernel flag in webserver walk
ObservedObserver Jun 19, 2026
e579d6a
chore: keep frontend dist untracked
ObservedObserver Jun 19, 2026
1687791
test: guard translated readme source of truth notice
ObservedObserver Jun 19, 2026
b000c2e
ci: run notebooks through nbmake
ObservedObserver Jun 19, 2026
afc2343
test: guard ci against pytest watchdog
ObservedObserver Jun 19, 2026
0676ee0
test: guard project metadata constraints
ObservedObserver Jun 19, 2026
826d03b
test: guard typed comm handler registration
ObservedObserver Jun 19, 2026
1efae6c
fix: clarify missing duckdb dependency
ObservedObserver Jun 19, 2026
0b59923
docs: remove stale translated api references
ObservedObserver Jun 19, 2026
81abb64
refactor: type ping communication response
ObservedObserver Jun 19, 2026
f8c92b9
fix: accept pathlike legacy spec input
ObservedObserver Jun 19, 2026
4bab665
fix: lazy load telemetry clients
ObservedObserver Jun 19, 2026
e2505d9
test: guard ci quality gates
ObservedObserver Jun 19, 2026
3180bb6
docs: document active pygwalker tools namespace
ObservedObserver Jun 19, 2026
eb018bf
test: guard publish build workflow
ObservedObserver Jun 19, 2026
5c8aa48
fix: warn on legacy jupyter transports
ObservedObserver Jun 19, 2026
573e5d1
feat: support pyarrow table inputs
ObservedObserver Jun 19, 2026
8ed1f5e
test: guard frontend protocol shapes
ObservedObserver Jun 19, 2026
30d3e9e
test: guard pyarrow public typing docs
ObservedObserver Jun 19, 2026
8d2083b
fix: handle empty tabular inputs
ObservedObserver Jun 19, 2026
86bc625
test: guard public tabular input paths
ObservedObserver Jun 19, 2026
04b6ca0
docs: align public dataset input docs
ObservedObserver Jun 19, 2026
bbeb003
build: bound pyarrow dependency
ObservedObserver Jun 19, 2026
0f4783e
fix: prevent telemetry exit hangs
ObservedObserver Jun 19, 2026
15e1cbb
fix: stabilize integration computation regressions
ObservedObserver Jun 20, 2026
ba5d448
fix: harden integration regression paths
ObservedObserver Jun 20, 2026
cfa7986
fix: render streamlit pure charts with local data
ObservedObserver Jun 20, 2026
e646f02
test: mirror ci gates locally
ObservedObserver Jun 20, 2026
c22deb2
ci: align local and fresh python gates
ObservedObserver Jun 20, 2026
dbd91c7
fix: stabilize ci regression gates
ObservedObserver Jun 20, 2026
55bb6d0
fix: stabilize frontend asset path diagnostics
ObservedObserver Jun 20, 2026
4fda926
fix: close mini racer runtimes
ObservedObserver Jun 20, 2026
ec0cba5
fix: address comm gid and streamlit reruns
ObservedObserver Jun 20, 2026
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
40 changes: 26 additions & 14 deletions .github/workflows/auto-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ jobs:
run: |
chmod u+x ./scripts/compile.sh
./scripts/compile.sh
- name: Try Frontend Smoke Test
working-directory: ./app
run: |
yarn playwright install --with-deps chromium
yarn test:front_end
- name: Uploading dist
uses: actions/upload-artifact@v4
with:
Expand All @@ -48,7 +53,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ['3.12', '3.13']
python-version: ['3.10', '3.11', '3.12', '3.13']
os-version: [ubuntu-latest, windows-latest, macos-latest]

runs-on: ${{ matrix.os-version }}
Expand All @@ -64,6 +69,15 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Use Node.js 22.x
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'yarn'
cache-dependency-path: ./app/yarn.lock
- name: Ensure Yarn
run: |
npm install -g yarn
- name: Download test data
working-directory: ./
run: |
Expand All @@ -75,32 +89,30 @@ jobs:
PIP_ONLY_BINARY: "duckdb"
run: |
pip install ".[export]"
- name: Pin Pydantic v1 compatibility leg
if: ${{ matrix.os-version == 'ubuntu-latest' && matrix.python-version == '3.10' }}
run: |
pip install "pydantic==1.10.15"
- name: Try Install Modin In Linux Os
if: ${{ matrix.os-version == 'ubuntu-latest' && matrix.python-version == '3.11' }}
run: |
pip install "numpy<2" "pandas<2.1"
pip install aiohttp==3.8.6
pip install "modin==0.23.1" "modin[ray]==0.23.1"
pip install pydantic==1.10.9
- name: Try Running
working-directory: ./tests/
run: |
pip install ipykernel nbconvert pandas polars
pip install ipykernel nbmake pandas polars pytest
python -m ipykernel install --name python --user
jupyter kernelspec list
jupyter nbconvert --execute --ExecutePreprocessor.kernel_name=python --to html *.ipynb
python -c "from pathlib import Path; import subprocess, sys; notebooks = sorted(str(path) for path in Path('.').glob('*.ipynb')); subprocess.run([sys.executable, '-m', 'pytest', '--nbmake', '--nbmake-kernel=python', *notebooks], check=True)"
- name: Try Pytest
timeout-minutes: 20
working-directory: ./
run: |
pip install duckdb_engine
pip install pytest
python ./scripts/ci_run_pytest.py
- name: Uploading notebooks
uses: actions/upload-artifact@v4
if: ${{ matrix.python-version == '3.12' && matrix.os-version == 'ubuntu-latest' }}
with:
name: notebook
path: |
./tests/main.html
./tests/offline.html
./tests/stress-test.html
pip install pytest ruff starlette polars tornado
ruff check pygwalker tests scripts bin pygwalker_tools
ruff format --check pygwalker tests scripts bin pygwalker_tools
python -X faulthandler -W error::DeprecationWarning:pygwalker -m pytest -o faulthandler_timeout=300 tests
9 changes: 9 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,15 @@ jobs:
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Use Node.js 22.x
uses: actions/setup-node@v4
with:
node-version: 22.x
cache: 'yarn'
cache-dependency-path: ./app/yarn.lock
- name: Ensure Yarn
run: |
npm install -g yarn
- name: Try building
working-directory: ./
run: |
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ dmypy.json

__pycache__
dist
!/pygwalker/templates/dist/*
pygwalker/templates/dist/
.DS_Store
venv
.ipynb_checkpoints
Expand All @@ -147,4 +147,4 @@ __pycache__/
*.db
.web
*.py[cod]
assets/external/
assets/external/
14 changes: 14 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Contributing to PyGWalker

The contributor workflow lives in [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md).

Start there for the supported local setup, including:

- Python editable installs and test commands.
- Frontend dependency installation, builds, type checks, and Playwright smoke tests.
- Optional local Graphic Walker source builds through `app`'s `dev:preinstall` script.
- Vite dev-server setup for JupyterLab hot reload.
- CI and package-build expectations.

Keeping the detailed guide under `docs/` lets the development notes and
troubleshooting page link to one maintained source of truth.
91 changes: 67 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
[English](README.md) | [Español](./docs/README.es.md) | [Français](./docs/README.fr.md) | [Deutsch](./docs/README.de.md) | [中文](./docs/README.zh.md) | [Türkçe](./docs/README.tr.md) | [日本語](./docs/README.ja.md) | [한국어](./docs/README.ko.md) | [Русский](./docs/README.ru.md)

> [!NOTE]
> The English README is the source of truth for the API reference, installation, and development instructions. Translated READMEs are community-maintained and may lag behind this file.


<p align="center"><a href="https://github.com/Kanaries/pygwalker"><img width=100% alt="" src="https://github.com/user-attachments/assets/f90db669-6e5a-45d3-942e-547c9d0471c9" /></a></p>

Expand Down Expand Up @@ -57,7 +60,7 @@ Visit [Google Colab](https://colab.research.google.com/drive/171QUQeq-uTLgSj1u-P


# Features
PyGWalker is a Python library that simplifies data analysis and visualization workflows by turning pandas DataFrames into interactive visual interfaces.
PyGWalker is a Python library that simplifies data analysis and visualization workflows by turning pandas, polars, and pyarrow table data into interactive visual interfaces.
It offers a variety of features that make it a powerful tool for data exploration:
- ##### Interactive Data Exploration:
- Drag-and-drop interface for easy visualization creation.  
Expand Down Expand Up @@ -151,21 +154,45 @@ Cool things you can do with PyGwalker:

### Better Practices

There are some important parameters you should know when using pygwalker:
There are some important parameters you should know when using pygwalker:

+ `spec`: for save/load chart config (json string or file path)
+ `kernel_computation`: for using duckdb as computing engine which allows you to handle larger dataset faster in your local machine.
+ `use_kernel_calc`: Deprecated, use `kernel_computation` instead.
+ `spec_path`: local file path for saving/loading chart config.
+ `spec`: chart config object, JSON string, config ID, or remote URL.
+ `computation`: choose where data queries run. Use `"browser"` for frontend-only computation, `"kernel"` for local DuckDB-backed Python computation, `"cloud"` for Kanaries cloud computation, or omit it for the default automatic behavior.
+ `kernel_computation`: legacy boolean for using DuckDB as computing engine. Prefer `computation="kernel"`.
+ `use_kernel_calc`: Deprecated, use `computation="kernel"` or `kernel_computation` instead.

```python
df = pd.read_csv('./bike_sharing_dc.csv')
walker = pyg.walk(
df,
spec="./chart_meta_0.json", # this json file will save your chart state, you need to click save button in ui mannual when you finish a chart, 'autosave' will be supported in the future.
kernel_computation=True, # set `kernel_computation=True`, pygwalker will use duckdb as computing engine, it support you explore bigger dataset(<=100GB).
spec_path="./chart_meta_0.json", # local file used to load and save chart state.
computation="kernel", # use DuckDB in the Python kernel for larger datasets.
)
```

You can also create a reusable `Walker` object and choose where to render it:

```python
walker = pyg.Walker(df, spec_path="./chart_meta_0.json", computation="browser")
walker.show() # auto-detects notebook or script mode
html = walker.to_html()
html = pyg.to_html(walker)
```

After exploring in the UI, export the current chart state as reproducible Python code:

```python
code = walker.to_code(dataset_name="df")
print(code)
```

If you have an older saved spec, migrate it to the current schema before committing it:

```python
migrated_spec = pyg.spec.migrate(open("./old_chart_meta.json").read())
```

### Example in local notebook

* Notebook Code: [Click Here](https://github.com/Kanaries/pygwalker-offline-example)
Expand All @@ -181,7 +208,7 @@ walker = pyg.walk(
After saving a chart from the UI, you can retrieve the image directly from Python.

```python
walker = pyg.walk(df, spec="./chart_meta_0.json")
walker = pyg.walk(df, spec_path="./chart_meta_0.json")
# edit the chart in the UI and click the save button
walker.save_chart_to_file("Chart 1", "chart1.svg", save_type="svg")
png_bytes = walker.export_chart_png("Chart 1")
Expand Down Expand Up @@ -216,32 +243,48 @@ st.title("Use Pygwalker In Streamlit")
def get_pyg_renderer() -> "StreamlitRenderer":
df = pd.read_csv("./bike_sharing_dc.csv")
# If you want to use feature of saving chart config, set `spec_io_mode="rw"`
return StreamlitRenderer(df, spec="./gw_config.json", spec_io_mode="rw")
return StreamlitRenderer(df, spec_path="./gw_config.json", spec_io_mode="rw")


renderer = get_pyg_renderer()

renderer.explorer()
```

If you already created a reusable `Walker`, Streamlit can render it directly:

```python
import pygwalker as pyg
from pygwalker.api.streamlit import StreamlitRenderer

walker = pyg.Walker(df, spec_path="./gw_config.json", computation="kernel")
renderer = StreamlitRenderer(walker)
renderer.explorer()
```

## [API Reference](https://pygwalker-docs.vercel.app/api-reference/jupyter)

### [pygwalker.walk](https://pygwalker-docs.vercel.app/api-reference/jupyter#walk)


| Parameter | Type | Default | Description |
|------------------------|-----------------------------------------------------------|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
| dataset | Union[DataFrame, Connector] | - | The dataframe or connector to be used. |
| gid | Union[int, str] | None | ID for the GraphicWalker container div, formatted as 'gwalker-{gid}'. |
| env | Literal['Jupyter', 'JupyterWidget'] | 'JupyterWidget' | Environment using pygwalker. |
| field_specs | Optional[Dict[str, FieldSpec]] | None | Specifications of fields. Will be automatically inferred from `dataset` if not specified. |
| hide_data_source_config | bool | True | If True, hides DataSource import and export button. |
| theme_key | Literal['vega', 'g2'] | 'g2' | Theme type for the GraphicWalker. |
| appearance | Literal['media', 'light', 'dark'] | 'media' | Theme setting. 'media' will auto-detect the OS theme. |
| spec | str | "" | Chart configuration data. Can be a configuration ID, JSON, or remote file URL. |
| use_preview | bool | True | If True, uses the preview function. |
| kernel_computation | bool | False | If True, uses kernel computation for data. |
| **kwargs | Any | - | Additional keyword arguments. |
| Parameter | Type | Default | Description |
|--------------------|-----------------------------------------------------------|-----------------|-----------------------------------------------------------------------------------------------------------------------------------|
| dataset | Union[DataFrame, pyarrow.Table, Connector, str, Walker] | - | DataFrame, pyarrow table, database connector, SQL/data source string, or reusable Walker object to explore. |
| gid | Union[int, str] | None | ID for the GraphicWalker container div, formatted as `gwalker-{gid}`. |
| env | Literal['JupyterAnywidget', 'Jupyter', 'JupyterWidget'] | 'JupyterAnywidget' | Notebook rendering environment. Use `JupyterAnywidget` or omit `env`; `Jupyter` and `JupyterWidget` are deprecated legacy transports kept for compatibility. |
| field_specs | Optional[List[FieldSpec]] | None | Field specifications. They will be inferred from `dataset` if not specified. |
| theme_key | Literal['vega', 'g2', 'streamlit'] | 'g2' | Theme type for Graphic Walker. |
| appearance | Literal['media', 'light', 'dark'] | 'media' | Theme appearance. `media` follows the operating system preference. |
| spec | str | "" | Chart configuration data. Can be a configuration ID, JSON string, local file path, or remote file URL. |
| spec_path | Optional[str] | None | Local chart configuration file path. Prefer this over passing a local file path through `spec`. |
| computation | Optional[Literal['auto', 'browser', 'kernel', 'cloud']] | None | Computation backend. Omit it for automatic behavior; use `browser`, `kernel`, or `cloud` to choose explicitly. |
| use_kernel_calc | Optional[bool] | None | Deprecated. Use `computation="kernel"` or `kernel_computation` instead. |
| kernel_computation | Optional[bool] | None | Legacy boolean for local DuckDB-backed kernel computation. Prefer `computation="kernel"` or `computation="browser"`. |
| cloud_computation | bool | False | Legacy boolean for Kanaries cloud computation. Prefer `computation="cloud"`. |
| show_cloud_tool | bool | True | Whether to show the Kanaries cloud tool when available. |
| kanaries_api_key | str | "" | Kanaries API key used by cloud features. |
| default_tab | Literal['data', 'vis'] | 'vis' | Default tab to show when the UI opens. |
| **kwargs | Any | - | Additional keyword arguments. |

## Development

Expand All @@ -257,7 +300,7 @@ Refer it: [local-development](https://docs.kanaries.net/pygwalker/installation#l
- [x] Databricks Notebook (Since version `0.1.4a0`)
- [x] Jupyter Extension for Visual Studio Code (Since version `0.1.4a0`)
- [x] Most web applications compatiable with IPython kernels. (Since version `0.1.4a0`)
- [x] **Streamlit (Since version `0.1.4.9`)**, enabled with `pyg.walk(df, env='Streamlit')`
- [x] **Streamlit (Since version `0.1.4.9`)**, enabled with `pygwalker.api.streamlit.StreamlitRenderer`
- [x] DataCamp Workspace (Since version `0.1.4a0`)
- [x] Panel. See [panel-graphic-walker](https://github.com/panel-extensions/panel-graphic-walker).
- [x] marimo (Since version `0.4.9.11`)
Expand All @@ -276,7 +319,7 @@ usage: pygwalker config [-h] [--set [key=value ...]] [--reset [key ...]] [--rese
Modify configuration file. (default: ~/Library/Application Support/pygwalker/config.json)
Available configurations:

- privacy ['offline', 'update-only', 'events'] (default: events).
- privacy ['offline', 'update-only', 'events'] (default: update-only).
"offline": fully offline, no data is send or api is requested
"update-only": only check whether this is a new version of pygwalker to update
"events": share which events about which feature is used in pygwalker, it only contains events data about which feature you arrive for product optimization. No DATA YOU ANALYSIS IS SEND. Events data will bind with a unique id, which is generated by pygwalker when it is installed based on timestamp. We will not collect any other information about you.
Expand Down
4 changes: 3 additions & 1 deletion app/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
node_modules/
!lib
test-results/
playwright-report/
!lib
Loading
Loading