Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0698ff6
Add sandboxed Lua node runtime foundation
KyivSec Jul 25, 2026
aae8aea
Introduce format 3 Lua graph persistence
KyivSec Jul 25, 2026
0e1a8fe
Connect Lua nodes to deterministic graph scheduler
KyivSec Jul 25, 2026
ed83a87
Add Lua authoring and explorer infrastructure
KyivSec Jul 25, 2026
b4e9847
Replace legacy node docs with Lua references
KyivSec Jul 25, 2026
2854856
Embed LuaJ in distributable mod jar
KyivSec Jul 25, 2026
3689e2d
Make format 3 authoritative for computers
KyivSec Jul 25, 2026
633ab2c
Convert built-in nodes to Lua endpoints
KyivSec Jul 25, 2026
5694e83
Replace editor chrome with Lua authoring workspace
KyivSec Jul 25, 2026
bd20843
Remove legacy node runtime and editor subsystems
KyivSec Jul 25, 2026
9b09a19
Complete Lua integrations and runtime hardening
KyivSec Jul 25, 2026
407b8bd
Finish Lua editor sharing and preview coverage
KyivSec Jul 25, 2026
3972622
Fix LuaJ development launch classpath
KyivSec Jul 25, 2026
2b2d2d9
Stop editor screens from applying menu blur
KyivSec Jul 25, 2026
327b63b
Restore inertial canvas navigation
KyivSec Jul 26, 2026
63a9da0
Restore interactive Lua node fields
KyivSec Jul 26, 2026
fa143ee
Restore Lua node creation and configurable built-ins
KyivSec Jul 26, 2026
5721571
Polish Lua node layout and authoring docs
KyivSec Jul 26, 2026
ab24c8c
Refine node panels and endpoint highlights
KyivSec Jul 26, 2026
75ae990
Flatten node header and body surfaces
KyivSec Jul 26, 2026
0de6221
Align node controls with category accents
KyivSec Jul 26, 2026
12f57b4
Fix Lua editor viewport and live preview layout
KyivSec Jul 26, 2026
c304e5f
Prevent wire hover coordinate overflow
KyivSec Jul 26, 2026
8efc6a1
Add Lua editor scrollbars
KyivSec Jul 26, 2026
cbed189
Fixed widget rendering
KyivSec Jul 26, 2026
513a0fc
Update README to simplify check lifecycle description
KyivSec Jul 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 9 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,23 @@
# Computed

Computed is a NeoForge 1.21.1 programmable node-graph mod. Its node API, persisted program format,
runtime, and editor live entirely under Computed-owned Java and resource namespaces, avoiding the
split-package conflict caused by the formerly vendored Web's Node Lib.
Computed is a NeoForge 1.21.1 programmable Lua node-graph mod. LuaJ powers one sandboxed VM per
computer while Computed owns graph scheduling, safe Minecraft endpoints, persistence, networking,
the editor, monitor rendering, and integrations.

Legacy worlds and imports are migrated on load and written as version-2 `ComputedProgram` data after
the next successful save. Share exports use `CMP2`; `CMP1` and legacy Base64/SNBT remain import-only.
Program format 3 stores one root graph and an embedded Lua definition library. Legacy graphs,
Functions, Sections, JSON custom nodes, CMP1, and CMP2 are intentionally discarded or rejected
without migration.

Addon authors: see the [public node API](docs/node-api.md), the
[Web's Node Lib migration guide](docs/node-migration.md), and the
[example addon](docs/example-addon/README.md).
Start with the [Lua authoring guide](docs/lua/authoring-guide.md), the
[Lua method reference](docs/lua/lua-api-reference.md), and the
[Java endpoint API](docs/lua/endpoint-api.md).

Build and verify with:

```text
./gradlew clean check build
```

The `check` lifecycle verifies that the built JAR contains no `dev/devce/websnodelib/**` classes or
`assets/websnodelib/**` resources.


# Credits – Third-Party Code

Computed now ships its own node engine, persistence model, runtime, and editor under the
Expand Down
33 changes: 33 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ repositories {
includeGroup 'dev.ryanhcode.sable'
}
}
maven {
name = 'CC-Tweaked'
url = 'https://maven.squiddev.cc'
content {
includeGroup 'cc.tweaked'
}
}

flatDir {
dirs 'libs'
Expand Down Expand Up @@ -160,6 +167,10 @@ configurations {
}

dependencies {
implementation 'org.luaj:luaj-jse:3.0.1'
jarJar 'org.luaj:luaj-jse:3.0.1'
additionalRuntimeClasspath 'org.luaj:luaj-jse:3.0.1'

testImplementation platform('org.junit:junit-bom:5.11.4')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.slf4j:slf4j-api:2.0.17'
Expand All @@ -183,6 +194,14 @@ dependencies {
// but the SableCompanion class itself only exists at runtime if the companion mod is installed.
compileOnly "dev.ryanhcode.sable-companion:sable-companion-common-1.21.1:1.5.0"

compileOnly "cc.tweaked:cc-tweaked-1.21.1-core-api:${cct_version}"
compileOnly "cc.tweaked:cc-tweaked-1.21.1-common-api:${cct_version}"
compileOnly "cc.tweaked:cc-tweaked-1.21.1-forge-api:${cct_version}"
testImplementation "cc.tweaked:cc-tweaked-1.21.1-core-api:${cct_version}"
testImplementation "cc.tweaked:cc-tweaked-1.21.1-common-api:${cct_version}"
testImplementation "cc.tweaked:cc-tweaked-1.21.1-forge-api:${cct_version}"
localRuntime "cc.tweaked:cc-tweaked-1.21.1-forge:${cct_version}"

// Other dev-only jars in /libs (not published); skip Create/Flywheel/Ponder filenames so Maven deps are not duplicated.
localRuntime fileTree(dir: layout.projectDirectory.dir('libs'), include: ['*.jar']).matching {
exclude 'flywheel*.jar'
Expand Down Expand Up @@ -256,6 +275,20 @@ tasks.withType(JavaCompile).configureEach {

tasks.named('test', Test).configure {
useJUnitPlatform()
useJUnitPlatform {
excludeTags 'benchmark'
}
}

tasks.register('benchmarkLua', Test) {
group = 'verification'
description = 'Runs the 500-node Lua scheduler acceptance benchmark.'
testClassesDirs = sourceSets.test.output.classesDirs
classpath = sourceSets.test.runtimeClasspath
useJUnitPlatform {
includeTags 'benchmark'
}
shouldRunAfter tasks.named('test')
}

def verifyNoLegacyNodeNamespace = tasks.register('verifyNoLegacyNodeNamespace') {
Expand Down
15 changes: 0 additions & 15 deletions docs/custom-nodes-example-add.json

This file was deleted.

238 changes: 0 additions & 238 deletions docs/custom-nodes.md

This file was deleted.

10 changes: 0 additions & 10 deletions docs/example-addon/README.md

This file was deleted.

Loading
Loading