[OPTIONS]
+ or: elide js|node|deno [OPTIONS] [FILE] [ARG...]
+ or: elide js|node|deno [OPTIONS] [--code CODE]
+ or: elide run|repl|serve [OPTIONS] [FILE] [ARG...]
+ or: elide run|repl|serve [OPTIONS] [--code CODE]
+ or: elide run|repl [OPTIONS]
+ or: elide run|repl --js [OPTIONS]
+ or: elide run|repl --language=[JS] [OPTIONS] [FILE] [ARG...]
+ or: elide run|repl --languages=[JS,PYTHON,...] [OPTIONS] [FILE] [ARG...]
+
+Manage, configure, and run polyglot applications with Elide
+
+Parameters:
+ [FILE] Source file to run.
+ [ARG...] Arguments to pass
+
+Options:
+ -h, --help Show this message and exit.
+ -V, --version Print version information and exit.
+
+Commands:
+ info Show info about the current app and environment
+ help, bug, issue
+ Report an issue or bug, find help for using Elide
+ run, r, serve, repl
+ Run a polyglot script, server, or interactive shell
+ pkl
+ Run the Pkl command-line tools
+ discord Open or show a Discord invite link
+
+Exit Codes:
+ 0 Successful program execution.
+ 1 Generic failure (terminal).
+ 2 Exception in user code.
```
## Runner Commands
@@ -35,10 +61,13 @@ an appropriate language if given a clearly identifiable source file (Python for
: Alias to `run` some Ruby. Equivalent to `elide run --ruby ...`.
`js`
-: Opens a file. Equivalent to `elide run --javascript ...`. Note that JavaScript is the default language engine.
+: Runs a file. Equivalent to `elide run --javascript ...`. Note that JavaScript is the default language engine.
## Utility Commands
+`install`
+: Install dependencies for an %product% project; this includes all supported ecosystems by default.
+
`info`
: Show info about the current installation of %product%.
@@ -51,9 +80,6 @@ an appropriate language if given a clearly identifiable source file (Python for
`bug`, `issue`
: File an issue or a feature request for %product%.
-`selfupdate`
-: Upgrade %product% to the latest version in-place.
-
## Global Options
Describe what each option is used for:
@@ -69,7 +95,3 @@ Describe what each option is used for:
-d, --debug
: Activate debug logging. **Caution:** Debug-level logging can be very verbose.
-
-
-
-
\ No newline at end of file
diff --git a/Writerside/topics/Compatibility.md b/Writerside/topics/Compatibility.md
index 7a2714a..1471f1f 100644
--- a/Writerside/topics/Compatibility.md
+++ b/Writerside/topics/Compatibility.md
@@ -11,7 +11,7 @@ Refer to the table below for resources regarding compatibility in each language.
| Language | Stability | %product%'s Engine | Stock Engine | Notes |
|--------------------------------|--------------------------------------------------------------------|-------------------------------------------------------------------------|------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
-| [JavaScript](JavaScript.md) |  | [GraalJs](https://github.com/oracle/graaljs) | [V8](https://v8.dev/) | ECMA2023-compatible. [Node API](Node-API.md) compat pending. |
+| [JavaScript](JavaScript.md) |  | [GraalJs](https://github.com/oracle/graaljs) | [V8](https://v8.dev/) | ECMA2024-compatible. [Node API](Node-API.md) compat pending. |
| [WebAssembly](Experimental.md) |  | [GraalWasm](https://github.com/oracle/graal/blob/master/wasm/README.md) | [V8](https://v8.dev/) | |
| [Python](Python.md) |  | [GraalPython](https://github.com/oracle/graalpython) | [CPython](https://github.com/python/cpython) | Roughly **~48% compatible** with PyPI top 500. See [here](https://www.graalvm.org/python/compatibility/). |
| [Ruby](Ruby.md) |  | [TruffleRuby](https://github.com/oracle/truffleruby) | [MRI](https://rvm.io/interpreters/ruby) | Passes ~**97% of `ruby/spec`**. See [here](https://www.graalvm.org/latest/reference-manual/ruby/Compatibility/) |
diff --git a/Writerside/topics/Container-Images.md b/Writerside/topics/Container-Images.md
deleted file mode 100644
index a1ab57c..0000000
--- a/Writerside/topics/Container-Images.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Container Images
-
-Coming soon.
diff --git a/Writerside/topics/GettingStarted.md b/Writerside/topics/GettingStarted.md
index 43de58c..6440941 100644
--- a/Writerside/topics/GettingStarted.md
+++ b/Writerside/topics/GettingStarted.md
@@ -4,16 +4,15 @@ Run your first code samples with %product%
## Before you start
-You'll need an installed copy of %product%. Follow the [Installation](Installation.md) guide to obtain a copy of
+You'll need an installed copy of %product%. Follow the [](Installation.md) guide to obtain a copy of
%product%.
## Running some code
%product% can accept a raw string of code or a file to run in any supported language. Best attempts are made to detect
-the [primary language](Execution.md#primary-language) via the source file's extension (`.js` will load a JS VM, `.py` a
-Python VM, etc.).
+the primary language via the source file's extension (`.js` will load a JS VM, `.py` a Python VM, etc.).
-1. Let's run a snippet of [JavaScript](JavaScript.md)
+1. Let's run a snippet of [](JavaScript.md)
```bash
elide run --javascript -c "console.log('Hello!');"
@@ -23,7 +22,7 @@ Python VM, etc.).
Exiting session. Have a great day! π
```
-2. Now let's do the same thing, but with some [Python](Python.md)
+2. Now let's do the same thing, but with some [](Python.md)
```bash
elide run --python -c 'print("Hello!")'
@@ -33,7 +32,7 @@ Python VM, etc.).
Exiting session. Have a great day! π
```
-3. Now let's do the same thing, but with some [Ruby](Ruby.md)
+3. Now let's do the same thing, but with some [](Ruby.md)
```bash
elide run --ruby -c 'puts "Hello!"'
@@ -81,6 +80,5 @@ elide ruby
Installing %product%
Polyglot 101: Thinking in Multiple Languages
%product% Runtime: Language Guides
- %product% Framework: Using %product% from JVM
diff --git a/Writerside/topics/Index.md b/Writerside/topics/Index.md
index 81454a8..a6b654d 100644
--- a/Writerside/topics/Index.md
+++ b/Writerside/topics/Index.md
@@ -1,29 +1,102 @@
-# Welcome
+# README
-Welcome to the main [Elide](https://elide.dev) documentation site. Here you can find reference docs,
-[guides](Polyglot.md), [code samples](Framework-Samples.md), and more.
+[%product%](https://elide.dev) is a high-performance multi-language software runtime. Here you can find reference docs, guides,
+code samples, and more.
+## Highlights
+
+π **%product% is a runtime, like Node or Python.**
+
+You install it on your machine as a standalone binary. %product% is
+statically linked and has essentially zero runtime dependencies.
+
+You can install it on macOS or Linux with this one-liner:
+curl -sSL --tlsv1.2 elide.sh | bash -s -
-## %product% is in alpha
+πΊοΈ **%product% can run multiple languages.**
-Check out our alpha event launch video, which comes with sample code and demonstrates what %product% can do for your
-workflow
+JavaScript, TypeScript, WASM, and Python are built-in. Ruby, JVM (Java,
+Kotlin, Scala), and LLVM (Swift, C++, Rust) are on the way.
-
+
+// hello.ts
+import { sayHello } from "./my-app.py"
+
+// this line exists to show that this is typescript
+const msg: () => string = () => `${sayHello()} + TypeScript!`
+console.log(JSON.stringify({greeting: msg()}))
+
+
+
+# my-app.py
+from elide import polyglot
+
+@polyglot
+def say_hello():
+ """Render a greeting."""
+ return f"Hello from Python"
+
+
+
+elide ./hello.ts
+
+
+
+{"greeting": "Hello from Python + TypeScript!"}
+
+
+
+
+β« **%product% is extremely fast.**
+
+- βοΈ %product% runs your Python code **up to 3x faster than CPython**.
+- βοΈ %product% runs your TypeScript code **faster than Node can run JavaScript**.
+- βοΈ %product% runs your HTTP endpoints at up to **800k RPS**. That's [really fast](Performance.md).
-> %product% is a multi-language software runtime.
+> %product% is independently benchmarked by TechEmpower. [Latest results][2]
+{style="note"}
+
+
+
+π§ **%product% supports the APIs you already know and the tools you already love.**
+
+- βοΈ %product% is [WinterTC][3] compatible and passes [Test262][4]
+- βοΈ Like other JS runtimes, %product% **supports a large slice of the [Node API](Node-API.md)**.
+- βοΈ Works with **NPM and PyPI**, **CJS** and **ESM**.
+- βοΈ Insanely fast **dependency installation** (via [orogene][0] and [uv][1]).
+- βοΈ %product% supports embedded [SQLite](javascript-sqlite.md).
+
+
+
+π **%product% provides strong security boundaries and memory safety by default.**
+
+- βοΈ Written in memory-safe [Kotlin](https://kotlinlang.org) and [Rust](https://rustlang.org).
+- βοΈ Strong filesystem and environment isolation.
+- βοΈ Virtualized filesystem support (mount a tarball as your fs!).
+- βοΈ Extensively tested: over 10,000 unit & conformance tests, in addition to [Test262][4].
+
+## %product% is in beta
+
+Check out %product%'s launch video
+
+
- Installing %product%
- Getting Started
+ Installing %product%
+
Polyglot 101: Thinking in Multiple Languages
%product% Runtime: Language Guides
- %product% Framework: Using %product% from JVM
+
+[0]: https://orogene.dev/
+[1]: https://github.com/astral-sh/uv
+[2]: https://www.techempower.com/benchmarks/#hw=ph&test=plaintext§ion=data-r23:~:text=133-,elide,-4%2C089%2C078
+[3]: https://wintertc.org
+[4]: https://github.com/tc39/test262
diff --git a/Writerside/topics/Installation.md b/Writerside/topics/Installation.md
index 07db37c..14bda6a 100644
--- a/Writerside/topics/Installation.md
+++ b/Writerside/topics/Installation.md
@@ -79,23 +79,29 @@ switcher-label: OS
-
- Run %product%'s built-in self-tests:
-
- > elide selftest
-
-
- Notes about %product%'s self-test suite:
-
- - The first time you run `selftest`, it may take longer as native libraries are unpacked.
- - The self-test suite runs code in every supported language
- - %product% should warm up after a few runs of `selftest`
- - At full warm-up, all tests should complete in less than half a second (500ms)
-
-
-
+## Container Images
+
+%product% ships as container images, too. You can use %product% from Docker:
+
+```Console
+docker run --rm -it ghcr.io/elide-dev/elide
+```
+
+## Continuous Integration
+
+%product% ships a GitHub action at [`elide-dev/setup-elide`](https://github.com/elide-dev/setup-elide):
+
+```yaml
+ - name: "Setup: Elide"
+ uses: elide-dev/setup-elide@v1.0.1
+ with:
+ # any tag from the `elide-dev/releases` repo.
+ # omit a version to use the latest version.
+ version: 1.0.0-beta1
+```
+
## Troubleshooting
Follow the steps below if you're having trouble installing %product%:
@@ -116,50 +122,4 @@ Follow the steps below if you're having trouble installing %product%:
Note that on Linux you should see an ELF binary.
-
- Make sure you can run `elide --help` and `elide selftest` (see above)
-
-
-## Container Images
-
-%product% ships as container images, too. You can use %product% from Docker:
-
-```Console
-docker run --rm -it ghcr.io/elide-dev/elide
-```
-
-> Read more about container images provided by %product% on the [Container Images](Container-Images.md) page.
-
-## Known Limitations
-
-On certain OS or OS/arch pairs, %product% may not have full support for every feature. Consult the sections below for
-the operating system and architecture you want to use.
-
-### Limitations on macOS
-
-Certain features are not supported on macOS yet:
-
-- **G1 garbage collector is not supported**:
- On macOS, the [`serial`](https://www.graalvm.org/latest/reference-manual/native-image/optimizations-and-performance/MemoryManagement/#serial-garbage-collector)
- collector is used instead. This is fine for development but less suitable for production use. This limitation is
- expected to change eventually.
-
-- **Espresso (JVM) is not supported**:
- At this time there are no native libs available upstream for Espresso on macOS.
- Espresso ([Java on Truffle](https://www.graalvm.org/latest/reference-manual/java-on-truffle/)) is experimental and
- this limitation is expected to change eventually.
-
-## Framework Installation
-
-To use %product% as a JVM framework, see the [%product% Framework](Elide-Framework.md) docs. Generally speaking, library
-modules are installed as Maven dependencies.
-
-
-
- Getting Started with %product%
- Polyglot 101: Thinking in Multiple Languages
- %product% Runtime: Language Guides
- %product% Framework: Using %product% from JVM
-
-
diff --git a/Writerside/topics/JavaScript-Tooling.md b/Writerside/topics/JavaScript-Tooling.md
new file mode 100644
index 0000000..8ad0dcd
--- /dev/null
+++ b/Writerside/topics/JavaScript-Tooling.md
@@ -0,0 +1,3 @@
+# JavaScript Tools
+
+Coming soon!
diff --git a/Writerside/topics/JavaScript.md b/Writerside/topics/JavaScript.md
index e6cd16d..35ec0a1 100644
--- a/Writerside/topics/JavaScript.md
+++ b/Writerside/topics/JavaScript.md
@@ -17,16 +17,28 @@ export default function hello() {
%product% is an ECMA2023-compliant JavaScript engine. JS is the most mature language offered by %product%; execution is
powered by [GraalJs](https://github.com/oracle/graaljs), which ships with GraalVM.
-| Language | **JavaScript** |
-|----------|----------------------------------------------------|
-| Standard | ECMA2023 |
-| Maturity |  |
-| Engine | [GraalJs](https://github.com/oracle/graaljs) |
+| Language | **JavaScript** |
+|----------|----------------------------------------------------------------------------------------------------|
+| Standard | ECMA2024 |
+| Maturity |  |
+| Engine | [GraalJs](https://github.com/oracle/graaljs) |
+| Tools | [Orogene](https://orogene.dev) and [OXC](https://oxc.rs) (see [JS Tooling](JavaScript-Tooling.md)) |
-## Node API
+## Standards Conformance
+
+Elide conforms to several JavaScript standards:
+
+### WinterTC
+
+Elide is a [WinterTC](https://wintertc.org)-conforming runtime; Elide supports the [Minimum Common API][0] and several
+other WinterTC proposals or standards.
+
+See our [WinterTC Conformance](WinterTC.md) page for more information.
+
+### Node API
The [Node API](https://nodejs.org/api) constitutes the functions and modules provided by Node.js on top of V8; the Node
-API is really big, and covers everything from assertion testing to zlib compression.
+API is quite large and covers everything from assertion testing to zlib compression.
%product% aims for full Node API compatibility _where possible and applicable._ What does that mean? Well, %product% is
written on top of [GraalVM](https://graalvm.org) rather than V8, so immediately several Node API modules do not apply
@@ -40,18 +52,32 @@ and [Deno](https://deno.land) have shown, a great deal of software can run out o
## Performance
-Coming soon.
+Elide executes JavaScript with comparable performance to V8-based runtimes like Node and Deno, and JSC runtimes like
+Bun. Although GraalVM is a completely different core engine, it is well suited for CLI and server use, whereas V8 and
+JSC were architected with browsers in mind.
-## Stability
+As a result, Elide can deliver very strong performance in JavaScript, especially for server-side use cases.
-Coming soon.
+**[Elide is ranked highly on the TechEmpower benchmarks.][1]** At the time of this writing Elide holds the
+**133rd position** for plaintext responses. Node & Deno, FastAPI & Django (Python), and many other popular frameworks
+rank lower than this score.
-## Glossary
+| **Tech stack** | **TechEmpower Rank** | Typical RPS (πΌ is better) | Warm hit latency (π½ is better) | Cold start latency (π½ is better) |
+|--------------------|----------------------|----------------------------|---------------------------------|-----------------------------------|
+| Elide + JavaScript | 133 | ~800,000+ | ~3ms | ~30ms |
+| Deno | 184 | ~200,000 | ~70ms | ~15ms |
+| Node.js + Express | 364 | | ~550ms | ~10ms |
+| FastAPI + Python | 292 | | ~30ms | |
+| Django + Python | 388 | | ~65ms | |
+| Node.js + Next.js | 497 | ~3,000 | ~700ms | |
+
+> All scores are selected from the _first_ (highest performing) benchmark for a given framework. All numbers shown were
+> measured on modern `Linux x86-64`.
-A definition list or a glossary:
+## Glossary
JavaScript
-: It's a software language... barely.
+: It's a software language I suppose.
Node.js
: It's a JavaScript runtime which is designed primarily for server-side use. Node.js embeds Google's V8 JavaScript
@@ -71,3 +97,6 @@ years; for example, 'ECMA2023' includes JavaScript features up to the year 2023.
TypeScript
+
+[0]: https://min-common-api.proposal.wintertc.org/
+[1]: https://www.techempower.com/benchmarks/#hw=ph&test=plaintext§ion=data-r23
diff --git a/Writerside/topics/Language-Guides.topic b/Writerside/topics/Language-Guides.topic
index 923fc10..a86be8a 100644
--- a/Writerside/topics/Language-Guides.topic
+++ b/Writerside/topics/Language-Guides.topic
@@ -12,39 +12,26 @@
- Polyglot 101
+
Reference
Languages
- JavaScript, TypeScript, Node.js
- Python
- Ruby
+ JavaScript, TypeScript, Node.js
+
+
JVM, LLVM, WASM
- Building servers
- Kotlin + React SSR
- %product% + Express.js
- Static Assets
+ Conformance
+
+ %product% + WinterTC
-
- Architecture guides
-
-
-
-
-
- Related Software
- Micronaut
- Kotlin
- GraalVM
-
Legal & Licensing
Terms of Use
diff --git a/Writerside/topics/Node-API.md b/Writerside/topics/Node-API.md
index 32af285..f333f01 100644
--- a/Writerside/topics/Node-API.md
+++ b/Writerside/topics/Node-API.md
@@ -33,10 +33,10 @@ Opening issues for compatibility bugs helps us prioritize what to work on next.
: π΄ Not implemented.
[`node:buffer`](https://nodejs.org/api/buffer.html)
-: π΄ Not implemented.
+: π‘ Partial support.
[`node:child_process`](https://nodejs.org/api/child_process.html)
-: π΄ Not implemented.
+: π‘ Partial support.
[`node:cluster`](https://nodejs.org/api/cluster.html)
: π΄ Not implemented.
@@ -157,10 +157,10 @@ Opening issues for compatibility bugs helps us prioritize what to work on next.
The table below lists all globals implemented by Node.js and Bun's current compatibility status.
[`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController)
-: π‘ Polyfilled.
+: π’ Supported.
[`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)
-: π‘ Polyfilled.
+: π’ Supported.
[`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)
: π’ Supported.
@@ -169,13 +169,13 @@ The table below lists all globals implemented by Node.js and Bun's current compa
: π’ Supported.
[`ByteLengthQueuingStrategy`](https://developer.mozilla.org/en-US/docs/Web/API/ByteLengthQueuingStrategy)
-: π΄ Not implemented.
+: π’ Supported.
[`__dirname`](https://nodejs.org/api/globals.html#__dirname)
-: π΄ Not implemented.
+: π’ Supported in CJS contexts.
[`__filename`](https://nodejs.org/api/globals.html#__filename)
-: π΄ Not implemented.
+: π’ Supported in CJS contexts.
[`atob()`](https://developer.mozilla.org/en-US/docs/Web/API/atob)
: π’ Supported.
@@ -229,19 +229,19 @@ The table below lists all globals implemented by Node.js and Bun's current compa
: π’ Supported.
[`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/fetch)
-: π‘ Coming soon.
+: π’ Supported (experimental).
[`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
: π΄ Not implemented.
[`global`](https://nodejs.org/api/globals.html#global)
-: π’ Supported. This is an object containing all objects in the global namespace. It's rarely referenced directly, as its contents are available without an additional prefix, e.g. `__dirname` instead of `global.__dirname`.
+: π’ Aliases to `globalThis`.
[`globalThis`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis)
-: π’ Aliases to `global`.
+: π’ Supported. This is an object containing all objects in the global namespace. It's rarely referenced directly, as its contents are available without an additional prefix, e.g. `__dirname` instead of `global.__dirname`.
[`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers)
-: π΄ Not implemented.
+: π’ Supported.
[`MessageChannel`](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel)
: π΄ Not implemented.
@@ -274,40 +274,40 @@ The table below lists all globals implemented by Node.js and Bun's current compa
: π΄ Not implemented.
[`performance`](https://developer.mozilla.org/en-US/docs/Web/API/performance)
-: π΄ Not implemented.
+: π’ Supported.
[`process`](https://nodejs.org/api/process.html)
: π’ Supported.
[`queueMicrotask()`](https://developer.mozilla.org/en-US/docs/Web/API/queueMicrotask)
-: π΄ Not implemented.
+: π’ Supported.
[`ReadableByteStreamController`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableByteStreamController)
-: π΄ Not implemented.
+: π’ Supported.
[`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream)
: π’ Supported.
[`ReadableStreamBYOBReader`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader)
-: π΄ Not implemented.
+: π’ Supported.
[`ReadableStreamBYOBRequest`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBRequest)
-: π΄ Not implemented.
+: π’ Supported.
[`ReadableStreamDefaultController`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultController)
-: π΄ Not implemented.
+: π’ Supported.
[`ReadableStreamDefaultReader`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader)
-: π΄ Not implemented.
+: π’ Supported.
[`require()`](https://nodejs.org/api/globals.html#require)
: π’ Supported, including [`require.main`](https://nodejs.org/api/modules.html#requiremain), [`require.cache`](https://nodejs.org/api/modules.html#requirecache), [`require.resolve`](https://nodejs.org/api/modules.html#requireresolverequest-options)
[`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)
-: π΄ Not implemented.
+: π’ Supported.
[`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
-: π΄ Not implemented.
+: π’ Supported.
[`setImmediate()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate)
: π‘ Coming soon.
@@ -328,22 +328,22 @@ The table below lists all globals implemented by Node.js and Bun's current compa
: π΄ Not implemented.
[`TextDecoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder)
-: π‘ Polyfilled.
+: π’ Supported.
[`TextDecoderStream`](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoderStream)
: π΄ Not implemented.
[`TextEncoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder)
-: π‘ Polyfilled.
+: π’ Supported.
[`TextEncoderStream`](https://developer.mozilla.org/en-US/docs/Web/API/TextEncoderStream)
: π΄ Not implemented.
[`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream)
-: π΄ Not implemented.
+: π’ Supported.
[`TransformStreamDefaultController`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStreamDefaultController)
-: π΄ Not implemented.
+: π’ Supported.
[`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL)
: π’ Supported; approaches full compliance.
@@ -358,10 +358,10 @@ The table below lists all globals implemented by Node.js and Bun's current compa
: π’ Supported.
[`WritableStreamDefaultController`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultController)
-: π΄ Not implemented.
+: π’ Supported.
[`WritableStreamDefaultWriter`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStreamDefaultWriter)
-: π΄ Not implemented.
+: π’ Supported.
## Let us know what you need
diff --git a/Writerside/topics/Performance.md b/Writerside/topics/Performance.md
index 8740e1f..279145c 100644
--- a/Writerside/topics/Performance.md
+++ b/Writerside/topics/Performance.md
@@ -1,3 +1,57 @@
# Performance
-Start typing here...
+%product% is built on top of [GraalVM][0] and [Truffle][1]. This core difference leads to significant performance
+advantages, especially with regard to polyglot programming.
+
+%product% uses GraalVM in place of V8 or JSC (used by Node/Deno and Bun, respectively).
+
+## GraalVM + Truffle
+
+Instead of implementing just one language (V8 implements JavaScript, CPython implements Python, and so on), GraalVM and
+Truffle, together, constitute an abstract framework for authoring a high-performance JIT interpreter and compiler.
+
+Languages are simply dialects (Truffle) into this shared backend (Graal). %product% wires together the APIs necessary to
+make this into a luxurious experience.
+
+Some notes about why GraalVM + Truffle is so fast:
+
+- **Graal is a state-of-the-art optimizing compiler**, implementing advanced code generation and speculative
+ optimization techniques.
+
+- **Graal can see across language borders**, enabling inlining across languages and other compiler tricks. It's all
+ "just code" to the Graal compiler, whether it is Python, JavaScript, or something else.
+
+- **Graal can collect garbage across borders**, so pauses are minimized and cohesive.
+
+## Language Performance
+
+Notes about pure language execution performance.
+
+### JavaScript, TypeScript, WASM
+
+%product% is competitive with Node and Deno at execution of [](JavaScript.md), [](TypeScript.md), and
+[](WebAssembly.md).
+
+Pure JS/TS startup time for %product% can be very fast:
+
+| Runtime | Language | Case | Startup latency (cold) | Hit latency (hot server) |
+|---------|-----------------------|-------------|------------------------|--------------------------|
+| Bun | JavaScript/TypeScript | Hello World | ~6.5ms | ~1.5ms |
+| Node | JavaScript Only | Hello World | ~10ms | ~7ms |
+| Deno | JavaScript Only | Hello World | ~15ms | ~71ms |
+| Elide | JavaScript/TypeScript | Hello World | ~20ms | ~2ms |
+
+> Numbers are representative of expected performance on Linux/amd64 with a modern CPU. [TechEmpower][2] independently
+> benchmarks %product% (see benchmarks below).
+{style="note"}
+
+### Python
+
+%product% is competitive with modern optimizing Python runtimes like PyPy and often beats CPython. GraalPython provides
+[continuous benchmarks upstream](https://www.graalvm.org/python/docs/#python-performance).
+
+
+
+[0]: https://graalvm.org
+[1]: https://www.graalvm.org/latest/graalvm-as-a-platform/language-implementation-framework/
+[2]: https://www.techempower.com/benchmarks/#hw=ph&test=plaintext§ion=data-r23:~:text=0-,elide,-2.4%20ms
diff --git a/Writerside/topics/Pkl.md b/Writerside/topics/Pkl.md
index 2fc9b15..ad5cfe3 100644
--- a/Writerside/topics/Pkl.md
+++ b/Writerside/topics/Pkl.md
@@ -1,3 +1,68 @@
# Pkl
-Coming soon.
+Pkl is a typed configuration and data language by Apple.
+From [Pkl's User Manual](https://pkl-lang.org/main/current/index.html):
+
+> Pklβpronounced Pickleβis an embeddable configuration language which provides rich support for data templating and
+> validation. It can be used from the command line, integrated in a build pipeline, or embedded in a program. Pkl scales
+> from small to large, simple to complex, ad-hoc to repetitive configuration tasks.
+{style="note"}
+
+---
+
+## What Pkl is for
+
+Pkl allows developers to express structured configurations in a concise and typed dialect (that's Pkl), which can be
+rendered into things like JSON, YAML, TOML, and more.
+
+Pkl can also generate code in various languages to interface with these definitions.
+
+
+
+> Theo explains why Apple's Pkl language is awesome.
+
+### Why %product% supports Pkl
+
+Have you ever gotten totally lost writing Kubernetes YAMLs, or perhaps been forced to push to GitHub repeatedly until
+your CI jobs stop choking on syntax?
+
+Pkl is an end-to-end answer for this problem, and many others. By allowing developers to express data models, or even
+actual data, in a typed and concise meta-format, JSON and other formats become checkable, interchangeable, formattable,
+and gain many other desirable attributes.
+
+## Usage
+
+%product% integrates with Pkl in several ways:
+
+### Command-line Pkl
+
+The entirety of [Pkl's command line](https://pkl-lang.org/main/current/pkl-cli/index.html) is embedded and supported
+within %product%; you can find it at `%cli% pkl`:
+
+```text
+Usage: elide pkl [OPTIONS] COMMAND [ARGS]...
+
+Options:
+ -v, --version Show the version and exit
+ -h, --help Show this message and exit
+
+Commands:
+ eval Render pkl module(s)
+ repl Start a REPL session
+ test Run tests within the given module(s)
+ project Run commands related to projects
+ download-package Download package(s)
+ analyze Commands related to static analysis
+```
+
+For example, to render Pkl's own [CircleCI configuration](https://github.com/apple/pkl/blob/main/.circleci/config.pkl)
+into YAML:
+
+```console
+> elide pkl eval ./pkl/.circleci/config.pkl | head -n4
+
+# Generated from CircleCI.pkl. DO NOT EDIT.
+version: '2.1'
+orbs:
+ pr-approval: apple/pr-approval@0.1.0
+```
diff --git a/Writerside/topics/Python-Tooling.md b/Writerside/topics/Python-Tooling.md
new file mode 100644
index 0000000..9f4a9f9
--- /dev/null
+++ b/Writerside/topics/Python-Tooling.md
@@ -0,0 +1,3 @@
+# Python Tools
+
+Elide will soon embed some very cool tools for Python.
diff --git a/Writerside/topics/Python.md b/Writerside/topics/Python.md
index 13ca7f8..e655ae2 100644
--- a/Writerside/topics/Python.md
+++ b/Writerside/topics/Python.md
@@ -4,7 +4,7 @@
CPython.
```Console
-elide run --python ...
+elide ./script.py
```
```Python
def hello():
@@ -20,17 +20,51 @@ def hello():
| Standard | `3.11.x` |
| Maturity |  |
| Engine | [GraalPython](https://github.com/oracle/graalpython) |
+| Tools | [uv](https://astral.sh) (see [Python Tooling](Python-Tooling.md)) |
-## What is product/service/concept
+## Python Interop
-Provide some background and context, explain choices and alternatives.
+Developers can expose Python symbols (functions, classes, and values) to the [polyglot context](101-Polyglot-Context.md)
+using the `elide` built-in module:
-## Glossary
+
+from elide import bind, poly
-A definition list or a glossary:
+@bind
+def say_hello(name = "Python"):
+ """Render a hello greeting to the specified name."""
+ return f"Hello, {name}!"
-First Term
-: This is the definition of the first term.
+# use `poly` if you want to rename the symbol
+# (it's shorthand for 'polyglot')
+@poly(name = "goodbye")
+def say_goodbye(name = "Python"):
+ """Render a goodbye greeting to the specified name."""
+ return f"Goodbye, {name}!"
-Second Term
-: This is the definition of the second term.
+# you can return other functions and complex types!
+@bind
+def message(leaving = False):
+ """Return a message renderer based on the user's disposition."""
+ if leaving:
+ return say_goodbye
+ return say_hello
+
+
+**Now, from TypeScript, for example:**
+
+
+import { message } from "./my-python.py"
+
+console.log(JSON.stringify({hello: message()()}))
+console.log(JSON.stringify({goodbye: message(true)()}))
+
+
+
+elide ./my-index.ts
+
+
+
+{"hello": "Hello, Python!"}
+{"goodbye": "Goodbye, Python!"}
+
diff --git a/Writerside/topics/Ruby.md b/Writerside/topics/Ruby.md
index 6f1503a..144a573 100644
--- a/Writerside/topics/Ruby.md
+++ b/Writerside/topics/Ruby.md
@@ -2,6 +2,10 @@
%product% can execute your Ruby applications, while integrating with other languages like JavaScript and Python.
+> Elide ships with Ruby disabled by default. This restriction will be lifted in a future release. Please file an issue
+> [here](https://github.com/elide-dev/elide/issues/new) if Ruby support is a blocker for you.
+{style="warning"}
+
```Console
elide run --ruby ...
```
@@ -20,13 +24,3 @@ end
| Standard | [MRI](https://en.wikipedia.org/wiki/Ruby_MRI) `3.2` |
| Maturity |  |
| Engine | [TruffleRuby](https://github.com/oracle/truffleruby) |
-
-## Glossary
-
-A definition list or a glossary:
-
-First Term
-: This is the definition of the first term.
-
-Second Term
-: This is the definition of the second term.
diff --git a/Writerside/topics/TypeScript.md b/Writerside/topics/TypeScript.md
index e2f9db3..876b7ca 100644
--- a/Writerside/topics/TypeScript.md
+++ b/Writerside/topics/TypeScript.md
@@ -1,14 +1,17 @@
# TypeScript
-%product% can run TypeScript using the built-in [JavaScript engine](JavaScript.md).
+%product% can run [TypeScript][0] directly, without a build step; TypeScript is parsed natively via [OXC][1], and then
+executed via the built-in [JavaScript engine](JavaScript.md).
```Console
-elide run --typescript ...
+elide ./script.{ts,cts,mts}
```
-```Typescript
-export function hello(name: string): void {
- console.log(`Hello from TypeScript, ${name}!`)
-}
+```JavaScript
+// from typescript, javascript
+import { x, y, z } from "./script.{ts,cts,mts}"
+
+// cjs and esm are supported
+const { x, y, z } = require("./script.{ts,cts,mts}")
```
## Language Engine
@@ -17,20 +20,46 @@ export function hello(name: string): void {
| -------- | ---------------------------------------------------- |
| Language | **TypeScript** |
-| Standard | `5.4.5` |
-| Maturity |  |
-| Engine | [GraalJs](https://github.com/oracle/graaljs) |
+| Standard | `5.8.x` |
+| Maturity |  |
+| Engine | [GraalJs](https://github.com/oracle/graaljs) + [OXC](https://oxc.rs) |
+| Tools | [Orogene](https://orogene.dev) and [OXC](https://oxc.rs) (see [JS Tooling](JavaScript-Tooling.md)) |
+
+## How to use it
+
+1) **%product% can execute TypeScript directly.** Just pass a TypeScript file (CJS or ESM) to `elide` or `elide run`;
+ anytime the JavaScript engine is active, the TypeScript layer is active too.
+
+2) **%product% can import TypeScript directly.** When running JavaScript or other languages like Python, imports treat
+ TypeScript files as transparently-compiled JavaScript, and default to ESM. Importing a TypeScript file from JS
+ behaves identically as JS; importing from Python produces an object of exports.
+
+3) **%product% can transparently compile JSX and TSX.** *SX code is transparently compiled as it is interpreted by the
+ runtime, same as vanilla TypeScript.
+
+> JSX and TSX are not yet available in %product%'s command-line.
+{style="warn"}
+
+## How it works
+
+%product% parses TypeScript directly with [OXC][1]'s high-performance native parser, in Rust, and then interprets the
+code as normal on top of the JavaScript engine. Bindings that need to be present for features like JSX are injected into
+the JavaScript context transparently.
+
+This "type-stripping" pre-compiling step takes very little time: on the order of milliseconds, and is amortized over all
+runs for a given TypeScript source root, since %product% aggressively caches ASTs at the bytecode stage.
-## What is product/service/concept
+As a result, TypeScript execution is often nearly cost-free compared to regular JavaScript:
-Provide some background and context, explain choices and alternatives.
+
-## Glossary
+> Executing a non-trivial JavaScript sample vs. an identical TypeScript sample.
+{style="note"}
-A definition list or a glossary:
+
-First Term
-: This is the definition of the first term.
+> Parsing speed comparison from OXC's own benchmarks.
+{style="note"}
-Second Term
-: This is the definition of the second term.
+[0]: https://www.typescriptlang.org/
+[1]: https://oxc.rs
diff --git a/Writerside/topics/WebAssembly.md b/Writerside/topics/WebAssembly.md
new file mode 100644
index 0000000..630cfec
--- /dev/null
+++ b/Writerside/topics/WebAssembly.md
@@ -0,0 +1,3 @@
+# WebAssembly
+
+Coming soon!
diff --git a/Writerside/topics/WinterTC.md b/Writerside/topics/WinterTC.md
new file mode 100644
index 0000000..d52c2cd
--- /dev/null
+++ b/Writerside/topics/WinterTC.md
@@ -0,0 +1,35 @@
+# WinterTC
+
+[WinterTC](https://wintertc.org/) (AKA ECMA International Technical Committee 55) is an and open collaborative group
+committed to standardizing web-facing JavaScript runtimes; "web-interoperable" describes a package of new standards and
+definitions:
+
+- **[Minimum Common API][0]**: Defines a standard set of "minimum common APIs" which all web-interoperable runtimes
+ should support.
+
+- **[Sockets API](https://sockets-api.proposal.wintertc.org/)**: Defines APIs for communicating over custom TCP sockets
+ from non-browser JavaScript applications.
+
+- **[CLI API](https://github.com/wintercg/proposal-cli-api)**: Defines standards for accessing system environment,
+ invocation arguments, and other CLI-related APIs.
+
+
+## Elide + WinterTC
+
+Elide aims to conform to most WITC standards:
+
+| Standard | Links | Standards Body | Description | Status |
+|------------------------|----------------------|-----------------|----------------------------------------------|--------------|
+| **Minimum Common API** | [Spec][0], [Repo][1] | WinterTC (TC55) | Minimum APIs for web-interoperable runtimes | β
Conforms |
+| CLI API | [Repo][2] | WinterTC (TC55) | Uniform CLI-related APIs for non-browsers | β¨ On the way |
+| Sockets API | [Spec][3], [Repo][4] | WinterTC (TC55) | Custom TCP sockets from non-browser contexts | β¨ Someday |
+| Fetch API | [Spec][5], [Repo][6] | WHATWG | Standard WhatWG Fetch API, from non-browsers | β
Conforms |
+| Web Crypto Streams | | WHATWG | Streaming options for Web Crypto APIs | β¨ Someday |
+
+[0]: https://min-common-api.proposal.wintertc.org/
+[1]: https://github.com/wintercg/proposal-minimum-common-api
+[2]: https://github.com/wintercg/proposal-cli-api
+[3]: https://sockets-api.proposal.wintertc.org/
+[4]: https://github.com/wintercg/proposal-sockets-api
+[5]: https://fetch.spec.whatwg.org/
+[6]: https://github.com/whatwg/fetch
diff --git a/Writerside/topics/humans.md b/Writerside/topics/humans.md
new file mode 100644
index 0000000..3aacd0c
--- /dev/null
+++ b/Writerside/topics/humans.md
@@ -0,0 +1,22 @@
+# Acknowledgements
+
+%product% is the result of many smart people's hard work, over many thousands of person-hours, over many years; and this
+doesn't even count contributors to %product% itself.
+
+%product%'s [contributors](Contributors.md) would like to thank the following individuals and organizations, each of
+whom, knowingly or unknowingly, helped shape %product% into what it is now. This list is repeated in %product%'s
+distribution tarball, in `ACKNOLEDGEMENTS.txt`:
+
+- GraalVM and Java teams at Oracle and Oracle Labs
+- Sam Lambert, CEO of Planetscale, for a lot of advice and guidance
+- Vic Gundotra, former EVP at Google, for his advice and encouragement
+- Justine Tunney, author of Cosmo, APE, and Llamafile, for her support and sheer brilliance
+- Mike Hearn, Christian Humer, and Fabio Niephaus at Oracle Labs
+- Kat Marchan, the author of Orogene
+- Charlie Marsh, the author of uv and ruff
+- Andrey Breslav, creator of Kotlin, for his advice, guidance, and encouragement
+- Naman Goel, the author of StyleX, for his guidance in all aspects
+- Theo of @t3.gg fame, for a lot of guidance and advice about JS runtimes
+- Norman Maurer for his amazing work on Netty for many years
+- Graeme Rocher, the creator of Grails and Micronaut
+- E.J. Technologies, who contributed a license for JProfiler
diff --git a/Writerside/topics/node-assert.md b/Writerside/topics/node-assert.md
index 0a87296..742436a 100644
--- a/Writerside/topics/node-assert.md
+++ b/Writerside/topics/node-assert.md
@@ -33,7 +33,7 @@ API support and documentation for the `node:assert` module.
## `assert` | Methods
[`assert(value[, message])`](https://nodejs.org/api/assert.html#assertvalue-message)
-: π‘ Implemented; awaiting bugfix for default module exports. Use `assert.ok()` in the meantime.
+: π’ Supported.
[`assert.deepEqual(actual, expected[, message])`](https://nodejs.org/api/assert.html#assertdeepequalactual-expected-message)
: π΄ Not yet implemented.
diff --git a/Writerside/topics/node-child-process.md b/Writerside/topics/node-child-process.md
index 9fbe53b..6382dc2 100644
--- a/Writerside/topics/node-child-process.md
+++ b/Writerside/topics/node-child-process.md
@@ -1,20 +1,135 @@
+---
+switcher-label: Imports
+---
+
# Child Process
API support and documentation for the `node:child_process` module.
-
-
- import child_process from "node:child_process"
-
-
- const child_process = require("node:child_process")
-
-
+
+ Module: node:child_process
+ Support: 
+ Docs: Node.js Child Process Docs
+
+
+import proc from "node:child_process"
+const proc = require("node:child_process")
+
+## Modules
+
+| Status | Module | Docs |
+|-------------------------|-------------------------------|-------------------------------------------------------------------------------|
+| π‘ Partially supported. | `node:child_process` | [Node.js Child Process](https://nodejs.org/api/child_process.html) |
+
+## `child_process` | Classes
+
+[`ChildProcess`](https://nodejs.org/api/child_process.html#class-childprocess)
+: π‘ Partially supported.
+
+### `ChildProcess` - Events
+
+[`'close'`](https://nodejs.org/api/child_process.html#event-close)
+: π΄ Not implemented.
+
+[`'disconnect'`](https://nodejs.org/api/child_process.html#event-disconnect)
+: π΄ Not implemented.
+
+[`'error'`](https://nodejs.org/api/child_process.html#event-error)
+: π΄ Not implemented.
+
+[`'exit'`](https://nodejs.org/api/child_process.html#event-exit)
+: π΄ Not implemented.
+
+[`'message'`](https://nodejs.org/api/child_process.html#event-message)
+: π΄ Not implemented.
+
+[`'spawn'`](https://nodejs.org/api/child_process.html#event-spawn)
+: π΄ Not implemented.
+
+### `ChildProcess` - Properties
+
+[`channel`](https://nodejs.org/api/child_process.html#subprocesschannel)
+: π΄ Not implemented.
+
+[`connected`](https://nodejs.org/api/child_process.html#subprocessconnected)
+: π’ Supported.
+
+[`exitCode`](https://nodejs.org/api/child_process.html#subprocessexitcode)
+: π’ Supported.
+
+[`killed`](https://nodejs.org/api/child_process.html#subprocesskilled)
+: π΄ Not implemented.
+
+[`pid`](https://nodejs.org/api/child_process.html#subprocesspid)
+: π’ Supported.
+
+[`signalCode`](https://nodejs.org/api/child_process.html#subprocesssignalcode)
+: π΄ Not implemented.
+
+[`spawnargs`](https://nodejs.org/api/child_process.html#subprocessspawnargs)
+: π΄ Not implemented.
+
+[`spawnfile`](https://nodejs.org/api/child_process.html#subprocessspawnfile)
+: π΄ Not implemented.
+
+[`stdin`](https://nodejs.org/api/child_process.html#subprocesssstdin)
+: π’ Supported.
+
+[`stderr`](https://nodejs.org/api/child_process.html#subprocessstderr)
+: π’ Supported.
+
+[`stdio`](https://nodejs.org/api/child_process.html#subprocessstdio)
+: π’ Supported.
+
+[`stdout`](https://nodejs.org/api/child_process.html#subprocessstdout)
+: π’ Supported.
+
+### `ChildProcess` - Methods
+
+[`disconnect()`](https://nodejs.org/api/child_process.html#subprocessdisconnect)
+: π΄ Not implemented.
+
+[`kill([signal])`](https://nodejs.org/api/child_process.html#subprocesskillsignal)
+: π’ Supported.
+
+[`[Symbol.dispose]()`](https://nodejs.org/api/child_process.html#subprocesssymboldispose)
+: π΄ Not implemented.
+
+[`ref()`](https://nodejs.org/api/child_process.html#subprocessref)
+: π΄ Not implemented.
+
+[`subprocess.send(message[, sendHandle[, options]][, callback])`](https://nodejs.org/api/child_process.html#subprocesssendmessage-sendhandle-options-callback)
+: π΄ Not implemented.
+
+[`unref()`](https://nodejs.org/api/child_process.html#subprocessunref)
+: π΄ Not implemented.
+
+## `child_process` | Methods
+
+API support is available for spawning child processes **synchronously** or **asynchronously**; refer to the
+corresponding section below for your desired call style.
+
+### Process Creation (Asynchronous)
+
+[`exec(command[, options][, callback])`](https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback)
+: π’ Supported.
+
+[`execFile(file[, args][, options][, callback])`](https://nodejs.org/api/child_process.html#child_processexecfilefile-args-options-callback)
+: π’ Supported.
+
+[`fork(modulePath[, args][, options])`](https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options)
+: π΄ Not implemented.
+
+[`spawn(command[, args][, options])`](https://nodejs.org/api/child_process.html#child_processspawncommand-args-options)
+: π’ Supported.
+
+### Process Creation (Synchronous)
-| Specification | Module | Support | Documentation |
-|---------------|----------------------|----------------------------------------------------------------------------|-------------------------------------------------------------------------|
-| Node.js API | `node:child_process` |  | [Node.js Child Process Docs](https://nodejs.org/api/child_process.html) |
+[`execFileSync(file[, args][, options])`](https://nodejs.org/api/child_process.html#child_processexecfilesyncfile-args-options)
+: π’ Supported.
-## Methods
+[`execSync(command[, options])`](https://nodejs.org/api/child_process.html#child_processexecsynccommand-options)
+: π’ Supported.
-Coming soon.
+[`spawnSync(command[, args][, options])`](https://nodejs.org/api/child_process.html#child_processspawnsynccommand-args-options)
+: π’ Supported.
diff --git a/Writerside/topics/node-events.md b/Writerside/topics/node-events.md
index cac0a22..6e7a8be 100644
--- a/Writerside/topics/node-events.md
+++ b/Writerside/topics/node-events.md
@@ -18,3 +18,17 @@ API support and documentation for the `node:events` module.
## Methods
Coming soon.
+
+## `events` | Classes
+
+[`Event`](https://nodejs.org/docs/latest/api/events.html#class-event)
+: π‘ Partially supported.
+
+[`EventEmitter`](https://nodejs.org/docs/latest/api/events.html#class-eventemitter)
+: π‘ Partially supported.
+
+[`EventTarget`](https://nodejs.org/docs/latest/api/events.html#class-eventtarget)
+: π‘ Partially supported.
+
+[`CustomEvent`](https://nodejs.org/docs/latest/api/events.html#class-customevent)
+: π’ Supported.
diff --git a/Writerside/topics/node-zlib.md b/Writerside/topics/node-zlib.md
index 7ec649b..75b9599 100644
--- a/Writerside/topics/node-zlib.md
+++ b/Writerside/topics/node-zlib.md
@@ -1,159 +1,160 @@
----
-switcher-label: Imports
----
-
-# Zlib
-
-API support and documentation for the `node:zlib`.
-
-
- Modules: node:zlib
- Support: 
- Docs: Node.js Zlib Docs
-
-
-import zlib from "node:zlib"
-const zlib = require("node:zlib")
-
-## Modules
-
-| Status | Module | Docs |
-|-------------------------|--------------------|------------------------------------------|
-| π‘ Partially supported. | `node:zlib` | [Zlib](https://nodejs.org/api/zlib.html) |
-
-## `zlib` | Classes
-
-[`Options`](https://nodejs.org/docs/latest/api/zlib.html#class-options)
-: π‘ Supported, but options are not applied yet.
-
-[`BrotliOptions`](https://nodejs.org/docs/latest/api/zlib.html#class-brotlioptions)
-: π‘ Supported, but options are not applied yet.
-
-[`BrotliCompress`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibbrotlicompress)
-: π’ Supported.
-
-[`BrotliDecompress`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibbrotlidecompress)
-: π’ Supported.
-
-[`Deflate`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibdeflate)
-: π’ Supported.
-
-[`DeflateRaw`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibdeflateraw)
-: π΄ Not implemented.
-
-[`Gunzip`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibgunzip)
-: π’ Supported.
-
-[`Gzip`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibgzip)
-: π’ Supported.
-
-[`Inflate`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibinflate)
-: π’ Supported.
-
-[`InflateRaw`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibinflateraw)
-: π΄ Not implemented.
-
-[`Unzip`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibunzip)
-: π’ Supported.
-
-[`ZlibBase`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibzlibbase)
-: π΄ Not implemented.
-
-## `zlib` | Properties
-
-[`constants`](https://nodejs.org/docs/latest/api/zlib.html#zlibconstants)
-: π’ Supported.
-
-## `zlib` | Methods
-
-[`crc32(data[, value])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcrc32data-value)
-: π’ Supported.
-
-### Streams
-
-These methods create streams which compress or decompress data.
-
-[`createBrotliCompress([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatebrotlicompressoptions)
-: π’ Supported.
-
-[`createBrotliDecompress([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatebrotlidecompressoptions)
-: π’ Supported.
-
-[`createDeflate([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatedeflateoptions)
-: π’ Supported.
-
-[`createDeflateRaw([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatedeflaterawoptions)
-: π΄ Not implemented.
-
-[`createGunzip([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreategunzipoptions)
-: π’ Supported.
-
-[`createGzip([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreategzipoptions)
-: π’ Supported.
-
-[`createInflate([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreateinflateoptions)
-: π’ Supported.
-
-[`createInflateRaw([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreateinflaterawoptions)
-: π΄ Not implemented.
-
-[`createUnzip([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreateunzipoptions)
-: π’ Supported.
-
-### Convenience
-
-These methods compress or decompress data.
-
-[`brotliCompress(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlicompressbuffer-options-callback)
-: π’ Supported.
-
-[`brotliCompressSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlicompresssyncbuffer-options)
-: π’ Supported.
-
-[`brotliDecompress(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlidecompressbuffer-options-callback)
-: π’ Supported.
-
-[`brotliDecompressSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlidecompresssyncbuffer-options)
-: π’ Supported.
-
-[`deflate(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflatebuffer-options-callback)
-: π’ Supported.
-
-[`deflateSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflatesyncbuffer-options)
-: π’ Supported.
-
-[`deflateRaw(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflaterawbuffer-options-callback)
-: π΄ Not implemented.
-
-[`deflateRawSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflaterawsyncbuffer-options)
-: π΄ Not implemented.
-
-[`gunzip(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibgunzipbuffer-options-callback)
-: π’ Supported.
-
-[`gunzipSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibgunzipsyncbuffer-options)
-: π’ Supported.
-
-[`gzip(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibgzipbuffer-options-callback)
-: π’ Supported.
-
-[`gzipSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibgzipsyncbuffer-options)
-: π’ Supported.
-
-[`inflate(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflatebuffer-options-callback)
-: π’ Supported.
-
-[`inflateSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflatesyncbuffer-options)
-: π’ Supported.
-
-[`inflateRaw(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflaterawbuffer-options-callback)
-: π΄ Not implemented.
-
-[`inflateRawSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflaterawsyncbuffer-options)
-: π΄ Not implemented.
-
-[`unzip(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibunzipbuffer-options-callback)
-: π’ Supported.
-
-[`unzipSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibunzipsyncbuffer-options)
-: π’ Supported.
+---
+switcher-label: Imports
+---
+
+# Zlib
+
+API support and documentation for the `node:zlib`.
+
+
+ Modules: node:zlib
+ Support: 
+ Docs: Node.js Zlib Docs
+
+
+import zlib from "node:zlib"
+const zlib = require("node:zlib")
+
+## Modules
+
+| Status | Module | Docs |
+|-------------------------|--------------------|------------------------------------------|
+| π‘ Partially supported. | `node:zlib` | [Zlib](https://nodejs.org/api/zlib.html) |
+
+## `zlib` | Classes
+
+[`Options`](https://nodejs.org/docs/latest/api/zlib.html#class-options)
+: π‘ Supported, but options are not applied yet.
+
+[`BrotliOptions`](https://nodejs.org/docs/latest/api/zlib.html#class-brotlioptions)
+: π‘ Supported, but options are not applied yet.
+
+[`BrotliCompress`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibbrotlicompress)
+: π’ Supported.
+
+[`BrotliDecompress`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibbrotlidecompress)
+: π’ Supported.
+
+[`Deflate`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibdeflate)
+: π’ Supported.
+
+[`DeflateRaw`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibdeflateraw)
+: π΄ Not implemented.
+
+[`Gunzip`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibgunzip)
+: π’ Supported.
+
+[`Gzip`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibgzip)
+: π’ Supported.
+
+[`Inflate`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibinflate)
+: π’ Supported.
+
+[`InflateRaw`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibinflateraw)
+: π΄ Not implemented.
+
+[`Unzip`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibunzip)
+: π’ Supported.
+
+[`ZlibBase`](https://nodejs.org/docs/latest/api/zlib.html#class-zlibzlibbase)
+: π΄ Not implemented.
+
+## `zlib` | Properties
+
+[`constants`](https://nodejs.org/docs/latest/api/zlib.html#zlibconstants)
+: π’ Supported.
+
+## `zlib` | Methods
+
+[`crc32(data[, value])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcrc32data-value)
+: π’ Supported.
+
+### Streams
+
+These methods create streams which compress or decompress data.
+
+[`createBrotliCompress([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatebrotlicompressoptions)
+: π’ Supported.
+
+[`createBrotliDecompress([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatebrotlidecompressoptions)
+: π’ Supported.
+
+[`createDeflate([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatedeflateoptions)
+: π’ Supported.
+
+[`createDeflateRaw([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreatedeflaterawoptions)
+: π΄ Not implemented.
+
+[`createGunzip([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreategunzipoptions)
+: π’ Supported.
+
+[`createGzip([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreategzipoptions)
+: π’ Supported.
+
+[`createInflate([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreateinflateoptions)
+: π’ Supported.
+
+[`createInflateRaw([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreateinflaterawoptions)
+: π΄ Not implemented.
+
+[`createUnzip([options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibcreateunzipoptions)
+: π’ Supported.
+
+### Convenience
+
+These methods compress or decompress data.
+
+[`brotliCompress(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlicompressbuffer-options-callback)
+: π’ Supported.
+
+[`brotliCompressSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlicompresssyncbuffer-options)
+: π’ Supported.
+
+[`brotliDecompress(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlidecompressbuffer-options-callback)
+: π’ Supported.
+
+[`brotliDecompressSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibbrotlidecompresssyncbuffer-options)
+: π’ Supported.
+
+[`deflate(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflatebuffer-options-callback)
+: π’ Supported.
+
+[`deflateSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflatesyncbuffer-options)
+: π’ Supported.
+
+[`deflateRaw(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflaterawbuffer-options-callback)
+: π΄ Not implemented.
+
+[`deflateRawSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibdeflaterawsyncbuffer-options)
+: π΄ Not implemented.
+
+[`gunzip(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibgunzipbuffer-options-callback)
+: π’ Supported.
+
+[`gunzipSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibgunzipsyncbuffer-options)
+: π’ Supported.
+
+[`gzip(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibgzipbuffer-options-callback)
+: π’ Supported.
+
+[`gzipSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibgzipsyncbuffer-options)
+: π’ Supported.
+
+[`inflate(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflatebuffer-options-callback)
+: π’ Supported.
+
+[`inflateSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflatesyncbuffer-options)
+: π’ Supported.
+
+[`inflateRaw(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflaterawbuffer-options-callback)
+: π΄ Not implemented.
+
+[`inflateRawSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibinflaterawsyncbuffer-options)
+: π΄ Not implemented.
+
+[`unzip(buffer[, options], callback)`](https://nodejs.org/docs/latest/api/zlib.html#zlibunzipbuffer-options-callback)
+: π’ Supported.
+
+[`unzipSync(buffer[, options])`](https://nodejs.org/docs/latest/api/zlib.html#zlibunzipsyncbuffer-options)
+: π’ Supported.
+
diff --git a/Writerside/v.list b/Writerside/v.list
index 98969e7..f97330b 100644
--- a/Writerside/v.list
+++ b/Writerside/v.list
@@ -2,7 +2,8 @@
-
+
+
diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg
index 198478c..1d49313 100644
--- a/Writerside/writerside.cfg
+++ b/Writerside/writerside.cfg
@@ -7,5 +7,5 @@
-
+