diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e437f1cdf..c62d82e7c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,13 +2,16 @@
---
-First, clone the repo with git submodules (optional. using Github Desktop will automatically clone the submodules for you)
+First, clone the repo with git submodules (required for canvas/WASM builds; GitHub Desktop clones submodules automatically).
```bash
# clone the repo
git clone --recurse-submodules https://github.com/gridaco/grida
cd grida
+# or, if you already cloned without --recurse-submodules
+git submodule update --init
+
# setup node & package manager
nvm use
corepack enable pnpm
diff --git a/README.md b/README.md
index e22f7d592..8988ad052 100644
--- a/README.md
+++ b/README.md
@@ -180,7 +180,7 @@ Docs: [@grida/refig](https://grida.co/docs/packages/@grida/refig)
## Quickstart (monorepo)
-**Requirements:** Node.js **22+**, pnpm **10+**
+**Requirements:** Node.js **24+**, pnpm **10+**
```bash
pnpm install
diff --git a/editor/.env.example b/editor/.env.example
index c3c5cf674..6dd98ec25 100644
--- a/editor/.env.example
+++ b/editor/.env.example
@@ -25,7 +25,7 @@ NEXT_PUBLIC_SUPABASE_URL_RR_AP_NORTHEAST_2=...
# [insiders config]
# flag to use unsafe sandbox (set 1 to enable)
NEXT_PUBLIC_GRIDA_UNSAFE_DEVELOPER_SANDBOX='0'
-NEXT_PUBLIC_GRIDA_WASM_DEV_SERVE_URL='http://localhost:4020/dist' # set to use locally served wasm (dev)
+# NEXT_PUBLIC_GRIDA_WASM_DEV_SERVE_URL='http://localhost:4020/dist' # opt-in: use locally served wasm (requires `just build canvas wasm && just serve canvas wasm`). Leave unset to fetch the published wasm from unpkg.
NEXT_PUBLIC_GRIDA_WASM_VERBOSE='0' # set 1 to inspect (log) the wasm api
NEXT_PUBLIC_GRIDA_USE_INSIDERS_AUTH='1'
NEXT_PUBLIC_GRIDA_LOCALHOST_REGION="us-west-1"
diff --git a/editor/app/(www)/(home)/_home/content-1.tsx b/editor/app/(www)/(home)/_home/content-1.tsx
index e97c13405..0a009455e 100644
--- a/editor/app/(www)/(home)/_home/content-1.tsx
+++ b/editor/app/(www)/(home)/_home/content-1.tsx
@@ -78,15 +78,15 @@ export default function Content1() {
{/* body */}
-
+ {img && (
+
+ )}
);
}
function BigImageContainer({
- width,
- height,
alt = "",
...props
}: React.ComponentProps) {
@@ -97,7 +97,7 @@ function BigImageContainer({
animate={{ opacity: 1 }}
transition={{ duration: 1 }}
>
-
+
);
}
diff --git a/editor/grida-canvas-react-starter-kit/starterkit-loading/loading.tsx b/editor/grida-canvas-react-starter-kit/starterkit-loading/loading.tsx
index e984ec20d..ea9e15bfb 100644
--- a/editor/grida-canvas-react-starter-kit/starterkit-loading/loading.tsx
+++ b/editor/grida-canvas-react-starter-kit/starterkit-loading/loading.tsx
@@ -197,18 +197,17 @@ export function FullscreenLoadingOverlay({
errmsg,
}: FullscreenLoadingOverlayProps) {
const [showOverlay, setShowOverlay] = useState(true);
- const [startTime, setStartTime] = useState(null);
+ const startTimeRef = useRef(null);
useEffect(() => {
if (loading) {
- setStartTime(Date.now());
+ startTimeRef.current = Date.now();
setShowOverlay(true);
- } else if (startTime) {
- const elapsed = Date.now() - startTime;
+ } else if (startTimeRef.current) {
+ const elapsed = Date.now() - startTimeRef.current;
const remaining = Math.max(0, minDuration - elapsed);
if (remaining > 0) {
- // Wait for minimum duration before hiding
const timer = setTimeout(() => {
setShowOverlay(false);
}, remaining);
@@ -218,7 +217,7 @@ export function FullscreenLoadingOverlay({
setShowOverlay(false);
}
}
- }, [loading, minDuration, startTime]);
+ }, [loading, minDuration]);
return (
diff --git a/editor/grida-canvas/backends/wasm-locate-file.ts b/editor/grida-canvas/backends/wasm-locate-file.ts
index 18fd07ed2..d01f1d06a 100644
--- a/editor/grida-canvas/backends/wasm-locate-file.ts
+++ b/editor/grida-canvas/backends/wasm-locate-file.ts
@@ -9,8 +9,6 @@ export default function locateFile(...args: Args) {
const [path, version] = args;
if (process.env.NEXT_PUBLIC_GRIDA_WASM_DEV_SERVE_URL) {
return `${process.env.NEXT_PUBLIC_GRIDA_WASM_DEV_SERVE_URL}/${path}`;
- } else if (process.env.NODE_ENV === "development") {
- return `http://localhost:4020/dist/${path}`;
} else {
return `https://unpkg.com/@grida/canvas-wasm@${version}/dist/${path}`;
}