# ggbx — An Extension Toolkit for GeoGebra Web

> 中文版本: [README.zh-CN.md](README.zh-CN.md)

ggbx is an unofficial extension toolkit built around the
[GeoGebra](https://www.geogebra.org) web app, aimed at classroom
presentation scenarios. Main features:

- **Offline use**: bundled local static-server launchers (`start.py` /
  `启动.bat` / `启动.vbs`) so GeoGebra runs in the browser without an
  internet connection;
- **Multi-page courseware (slideshow-style)**: organize multiple GeoGebra
  boards into a page-by-page presentation, saved as a single HTML file;
- **GGB-script / JavaScript code editors**: CodeMirror-based, with
  multi-page support; editor contents are saved into the courseware HTML;
- **Chinese command completion**: Chinese keyword and pinyin completion
  for GeoGebra commands (`js/kw/`);
- **File management**: courseware HTML files can be organized into
  subfolders;
- **Performance-optimized GeoGebra**: the bundled GeoGebra web app was
  compiled by this project's author from modified official sources and
  includes several performance optimizations for large constructions
  (see "Provenance" below and
  [GEOGEBRA-MODIFICATIONS.md](GEOGEBRA-MODIFICATIONS.md)).

This is a non-profit, free community project. **Commercial use is not
permitted.**

## Provenance (where the bundled GeoGebra comes from)

| Item | Value |
|---|---|
| Upstream project | GeoGebra — <https://github.com/geogebra/geogebra> |
| Official version | 5.4.926.0 (shown as 6.0.926.0 in Web/Classic 6 numbering) |
| Base commit | `7e907db1f687181650da05165ef91ea76591f125` ("Fix compile error", 2026-07-02 14:02:01 +0200) |
| Sources pulled | 2026-07-03 (UTC, shallow clone from the official GitHub repository) |
| Compiled app | `geogebra/5.0/web3d/` (GWT permutation `1AA944323119FEA358CBF9FEB79D3605`) |
| Modified sources | `geogebra-source-optimized.tar.gz` inside this package (corresponds exactly to the bundled build) |

**All modifications made by the author** (file-by-file details in
[GEOGEBRA-MODIFICATIONS.md](GEOGEBRA-MODIFICATIONS.md)):

1. Algebra View O(N²) layout-thrashing fix when adding many objects
   (loading large constructions no longer freezes the UI);
2. Ctrl/Shift+wheel zoom-animation performance fix (intermediate frames
   skip the full dependency-graph recompute; the final frame is
   unchanged);
3. Algebra/graphics splitter-drag performance fix (settings
   notifications are batched during the drag);
4. Experimental Web Worker curve-sampling mechanism (disabled by
   default; runs only with `?curveSamplingSmokeTest` in the URL and does
   not affect normal use);
5. `gradle.properties` build-environment tweak (affects compilation
   only, no runtime behavior change);
6. Slider-tool dialog "Step" field fix (creating a slider via the
   toolbar Slider tool previously always locked the actual increment at
   0.1, ignoring the typed Step value).

## Copyright & Licensing (please read)

The contents of this repository are **not all under one license**. There
are three categories:

| Content | Location | License |
|---|---|---|
| ggbx's own code (written by this project's author) | `js/` (except the third-party directories below), `index.html`, `4.0c.html`, `start.py`, launcher scripts, etc. | **CC BY-NC-SA 4.0** (Attribution-NonCommercial-ShareAlike, see [LICENSE.txt](LICENSE.txt)) |
| GeoGebra app (built by the author from modified sources) | the entire `geogebra/` directory | code portion: **EUPL 1.2** (modified sources included in this package); packaged assets (language files, icons, …) and `deployggb.js`: **GeoGebra non-commercial terms** → the directory as a whole is non-commercial only |
| Third-party open-source libraries | `js/codemirror/`, `js/FileSaver.js/` | MIT (copyright by their respective authors) |

Please note:

1. **The package as a whole may only be used non-commercially.** ggbx's
   own code is CC BY-NC-SA 4.0 (no commercial use) and the `geogebra/`
   directory also contains non-commercially-licensed content. Commercial
   use (paid products, embedding in paid course platforms, etc.)
   requires permission from **both** this project's author **and**
   GeoGebra GmbH (office@geogebra.org; see
   <https://www.geogebra.org/license>).
2. **The bundled GeoGebra is an unofficial modified build** — see
   "Provenance" above for its origin and the list of modifications. As
   required by EUPL 1.2 Art. 5, the complete modified source tree
   corresponding to the bundled build
   (`geogebra-source-optimized.tar.gz`) is included in this package.
   For the official version visit <https://www.geogebra.org>.
3. **GeoGebra® is a registered trademark of GeoGebra GmbH.** ggbx is an
   independent, unofficial project, not affiliated with or endorsed by
   GeoGebra GmbH. Attribution as required by GeoGebra:
   **Made with GeoGebra®** — <https://www.geogebra.org>.
4. Full third-party copyright and trademark notices:
   [NOTICE.en.md](NOTICE.en.md).

## Publishing / Redistribution notes

- If you fork or redistribute this project, keep all license and notice
  files in the `readme/` folder intact, and comply with CC BY-NC-SA 4.0
  (same license, attribution);
- When redistributing, **keep the modified source tree
  `geogebra-source-optimized.tar.gz` inside the package** — EUPL 1.2
  Art. 5 requires the sources to remain available alongside the compiled
  app; this cannot be omitted;
- When publishing to GitHub or similar platforms, it is recommended to
  copy `LICENSE.txt` to the repository root so the platform can detect
  and display the license;
- If you further modify the GeoGebra sources and rebuild, you must
  likewise publish your modified sources and update the modification
  notes.

## Disclaimer

This project is provided "as is", without warranty of any kind, express
or implied. Use at your own risk.
