ts2077 0.0.0-stage → 1.0.0

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.
Files changed (184) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +173 -2
  4. package/docs/.nojekyll +0 -0
  5. package/docs/README.md +25 -0
  6. package/docs/api/natives.md +1601 -0
  7. package/docs/api/omitted.md +168 -0
  8. package/docs/bridge.md +103 -0
  9. package/docs/commands.md +125 -0
  10. package/docs/companion.md +116 -0
  11. package/docs/configuration.md +120 -0
  12. package/docs/debugging.md +64 -0
  13. package/docs/endpoints.md +117 -0
  14. package/docs/examples.md +67 -0
  15. package/docs/gameplay.md +149 -0
  16. package/docs/guide/README.md +21 -0
  17. package/docs/guide/deployment.md +15 -0
  18. package/docs/guide/first-plugin.md +22 -0
  19. package/docs/guide/project-layout.md +19 -0
  20. package/docs/guide/quick-start.md +32 -0
  21. package/docs/guide/typescript-and-lua.md +9 -0
  22. package/docs/index.html +872 -0
  23. package/docs/install.md +95 -0
  24. package/docs/limitations.md +47 -0
  25. package/docs/manifests.md +59 -0
  26. package/docs/security.md +41 -0
  27. package/docs/webui.md +74 -0
  28. package/node_modules/@open77-ts/node/dist/files.d.ts +3 -0
  29. package/node_modules/@open77-ts/node/dist/files.js +31 -0
  30. package/node_modules/@open77-ts/node/dist/game.d.ts +21 -0
  31. package/node_modules/@open77-ts/node/dist/game.js +49 -0
  32. package/node_modules/@open77-ts/node/dist/guard.d.ts +14 -0
  33. package/node_modules/@open77-ts/node/dist/guard.js +61 -0
  34. package/node_modules/@open77-ts/node/dist/index.d.ts +9 -0
  35. package/node_modules/@open77-ts/node/dist/index.js +19 -0
  36. package/node_modules/@open77-ts/node/dist/jobs.d.ts +6 -0
  37. package/node_modules/@open77-ts/node/dist/jobs.js +20 -0
  38. package/node_modules/@open77-ts/node/dist/modules.d.ts +7 -0
  39. package/node_modules/@open77-ts/node/dist/modules.js +44 -0
  40. package/node_modules/@open77-ts/node/dist/server.d.ts +22 -0
  41. package/node_modules/@open77-ts/node/dist/server.js +155 -0
  42. package/node_modules/@open77-ts/node/dist/store.d.ts +34 -0
  43. package/node_modules/@open77-ts/node/dist/store.js +124 -0
  44. package/node_modules/@open77-ts/node/package.json +8 -0
  45. package/node_modules/@open77-ts/node/src/files.ts +21 -0
  46. package/node_modules/@open77-ts/node/src/game.ts +61 -0
  47. package/node_modules/@open77-ts/node/src/guard.ts +56 -0
  48. package/node_modules/@open77-ts/node/src/index.ts +9 -0
  49. package/node_modules/@open77-ts/node/src/jobs.ts +16 -0
  50. package/node_modules/@open77-ts/node/src/modules.ts +39 -0
  51. package/node_modules/@open77-ts/node/src/server.ts +167 -0
  52. package/node_modules/@open77-ts/node/src/store.ts +106 -0
  53. package/node_modules/@open77-ts/node/tsconfig.json +16 -0
  54. package/node_modules/@open77-ts/shared/dist/contracts.d.ts +6 -0
  55. package/node_modules/@open77-ts/shared/dist/contracts.js +13 -0
  56. package/node_modules/@open77-ts/shared/dist/index.d.ts +4 -0
  57. package/node_modules/@open77-ts/shared/dist/index.js +14 -0
  58. package/node_modules/@open77-ts/shared/dist/protocol.d.ts +27 -0
  59. package/node_modules/@open77-ts/shared/dist/protocol.js +230 -0
  60. package/node_modules/@open77-ts/shared/dist/sha256.d.ts +10 -0
  61. package/node_modules/@open77-ts/shared/dist/sha256.js +208 -0
  62. package/node_modules/@open77-ts/shared/package.json +12 -0
  63. package/node_modules/@open77-ts/shared/src/contracts.ts +13 -0
  64. package/node_modules/@open77-ts/shared/src/index.ts +4 -0
  65. package/node_modules/@open77-ts/shared/src/protocol.ts +218 -0
  66. package/node_modules/@open77-ts/shared/src/sha256.ts +207 -0
  67. package/node_modules/@open77-ts/shared/tsconfig.json +15 -0
  68. package/package.json +75 -4
  69. package/packages/cli/dist/cli.js +501 -0
  70. package/packages/client/package.json +7 -0
  71. package/packages/compiler/dist/build.d.ts +13 -0
  72. package/packages/compiler/dist/build.js +548 -0
  73. package/packages/compiler/dist/bundle.d.ts +1 -0
  74. package/packages/compiler/dist/bundle.js +13 -0
  75. package/packages/compiler/dist/config.d.ts +39 -0
  76. package/packages/compiler/dist/config.js +88 -0
  77. package/packages/compiler/dist/doctor.d.ts +5 -0
  78. package/packages/compiler/dist/doctor.js +51 -0
  79. package/packages/compiler/dist/index.d.ts +6 -0
  80. package/packages/compiler/dist/index.js +15 -0
  81. package/packages/compiler/dist/manifest.d.ts +2 -0
  82. package/packages/compiler/dist/manifest.js +78 -0
  83. package/packages/compiler/dist/permissions.d.ts +9 -0
  84. package/packages/compiler/dist/permissions.js +104 -0
  85. package/packages/compiler/dist/sourcemap.d.ts +8 -0
  86. package/packages/compiler/dist/sourcemap.js +63 -0
  87. package/packages/compiler/dist/syntax.d.ts +4 -0
  88. package/packages/compiler/dist/syntax.js +95 -0
  89. package/packages/node/dist/files.d.ts +3 -0
  90. package/packages/node/dist/files.js +31 -0
  91. package/packages/node/dist/game.d.ts +21 -0
  92. package/packages/node/dist/game.js +49 -0
  93. package/packages/node/dist/guard.d.ts +14 -0
  94. package/packages/node/dist/guard.js +61 -0
  95. package/packages/node/dist/index.d.ts +9 -0
  96. package/packages/node/dist/index.js +19 -0
  97. package/packages/node/dist/jobs.d.ts +6 -0
  98. package/packages/node/dist/jobs.js +20 -0
  99. package/packages/node/dist/modules.d.ts +7 -0
  100. package/packages/node/dist/modules.js +44 -0
  101. package/packages/node/dist/server.d.ts +22 -0
  102. package/packages/node/dist/server.js +155 -0
  103. package/packages/node/dist/store.d.ts +34 -0
  104. package/packages/node/dist/store.js +124 -0
  105. package/packages/node/package.json +8 -0
  106. package/packages/node/src/files.ts +21 -0
  107. package/packages/node/src/game.ts +61 -0
  108. package/packages/node/src/guard.ts +56 -0
  109. package/packages/node/src/index.ts +9 -0
  110. package/packages/node/src/jobs.ts +16 -0
  111. package/packages/node/src/modules.ts +39 -0
  112. package/packages/node/src/server.ts +167 -0
  113. package/packages/node/src/store.ts +106 -0
  114. package/packages/sdk/src/client/index.ts +140 -0
  115. package/packages/sdk/src/server/bridge.ts +252 -0
  116. package/packages/sdk/src/server/index.ts +103 -0
  117. package/packages/sdk/src/shared/index.ts +2 -0
  118. package/packages/sdk/src/shared/net.ts +53 -0
  119. package/packages/sdk/src/shared/reserved.ts +49 -0
  120. package/packages/server/package.json +7 -0
  121. package/packages/shared/dist/contracts.d.ts +6 -0
  122. package/packages/shared/dist/contracts.js +13 -0
  123. package/packages/shared/dist/index.d.ts +4 -0
  124. package/packages/shared/dist/index.js +14 -0
  125. package/packages/shared/dist/protocol.d.ts +27 -0
  126. package/packages/shared/dist/protocol.js +230 -0
  127. package/packages/shared/dist/sha256.d.ts +10 -0
  128. package/packages/shared/dist/sha256.js +208 -0
  129. package/packages/shared/package.json +12 -0
  130. package/packages/shared/src/contracts.ts +13 -0
  131. package/packages/shared/src/index.ts +4 -0
  132. package/packages/shared/src/protocol.ts +218 -0
  133. package/packages/shared/src/sha256.ts +207 -0
  134. package/packages/types/dist/generate.js +468 -0
  135. package/packages/types/generated/catalogue.json +1 -0
  136. package/packages/types/generated/client.d.ts +7464 -0
  137. package/packages/types/generated/server.d.ts +9699 -0
  138. package/packages/types/generated/shared.d.ts +467 -0
  139. package/packages/types/generated/tstl-language-extensions.d.ts +695 -0
  140. package/packages/webui/package.json +7 -0
  141. package/packages/webui/src/index.ts +54 -0
  142. package/templates/basic/README.md +10 -0
  143. package/templates/basic/open77-ts.json +7 -0
  144. package/templates/basic/src/client/main.ts +6 -0
  145. package/templates/basic/src/generated/flags.ts +2 -0
  146. package/templates/basic/src/server/main.ts +6 -0
  147. package/templates/basic/src/shared/greeting.ts +3 -0
  148. package/templates/fullstack/README.md +12 -0
  149. package/templates/fullstack/open77-ts.json +13 -0
  150. package/templates/fullstack/src/backend/index.ts +29 -0
  151. package/templates/fullstack/src/client/index.ts +22 -0
  152. package/templates/fullstack/src/server/index.ts +33 -0
  153. package/templates/fullstack/src/shared/contracts.ts +16 -0
  154. package/templates/fullstack/src/webui/index.html +12 -0
  155. package/templates/fullstack/src/webui/package.json +20 -0
  156. package/templates/fullstack/src/webui/src/App.tsx +65 -0
  157. package/templates/fullstack/src/webui/src/index.css +24 -0
  158. package/templates/fullstack/src/webui/src/main.tsx +6 -0
  159. package/templates/fullstack/src/webui/src/vite-env.d.ts +1 -0
  160. package/templates/fullstack/src/webui/tsconfig.json +15 -0
  161. package/templates/fullstack/src/webui/vite.config.ts +26 -0
  162. package/templates/gameplay/README.md +10 -0
  163. package/templates/gameplay/open77-ts.json +7 -0
  164. package/templates/gameplay/src/client/main.ts +12 -0
  165. package/templates/gameplay/src/generated/flags.ts +2 -0
  166. package/templates/gameplay/src/server/main.ts +17 -0
  167. package/templates/gameplay/src/shared/events.ts +9 -0
  168. package/templates/gameplay/src/shared/greeting.ts +3 -0
  169. package/templates/webui/README.md +11 -0
  170. package/templates/webui/open77-ts.json +12 -0
  171. package/templates/webui/src/client/main.ts +23 -0
  172. package/templates/webui/src/generated/flags.ts +2 -0
  173. package/templates/webui/src/server/main.ts +27 -0
  174. package/templates/webui/src/shared/events.ts +9 -0
  175. package/templates/webui/src/shared/greeting.ts +3 -0
  176. package/templates/webui/ui/index.html +12 -0
  177. package/templates/webui/ui/package.json +20 -0
  178. package/templates/webui/ui/src/App.tsx +24 -0
  179. package/templates/webui/ui/src/hud.css +38 -0
  180. package/templates/webui/ui/src/main.tsx +7 -0
  181. package/templates/webui/ui/src/open77.ts +20 -0
  182. package/templates/webui/ui/src/vite-env.d.ts +1 -0
  183. package/templates/webui/ui/tsconfig.json +13 -0
  184. package/templates/webui/ui/vite.config.ts +17 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0
4
+
5
+ First package prepared for the npm name `ts2077`. The installed commands are `ts77` and `open77-ts`.
6
+
7
+ - Public CLI commands: `create`, `init`, `dev`, `build`, `watch`, `deploy`, `validate`, `doctor`, `types`, `docs`, `update`, `help`.
8
+ - New plugins get `package.json` scripts for `dev`, `build`, `deploy`, and `validate`.
9
+ - Optional `ts77.config.json` and `ts77.config.ts` overlay the resource config without replacing `open77-ts.json` on disk.
10
+ - TypeScript declarations stay generated from the OPEN//77 Devkit catalogue. This release's catalogue is 2.50.0+op77.148.
11
+ - `ts77 types` keeps the last generated declarations when the Devkit index is not on the machine, and says so.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 TS77 contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,174 @@
1
- # Temporary Holding Version
1
+ # TS77
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Compile OPEN//77 resources from TypeScript. Gameplay becomes Lua 5.4. A separate Node process runs backend services. React interfaces stay JavaScript inside the game's Chromium surface. Native names, parameters, and permissions come from the OPEN//77 Devkit catalogue, which in this workspace is **2.50.0+op77.148**.
4
+
5
+ The long-form guide is in [docs/README.md](docs/README.md). [docs/index.html](docs/index.html) is the same guide as one page for GitHub Pages: set the site source to the `/docs` folder on the branch you publish.
6
+
7
+ The server sandbox has no global `require` and no `debug` library. The compiler bundles each side into one Lua file and keeps source maps on your machine.
8
+
9
+ ## Requirements
10
+
11
+ - Node.js 20 or newer
12
+ - An OPEN//77 server. This repo was checked against the server at `E:\CODING\VOSS`
13
+ - The Devkit index cache created by `npx -y @open2077/mcp init --server-dir <server>`
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ npm install
19
+ npm run build:tools
20
+ ```
21
+
22
+ `build:tools` compiles the compiler and regenerates `packages/types/generated` from the Devkit index.
23
+
24
+ ## Create a plugin
25
+
26
+ The npm package name is `ts2077`. The commands it installs are `ts77` and `open77-ts`.
27
+
28
+ ```bash
29
+ npx ts2077 create my_plugin --template basic --no-install
30
+ cd my_plugin
31
+ npm install
32
+ npm run dev
33
+ npm run build
34
+ ```
35
+
36
+ `npm run dev` watches TypeScript and rebuilds Lua. Add `--server <server-directory>` at create time, or later run `npx ts2077 deploy --server <server-directory>`, to copy the resource into that server's `resources` folder. TS77 does not reload the dedicated server.
37
+
38
+ ```bash
39
+ npx open77-ts create my_resource --template basic
40
+ npx open77-ts create my_job --template gameplay
41
+ npx open77-ts create my_hud --template webui
42
+ npx open77-ts create my_notes --template fullstack
43
+ ```
44
+
45
+ The directory name and `open77-ts.json` `name` must match: a lowercase letter, then letters, digits, or underscores, 3 to 64 characters.
46
+
47
+ ```bash
48
+ npx open77-ts build my_resource
49
+ npx open77-ts watch my_resource
50
+ npx open77-ts validate my_resource
51
+ npx open77-ts doctor my_resource
52
+ ```
53
+
54
+ `init` writes the basic template into an existing directory. `dev` watches TypeScript and, when `ui/` has Vite installed, starts the WebUI dev server at `http://127.0.0.1:5173/`.
55
+
56
+ To copy a built resource into a server, set `serverResourcesDir` in `open77-ts.json` and run `npx open77-ts build <resource> --deploy`. Reloading a running server is a console command on that server (`reload <name>`). This CLI does not send it.
57
+
58
+ ## Write gameplay
59
+
60
+ Client code lives in `src/client`, server code in `src/server`, and modules imported by either side in `src/shared`. Shared modules are copied into each bundle. They are not `shared_script` files and they do not call `require` at runtime.
61
+
62
+ ```ts
63
+ import { emitServer, onClientResourceStart, onNet } from "@open77/sdk/client";
64
+ import { greet } from "../shared/greeting";
65
+
66
+ onClientResourceStart(() => {
67
+ print(greet(GetCurrentResourceName()));
68
+ const ok = emitServer("demo:ping", { text: "Night City" });
69
+ if (!ok) print("demo:ping was not sent");
70
+ });
71
+ ```
72
+
73
+ ```ts
74
+ import { authenticatedPlayer, emitClient, onNet } from "@open77/sdk/server";
75
+
76
+ onNet("demo:ping", (payload) => {
77
+ const player = authenticatedPlayer();
78
+ if (player === undefined) return;
79
+ emitClient(player, "demo:pong", payload);
80
+ });
81
+ ```
82
+
83
+ `authenticatedPlayer()` reads the server-assigned `source`. A client cannot choose that id. Check payload fields before using them, and do not let a client grant money, items, or character changes.
84
+
85
+ Natives are the real catalogue functions. `Open77.webui.create`, `TriggerServerEvent`, and `TriggerClientEvent` are called with a dot. Page methods such as `page:send` use a colon. A native that returns a value and a reason is destructured so both Lua results are kept:
86
+
87
+ ```ts
88
+ const [page, reason] = Open77.webui.create({ entry: "web/index.html" });
89
+ const [ok, failure] = TriggerClientEvent("demo:pong", playerId, payload);
90
+ ```
91
+
92
+ Cursor reads `tsconfig.client.json` or `tsconfig.server.json` in the resource. Those files are rewritten on each build and point at the generated declarations, so completion follows the catalogue.
93
+
94
+ A client file cannot see `TriggerClientEvent`. A server file cannot see `TriggerServerEvent`. `class`, `async`, `Promise`, `Map`, `Set`, and Node.js imports are compile errors.
95
+
96
+ The build writes `open77.lua` with the Lua files that were actually produced and the permissions of the natives it found. `network.events` is added when the resource sends or receives network events. Empty script globs are not written.
97
+
98
+ ## React WebUI
99
+
100
+ The `webui` template and `examples/hello_world` put a Vite React app in `ui/`. `npm run build` inside `ui/` writes `web/`, and the manifest lists those files one by one. The page talks to Lua through the documented bridge:
101
+
102
+ ```ts
103
+ window.Open77?.on("hud:state", (payload) => render(payload));
104
+ window.Open77?.emit("hud:ping", { text: "Night City" });
105
+ window.Open77?.ready();
106
+ ```
107
+
108
+ Lua listens with `page.on` and sends with `page.send`. For Vite during development, build with `--dev` or set the WebUI entry to `http://127.0.0.1:5173/`. That address is the player's PC. Call `Open77.ready()` again after a hot reload so Lua can send the current state.
109
+
110
+ `hud` and `menu` do not need a WebUI permission. `modal`, `system`, and `debug` do, and the helper does not offer them.
111
+
112
+ ## Targets
113
+
114
+ A resource lists the runtimes it actually builds. The defaults are client Lua, server Lua, a WebUI when `web.root` is set, and a Node companion when `backend` is set.
115
+
116
+ | Target | Result |
117
+ |---|---|
118
+ | `open77-client` | One Lua 5.4 client bundle |
119
+ | `open77-server` | One Lua 5.4 server bundle |
120
+ | `node` | CommonJS from `src/backend`, run with Node.js 22 |
121
+ | `webui` | Vite bundle from `src/webui` or `ui` |
122
+
123
+ `@open77-ts/client`, `@open77-ts/server`, and `@open77-ts/shared` are compiled into Lua. `@open77-ts/shared` in gameplay is the contract module: plain values and checks, no Node APIs. `@open77-ts/node` is the companion and is rejected in a Lua or page build. `@open77-ts/webui` is the page bridge and is rejected in Lua. The older `@open77/sdk/client` and `@open77/sdk/server` names still resolve.
124
+
125
+ `npx open77-ts create my_notes --template fullstack` writes `src/client`, `src/server`, `src/backend`, `src/webui`, and `src/shared`. `dev` rebuilds those targets, restarts `dist/backend/index.js` when that file exists, and starts Vite when its dependencies are installed. Set `OPEN77_BRIDGE_SECRET` in the environment before starting the companion. The game server reads the same value from the `open77_bridge_secret` convar or from that resource's tunable. Leave it empty and the server reports `bridge_secret_missing` instead of calling out.
126
+
127
+ The companion listens on `127.0.0.1:11782` unless `OPEN77_BRIDGE_PORT` is set. The dedicated server must enable outbound HTTP and allow that host:
128
+
129
+ ```jsonc
130
+ "http": { "enabled": true, "allowedHosts": ["127.0.0.1"] }
131
+ ```
132
+
133
+ `http.allowedHosts` is a hostname, not a URL. Inbound calls from Node use `httpHandlers` and `Open77.http.listen`, which is off until the operator enables it. `OPEN77_NOTES_DRIVER` may be `memory` (the default), `mysql`, `postgres`, or `redis`. The database URL is `OPEN77_DATABASE_URL`. File reads stay inside the root configured on the companion and reject `..`.
134
+
135
+ `examples/player_notes` is the full path: the React page emits `notes:submit`, client Lua sends `notes:save`, the server checks `authenticatedPlayer()` and the text, `Open77.http.request` calls `notes.save`, and the page renders the saved text or `backend_offline`. The page's health `fetch` does not save anything. Saving does not grant money, items, or vehicles. No play session in Cyberpunk 2077 was run for this example.
136
+
137
+ ## Debugging
138
+
139
+ Type errors name the TypeScript file and line. Lua is formatted by TypeScriptToLua and carries a source map next to the bundle. The sandbox cannot run `debug.traceback`, so the map is applied by the CLI:
140
+
141
+ ```bash
142
+ npx open77-ts map examples/hello_world/dist/server/main.lua 120
143
+ ```
144
+
145
+ When the map has a position, the output looks like:
146
+
147
+ ```text
148
+ [OPEN77-TS] Resource: hello_world
149
+
150
+ Runtime Error:
151
+ src/shared/greeting.ts:2
152
+ ```
153
+
154
+ ## Updating OPEN//77
155
+
156
+ When a newer Devkit index is published, refresh the MCP cache and run `npm run generate` (or `npx open77-ts types`). Declarations, permissions, and reserved event prefixes are rewritten from that index. Do not hand-edit `packages/types/generated`.
157
+
158
+ ## Example
159
+
160
+ `examples/hello_world` is a client, a server, a shared greeting module, a typed ping, and a React HUD.
161
+
162
+ - The server registers `/hello` with `RegisterCommand`. Arguments arrive as strings. A console `source` of `0` is not sent to a client, because target `0` is a host error.
163
+ - The page emits `hud:ping`. The client sends `hello:ping`. The server checks the payload and replies to `authenticatedPlayer()` with `hello:notice`.
164
+ - The client updates the HUD with `page.send`.
165
+
166
+ ```bash
167
+ npx open77-ts build examples/hello_world
168
+ npx open77-ts validate examples/hello_world
169
+ npm test
170
+ ```
171
+
172
+ Build, Lua parse, call syntax, the `require` shim, and source-map lookup are covered by `npm test`. `open77_validate` is the Devkit's static check. Neither one replaces joining the server in Cyberpunk 2077.
173
+
174
+ See [docs/limitations.md](docs/limitations.md) for the runtime restrictions and what this project does not claim.
package/docs/.nojekyll ADDED
File without changes
package/docs/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # TS77 documentation
2
+
3
+ These files are the local reference for this repository. The same material is also published as one page at [index.html](index.html), which is what GitHub Pages serves when the site source is the `/docs` folder.
4
+
5
+ The catalogue this tree was generated from is **2.50.0+op77.148**. Natives, permissions, and reserved event names come from that index. They are not invented.
6
+
7
+ | Guide | What it covers |
8
+ |---|---|
9
+ | [Guides](guide/README.md) | Short path from install to deploy |
10
+ | [Native index](api/natives.md) | Every native declared for this catalogue |
11
+ | [Install](install.md) | Node, the Devkit index, npm scripts, the UI toolchain |
12
+ | [Commands](commands.md) | Every `open77-ts` command and flag |
13
+ | [Configuration](configuration.md) | `open77-ts.json`, targets, convars, server.jsonc |
14
+ | [Gameplay](gameplay.md) | Client and server TypeScript, the Lua sandbox, events |
15
+ | [WebUI](webui.md) | React, Vite, `window.Open77`, page lifecycle |
16
+ | [Companion](companion.md) | The Node process, drivers, files, jobs |
17
+ | [Bridge](bridge.md) | The signed HTTP protocol between the server and Node |
18
+ | [Endpoints](endpoints.md) | Every HTTP and WebSocket route, status, and payload |
19
+ | [Security](security.md) | Secret handling, authority, CORS, path checks |
20
+ | [Manifests](manifests.md) | `open77.lua`, permissions, files, web files |
21
+ | [Debugging](debugging.md) | Type errors, source maps, doctor, validate |
22
+ | [Examples](examples.md) | `hello_world` and `player_notes`, end to end |
23
+ | [Limitations](limitations.md) | What the sandbox and this toolchain do not do |
24
+
25
+ Start with [Install](install.md), then [Commands](commands.md). The player-notes walkthrough is in [Examples](examples.md).