Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tools/symbian/container/patches/*.patch whitespace=-trailing-space,-space-before-tab
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@ jobs:
- name: Test desktop 3D and widget workspace
run: cargo test --locked --manifest-path engine/Cargo.toml --workspace

# The bridge is a standalone workspace because only its device build
# needs nightly build-std. Host tests stay stable-compatible.
- name: Test Symbian bridge
run: cargo test --locked --manifest-path engine/symbian/Cargo.toml

- name: Test renderer goldens
run: bun tests/golden.ts

Expand Down
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,22 @@ bun run e2e:vita # Vita3K, native-density 960x544 golden E2E
bun run e2e:launcher:vita # Vita3K, multi-app launcher/swap E2E
bun psplink # interactive real PSP switcher over PSPLINK
bun run hw hero --trace # real PSP via PSPLINK + host0 trace
bun symbian doctor --device # inspect the Nokia E7 toolchain and USB MTP path
bun symbian doctor --coda-usb # verify CODA 4.x directly over USB interface 4
bun symbian build probe # build a visible self-signed Qt/Symbian SIS
bun tools/symbian.ts build app --manifest apps/hero/pocket.json --sis-version 1.0.0
bun symbian deploy dist/symbian/pocketjs-e7-runtime.sis
bunx tsc --noEmit # typecheck (babel owns the JSX transform)
```

The Nokia E7 bootstrap and its current PocketJS port boundary are documented in
[docs/SYMBIAN_E7.md](./docs/SYMBIAN_E7.md). It establishes a pinned,
repeatable GCCE/Qt/QuickJS/Rust/E32/SIS build and physical-device staging path.
The private `symbian-e7-dev` profile can package PocketJS applications for
hardware testing with a native viewport that follows the E7's landscape and
portrait geometry, but it is intentionally absent from the production target
registry until device acceptance and golden testing are complete.

The PSP bootstrap owns every production input: Rust nightly + `rust-src`, the
`cargo-psp` tools built at an exact `pocket-stack/rust-psp` revision, and a
SHA-256-verified `pocket-stack/pspdev` SDK release. It installs them under the
Expand Down
13 changes: 7 additions & 6 deletions apps/hero/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export default function Hero() {
debugName="HeroScreen"
class="w-full h-full flex-col justify-between p-5 bg-gradient-to-b from-slate-50 to-slate-100"
>
<View debugName="Header" class="flex-row items-center justify-between">
<View debugName="Header" class="flex-row flex-wrap items-center justify-between">
<View class="flex-row items-center gap-3">
<Image class="w-10 h-10 rounded-lg shadow" src="logo.png" />
<View class="flex-col">
Expand All @@ -59,7 +59,7 @@ export default function Hero() {

<View class="flex-col gap-2">
<Text class="text-xs text-blue-600 tracking-wide">ONE RUST CORE · ONE JSX APP</Text>
<View class="flex-row items-center justify-between">
<View class="flex-row flex-wrap items-center justify-between">
<Text class="text-4xl text-slate-950 font-bold">JSX at 60 FPS.</Text>
<Image class="w-10 h-10" src={spinnerSrc()} />
</View>
Expand All @@ -68,12 +68,13 @@ export default function Hero() {
class="h-1 w-0 rounded-full shadow bg-gradient-to-r from-blue-500 to-cyan-500"
style={{ translateX: count() * 2 }}
/>
<Text class="text-sm text-slate-600">
Flexbox, springs and baked type — running on a 2005 handheld.
</Text>
<View debugName="Description" class="flex-row flex-wrap gap-1">
<Text class="text-sm text-slate-600">Flexbox, springs and baked type —</Text>
<Text class="text-sm text-slate-600">running on a 2005 handheld.</Text>
</View>
</View>

<View class="flex-row items-center gap-4">
<View class="flex-row flex-wrap items-center gap-4">
<View
class="px-4 py-2 rounded-xl shadow-md bg-blue-600 border-blue-500 focus:bg-blue-500 active:bg-blue-700 transition-colors duration-150"
focusable
Expand Down
17 changes: 17 additions & 0 deletions apps/hero/pocket.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
"requires": [
"text.glyphs.baked",
"input.buttons"
],
"enhances": [
"display.viewport.live"
]
}
},
Expand All @@ -24,6 +27,20 @@
272
],
"presentation": "integer-fit"
},
"dynamic": {
"default": [
640,
360
],
"min": [
360,
360
],
"max": [
640,
640
]
}
}
}
Expand Down
17 changes: 10 additions & 7 deletions docs/STRUCTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ pocketjs/
│ ├─ core/ pocketjs-core — retained UI tree, taffy layout, damage + raster (standalone crate)
│ ├─ backends/ platform render backends (ESP32-P4 PPA is a standalone no_std crate)
│ ├─ wasm/ core compiled to wasm32 for web/sim hosts (standalone crate)
│ ├─ symbian/ no_std core static library for the GCCE/Symbian host (standalone crate)
│ ├─ pocket3d/ the 3D core family (bsp, cook, gu, vita) + desktop examples
│ ├─ crates/ non-3D engine crates: pocket-mod, pocket-ui-wgpu, pocket-vrm, pocket-widget
│ └─ Cargo.toml the desktop workspace root (core/, wasm/ and the console-
│ toolchain crates are deliberately excluded and standalone —
cargo-psp/vitasdk need lone crates; see engine/core/Cargo.toml)
│ └─ Cargo.toml the desktop workspace root (core/, wasm/, symbian/, and
console-toolchain crates are deliberately excluded and
standalone; see each crate's Cargo.toml for its toolchain)
├─ hosts/ Surfaces: every embedding of the cores
│ ├─ psp/ QuickJS + rust-psp EBOOT host
│ ├─ vita/ Vita host
│ ├─ esp32p4/ reusable ESP-IDF PPA adapter + component smoke build
│ ├─ symbian/ Nokia E7 Qt/QuickJS runtime + visible toolchain probe
│ ├─ web/ browser dev host (wasm core)
│ └─ sim/ deterministic headless simulation host (docs/DETERMINISM.md)
├─ framework/ Guest: @pocketjs/framework
Expand All @@ -31,7 +33,8 @@ pocketjs/
│ └─ schema/ published JSON schemas (pocket-2.json)
├─ apps/ demo apps (pocket.json manifests; built by tools/build.ts)
├─ tools/ every command: build/dev/device/release bun scripts (flat),
│ plus cli/ (@pocketjs/cli), psplink/, imagegen/
│ plus cli/ (@pocketjs/cli), psplink/, imagegen/, and
│ symbian/ (isolated GCCE/Qt toolchain + CODA USB transport)
├─ tests/ the test suite: *.test.ts flat at the root, plus
│ e2e/ (PPSSPP, Vita3K drivers), goldens/{web,psp,vita}, tapes/, fixtures/
├─ site/ pocketjs.dev (Cloudflare)
Expand Down Expand Up @@ -62,7 +65,7 @@ New things go where the axis says — never invent a top-level directory:
- **npm surface is frozen**: `@pocketjs/framework/*` export *keys* never
change; the `exports`/`files` maps in package.json absorb internal moves.
- **Cargo stays non-workspace where toolchains demand it**: `engine/core`,
`engine/wasm`, `engine/backends/esp32p4-ppa`, `hosts/psp`, `hosts/vita`,
and the gu/vita 3D crates each stand alone with their own lockfiles.
`engine/Cargo.toml` is the one desktop workspace.
`engine/wasm`, `engine/symbian`, `engine/backends/esp32p4-ppa`, `hosts/psp`,
`hosts/vita`, and the gu/vita 3D crates each stand alone with their own
lockfiles. `engine/Cargo.toml` is the one desktop workspace.
- **Moves are `git mv`** — history stays traceable.
Loading