@ecmaos/kernel 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  [ecmaOS](https://ecmaos.sh) is a [browser-based operating system kernel](https://global.discourse-cdn.com/spiceworks/original/4X/8/7/b/87b7be8e7e2cd932affe5449dba69dc16e30d721.gif) and suite of applications written primarily in TypeScript, AssemblyScript, and C++. It's the successor of [web3os](https://github.com/web3os-org/kernel).
10
10
 
11
- The goal is to create a kernel and supporting apps that tie together modern web technologies and utilities to form an "operating system" that can run on modern browsers, not just to create a "desktop experience". It offers the ability to run a wide variety of apps on top of a (mostly) sandboxed foundation, offering some measure of security by default. Its main use case is to provide a consistent environment for running web apps, but it has features that allow for more powerful custom scenarios. The kernel could also be repurposed as a platform for custom applications, games, and more.
11
+ The goal is to create a kernel and supporting apps that tie together modern web technologies and utilities to form an "operating system" that can run on modern browsers, not just to create a "desktop experience". It offers the ability to run a wide variety of apps on top of an already (mostly) sandboxed foundation, offering some measure of security by default as well as rich developer tooling. Its main use case is to provide a consistent environment for running web apps, but it has features that allow for more powerful custom scenarios, such as a platform for custom applications, games, and more.
12
12
 
13
13
  ---
14
14
 
@@ -28,7 +28,7 @@ The goal is to create a kernel and supporting apps that tie together modern web
28
28
  [![Closed PRs](https://img.shields.io/github/issues-pr-closed/ecmaos/ecmaos.svg?logo=github&label=PRs)](https://github.com/ecmaos/ecmaos/pulls?q=is%3Apr+is%3Aclosed)
29
29
 
30
30
  [![Star on GitHub](https://img.shields.io/github/stars/ecmaos/ecmaos?style=flat&logo=github&label=⭐️%20stars)](https://github.com/ecmaos/ecmaos/stargazers)
31
- [![GitHub forks](https://img.shields.io/github/forks/ecmaos/ecmaos?style=flat&logo=github&label=🔀%20forks)](https://github.com/ecmaos/ecmaos/network)
31
+ [![GitHub forks](https://img.shields.io/github/forks/ecmaos/ecmaos?style=flat&logo=github&label=🔀%20forks)](https://github.com/ecmaos/ecmaos/forks)
32
32
  [![GitHub watchers](https://img.shields.io/github/watchers/ecmaos/ecmaos?style=flat&logo=github&label=👀%20watchers)](https://github.com/ecmaos/ecmaos/watchers)
33
33
  [![Sponsors](https://img.shields.io/github/sponsors/mathiscode?color=red&logo=github&label=💖%20sponsors)](https://github.com/sponsors/mathiscode)
34
34
  [![Contributors](https://img.shields.io/github/contributors/ecmaos/ecmaos?color=yellow&logo=github&label=👥%20contributors)](https://github.com/ecmaos/ecmaos/graphs/contributors)
@@ -67,7 +67,7 @@ The goal is to create a kernel and supporting apps that tie together modern web
67
67
  - Its default export (or exported `main` function) will be called with the `ProcessEntryParams` object
68
68
  - They can be installed from the terminal using the `install` command, e.g. `# install @ecmaos-apps/boilerplate`
69
69
  - Run the installed app: `# /usr/bin/boilerplate arg1 arg2` *(absolute path not required)*
70
- - During development, it can be useful to run a [Verdaccio](https://github.com/verdaccio/verdaccio) server to test local packages: `# install @myscope/mypackage --registry http://localhost:4873`
70
+ - During development, it can be useful to run a [Verdaccio](https://github.com/verdaccio/verdaccio) server to test local packages
71
71
  - To publish to Verdaccio, run `# npm publish --registry http://localhost:4873` in your app's development environment
72
72
  - Then to install from your local registry, run `# install @myscope/mypackage --registry http://localhost:4873`
73
73
 
@@ -86,36 +86,42 @@ The goal is to create a kernel and supporting apps that tie together modern web
86
86
  - Some builtin commands that exist now will be moved into separate apps over time
87
87
 
88
88
  - `Devices`
89
- - Devices get loaded on boot, e.g. /dev/bluetooth, /dev/random, /dev/battery, etc.
89
+ - Devices get loaded on boot, e.g. `/dev/bluetooth`, `/dev/random`, `/dev/battery`, etc.
90
90
  - A device can support being "run" by a user, e.g. `# /dev/battery status`
91
- - Devices may also be directly read/written, and will behave accordingly (or have no effect)
91
+ - Devices may also be directly read/written using `fs` methods, and will behave accordingly (or have no effect if not supported)
92
92
  - An individual device module can provide multiple device drivers, e.g. `/dev/usb` provides `/dev/usb-mydevice-0001-0002`
93
93
 
94
+ - `Generators`
95
+ - Generators are used to scaffold new apps, devices, modules, etc.
96
+ - They are located in the `turbo/generators` directory of the repository
97
+ - They are used by the `turbo gen` command, e.g. `turbo gen app`, `turbo gen device`, `turbo gen module`, etc.
98
+
94
99
  - `Jaffa`
95
100
  - Jaffa is a [Tauri](https://tauri.app) wrapper for the ecmaOS kernel
96
101
  - It's used to tie the kernel into a desktop or mobile environment, allowing for native functionality
97
102
 
98
103
  - `Kernel`
99
- - Authentication (WebAuthn)
100
- - Components (Web Components/Custom Elements)
101
- - Devices
102
- - DOM
103
- - Events (CustomEvents)
104
- - Filesystem (ZenFS)
105
- - Internationalization (i18next)
106
- - Interval Manager (setInterval)
107
- - Log Manager (tslog)
108
- - Memory Manager (Abstractions)
109
- - Process Manager
110
- - Protocol Handlers (web+ecmaos://...)
111
- - Service Worker Manager
112
- - Shell
113
- - Storage (IndexedDB, localStorage, sessionStorage, etc.)
114
- - Terminal (xterm.js)
115
- - User Manager
116
- - WASM Loader
117
- - Window Manager (WinBox)
118
- - Workers (Web Workers)
104
+ - The kernel ties together the various components of the system into a cohesive whole
105
+ - Authentication (WebAuthn)
106
+ - Components (Web Components/Custom Elements)
107
+ - Devices
108
+ - DOM
109
+ - Events (CustomEvents)
110
+ - Filesystem (ZenFS)
111
+ - Internationalization (i18next)
112
+ - Interval Manager (setInterval)
113
+ - Log Manager (tslog)
114
+ - Memory Manager (Abstractions)
115
+ - Process Manager
116
+ - Protocol Handlers (web+ecmaos://...)
117
+ - Service Worker Manager
118
+ - Shell
119
+ - Storage (IndexedDB, localStorage, sessionStorage, etc.)
120
+ - Terminal (xterm.js)
121
+ - User Manager
122
+ - WASM Loader
123
+ - Window Manager (WinBox)
124
+ - Workers (Web Workers)
119
125
 
120
126
  - `Metal`
121
127
  - Metal is an API server for allowing connections to physical systems from ecmaOS using [Hono](https://hono.dev)
@@ -123,21 +129,27 @@ The goal is to create a kernel and supporting apps that tie together modern web
123
129
 
124
130
  - `Modules`
125
131
  - Modules are dynamically loaded into the kernel at boot and can be enabled or disabled
132
+ - They are specified during build via the `VITE_KERNEL_MODULES` environment variable
133
+ - e.g. `VITE_KERNEL_MODULES=@ecmaos-modules/sample@0.1.2,@your/package@1.2.3`
134
+ - Versions must be exact and are mandatory - you cannot use NPM version specifiers
126
135
  - They can provide additional functionality, devices, commands, etc.
127
136
  - They offer a [common interface](./core/types/modules.ts) for interacting with the kernel
128
137
  - Generally they should be written in [AssemblyScript](https://www.assemblyscript.org), but this isn't required
129
138
 
130
139
  - `Packages`
131
- - Packages are [npm packages](https://www.npmjs.com) that are installed into the ecmaOS environment
140
+ - Packages are [NPM packages](https://www.npmjs.com) that are installed into the ecmaOS environment
132
141
  - They can be installed from the terminal using the `install` command, e.g. `# install jquery`
133
142
  - NPM version specifiers are supported, e.g.:
134
143
  - `# install jquery@3.7.1`
135
144
  - `# install jquery@^3.7.1`
136
145
  - `# install jquery@latest`
137
- - [JSR](https://jsr.io) support is coming soon
146
+ - [JSR](https://jsr.io) may be used with the [NPM compatibility layer](https://jsr.io/docs/npm-compatibility):
147
+ - `# install @jsr/defaude__hello-jsr --registry https://npm.jsr.io`
138
148
 
139
149
  - `SWAPI`
140
150
  - The SWAPI is an API server running completely inside a service worker using [Hono](https://hono.dev)
151
+ - It allows for various operations including the `fs` route to fetch files via URL
152
+ - e.g., `# fetch /swapi/fs/home/user/hello.txt`
141
153
  - e.g., `# fetch /swapi/fake/person/fullName`
142
154
 
143
155
  - `Utils`
@@ -159,8 +171,10 @@ edit hello.txt
159
171
  env hello --set world ; env
160
172
  fetch https://ipecho.net/plain > /tmp/myip.txt
161
173
  fetch /xkcd-os.sixel # xterm.js includes sixel support
174
+ fetch /swapi/fs/home/user/hello.txt # fetch a file from the filesystem
162
175
  fetch /swapi/fake/person/fullName # fetch a random person from the SWAPI
163
176
  install jquery
177
+ install @ecmaos-apps/boilerplate
164
178
  ls /dev
165
179
  mkdir /tmp/zip ; cd /tmp/zip
166
180
  upload
@@ -1,18 +1,18 @@
1
1
  {
2
- "_browser-CH-1j4CC.js": {
3
- "file": "browser-CH-1j4CC.js",
2
+ "_browser-CoSyrw7Q.js": {
3
+ "file": "browser-CoSyrw7Q.js",
4
4
  "name": "browser",
5
5
  "isDynamicEntry": true,
6
6
  "imports": [
7
- "_empty-C_utvVBb.js"
7
+ "_empty-DAF3BgdH.js"
8
8
  ]
9
9
  },
10
- "_empty-C_utvVBb.js": {
11
- "file": "empty-C_utvVBb.js",
10
+ "_empty-DAF3BgdH.js": {
11
+ "file": "empty-DAF3BgdH.js",
12
12
  "name": "empty",
13
13
  "dynamicImports": [
14
- "_topbar.min-DTxqjRf-.js",
15
- "_browser-CH-1j4CC.js",
14
+ "_topbar.min-CYYqkupv.js",
15
+ "_browser-CoSyrw7Q.js",
16
16
  "src/tree/lib/commands/install.ts",
17
17
  "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js"
18
18
  ]
@@ -21,12 +21,12 @@
21
21
  "file": "kernel.css",
22
22
  "src": "_kernel.css"
23
23
  },
24
- "_topbar.min-DTxqjRf-.js": {
25
- "file": "topbar.min-DTxqjRf-.js",
24
+ "_topbar.min-CYYqkupv.js": {
25
+ "file": "topbar.min-CYYqkupv.js",
26
26
  "name": "topbar.min",
27
27
  "isDynamicEntry": true,
28
28
  "imports": [
29
- "_empty-C_utvVBb.js"
29
+ "_empty-DAF3BgdH.js"
30
30
  ]
31
31
  },
32
32
  "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js": {
@@ -41,16 +41,16 @@
41
41
  "src": "src/tree/kernel.ts",
42
42
  "isEntry": true,
43
43
  "imports": [
44
- "_empty-C_utvVBb.js"
44
+ "_empty-DAF3BgdH.js"
45
45
  ]
46
46
  },
47
47
  "src/tree/lib/commands/install.ts": {
48
- "file": "install-vMOoUe2p.js",
48
+ "file": "install--B0gJ8Dk.js",
49
49
  "name": "install",
50
50
  "src": "src/tree/lib/commands/install.ts",
51
51
  "isDynamicEntry": true,
52
52
  "imports": [
53
- "_empty-C_utvVBb.js"
53
+ "_empty-DAF3BgdH.js"
54
54
  ]
55
55
  },
56
56
  "src/ui.ts": {
@@ -59,7 +59,7 @@
59
59
  "src": "src/ui.ts",
60
60
  "isEntry": true,
61
61
  "imports": [
62
- "_empty-C_utvVBb.js"
62
+ "_empty-DAF3BgdH.js"
63
63
  ]
64
64
  }
65
65
  }
@@ -1,4 +1,4 @@
1
- import { g as getDefaultExportFromCjs } from "./empty-C_utvVBb.js";
1
+ import { g as getDefaultExportFromCjs } from "./empty-DAF3BgdH.js";
2
2
  var browser$2;
3
3
  var hasRequiredBrowser;
4
4
  function requireBrowser() {
@@ -20,4 +20,4 @@ const browser$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro
20
20
  export {
21
21
  browser$1 as b
22
22
  };
23
- //# sourceMappingURL=browser-CH-1j4CC.js.map
23
+ //# sourceMappingURL=browser-CoSyrw7Q.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-CH-1j4CC.js","sources":["../node_modules/.pnpm/ws@8.18.0/node_modules/ws/browser.js"],"sourcesContent":["'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n"],"names":["browser"],"mappings":";;;;;;AAEAA,cAAiB,WAAY;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IAED;AAAA,EACF;;;;;;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"browser-CoSyrw7Q.js","sources":["../node_modules/.pnpm/ws@8.18.0/node_modules/ws/browser.js"],"sourcesContent":["'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n"],"names":["browser"],"mappings":";;;;;;AAEAA,cAAiB,WAAY;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IAED;AAAA,EACF;;;;;;;;;","x_google_ignoreList":[0]}