You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/introduction/parts.md
+68-57Lines changed: 68 additions & 57 deletions
Original file line number
Diff line number
Diff line change
@@ -2,21 +2,76 @@
2
2
3
3
ITK-Wasm's goal is **to work harmoniously with WebAssembly (wasm) community standards to make the new stack for scientific computing a reality**.
4
4
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.
6
6
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.
8
8
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).
15
16
16
17
This section provides a high level overview of these constituent parts.
17
18
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
+
18
73
(cxx-core)=
19
-
## C++ core
74
+
## 🧑💻 C++ core
20
75
21
76
ITK-Wasm's C++ core tooling provides:
22
77
@@ -29,7 +84,7 @@ These are embodied in the C++ core with:
29
84
30
85
1.[ITK]
31
86
2.[CLI11]
32
-
3.[RapidJSON]
87
+
3.[glaze]
33
88
4.[libcbor]
34
89
35
90
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
39
94
40
95
Wasm module C++ processing pipelines are written with [CLI11]'s simple and intuitive interface.
41
96
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.
43
98
44
99
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.
45
100
46
101
(docker)=
47
-
## Build environment Docker images
102
+
###Build environment Docker images
48
103
49
104
Build environment Docker images encapsulate
50
105
@@ -56,54 +111,10 @@ These [`itkwasm/emscripten`] and [`itkwasm/wasi`] Docker images are [dockcross]
56
111
57
112
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.
58
113
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).
0 commit comments