Repository navigation
Releases: NodeSpaceAI/nodespace-core
Release list
NodeSpace v0.3.10
Important
If you installed v0.3.9 with the .pkg installer, install v0.3.10 over it. In v0.3.9 the .pkg's background service could not start: its launch agent pointed its log files at ~/Library/Logs/..., which launchd does not expand, so the service crashed on every start (exit code 78) and NodeSpace had no running service. v0.3.10 starts the service through a small wrapper that writes its log to ~/.nodespace/logs/nodespaced.log (the file nodespace logs reads). Installing the new .pkg replaces the agent for the user who runs the installer; any other user who was already logged in on the same Mac picks it up after logging out and back in. Homebrew installs of the app were not affected.
Note
No database reset is needed from v0.3.9. v0.3.10 changes no database table, column or core type. (Earlier limits are unchanged: v0.3.6 refused databases created by v0.3.4 and earlier, and may refuse ones from v0.3.5.)
Also in this release:
- The database registry is saved durably (the file and its folder are synced before the rename). An empty
databases.tomlis now reported as an error naming the file instead of loading as an empty registry. A missing file is still a first start. - The first-launch wizard's PATH step edits your shell rc file atomically, matches only the exact NodeSpace block it wrote, keeps file mode, symlinks and Windows line endings, and removes only that block.
- The launcher recognises its own background service when the install path contains a space, so a stale service is replaced.
- The .pkg installer works out the installing user from the console owner and no longer trusts
$USERorevals the user name. nodespace mcponly passes graph commands (node, search, query, mention, schema, relationship, conflicts, playbook, andskill get/skill guidance) to chat surfaces that have no shell. Session launch, import, installer, uninstall and similar commands are refused there. Single-file and batch import read only.mdand.markdownfiles, with a per-file size cap (10 MiB) and a total cap per batch.- Chat HTML is sanitised more strictly (form controls removed, network attributes dropped), mermaid and preview diagrams are rebuilt from an allow-list so a diagram cannot restyle or cover the app, and task-list checkboxes in chat show as
[x]and[ ]text. - Concurrent reorders to the end of a list no longer misorder siblings (the end position is now decided inside the write transaction).
- List limits for mention autocomplete, conflicts and skill search are capped; the stale
scripts/uninstall.shis removed (usenodespace uninstall).
Known open item: a daemon that fails to start because databases.toml is empty is restarted by launchd at its throttled rate until the file is fixed or deleted; the error names the file.
NodeSpace v0.3.9
Note
No database reset is needed from v0.3.8. v0.3.9 changes no database table, column or core type, so a database created by v0.3.8 opens as it is. (Earlier limits are unchanged: v0.3.6 refused databases created by v0.3.4 and earlier, and may refuse ones from v0.3.5.)
Note
Opening the app no longer restarts the background service. The launcher now recognises an unchanged service by where it came from, not by file size, so opening NodeSpace twice in a row keeps the same daemon running. On a .pkg install the machine-wide service is left alone. (#3853)
Also in this release:
- The first-launch wizard holds keyboard focus: Escape and Tab work inside it and typing no longer lands in the journal behind it (#3855).
- A restored Daily Journal tab reopens on today's date after the day changes (#3854).
- The AI chat model overlay shows download progress and survives a tab switch (#3857).
- Markdown tables render when you click away from the note (#3856).
- The sidebar hides system types and the seeded helper queries; the section is now called "Types and Views" (#3850, #3851, #3839).
- Links in notes only allow safe schemes, so
javascript:links show as plain text (#3863); chat HTML is sanitised more strictly (poster/background/cite, inline styles and remote media are removed) (#3866). nodespace skillfinds the skill installer in app-bundle and symlinked layouts and no longer prints a CI build path in errors (#3861, #3867); log lookups flag fallback log files and know the LaunchAgent log (#3862).- For extensions:
shell.modalOpentells an extension when a core dialog is open (#3865). For developers:NodeService::is_persistedand a non-cascadingdelete_leaf_nodeare available to Sync (#3860).
NodeSpace v0.3.8
Note
No database reset is needed from v0.3.7. v0.3.8 changes no database table, column or core type, so a database created by v0.3.7 opens as it is. (Earlier limits are unchanged: v0.3.6 refused databases created by v0.3.4 and earlier, and may refuse ones from v0.3.5.)
Note
Closing the NodeSpace window no longer stops the background service. Closing the window or pressing Cmd+Q ends the app window only; the daemon and its menu-bar icon keep running so the CLI and agent skills keep working. To stop NodeSpace completely, choose Quit from the menu-bar (tray) icon. (#3828)
Also in this release: the first-run PATH step now checks that the nodespace command resolves, writes your login shell's rc file when needed, tells you what it changed, and reminds you to restart open terminals. The CLI's "daemon not running" message now suggests the right restart step when the background service is installed, and shows the details when a database is incompatible. The daemon log file no longer contains colour codes. The local agent can create tasks and question tasks in one step and no longer claims a record was created when every create failed.
NodeSpace v0.3.7
Note
No database reset is needed from v0.3.6. v0.3.7 changes no database table, column or core type, so a database created by v0.3.6 opens as it is. (v0.3.6 itself refused databases created by v0.3.4 and earlier, and may refuse ones from v0.3.5; that has not changed.)
NodeSpace v0.3.7
Downloads
| Platform | File | Description |
|---|---|---|
| macOS (Apple Silicon) | NodeSpace_0.3.7_aarch64.dmg |
For M1/M2/M3 Macs -- the only supported macOS target |
| Windows | NodeSpace_0.3.7_x64-setup.exe |
Windows installer |
| Windows | NodeSpace_0.3.7_x64.msi |
Windows MSI package |
Installation
Download the appropriate file for your platform from the assets below.
What's Changed
- Write the Windows GUI log to its file directly and stop helper consoles flashing (closes #3768) by @malibio in #3773
- Trial an in-app debug bridge so agents can inspect the running Tauri app (closes #3739) by @malibio in #3776
- Add an Antigravity scenario driver and record its baseline (refs #3748) by @malibio in #3778
- Say that launching the Tauri app replaces the user's launchd job, and how to restore it by @malibio in #3779
- Create managed databases beside the manager's registry, not under the ambient home (closes #3780) by @malibio in #3781
- Give a schema a bound chat: explain the type, change it knowing what may change and what it breaks (closes #3742) by @malibio in #3782
- Add the tasks eval and fix the eval graph capture (#3763) by @malibio in #3783
- Fix the tasks eval seed aborting a run once an agent changes the done task by @malibio in #3787
- Hold a field change that a saved query or play names in core's update_schema (closes #3786) by @malibio in #3790
- Let the models directory be set independently of NODESPACE_HOME (#3791) by @malibio in #3792
- Add a Pi scenario driver and watch items read through a shell variable (refs #3748) by @malibio in #3793
- Detect an installed agent by its command on the path as well as its folder (refs #3748) by @malibio in #3794
- Re-baseline eval:agent on the corrected graph capture (closes #3789) by @malibio in #3800
- Eval preflight: read guidance provenance from the database, refuse to run beside another model (closes #3788) by @malibio in #3803
- Give Antigravity NodeSpace hooks, and run the harness scenario with them (closes #3777) by @malibio in #3802
- Test guidance provenance read-back against a real sqlite3 (closes #3801) by @malibio in #3804
- Review procedures: severity, delta re-review, defer criteria (closes #3795) by @malibio in #3806
- Hold a task create while a recorded decision may settle it (refs #3784) by @malibio in #3807
- Add a shared delivery-gates rule to the delivery procedures (closes #3796) by @malibio in #3805
- Ask the user when a write's ids do not resolve (closes #3808) by @malibio in #3809
- Add uncertain-start, deprecation and release-side procedures (closes #3797, #3798, #3799) by @malibio in #3811
- Route imported special folders under the import's top collection; show multi-parent collections under the most specific parent by @mstomar125 in #3813
- Bump version to v0.3.7 by @mstomar125 in #3814
- Install the Linux ARM release toolchain's systemd libraries at the host's version by @mstomar125 in #3818
Full Changelog: v0.3.6...v0.3.7
NodeSpace v0.3.6
Warning
v0.3.6 may refuse a database created by v0.3.5, and refuses any database created by v0.3.4 or earlier.
NodeSpace does not migrate databases between versions. On start, the daemon refuses a database created by a different version of NodeSpace ("this database was created by a different version of NodeSpace ... move this database aside and start with a fresh one") and stops without restarting. v0.3.5 reshaped the core types task and project (new core subtypes issue and software-project); this release also changes how the core issue type stores its status values.
What to do: move the old database aside and let NodeSpace create a fresh one. Nothing is carried over, so re-create or re-import what you need.
- Desktop app: the app shows the refusal and offers to move the database aside. It renames the file (and its
-wal/-shmfiles) next to itself with a timestamp; nothing is deleted. - CLI only (Homebrew
nodespace-cli, headless binaries): movenodespace.db, andnodespace.db-walandnodespace.db-shmif they exist, out of~/.nodespace/database/(or rename them), then start NodeSpace again.
NodeSpace v0.3.6
Downloads
| Platform | File | Description |
|---|---|---|
| macOS (Apple Silicon) | NodeSpace_0.3.6_aarch64.dmg |
For M1/M2/M3 Macs -- the only supported macOS target |
| Windows | NodeSpace_0.3.6_x64-setup.exe |
Windows installer |
| Windows | NodeSpace_0.3.6_x64.msi |
Windows MSI package |
Installation
Download the appropriate file for your platform from the assets below.
What's Changed
- Refuse a schema field named after a declared field behind a prefix (closes #3726, refs #3728) by @malibio in #3746
- Add a typed in-process write context and reserved client ids (refs #3435) by @mstomar125 in #3752
- A play's Edit chat describes the play first, and a reply is routed with the message it answers (closes #3738) by @malibio in #3747
- Move the inference engines into nlp-engine, with one prompt dump (closes #3744) by @malibio in #3755
- Make the bound chat one mechanism: a type supplies its describer, skill and options (closes #3741) by @malibio in #3756
- Adapt community planning workflows into NodeSpace skills (closes #3719) by @malibio in #3758
- Remove the superseded replicated-apply client id (closes #3435) by @mstomar125 in #3754
- Write planning sections as ordinary header and text nodes (closes #3757) by @malibio in #3760
- Shape a standalone task at creation; a question is a task that blocks (closes #3722) by @malibio in #3759
- Resolve the GGUF models directory through the daemon's NodeSpace home (closes #3761) by @malibio in #3762
- Refuse a change to a schema's fields through the generic node update (closes #3753) by @malibio in #3765
- Inherit a parent's enum values live when a subtype extends the field (closes #3749) by @malibio in #3764
- Give a saved query a bound chat: describe the view, answer what it can filter on (closes #3743) by @malibio in #3766
- Adapt the community implement and review workflows into delivery skills (closes #3720) by @malibio in #3767
- Classify semantic search failures by structured error variant (closes #2798) by @malibio in #3770
- Bump version to v0.3.6 by @mstomar125 in #3769
- Give Codex NodeSpace hooks, and run the harness scenario on Codex (refs #3748) by @malibio in #3775
- Release workflow: add the jammy-security ports pocket for the Linux ARM build by @mstomar125 in #3774
Full Changelog: v0.3.5...v0.3.6
NodeSpace v0.3.5
Warning
v0.3.5 cannot open a database created by v0.3.4 or any earlier version.
Who is affected: everyone who upgrades with an existing NodeSpace database: the default one at ~/.nodespace/database/nodespace.db, and any other database you added. NodeSpace does not migrate databases between versions, and this release changes the shape of two core types. On start, the daemon refuses an older database ("this database was created by a different version of NodeSpace ... move this database aside and start with a fresh one") and stops without restarting.
What to do: move the old database aside and let NodeSpace create a fresh one. Nothing is carried over, so re-create or re-import what you need.
- Desktop app: the app shows the refusal and offers to move the database aside. It renames the file (and its
-wal/-shmfiles) next to itself with a timestamp; nothing is deleted. - CLI only (Homebrew
nodespace-cli, headless binaries): movenodespace.db, andnodespace.db-walandnodespace.db-shmif they exist, out of~/.nodespace/database/(or rename them), then start NodeSpace again.
What changed in the shapes:
taskno longer haspull_requestorcommits. They are on the new core typeissue, a subtype oftask.projectno longer hasrepositoryorcheckout_path. They are on the new core typesoftware-project, a subtype ofproject.issueandsoftware-projectare now core types, so a database holding a type you created yourself under either name is refused too. The old seeded guidance used "issue extends task" as its example, so check for this.
Also new on write: a field named custom:X, org:X or plugin:X where X is a field the type already declares (for example custom:status on a task) is refused.
NodeSpace v0.3.5
Downloads
| Platform | File | Description |
|---|---|---|
| macOS (Apple Silicon) | NodeSpace_0.3.5_aarch64.dmg |
For M1/M2/M3 Macs -- the only supported macOS target |
| Windows | NodeSpace_0.3.5_x64-setup.exe |
Windows installer |
| Windows | NodeSpace_0.3.5_x64.msi |
Windows MSI package |
Installation
Download the appropriate file for your platform from the assets below.
What's Changed
- Refuse schema names whose derived id is a date (#3674) by @malibio in #3678
- Recognise multi-word type ids when repairing type-name links (closes #3675) by @malibio in #3679
- Open launched Pi and OpenCode sessions with the task's context, report their session id, attribute writes through the journal by @malibio in #3680
- Report a missing embedding model as non-retryable, not loading by @malibio in #3681
- Seeded attached_to links and context paths follow keep, take and reset by @malibio in #3682
- Resolve a display name sent as node_type to the one offered type it names (refs #3666) by @malibio in #3685
- Report a failed embedding model load as non-retryable on every search path by @malibio in #3686
- Leave record-type words out of entity resolution; update_node leaves a play's content to update_play by @malibio in #3687
- Rename the routing scenario id that said invoice for a feature-spec scenario (refs #3666) by @malibio in #3688
- Refuse a create whose title extends a mentioned record's title (refs #3668) by @malibio in #3690
- Run the Pi and OpenCode plugins in their harnesses; refuse an empty NODESPACE_SESSION by @malibio in #3691
- Product check compares supported extension ids, not the daemon's executable name by @malibio in #3692
- Replace a reply that reports a create as a change to an existing record (closes #3668) by @malibio in #3694
- Remove held-off-menu-type, whose premise is false (closes #3693) by @malibio in #3695
- List configured provider models in the AI-Chat selector without discovery (closes #3696) by @malibio in #3699
- Set htmlLabels: false at root of Mermaid config (closes #3698) by @malibio in #3700
- Do not mount the generic schema form for core primitive types (closes #3697) by @malibio in #3701
- One chat-selector row per configured provider; model suggestions in the provider form (closes #3696) by @malibio in #3702
- Remove the Available remote models list from Settings (closes #3696) by @malibio in #3703
- Answer task lookups by person correctly on the local model; narrow lookup turns to read-only context (refs #3706) by @malibio in #3707
- Ground project lookups, refuse relationship names as field values, log per-request cost (refs #3706, #3704; closes #3705) by @malibio in #3709
- Refuse starting a task without an approved spec; requires_spec light lane (closes #3710) by @malibio in #3715
- Make the lookup and assign paths hold on remote models; run the grounding eval against a remote provider (refs #3706, #3704) by @malibio in #3716
- Trim the lookup request: drop duplicated skill and schema text by @malibio in #3717
- Remove requires_spec from task; the spec rule applies only to a task that links a spec (closes #3718) by @malibio in #3725
- Correct the two Claude Code hooks to the worktree flow (closes #3724) by @malibio in #3736
- Add nodespace wait: block until a node or a saved query's result changes (closes #3723) by @malibio in #3737
- Accept node content that starts with a dash; give plugin sessions the project's queue filter; add the harness scenario (refs #3721) by @malibio in #3740
- Add the issue and software-project core subtypes; move the development fields off task and project (closes #3735) by @malibio in #3745
- Bump version to v0.3.5 by @mstomar125 in #3713
Full Changelog: v0.3.4...v0.3.5
NodeSpace v0.3.4
NodeSpace v0.3.4
Downloads
| Platform | File | Description |
|---|---|---|
| macOS (Apple Silicon) | NodeSpace_0.3.4_aarch64.dmg |
For M1/M2/M3 Macs -- the only supported macOS target |
| Windows | NodeSpace_0.3.4_x64-setup.exe |
Windows installer |
| Windows | NodeSpace_0.3.4_x64.msi |
Windows MSI package |
Installation
Download the appropriate file for your platform from the assets below.
What's Changed
- Test the agent's tool list against seeded tool nodes and warn on an empty surface by @malibio in #3457
- Send the proto's collection fields from the dev-proxy's node create and update by @malibio in #3456
- Keep archived nodes out of the @ mention picker by @malibio in #3459
- Seed the owner has_role edge with no role or status values by @malibio in #3458
- Add a node to a collection by path in browser mode by @malibio in #3465
- Drop project.status archived and the AI chat viewer's archived read-only gate by @malibio in #3468
- Agent references nodes as Title; chat shows the live title as a plain link by @malibio in #3467
- Report the dev-proxy's error message from the browser-mode collection service by @malibio in #3466
- Delete unused node models, plugins and compatibility shims by @malibio in #3469
- Add the core node type registry, shared envelope, closed schemas and extends-aware rules by @malibio in #3462
- Define the task types once and route the typed task update through the shared pipeline (closes #3441) by @malibio in #3470
- Constrain Gemma 4 tool-call argument keys and report malformed calls (#3268) by @malibio in #3463
- Generate the frontend's wire types from nodespace-types and gate them for drift by @malibio in #3471
- Declare collection description and show it in the agent's workspace context by @malibio in #3464
- Type project.status as a ProjectStatus enum with a user-value variant by @malibio in #3476
- Make one governance check decide whether an archived node participates anywhere by @malibio in #3473
- Give the agent the user's identity via the Workspace Context Template (closes #3266) by @malibio in #3478
- Split ai-chat into an abstract base with ai-chat-native and ai-chat-pty subtypes (closes #3446) by @malibio in #3472
- Read a cleared field as absent in play conditions (closes #3474) by @malibio in #3477
- Declare and enforce children and parent rules per node type (closes #3447) by @malibio in #3475
- Complete a type listing in the reply, and score eval groups whose setup state already exists (#3268) by @malibio in #3482
- Share one RelationshipPath compiled to SQL between queries and plays, and type play rules (closes #3449) by @malibio in #3481
- Type the message role and an edge field's type as enums (closes #3479) by @malibio in #3484
- Make PTY capture store a prose summary and the harness's own session id (closes #3454) by @malibio in #3487
- Give collection, skill and database-settings typed wire types and updates, and close project and query's gaps (closes #3453) by @malibio in #3488
- Give plays a user-owned enabled switch and persist engine suspensions (closes #3444) by @malibio in #3489
- Make SchemaNode one wire type that the store fills, with extends and relationships (closes #3442) by @malibio in #3490
- Store AI chat messages as ai-chat-message child nodes with real edges (closes #3448) by @malibio in #3491
- Spell QueryFilter and SortConfig keys snake_case in storage and on the wire (closes #3483) by @malibio in #3485
- Validate a subtype's inherited fields against the value that will be stored (closes #3486) by @malibio in #3492
- Seed built-ins from fixed-UUID tables with Markdown bodies, order agent guidance, and link skills to their schemas (closes #3418) by @malibio in #3495
- Make tool an abstract base with a tool-native subtype and drop source (closes #3450) by @malibio in #3496
- Name the record types a request names to Stage-1 routing (closes #1980) by @malibio in #3493
- Check node-types.md against the seeded core schemas in the merge gate (closes #3451) by @malibio in #3494
- Hold a routed turn's type arguments to the schemas its skills link to (closes #3419) by @malibio in #3497
- Route questions about stored knowledge as lookups and search before answering (closes #3265) by @malibio in #3480
- Return a record's set fields beside its markdown in get_node and search_semantic (closes #3501) by @malibio in #3503
- Seed the decision fixture instead of setup turns, name exclusion causes, and ask about a typeless duplicate create (closes #3500) by @malibio in #3504
- Keep Stage 1's type line for bare type requests, and assert the cases it decides (closes #3499) by @malibio in #3505
- Keep node ids from summarized turns grounded (closes #3508) by @malibio in #3510
- Let the merge queue land a branch that merged main (closes #3507) by @malibio in #3511
- Show a person's title in the viewer header on first open; stop logging tab clicks as failed drops by @malibio in #3523
- Hold update_node on a held turn to the offered types, by the target node's type (closes #3498) by @malibio in #3516
- Require a description on every play rule, condition and action, and reject stale ones by @malibio in #3529
- Stop the AI chat header truncating its title when there is room for it by @malibio in #3530
- Import a document's title as a plain text root; drop type icons from the collection member list by @malibio in #3531
- Drop the status dropdown from kanban cards and let a query node order its columns by @malibio in #3532
- Keep a type listing whose links escape their ids, and route start-tracking requests to Schema Creation (closes #3268) by @malibio in #3515
- Keep one set of tool-proven node ids on the agent session and check reply links against it alone by @malibio in #3534
- Collapsible saved views in the sidebar, relative dates in saved queries, and seeded current-cycle and active-sprint boards by @malibio in #3536
- Add PlayNodeViewer: a play's rules as a read-only workflow, with its on/off switch by @malibio in #3537
- Cap the expanded schema form and let it scroll; move Relationships to the form header with a count by @malibio in #3535
- Let agents fetch NodeSpace's skills and schemas by task, embed schemas, and render built-in skills per audience by @malibio in #3538
- Summarize related nodes in the form's summary row and move Relationships into the expanded form by @malibio in #3539
- Exclude conversations from search_nodes in the query, not by refetching after it by @malibio in #3548
- Add a Plays navigation section: list plays with their state and open them by @malibio in #3552
- Record each built-in tool's CLI command and return it with fetched skills; fetch one skill by name; version the skill list by @malibio in #3553
- Teach the native agent to author plays: a Play Authoring skill and typed get_play / update_play tools by @malibio in #3551
- Set a new issue's board status to Backlog when gh:create files it by @malibio in #3550
- Re-theme the decision eval into NodeSpace's developer-workflow domain by...
NodeSpace v0.3.3
NodeSpace v0.3.3: the first core-only release
Built from
mainat3b042b23(2026-10-01). It covers the 85 commits sincev0.3.2: 84 merged PRs and 1 direct commit(s). Each claim cites the PR, issue or ADR it comes from.
Headline
NodeSpace core is now the free product, and it contains no Pro code. All Pro UI, the Pro Tauri commands and protocol, the edition flags and the -pro daemon variants are gone. So are the sync and access-control state in the data model and the Pro guidance in the agent skill (#3417, #3422, #3423, #3424, #3425, #3420; umbrella #3412). From now on, Pro will be a separate app, built later on core's new extension points (ADR-081, ADR-082). It is not buildable yet: see Known gaps.
What core adds in its place:
- a "Want team collaboration? Contact us" card (#3425);
- a clean refusal for any database that needs an extension this app doesn't support. The app, the CLI and the tray all show it (#3426, #3427; umbrella #3413);
- daemon hardening: a single-instance lock (#3388) and an executable check at startup (#3403).
BREAKING: read before you upgrade
1. Database reset required
NodeSpace doesn't migrate databases. Every database created by v0.3.2 or earlier (including internal Pro builds) is refused by the new build's table-shape check:
- Table shape:
node.sync_seqandembedding.originare dropped, and so is the indexidx_emb_modified(#3424; #3382 had already removed it from the DDL). - Settings schema: the
database-settingsschema gains therequired_extensionsfield (#3426). Core seeds a schema only when it is missing, so an existing database never gets the field. - Removed schema fields: the settings node's sync fields (
sync_enabled,auth_status,bound_tenant_*) andcollection.restrictedToMembers(#3424).
What to do (macOS):
# 1. Quit NodeSpace, then stop the daemon (the new app registers it again on launch)
launchctl bootout gui/$(id -u)/app.nodespace.daemon
# 2. Move your old databases aside. Keep ~/.nodespace/models (the embedding model).
mv ~/.nodespace/database ~/.nodespace/database.pre-0.3.3
# 3. Delete the registry (see item 2)
rm -f ~/.nodespace/databases.toml
# 4. Install and launch the new build- Databases elsewhere: if you registered database files outside
~/.nodespace/database/(with--path, or "Open existing…"), move those aside too. - If you skip the reset: for the default database, the app shows "This database was created by a different version of NodeSpace and can't be opened". Start fresh… moves the file aside as
<name>.incompatible-<timestamp>and creates a new one. Nothing is deleted. - Windows: the same files are under
%USERPROFILE%\.nodespace. Stop thenodespacedprocess before you move them.
2. Delete ~/.nodespace/databases.toml
- The format changed (#3423). Each registry entry's tenant binding is replaced by an opaque
extensionsmap that holds strings only. - A non-string value now fails the whole registry load. The error is "extension key
<key>has a value of type …". - Old
bound_tenant_*lines would load as stray keys.
Don't carry the file forward. The daemon writes a new one with a fresh default database.
3. Remove leftovers from internal Pro builds (only if you ever ran one)
- Core no longer knows the
-pronames (#3422). The app doesn't clean them up, and neither doesnodespace uninstall. - A leftover Pro daemon can keep running under its own launchd job and socket, next to core's daemon.
- The new lock doesn't cover it. The single-instance lock (#3388) applies only to daemons on the same socket.
Clean up by hand:
launchctl bootout gui/$(id -u)/app.nodespace.daemon.pro 2>/dev/null
launchctl bootout gui/$(id -u)/app.nodespace.daemon.dev.pro 2>/dev/null
rm -f ~/Library/LaunchAgents/app.nodespace.daemon.pro.plist \
~/Library/LaunchAgents/app.nodespace.daemon.dev.pro.plist
rm -f ~/.nodespace/daemon-pro.sock ~/.nodespace/daemon-dev-pro.sock \
~/.nodespace/ui-pro.pid ~/.nodespace/ui-dev-pro.pid \
~/.nodespace/incompatible-database-pro.json ~/.nodespace/incompatible-database-dev-pro.json \
~/.nodespace/bin/nodespaced-pro
launchctl list | grep -i nodespace # anything other than app.nodespace.daemon(.dev) is a leftover- Where the names come from. The labels and file names are v0.3.2's Pro rows in
nodespace_proto::socketanddaemon_setup.rs. - Internal Pro
.pkginstalls. ADR-084 records that the internal Pro.pkgregisteredcom.nodespace.daemonand bounddaemon-default.sock. If either shows up, remove it too. - Without a guard, the core installer overwrites Pro. Installing this build replaces an installed internal Pro
NodeSpace.app(see Known gaps).
4. Delete the stale skill reference file by hand
- What changed. The agent skill no longer carries the multi-user "Shared Workspaces" guidance (#3420, #3370).
- Why the file survives. In this build, neither the skill installer nor
nodespace skill uninstalldeletes the old file, because core keeps no legacy cleanup for it. - Who needs this. Anyone who installed the skill from v0.2.10 to v0.3.2 should delete it from each agent:
- Claude Code:
~/.claude/skills/nodespace/references/shared-workspaces.md(or the same path under$CLAUDE_CONFIG_DIR) - Codex:
~/.codex/skills/nodespace/references/shared-workspaces.md - Antigravity:
~/.gemini/antigravity-cli/skills/nodespace/references/shared-workspaces.md - OpenCode:
~/.opencode/skills/nodespace/references/shared-workspaces.md - Pi:
~/.pi/agent/skills/nodespace/references/shared-workspaces.md
- Claude Code:
The app installs the skill once, on first launch, and an upgrade doesn't refresh it. To get the new SKILL.md, use Settings → Integrations → Reinstall Skill. It also installs the three playbook references that SKILL.md already linked but never installed (#3397).
5. Other breaking changes
nodespacedrejects unknown arguments (#3375).- It accepts only
--trayand--version. Anything else prints one line to stderr and exits 2, before it binds a socket.--helpused to start a daemon on your real database; it now exits 2. --editionis gone, and so is the daemon'sprocargo feature.
- It accepts only
- Wire and proto changes, with no compatibility across versions (ADR-082):
DatabaseInfoloses fields 8 and 9 (bound_tenant_schema,bound_tenant_collection), and no numbers are reserved (#3423).- the database status enum gains
DATABASE_STATUS_REQUIRES_EXTENSION = 3, andDatabaseInfogainsrepeated string unsupported_extensions = 11(#3426). GetDaemonVersionResponsegainsexecutable_path = 2(#3403).- The Pro proto is deleted (#3422).
project.priorityvalues change to the shared five-level scalehighest / high / medium / low / lowest, whichtaskalready uses. Sorting by priority ranks the values instead of sorting them alphabetically (#3253).- AI chats are no longer filed into an "AI Chats" collection. The personal collection, its privacy Play and the
personal_collection_idfield are removed. A new chat has nomember_ofedge and can be moved under a page. No node may reference an AI chat, as before (#3424, ADR-085). - Conflict journal: the
SupersededEditandDuplicateReactiveCreatekinds are removed. OnlyUniqueFieldCollisionandCollectionNameCollisionremain (#3424). - Settings and sidebar renames (#3271):
- "Schema Types" → "Node Types". Its saved expanded or collapsed state resets once.
- Settings "Work Tracking" → "Playbooks", now hidden behind a new Labs Playbooks switch that defaults to off. This only hides the settings; installed playbooks are untouched.
- AI Models settings appear only while Labs AI Chat is on.
- Query viewer (#3274):
- The "Edit Query" button, the query editor panel and the item-count pill are removed.
- Changing a type's Default view or its group-by no longer creates a query node; it is remembered locally instead. Renaming the view saves it as a query.
Removed
- Settings → Account, including the "NodeSpace Pro" card and Pro sign-in (#3425). In v0.3.2 it sat behind the Labs "Team synchronization" switch.
- The Labs "Team synchronization" switch (#3425). Its card is now the contact card (see New).
- Settings → Databases (#3377, #3425):
- "Add synced database…" action;
- the "Syncs to tenant · … / Local only" badge;
- other tenant and sync wording.
- The tray's "synced" label on databases (#3399).
- Never shipped. The workspace members, admission-approval and invite UI (#3291, #3293, #3295) landed on
mainafter v0.3.2. #3425 removed it again, so it is not in this release. - The Pro edition machinery (#3422):
- the 27
pro_*Tauri commands, the Pro client and the Pro proto; tauri.pro.conf.jsonand the startup tier probe (pro:tier-detected);- the
-prosockets, pid files, markers and launchd labels; - the
.pkgpostinstall--editionguard.
- the 27
- Skill: the "Shared Workspaces (Multi-User)" section and
references/shared-workspaces.md(#3420). - README: "Pro tier" becomes a pointer: "For team collaboration, contact developer@nodespace.ai" (#3420).
New
Contact card: "Want team collaboration? Contact us" (#3425)
- Where: Settings → Labs has a card that reads "Want team collaboration? Contact us". "Contact us" opens
mailto:developer@nodespace.aiin your mail app. - Privacy: core sends nothing and makes no network request for it.
- Slot: the card is the default content of the new replaceable slot
collaboration.entry, which a future Pro app fills with its own action (ADR-082 §3.2, ADR-084 §1).
Refusal of databases that need an unsupported extension (#3426, #3427)
A database's settings node can now list required_extensions. This build supports none, so it refuses any database that lists ...
NodeSpace v0.3.2
NodeSpace v0.3.2
Downloads
| Platform | File | Description |
|---|---|---|
| macOS (Apple Silicon) | NodeSpace_0.3.2_aarch64.dmg |
For M1/M2/M3 Macs -- the only supported macOS target |
| Windows | NodeSpace_0.3.2_x64-setup.exe |
Windows installer |
| Windows | NodeSpace_0.3.2_x64.msi |
Windows MSI package |
Installation
Download the appropriate file for your platform from the assets below.
What's Changed
- Propagate DB errors from resolve_reverse_segment instead of silently degrading by @mstomar125 in #2926
- Propagate resolver DB errors from cel_scope_for instead of folding into None by @mstomar125 in #2929
- Distinguish schema lookup failure from missing schema in play validation by @mstomar125 in #2928
- Make bulk write paths ADR-078 extends-chain aware by @mstomar125 in #2927
- Switch dark-mode visibility, disable Team sync toggle, sidebar cleanup by @malibio in #2932
- Re-queue the old embedding root when a node leaves its tree by @malibio in #2936
- Make check_node_completeness direction-aware for required in-relationships by @malibio in #2935
- Fix outdentNode dropping root reparent and sibling transfer (#2916) by @malibio in #2939
- Enforce cardinality-one on merge_nodes_in_tx's edge repoint by @mstomar125 in #2937
- Keep database-sourced nodes persisted under skipPersistence (closes #2940) by @malibio in #2944
- Implement .where(expr) collection filter for Play action bindings (#2847) by @malibio in #2949
- Make outdentNode sibling transfer atomic and roll back only what didn't commit (#2943) by @malibio in #2948
- Stop get_related_nodes 'both' fan-out double-counting reverse names by @malibio in #2947
- Structural guard against extends-chain-blindness call sites by @mstomar125 in #2946
- Harden rename_schema_field: in-tx validation, version bump, chunked closure by @malibio in #3030
- Commit move_children_to_parent's edge swap and version bumps in one transaction (closes #2950) by @malibio in #3029
- Extend tool-schema wire-key guard to relationships, edge fields and nested items (#2836) by @malibio in #3028
- Author seeded Playbook skill guidance as markdown files by @malibio in #3027
- Normalize relationship writes through an in-direction name to the forward edge by @malibio in #2951
- Stop update_schema and relabel from reverting a concurrent rename by @malibio in #3034
- Report store version conflicts as typed values, not parsed messages (closes #3032) by @malibio in #3035
- Type person and project nodes like task (closes #2807) by @malibio in #3033
- Validate node type and compute title in upsert create branch; drop test- id exemption by @malibio in #3038
- Remove dead NodeFilter/QueryNodesInput fields and the silent property-filter fetch cap by @malibio in #3039
- Protect the last inbound edge of a required in-direction relationship (closes #2942) by @malibio in #3041
- Notify wildcard subscribers on clearAll/restore, and notify clearAll from a pre-clear snapshot (closes #2975) by @malibio in #3042
- Release loaded chat model GPU state in the atexit handler (closes #2952) by @malibio in #3043
- Distinguish agent guard replacements by what the turn actually wrote (closes #2986) by @malibio in #3045
- Restrain heading type scale: H1 1.5rem ceiling, H4–H6 at body size (closes #2717) by @malibio in #3044
- Delete the dead UpsertNodeWithParent / save_node_with_parent path by @malibio in #3048
- Render schema relationships in EXISTING SCHEMAS and steer traversal to get_related_nodes (closes #2911) by @malibio in #3049
- Route completion-state updates to Graph Editing; keep route_clarify on Stage 2 (closes #2912) by @malibio in #3051
- Anchor cron lookback window on the previous check so slow checks leave no gap (closes #2987) by @malibio in #3053
- Promote one-cardinality relationships to form fields; exclude them from the Relationships modal (closes #2806) by @malibio in #3050
- Route import-progress events to the window showing the import's database (closes #3002) by @malibio in #3056
- Sequence per-node writes: no move wait cycle, keep queued field changes, one OCC notification (closes #3037) by @malibio in #3055
- Surface PTY StreamOutput broadcast lag to clients as a loss marker (closes #2985) by @malibio in #3057
- Emit a single JSON document from
nodespace model load --json(closes #2972) by @malibio in #3060 - Reject content on node types that have a title_template (closes #3052) by @malibio in #3065
- Flush waits on the node's current pending write and never deletes an entry it did not start (closes #3059) by @malibio in #3061
- Route the restored database at startup before mounting the workspace (closes #3058) by @malibio in #3066
- Author bare inbound many-to-many edges from either end (closes #2805) by @malibio in #3064
- waitForPersistence follows a replaced queued write to its replacement (closes #3062) by @malibio in #3070
- Compose PersonSchemaForm through TypedFormShell; schema-driven unique-field suggestion (closes #2808) by @malibio in #3068
- Reload the conflict journal on database switch and start the startup notice after routing (closes #3067) by @malibio in #3069
- Single-source the heading type scale as CSS tokens (closes #3046) by @malibio in #3073
- Bound PTY session RPCs with a client-side timeout (closes #2988) by @malibio in #3072
- Hand the executing marker to the queued write so a gap persist() queues behind it (closes #3063) by @malibio in #3078
- Empty header nodes hold their heading level's line height (closes #3074) by @malibio in #3082
- Skip createNode child transfer when the new node's save fails (closes #3071) by @malibio in #3081
- Surface cardinality-one replacements across core, CLI, agent and viewer (closes #2910) by @malibio in #3079
- Retitle Conflict Resolution skill to Conflict Journal so "resolved" deletions reach delete_node (closes #3054) by @malibio in #3077
- Single-source the root-only membership rule for both guard twins (closes #2977) by @malibio in #3083
- Enforce the container-type check in move_node_unchecked (closes #3011) by @malibio in #3085
- Wait for the second persisted write in the Kanban drag-move browser test (closes #3080) by @malibio in #3086
- Faster test gate: scoped push checks, one warm merge gate, nextest, build cache (closes #3087) by @malibio in #3088
- Drop the nodespace/gate commit status; no branch protection (closes #3089) by @malibio in #3090
- Write config.json atomically under a read-modify-write lock (closes #2991) by @malibio in #3092
- Keep merge_nodes inside the tree invariants (closes #2938) by @malibio in #3094
- Rebalance siblings before inserting into a collapsed order gap (closes #2974) by @malibio in #3091
- Guard embedding input length against the context window (closes #2969) by @malibio in #3100
- Relay model load progress over SSE in browser dev mode (closes #2983) by @malibio in #3103
- Refuse deleting an extende...
NodeSpace v0.3.1
NodeSpace v0.3.1
Bug-fix release. Fixes real-device install/release issues reported against v0.3.0, plus a broad correctness pass on schema subtyping (extends, ADR-078) surfaced by deep review of the last release cycle.
Fixed — release/install
- macOS
.pkginstaller failed to launch after install. The packaging script never set the executable bit on the app bundle's binaries after copying them (most likely lost in a CI artifact hand-off) — the.dmginstall path was unaffected. Installing via.pkgnow works correctly, verified against a real signed/notarized build. - Windows
.msiinstaller shipped without the embedding model, making it a fraction of its expected size. The release build now downloads the model before bundling, both in CI and in the local build scripts; verified against a real Windows device. - Labs feature-flag toggles (AI Chat, Team synchronization) are confirmed working correctly in a real packaged build — the earlier report turned out to be a downstream symptom of the
.pkglaunch failure above, not a toggle bug. - Settings → Account no longer shows any "NodeSpace Pro" branding when the Team synchronization Labs flag is off, matching the intended zero-Pro-references default; the sync "under heavy development" notice now appears in the two places a user can actually reach it (Labs, and Account once the flag is on).
Fixed — schema subtyping (extends / ADR-078) correctness
A recurring bug class was found and closed across roughly a dozen call sites this cycle: code that checked only a node's own directly-declared schema instead of the full inherited (extends-chain-merged) set. Fixed across: relationship read/write validation (create, delete, update, cardinality enforcement), schema redeclaration checks (field vs. field, relationship vs. relationship, and cross-domain field vs. relationship), duplicate/unique-field detection, node-completeness checks, title-template rendering, field renaming, and Play/CEL condition evaluation. Also closed a genuine pre-existing race condition in the node service's core transaction primitive, found while making one of these fixes atomic.
Installation
Download the appropriate file for your platform from the assets below. macOS builds are notarized; the app will run without a Gatekeeper warning.