diff --git a/docs/references/api/_category_.json b/docs/references/api/_category_.json
new file mode 100644
index 00000000..3e5bd0ad
--- /dev/null
+++ b/docs/references/api/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "API",
+ "position": 0,
+ "link": {
+ "type": "generated-index",
+ "description": "This page lists the Lua APIs available to Evo-based applications"
+ }
+}
diff --git a/docs/references/api/assertions.md b/docs/references/api/assertions.md
new file mode 100644
index 00000000..d2286d89
--- /dev/null
+++ b/docs/references/api/assertions.md
@@ -0,0 +1,188 @@
+# assertions
+
+Builtin assertion library designed for more convenient unit testing
+
+## Status
+
+
+
+## Availability
+
+This module is preloaded. You can simply `require` it:
+
+```lua
+local assertions = require("assertions")
+```
+
+## Functions
+
+### assertCallsFunction
+
+Raises an error if the function passed doesn't call the target function. The function has to be executed in order to determine this fact.
+
+
+
+
+
+
+
+
+### assertDoesNotThrow
+
+Raises an error if the function passed throws (raises an error) itself. The purpose of this is to generate standardized error messages.
+
+
+
+
+
+
+
+### assertEquals
+
+Raises an error if the two passed values are not identical. This is a catch-all handler that uses the more specialized assertions internally.
+
+
+
+
+
+
+
+
+### assertEqualBooleans
+
+Raises an error if the two passed values do not represent the same `boolean` value.
+
+
+
+
+
+
+
+
+### assertEqualBytes
+
+Raises an error if the two passed values do not represent the same `cdata` bytes. Use [assertEqualPointers](#assertequalpointers) to compare only the pointer.
+
+
+
+
+
+
+
+
+### assertEqualFunctions
+
+Raises an error if the two passed values do not represent the same `function` value.
+
+
+
+
+
+
+
+
+### assertEqualNumbers
+
+Raises an error if the two passed values do not represent the same `number` value.
+
+
+
+
+
+
+
+
+### assertEqualPointers
+
+Raises an error if the two passed values do not represent the same `cdata` pointer. Use [assertEqualBytes](#assertequalbytes) to compare them by value.
+
+
+
+
+
+
+
+
+### assertEqualStrings
+
+Raises an error if the two passed values do not represent the same `string` value. Supports LuaJIT string buffers and `cdata` strings.
+
+
+
+
+
+
+
+
+### assertEqualTables
+
+Raises an error if the two passed values do not represent the same `table` value. Supports deep table comparisons.
+
+
+
+
+
+
+
+
+### assertFailure
+
+Raises an error if the function passed does not return a "failure" type (`nil` and an error message).
+
+
+
+
+
+
+
+
+### assertFalse
+
+Raises an error if the value passed is not exactly `false`.
+
+
+
+
+
+
+
+### assertNil
+
+Raises an error if the value passed is not exactly `nil`.
+
+
+
+
+
+
+
+### assertThrows
+
+Raises an error if the function passed does not itself raise an error (with the expected error message).
+
+
+
+
+
+
+
+
+### assertTrue
+
+Raises an error if the value passed is not exactly `true`.
+
+
+
+
+
+
+
+### export
+
+Exports all of the assertions in this module to the global Lua environment. Use this if you don't want to `require` them in every test.
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docs/references/api/extensions.md b/docs/references/api/extensions.md
new file mode 100644
index 00000000..65b3bb48
--- /dev/null
+++ b/docs/references/api/extensions.md
@@ -0,0 +1,22 @@
+---
+sidebar_position: 10
+---
+
+# Extensions
+
+Unofficial extensions to the Lua standard libraries
+
+## Debug Library
+
+### debug.dump
+
+Prints a human-readable string representation of the given object. Mostly useful for dumping tables, but unsuitable for serialization purposes. The output format cannot be considered stable. Currently uses [inspect](/docs/references/api/inspect) internally, though this may change in the future.
+
+
+
+
+
+
+
+
+
diff --git a/docs/references/api/globals.md b/docs/references/api/globals.md
new file mode 100644
index 00000000..0511ddb7
--- /dev/null
+++ b/docs/references/api/globals.md
@@ -0,0 +1,33 @@
+---
+sidebar_position: 20
+---
+
+# Globals
+
+Convenient shorthands for some frequently-used functionality
+
+## Functions
+
+### dump
+
+Alias for [debug.dump(...)](/docs/references/api/extensions#debugdump).
+
+### format
+
+Alias for `string.format(...)`.
+
+### printf
+
+Alias for `print(string.format(...))`.
+
+## Tables
+
+### buffer
+
+Alias for `string.buffer` (LuaJIT builtin).
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docs/references/api/inspect.md b/docs/references/api/inspect.md
new file mode 100644
index 00000000..df820aad
--- /dev/null
+++ b/docs/references/api/inspect.md
@@ -0,0 +1,25 @@
+# inspect
+
+Human-readable representation of Lua tables
+
+## Status
+
+
+
+## Availability
+
+This module is preloaded. You can simply `require` it:
+
+```lua
+local inspect = require("inspect")
+```
+
+## Functions
+
+The API documentation can be found here: [https://github.com/kikito/inspect.lua](https://github.com/kikito/inspect.lua)
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docs/references/api/transform.md b/docs/references/api/transform.md
new file mode 100644
index 00000000..3a121949
--- /dev/null
+++ b/docs/references/api/transform.md
@@ -0,0 +1,213 @@
+# transform
+
+Text transformation library for generating colored console output
+
+## Status
+
+
+
+## Availability
+
+This module is preloaded. You can simply `require` it:
+
+```lua
+local transform = require("transform")
+```
+
+## Functions
+
+### black
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered black in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### blackBackground
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered on a black background in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### bold
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered with bold font in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### brightRed
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered bright red in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### brightRedBackground
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered on a bright red background in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### cyan
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered cyan in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### enable
+
+Globally enables text transformations. This operation is not applied retroactively. Text transformations are enabled by default.
+
+### disable
+
+Globally disables text transformations. This operation is not applied retroactively. Use this if your terminal can't display colors.
+
+### gray
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered gray in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### green
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered green in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### greenBackground
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered on a green background in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### red
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered dark red in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### underline
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered underlined in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### yellow
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered yellow in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### white
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered white in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+### whiteBackground
+
+Returns the input string wrapped in [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) so that it is rendered on a white background in supporting terminals.
+
+
+
+
+
+
+
+
+
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docs/references/api/uv.md b/docs/references/api/uv.md
new file mode 100644
index 00000000..aab2098c
--- /dev/null
+++ b/docs/references/api/uv.md
@@ -0,0 +1,25 @@
+# uv
+
+Lua bindings for the embedded libuv library
+
+## Status
+
+
+
+## Availability
+
+This module is preloaded. You can simply `require` it:
+
+```lua
+local uv = require("uv")
+```
+
+## Functions
+
+The API documentation can be found here: [https://github.com/luvit/luv/blob/master/docs.md](https://github.com/luvit/luv/blob/master/docs.md)
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docs/references/api/validation.md b/docs/references/api/validation.md
new file mode 100644
index 00000000..c89d66c5
--- /dev/null
+++ b/docs/references/api/validation.md
@@ -0,0 +1,111 @@
+# validation
+
+Tiny utility library for validating function arguments
+
+## Status
+
+
+
+## Availability
+
+This module is preloaded. You can simply `require` it:
+
+```lua
+local validation = require("validation")
+```
+
+## Functions
+
+### validateBoolean
+
+Raises an error if the given argument is not a `boolean` value.
+
+
+
+
+
+
+
+
+### validateFunction
+
+Raises an error if the given argument is not a `function` value.
+
+
+
+
+
+
+
+
+### validateNumber
+
+Raises an error if the given argument is not a `number` value.
+
+
+
+
+
+
+
+
+### validateString
+
+Raises an error if the given argument is not a `string` value.
+
+
+
+
+
+
+
+
+### validateStruct
+
+Raises an error if the given argument is not a `cdata` value. The exact `ctype` is not checked in any way.
+
+
+
+
+
+
+
+
+### validateTable
+
+Raises an error if the given argument is not a `table` value.
+
+
+
+
+
+
+
+
+### validateThread
+
+Raises an error if the given argument is not a `thread` value (coroutine).
+
+
+
+
+
+
+
+
+### validateUserdata
+
+Raises an error if the given argument is not a `userdata` value.
+
+
+
+
+
+
+
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docs/references/api/webview.md b/docs/references/api/webview.md
new file mode 100644
index 00000000..5cad79df
--- /dev/null
+++ b/docs/references/api/webview.md
@@ -0,0 +1,195 @@
+# webview
+
+LuaJIT bindings for the embedded webview library
+
+
+
+## Status
+
+
+
+## Availability
+
+This module is preloaded. You can simply `require` it:
+
+```lua
+local webview = require("webview")
+```
+
+## Fields
+
+### cdefs
+
+A string representing the C type definitions that were used to load the FFI bindings. Do not attempt to `ffi.load` them manually.
+
+### bindings
+
+A pointer to the statically-loaded exports table that exposes the bound functions to Lua. For more details, see [this note](/docs/background-information/luajit/static-ffi-bindings).
+
+## Functions
+
+### initialize
+
+Initializes the bindings by loading the [C type definitions](#cdefs). Automatically called by the runtime when it sets up the Lua environment
+
+## Native Bindings
+
+All C functions listed here can be accessed via `webview.bindings` and must be called with the appropriate `cdata` values.
+
+### bind
+
+```c
+// Binds a native C callback so that it will appear under the given name as a
+// global JavaScript function. Internally it uses webview_init(). Callback
+// receives a request string and a user-provided argument pointer. Request
+// string is a JSON array of all the arguments passed to the JavaScript
+// function.
+WEBVIEW_API void webview_bind(webview_t w, const char *name,
+ void (*fn)(const char *seq, const char *req,
+ void *arg),
+ void *arg);
+```
+
+### create
+
+```c
+// Creates a new webview instance. If debug is non-zero - developer tools will
+// be enabled (if the platform supports them). Window parameter can be a
+// pointer to the native window handle. If it's non-null - then child WebView
+// is embedded into the given parent window. Otherwise a new window is created.
+// Depending on the platform, a GtkWindow, NSWindow or HWND pointer can be
+// passed here. Returns null on failure. Creation can fail for various reasons
+// such as when required runtime dependencies are missing or when window creation
+// fails.
+
+WEBVIEW_API webview_t webview_create(int debug, void *window);
+```
+
+### destroy
+
+```c
+// Destroys a webview and closes the native window.
+WEBVIEW_API void webview_destroy(webview_t w);
+```
+
+### dispatch
+
+```c
+// Posts a function to be executed on the main thread. You normally do not need
+// to call this function, unless you want to tweak the native window.
+WEBVIEW_API void
+webview_dispatch(webview_t w, void (*fn)(webview_t w, void *arg), void *arg);
+```
+
+### eval
+
+```c
+// Evaluates arbitrary JavaScript code. Evaluation happens asynchronously, also
+// the result of the expression is ignored. Use RPC bindings if you want to
+// receive notifications about the results of the evaluation.
+WEBVIEW_API void webview_eval(webview_t w, const char *js);
+```
+
+### get_window
+
+```c
+// Returns a native window handle pointer. When using GTK backend the pointer
+// is GtkWindow pointer, when using Cocoa backend the pointer is NSWindow
+// pointer, when using Win32 backend the pointer is HWND pointer.
+WEBVIEW_API void *webview_get_window(webview_t w);
+```
+
+### init
+
+```c
+// Injects JavaScript code at the initialization of the new page. Every time
+// the webview will open a the new page - this initialization code will be
+// executed. It is guaranteed that code is executed before window.onload.
+WEBVIEW_API void webview_init(webview_t w, const char *js);
+```
+
+### navigate
+
+```c
+// Navigates webview to the given URL. URL may be a properly encoded data URI.
+// Examples:
+// webview_navigate(w, "https://github.com/webview/webview");
+// webview_navigate(w, "data:text/html,%3Ch1%3EHello%3C%2Fh1%3E");
+// webview_navigate(w, "data:text/html;base64,PGgxPkhlbGxvPC9oMT4=");
+WEBVIEW_API void webview_navigate(webview_t w, const char *url);
+```
+
+### return
+
+```c
+// Allows to return a value from the native binding. Original request pointer
+// must be provided to help internal RPC engine match requests with responses.
+// If status is zero - result is expected to be a valid JSON result value.
+// If status is not zero - result is an error JSON object.
+WEBVIEW_API void webview_return(webview_t w, const char *seq, int status,
+ const char *result);
+```
+
+### run
+
+```c
+// Runs the main loop until it's terminated. After this function exits - you
+// must destroy the webview.
+WEBVIEW_API void webview_run(webview_t w);
+```
+
+### set_html
+
+```c
+// Set webview HTML directly.
+// Example: webview_set_html(w, "
Hello
");
+WEBVIEW_API void webview_set_html(webview_t w, const char *html);
+```
+
+### set_size
+
+```c
+// Window size hints
+#define WEBVIEW_HINT_NONE 0 // Width and height are default size
+#define WEBVIEW_HINT_MIN 1 // Width and height are minimum bounds
+#define WEBVIEW_HINT_MAX 2 // Width and height are maximum bounds
+#define WEBVIEW_HINT_FIXED 3 // Window size can not be changed by a user
+// Updates native window size. See WEBVIEW_HINT constants.
+WEBVIEW_API void webview_set_size(webview_t w, int width, int height,
+ int hints);
+```
+
+### set_title
+
+```c
+// Updates the title of the native window. Must be called from the UI thread.
+WEBVIEW_API void webview_set_title(webview_t w, const char *title);
+```
+
+### terminate
+
+```c
+// Stops the main loop. It is safe to call this function from another other
+// background thread.
+WEBVIEW_API void webview_terminate(webview_t w);
+```
+
+### unbind
+
+```c
+// Removes a native C callback that was previously set by webview_bind.
+WEBVIEW_API void webview_unbind(webview_t w, const char *name);
+```
+
+### version
+
+```c
+// Get the library's version information.
+WEBVIEW_API const webview_version_info_t *webview_version();
+```
+
+## Changelog
+
+| Version | What happened? |
+| :-----: | :-------------: |
+| v0.0.1 | Initial release |
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 106eba40..9234d792 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -61,6 +61,11 @@ const config = {
label: "Documentation",
position: "left",
},
+ {
+ href: "/docs/category/api",
+ label: "API Overview",
+ position: "left",
+ },
{
href: "https://github.com/evo-lua",
label: "GitHub",
diff --git a/src/components/API/API.jsx b/src/components/API/API.jsx
new file mode 100644
index 00000000..5d6395e5
--- /dev/null
+++ b/src/components/API/API.jsx
@@ -0,0 +1,244 @@
+import React from "react";
+
+import styles from "./styles.module.css";
+
+export const Function = ({ children }) => (
+