Skip to content

Commit 415e838

Browse files
authored
Merge pull request #1355 from thewtex/constituent-update
docs(parts): update, note TypeScript, Python core tooling
2 parents 26ea705 + 18bf887 commit 415e838

File tree

2 files changed

+69
-58
lines changed

2 files changed

+69
-58
lines changed

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ apidocs/index.rst
7070
```{toctree}
7171
:hidden:
7272
:maxdepth: 3
73-
:caption: 📖 C++ Wasm Processing Pipelines
73+
:caption: 🧑‍💻 C++
7474
7575
cxx/installation.md
7676
cxx/tutorial/index.md

docs/introduction/parts.md

Lines changed: 68 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,76 @@
22

33
ITK-Wasm's goal is **to work harmoniously with WebAssembly (wasm) community standards to make the new stack for scientific computing a reality**.
44

5-
ITK-Wasm adds the glue that enables *simple, performant, easy-to-reason about, composable, interoperable, and universally deployable* wasm modules to be created by your average [research software engineer](https://ukrse.github.io/who.html). This includes the ability to operate performantly on scientific datasets, with an emphasis on multi-dimensional spatial data.
5+
ITK-Wasm adds the glue that enables _simple, performant, easy-to-reason about, composable, interoperable, and universally deployable_ wasm modules to be created by your average [research software engineer](https://ukrse.github.io/who.html). This includes the ability to operate performantly on scientific datasets, with an emphasis on multi-dimensional spatial data.
66

7-
Towards that end, ITK-Wasm provides powerful, joyful tooling for scientific computation in wasm through a number of distinct but related parts.
7+
Towards that end, ITK-Wasm provides **powerful, joyful** tooling for *scientific computation* in wasm through a number of distinct but related parts.
88

9-
1. C++ core tooling
10-
2. Build environment Docker images
11-
3. A Node.js CLI to build wasm, generate language bindings, etc.
12-
4. Small, language-specific libraries that facilicate idiomatic integration
13-
5. Example packages built with ITK-Wasm
14-
6. File format support
9+
1. Example packages built with ITK-Wasm
10+
2. File format support
11+
3. TypeScript / JavaScript core tooling
12+
4. Python core tooling
13+
5. C++ core tooling
14+
15+
Support for additional languages is planned, and the architecture is easily extensible to support new languages. There interest in [Java](https://github.com/InsightSoftwareConsortium/ITK-Wasm/pull/855) and Rust in particular -- if you are interested in contributing code or funding to this effort, [please reach out](https://github.com/thewtex).
1516

1617
This section provides a high level overview of these constituent parts.
1718

19+
(packages)=
20+
## Example packages
21+
22+
While most ITK-Wasm packages are not developed in the `InsightSoftwareConsortium/ITK-Wasm` repository -- a package built with ITK-Wasm can be developed by anyone and maintained in any repository -- there are a number of packages developed in the `ITK-Wasm` repository. These packages
23+
24+
- provide common functionality for other packages, such as testing and IO functionality
25+
- demonstrate capabilities
26+
- and continuously exercise and test the base functionality
27+
28+
To create your own ITK-Wasm package, an [interactive command line setup tool](https://www.npmjs.com/package/create-itk-wasm) is available.
29+
30+
Descriptions of these packages can be found in the [package listing page](./packages.md).
31+
32+
(file-format)=
33+
## File format support
34+
35+
Assistance for handling data serialized in file formats plays a crucial role in enabling comprehensive analysis using a variety of software tools.
36+
37+
ITK-Wasm offers IO modules designed to interact with various standard scientific image, mesh, and spatial transformation file formats. These modules allow for the loading of data into language-native interface types through bindings like TypeScript and Python.
38+
39+
In addition to supporting external file formats, ITK-Wasm also introduces its own file formats. These ITK-Wasm file formats are optimized and offer a direct correspondence to spatial interface types, utilizing a straightforward JSON + binary array buffer format.
40+
41+
More information can be found in the [File Format Section](./file_formats/index.md).
42+
43+
(typescript-core)=
44+
## 🌐 TypeScript / JavaScript core
45+
46+
In TypeScript / JavaScript, the NPM [`itk-wasm`](https://www.npmjs.com/search?q=itk-wasm) package provides:
47+
48+
1. Support for Node.js and browser environments
49+
2. A Command Line Interface (CLI)
50+
3. A Web Worker pool for parallel processing
51+
52+
The `itk-wasm` *command line interface (CLI)* drives
53+
54+
1. Builds
55+
2. Generation of language bindings and language package configuration
56+
3. Testing for wasm binaries
57+
58+
To create your own ITK-Wasm package, an [interactive command line setup tool](https://www.npmjs.com/package/create-itk-wasm) is also available.
59+
60+
(python-core)=
61+
## 🐍 Python core
62+
63+
A small, Pythonic library, [itkwasm](https://pypi.org/project/itkwasm/), is used by generated bindings to provide simple, clean, performant, and idiomatic interfaces in Python.
64+
65+
The `itkwasm` Python package provides:
66+
67+
1. A simple, Pythonic interface
68+
2. A bridge to NumPy and ITK
69+
3. A plugin system for accelerator packages
70+
71+
Both system execution and browser execution are supported, with the latter enabled by [Pyodide](https://pyodide.org).
72+
1873
(cxx-core)=
19-
## C++ core
74+
## 🧑‍💻 C++ core
2075

2176
ITK-Wasm's C++ core tooling provides:
2277

@@ -29,7 +84,7 @@ These are embodied in the C++ core with:
2984

3085
1. [ITK]
3186
2. [CLI11]
32-
3. [RapidJSON]
87+
3. [glaze]
3388
4. [libcbor]
3489

3590
The Insight Toolkit ([ITK]) is an open-source, cross-platform library that provides developers with an extensive suite of software tools based on a proven, spatially-oriented architecture for processing scientific data in two, three, or more dimensions.
@@ -39,12 +94,12 @@ The *itk-wasm* GitHub repository is also an [ITK Remote Module](https://github.c
3994

4095
Wasm module C++ processing pipelines are written with [CLI11]'s simple and intuitive interface.
4196

42-
[RapidJSON] provides [JSON](https://json.org)-related functionality since it is not only [extremely fast](https://github.com/miloyip/nativejson-benchmark?tab=readme-ov-file#parsing-time) but also [extremely small](https://github.com/miloyip/nativejson-benchmark?tab=readme-ov-file#code-size), which is critical for WebAssembly.
97+
[glaze] provides elegant, modern C++ interfaces via compile-time reflection for [JSON](https://json.org)-related functionality that is not only [extremely fast](https://github.com/stephenberry/glaze?tab=readme-ov-file#performance) but also extremely small, which is critical for WebAssembly.
4398

4499
The ability to read and write to files, providing a bridge to [Web3] and traditional desktop computing, is built on [libcbor], which is another tiny footprint library.
45100

46101
(docker)=
47-
## Build environment Docker images
102+
### Build environment Docker images
48103

49104
Build environment Docker images encapsulate
50105

@@ -56,54 +111,10 @@ These [`itkwasm/emscripten`] and [`itkwasm/wasi`] Docker images are [dockcross]
56111

57112
These images include not only the CMake pre-configured toolchains, but pre-built versions of the ITK-Wasm C++ core. Moreover, wasm tools for optimization, debugging, emulation and system execution, testing, are bundled. A number of build and system configurations are included to make optimized and debuggable builds for scientific codebases a breeze.
58113

59-
(cli)=
60-
## Command line interface (CLI)
61-
62-
An `itk-wasm` *command line interface (CLI)* drives
63-
64-
- builds,
65-
- generation of language bindings and language package configuration,
66-
- and testing for wasm binaries.
67-
68-
The CLI can be installed via
69-
[Node.js / NPM](https://nodejs.org/en/download/)
70-
71-
```sh
72-
npm install -g itk-wasm
73-
```
74-
75-
(language-libraries)=
76-
## Language-specific libraries
77-
78-
Small, language-specific libraries are used by generated bindings to provide simple, clean, performant, and idiomatic interfaces in the host languages.
79-
80-
In TypeScript / JavaScript, this is the NPM [itk-wasm](https://www.npmjs.com/search?q=itk-wasm) package and in Python this is the PyPI [itkwasm](https://pypi.org/project/itkwasm/) package.
81-
82-
(packages)=
83-
## Example packages
84-
85-
While most ITK-Wasm packages are not developed in the `InsightSoftwareConsortium/ITK-Wasm` repository -- a package built with ITK-Wasm can be developed by anyone and maintained in any repository -- there are a number of packages developed in the `itk-wasm` repository. These packages
86-
87-
- provide common functionality for other packages, such as testing and IO functionality,
88-
- demonstrate capabilities,
89-
- and continuously exercise and test the base functionality.
90-
91-
Descriptions of these packages can be found in the [package listing page](./packages.md).
92-
93-
(file-format)=
94-
## File format support
95-
96-
Assistance for handling data serialized in file formats plays a crucial role in enabling comprehensive analysis using a variety of software tools.
97-
98-
ITK-Wasm offers IO modules designed to interact with various standard scientific image and mesh file formats. These modules allow for the loading of data into language-native interface types through bindings like TypeScript and Python.
99-
100-
In addition to supporting external file formats, ITK-Wasm also introduces its own file formats. These ITK-Wasm file formats are optimized and offer a direct correspondence to spatial interface types, utilizing a straightforward JSON + binary array buffer format.
101-
102-
More information can be found in the [File Format Section](./file_formats/index.md).
103114

104115
[ITK]: https://docs.itk.org
105116
[CLI11]: https://github.com/CLIUtils/CLI11
106-
[RapidJSON]: https://rapidjson.org/
117+
[glaze]: https://github.com/stephenberry/glaze
107118
[libcbor]: https://libcbor.readthedocs.io/
108119
[Emscripten]: https://emscripten.org/
109120
[WASI]: https://wasi.dev

0 commit comments

Comments
 (0)