@holochain/hc-spin 0.600.2-rc.0 → 0.601.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.
package/CHANGELOG.md CHANGED
@@ -4,10 +4,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
5
  ## \[Unreleased\]
6
6
 
7
- ### Added
8
- ### Fixed
7
+ ## 2026-05-14: v0.601.0
8
+
9
+ ### Changed
10
+
11
+ - Bumped to holochain 0.6.1
12
+
13
+ ## 2026-02-13: v0.600.3-rc.0
14
+
9
15
  ### Changed
16
+ - Holochain is now run with the iroh transport. The argument `--signaling-url` has been replaced with `--relay-url`.
10
17
  ### Removed
18
+ - Removed CLI option `--transport` as holochain is run with `quic` iroh transport.
19
+
20
+ ## 2026-01-22: v0.600.2-rc.0
21
+
22
+ ### Changed
23
+ - Added a CLI option `--transport` to choose between `quic` and `webrtc`. `quic` is used in combination with the iroh transport in Holochain, `webrtc` with tx5. The default transport in Holochain is iroh, so the default for hc-spin is `quic`. If no transport option is passed in on the command line, `quic` is used.
11
24
 
12
25
  ## 2026-01-22: v0.600.1-rc.0
13
26
 
package/README.md CHANGED
@@ -50,7 +50,7 @@ Options:
50
50
  --network-seed <string> Install the app with a specific network seed.
51
51
  --ui-path <path> Path to the folder containing the index.html of the webhapp's UI.
52
52
  --ui-port <number> Port pointing to a localhost dev server that serves your UI assets.
53
- --signaling-url <url> Url of the signaling server to use. By default, hc spin spins up a local development signaling server for you
53
+ --relay-url <url> Url of the relay server to use. By default, hc spin spins up a local development relay server for you
54
54
  but this argument allows you to specify a custom one.
55
55
  --open-devtools Automatically open the devtools on startup.
56
56
  -h, --help display help for command
@@ -12442,8 +12442,7 @@ function validateCliArgs(cliArgs, cliOpts, appDataRootDir) {
12442
12442
  singalingUrl: cliOpts.signalingUrl,
12443
12443
  bootstrapUrl: cliOpts.bootstrapUrl,
12444
12444
  happOrWebhappPath: isHapp ? { type: "happ", path: happOrWebhappPath } : { type: "webhapp", path: happOrWebhappPath },
12445
- openDevtools: cliOpts.openDevtools ? true : false,
12446
- transport: cliOpts.transport || "quic"
12445
+ openDevtools: cliOpts.openDevtools ? true : false
12447
12446
  };
12448
12447
  }
12449
12448
  async function createHappWindow(uiSource, appId, agentNum, appPort, appAuthToken, appDataRootDir) {
@@ -12564,7 +12563,7 @@ function setLinkOpenHandlers(browserWindow) {
12564
12563
  }
12565
12564
  const rustUtils = require("@holochain/hc-spin-rust-utils");
12566
12565
  const cli = new commander.Command();
12567
- cli.name("hc-spin").description("CLI to run Holochain apps during development.").version(`${"0.600.2-rc.0"} (built for holochain ${"0.6.1-rc.0"})`).argument(
12566
+ cli.name("hc-spin").description("CLI to run Holochain apps during development.").version(`${"0.600.0"} (built for holochain ${"0.6.0"})`).argument(
12568
12567
  "<path>",
12569
12568
  "Path to .webhapp or .happ file to launch. If a .happ file is passed, either a UI path must be specified via --ui-path or a port pointing to a localhost server via --ui-port"
12570
12569
  ).option(
@@ -12588,10 +12587,7 @@ cli.name("hc-spin").description("CLI to run Holochain apps during development.")
12588
12587
  ).option(
12589
12588
  "--signaling-url <url>",
12590
12589
  "Url of the signaling server to use. By default, hc spin spins up a local development signaling server for you but this argument allows you to specify a custom one."
12591
- ).option("--open-devtools", "Automatically open the devtools on startup.").option(
12592
- "--transport <quic|webrtc>",
12593
- "Configure network transport. Defaults to quic, compatible with the iroh transport used in in Holochain by default. Set to `webrtc` for tx5 transport."
12594
- );
12590
+ ).option("--open-devtools", "Automatically open the devtools on startup.");
12595
12591
  cli.parse();
12596
12592
  const rl = require("readline").createInterface({
12597
12593
  input: process.stdin,
@@ -12664,7 +12660,7 @@ const handleSignZomeCall = async (e, request) => {
12664
12660
  };
12665
12661
  return signedZomeCall;
12666
12662
  };
12667
- async function startLocalServices(transport) {
12663
+ async function startLocalServices() {
12668
12664
  const localServicesHandle = childProcess__namespace.spawn("kitsune2-bootstrap-srv");
12669
12665
  return new Promise((resolve) => {
12670
12666
  let bootStrapUrl;
@@ -12676,7 +12672,7 @@ async function startLocalServices(transport) {
12676
12672
  if (line.includes("#kitsune2_bootstrap_srv#listening#")) {
12677
12673
  const hostAndPort = line.split("#kitsune2_bootstrap_srv#listening#")[1].split("#")[0];
12678
12674
  bootStrapUrl = `http://${hostAndPort}`;
12679
- signalUrl = transport === "quic" ? `http://${hostAndPort}` : `ws://${hostAndPort}`;
12675
+ signalUrl = `ws://${hostAndPort}`;
12680
12676
  }
12681
12677
  if (line.includes("#kitsune2_bootstrap_srv#running#")) {
12682
12678
  bootstrapRunning = true;
@@ -12690,7 +12686,7 @@ async function startLocalServices(transport) {
12690
12686
  });
12691
12687
  });
12692
12688
  }
12693
- async function spawnSandboxes(nAgents, happPath, bootStrapUrl, signalUrl, appId, transport, networkSeed, targetArcFactor) {
12689
+ async function spawnSandboxes(nAgents, happPath, bootStrapUrl, signalUrl, appId, networkSeed, targetArcFactor) {
12694
12690
  const generateArgs = [
12695
12691
  "sandbox",
12696
12692
  "--piped",
@@ -12715,7 +12711,7 @@ async function spawnSandboxes(nAgents, happPath, bootStrapUrl, signalUrl, appId,
12715
12711
  if (targetArcFactor !== void 0) {
12716
12712
  generateArgs.push("--target-arc-factor", targetArcFactor.toString());
12717
12713
  }
12718
- generateArgs.push("--bootstrap", bootStrapUrl, transport, signalUrl);
12714
+ generateArgs.push("--bootstrap", bootStrapUrl, "webrtc", signalUrl);
12719
12715
  let readyConductors = 0;
12720
12716
  const portsInfo = {};
12721
12717
  const sandboxPaths = [];
@@ -12759,14 +12755,13 @@ electron.app.whenReady().then(async () => {
12759
12755
  happTargetDir
12760
12756
  );
12761
12757
  }
12762
- const [bootstrapUrl, signalingUrl] = await startLocalServices(CLI_OPTS.transport);
12758
+ const [bootstrapUrl, signalingUrl] = await startLocalServices();
12763
12759
  const [sandboxHandle, sandboxPaths, portsInfo] = await spawnSandboxes(
12764
12760
  CLI_OPTS.numAgents,
12765
12761
  happTargetDir ? happTargetDir : CLI_OPTS.happOrWebhappPath.path,
12766
12762
  CLI_OPTS.bootstrapUrl ? CLI_OPTS.bootstrapUrl : bootstrapUrl,
12767
12763
  CLI_OPTS.singalingUrl ? CLI_OPTS.singalingUrl : signalingUrl,
12768
12764
  CLI_OPTS.appId,
12769
- CLI_OPTS.transport,
12770
12765
  CLI_OPTS.networkSeed,
12771
12766
  CLI_OPTS.targetArcFactor
12772
12767
  );
package/flake.lock CHANGED
@@ -2,11 +2,11 @@
2
2
  "nodes": {
3
3
  "crane": {
4
4
  "locked": {
5
- "lastModified": 1768873933,
6
- "narHash": "sha256-CfyzdaeLNGkyAHp3kT5vjvXhA1pVVK7nyDziYxCPsNk=",
5
+ "lastModified": 1778106249,
6
+ "narHash": "sha256-cM/AuKy5tMhwOOQIbha8ZRRMHVfNf7cv2aljIw+qoCg=",
7
7
  "owner": "ipetkov",
8
8
  "repo": "crane",
9
- "rev": "0bda7e7d005ccb5522a76d11ccfbf562b71953ca",
9
+ "rev": "6d015ea29630b7ad2402841386da2cb617a470a7",
10
10
  "type": "github"
11
11
  },
12
12
  "original": {
@@ -20,11 +20,11 @@
20
20
  "nixpkgs-lib": "nixpkgs-lib"
21
21
  },
22
22
  "locked": {
23
- "lastModified": 1768135262,
24
- "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
23
+ "lastModified": 1777988971,
24
+ "narHash": "sha256-qIoWPDs+0/8JecyYgE3gpKQxW/4bLW/gp45vow9ioCQ=",
25
25
  "owner": "hercules-ci",
26
26
  "repo": "flake-parts",
27
- "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
27
+ "rev": "0678d8986be1661af6bb555f3489f2fdfc31f6ff",
28
28
  "type": "github"
29
29
  },
30
30
  "original": {
@@ -36,16 +36,16 @@
36
36
  "hc-scaffold": {
37
37
  "flake": false,
38
38
  "locked": {
39
- "lastModified": 1769104114,
40
- "narHash": "sha256-Ebh8YW7J4VRAwhK9XQDf98nWAIvciddzdx7LbhZiwdI=",
39
+ "lastModified": 1774456561,
40
+ "narHash": "sha256-CQ3HUE++iyLWJFK9wt2TeusmbuLavGxF8kxnv8mMsVw=",
41
41
  "owner": "holochain",
42
42
  "repo": "scaffolding",
43
- "rev": "6749c80d54306e4c1ad5831ce2dbdbb9a283ee0c",
43
+ "rev": "3329e3c01572dc525ee95caa3d179dc659134572",
44
44
  "type": "github"
45
45
  },
46
46
  "original": {
47
47
  "owner": "holochain",
48
- "ref": "v0.600.1-rc.0",
48
+ "ref": "v0.600.3-rc.0",
49
49
  "repo": "scaffolding",
50
50
  "type": "github"
51
51
  }
@@ -53,16 +53,16 @@
53
53
  "holochain": {
54
54
  "flake": false,
55
55
  "locked": {
56
- "lastModified": 1769035817,
57
- "narHash": "sha256-PVUIsifOy6fRcceBZraLKrPwq83MzRYyfuxDCohv514=",
56
+ "lastModified": 1778596880,
57
+ "narHash": "sha256-uUJZkeqBAZgXtDf0juCRpKOUO3yY1gWEKWGqatWcVjY=",
58
58
  "owner": "holochain",
59
59
  "repo": "holochain",
60
- "rev": "b499bd881580f9e0dd8f4494aafd4b2093a06168",
60
+ "rev": "3bdeaccd1c54fa351e76f7347601dfbc061d5bd4",
61
61
  "type": "github"
62
62
  },
63
63
  "original": {
64
64
  "owner": "holochain",
65
- "ref": "holochain-0.6.1-rc.0",
65
+ "ref": "holochain-0.6.1",
66
66
  "repo": "holochain",
67
67
  "type": "github"
68
68
  }
@@ -79,11 +79,11 @@
79
79
  "rust-overlay": "rust-overlay"
80
80
  },
81
81
  "locked": {
82
- "lastModified": 1769121828,
83
- "narHash": "sha256-o1GUUg9FUADcTOU4gzDDtiuJo61PyrQHCn0e64HRJYU=",
82
+ "lastModified": 1778614884,
83
+ "narHash": "sha256-Kxgtrs15iA9D0f4Sj/rt/yVRYk+Ew8TxeQrmMdYO0Qg=",
84
84
  "owner": "holochain",
85
85
  "repo": "holonix",
86
- "rev": "3e2a4b96b177aaaa233fd744ba82bfe308e85635",
86
+ "rev": "9931f18ccf9721fc5469fd3ae9d5bb118a6bac5a",
87
87
  "type": "github"
88
88
  },
89
89
  "original": {
@@ -96,16 +96,16 @@
96
96
  "kitsune2": {
97
97
  "flake": false,
98
98
  "locked": {
99
- "lastModified": 1768402558,
100
- "narHash": "sha256-v7uEmcVGC6tDjrkEZHMJa9DdXnqXwwVxJx9GkZq9P/U=",
99
+ "lastModified": 1778073766,
100
+ "narHash": "sha256-/hG+/9VlZiC1u/UASbIOH0oeiUmKlzqvur++CWSVAbQ=",
101
101
  "owner": "holochain",
102
102
  "repo": "kitsune2",
103
- "rev": "2b809bcf0bff3d493cd5ba230677240432fff58a",
103
+ "rev": "b33fa55606f8bd5020cffacf1ffae41f92d4d296",
104
104
  "type": "github"
105
105
  },
106
106
  "original": {
107
107
  "owner": "holochain",
108
- "ref": "2b809bcf0bff3d493cd5ba230677240432fff58a",
108
+ "ref": "v0.4.1",
109
109
  "repo": "kitsune2",
110
110
  "type": "github"
111
111
  }
@@ -129,11 +129,11 @@
129
129
  },
130
130
  "nixpkgs": {
131
131
  "locked": {
132
- "lastModified": 1768940263,
133
- "narHash": "sha256-sJERJIYTKPFXkoz/gBaBtRKke82h4DkX3BBSsKbfbvI=",
132
+ "lastModified": 1778430510,
133
+ "narHash": "sha256-Ti+ZBvW6yrWWAg2szExVTwCd4qOJ3KlVr1tFHfyfi8Q=",
134
134
  "owner": "nixos",
135
135
  "repo": "nixpkgs",
136
- "rev": "3ceaaa8bc963ced4d830e06ea2d0863b6490ff03",
136
+ "rev": "8fd9daa3db09ced9700431c5b7ad0e8ba199b575",
137
137
  "type": "github"
138
138
  },
139
139
  "original": {
@@ -145,11 +145,11 @@
145
145
  },
146
146
  "nixpkgs-lib": {
147
147
  "locked": {
148
- "lastModified": 1765674936,
149
- "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=",
148
+ "lastModified": 1777168982,
149
+ "narHash": "sha256-GOkGPcboWE9BmGCRMLX3worL4EMnsnG8MyKmXNeYuhQ=",
150
150
  "owner": "nix-community",
151
151
  "repo": "nixpkgs.lib",
152
- "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85",
152
+ "rev": "f5901329dade4a6ea039af1433fb087bd9c1fe14",
153
153
  "type": "github"
154
154
  },
155
155
  "original": {
@@ -179,11 +179,11 @@
179
179
  ]
180
180
  },
181
181
  "locked": {
182
- "lastModified": 1768963622,
183
- "narHash": "sha256-n6VHiUgrYD9yjagzG6ncVVqFbVTsKCI54tR9PNAFCo0=",
182
+ "lastModified": 1778555852,
183
+ "narHash": "sha256-55EmwooVAS4UpA0oWd5wilKPRqCiHD5BAej9QiNwheY=",
184
184
  "owner": "oxalica",
185
185
  "repo": "rust-overlay",
186
- "rev": "2ef5b3362af585a83bafd34e7fc9b1f388c2e5e2",
186
+ "rev": "f29b0f7a9f367e0056b716f8aa137cb41e784444",
187
187
  "type": "github"
188
188
  },
189
189
  "original": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@holochain/hc-spin",
3
- "version": "0.600.2-rc.0",
4
- "holochainVersion": "0.6.1-rc.0",
3
+ "version": "0.601.0",
4
+ "holochainVersion": "0.6.1",
5
5
  "description": "CLI to run Holochain apps during development.",
6
6
  "author": "matthme",
7
7
  "homepage": "https://developer.holochain.org",
@@ -36,7 +36,7 @@
36
36
  "@electron-toolkit/preload": "^3.0.0",
37
37
  "@electron-toolkit/utils": "^3.0.0",
38
38
  "@holochain/client": "^0.20.0",
39
- "@holochain/hc-spin-rust-utils": "0.601.1-rc.0",
39
+ "@holochain/hc-spin-rust-utils": "0.601.1",
40
40
  "@msgpack/msgpack": "^2.8.0",
41
41
  "bufferutil": "4.0.8",
42
42
  "commander": "11.1.0",
package/src/main/index.ts CHANGED
@@ -21,7 +21,7 @@ import path from 'path';
21
21
  import split from 'split';
22
22
 
23
23
  import { menu } from './menu';
24
- import { Transport, validateCliArgs } from './validateArgs';
24
+ import { validateCliArgs } from './validateArgs';
25
25
  import { createHappWindow, loadHappWindow } from './windows';
26
26
 
27
27
  const rustUtils = require('@holochain/hc-spin-rust-utils');
@@ -63,14 +63,10 @@ cli
63
63
  'Port pointing to a localhost dev server that serves your UI assets.',
64
64
  )
65
65
  .option(
66
- '--signaling-url <url>',
67
- 'Url of the signaling server to use. By default, hc spin spins up a local development signaling server for you but this argument allows you to specify a custom one.',
66
+ '--relay-url <url>',
67
+ 'Url of the relay server to use. By default, hc spin spins up a local development relay server for you but this argument allows you to specify a custom one.',
68
68
  )
69
- .option('--open-devtools', 'Automatically open the devtools on startup.')
70
- .option(
71
- '--transport <quic|webrtc>',
72
- 'Configure network transport. Defaults to quic, compatible with the iroh transport used in in Holochain by default. Set to `webrtc` for tx5 transport.',
73
- );
69
+ .option('--open-devtools', 'Automatically open the devtools on startup.');
74
70
 
75
71
  cli.parse();
76
72
  // console.log('Got CLI opts: ', cli.opts());
@@ -175,26 +171,26 @@ const handleSignZomeCall = async (
175
171
  return signedZomeCall;
176
172
  };
177
173
 
178
- async function startLocalServices(transport: Transport): Promise<[string, string]> {
174
+ async function startLocalServices(): Promise<[string, string]> {
179
175
  const localServicesHandle = childProcess.spawn('kitsune2-bootstrap-srv');
180
176
  return new Promise((resolve) => {
181
177
  let bootStrapUrl;
182
- let signalUrl;
178
+ let relayUrl;
183
179
  let bootstrapRunning = false;
184
- let signalRunnig = false;
180
+ let relayRunning = false;
185
181
  localServicesHandle.stdout.pipe(split()).on('data', async (line: string) => {
186
182
  console.log(`[hc-spin] | [kitsune2-bootstrap-srv]: ${line}`);
187
183
  if (line.includes('#kitsune2_bootstrap_srv#listening#')) {
188
184
  const hostAndPort = line.split('#kitsune2_bootstrap_srv#listening#')[1].split('#')[0];
189
185
  bootStrapUrl = `http://${hostAndPort}`;
190
- signalUrl = transport === 'quic' ? `http://${hostAndPort}` : `ws://${hostAndPort}`;
186
+ relayUrl = `http://${hostAndPort}`;
191
187
  }
192
188
  if (line.includes('#kitsune2_bootstrap_srv#running#')) {
193
189
  bootstrapRunning = true;
194
- signalRunnig = true;
190
+ relayRunning = true;
195
191
  }
196
- if (bootstrapRunning && signalRunnig && bootStrapUrl && signalUrl)
197
- resolve([bootStrapUrl, signalUrl]);
192
+ if (bootstrapRunning && relayRunning && bootStrapUrl && relayUrl)
193
+ resolve([bootStrapUrl, relayUrl]);
198
194
  });
199
195
  localServicesHandle.stderr.pipe(split()).on('data', async (line: string) => {
200
196
  console.log(`[hc-spin] | [hc run-local-services] ERROR: ${line}`);
@@ -211,9 +207,8 @@ async function spawnSandboxes(
211
207
  nAgents: number,
212
208
  happPath: string,
213
209
  bootStrapUrl: string,
214
- signalUrl: string,
210
+ relayUrl: string,
215
211
  appId: string,
216
- transport: Transport,
217
212
  networkSeed?: string,
218
213
  targetArcFactor?: number,
219
214
  ): Promise<
@@ -244,7 +239,7 @@ async function spawnSandboxes(
244
239
  if (targetArcFactor !== undefined) {
245
240
  generateArgs.push('--target-arc-factor', targetArcFactor.toString());
246
241
  }
247
- generateArgs.push('--bootstrap', bootStrapUrl, transport, signalUrl);
242
+ generateArgs.push('--bootstrap', bootStrapUrl, 'quic', relayUrl);
248
243
 
249
244
  let readyConductors = 0;
250
245
  const portsInfo: Record<number, PortsInfo> = {};
@@ -306,15 +301,14 @@ app.whenReady().then(async () => {
306
301
  );
307
302
  }
308
303
 
309
- const [bootstrapUrl, signalingUrl] = await startLocalServices(CLI_OPTS.transport);
304
+ const [bootstrapUrl, relayUrl] = await startLocalServices();
310
305
 
311
306
  const [sandboxHandle, sandboxPaths, portsInfo] = await spawnSandboxes(
312
307
  CLI_OPTS.numAgents,
313
308
  happTargetDir ? happTargetDir : CLI_OPTS.happOrWebhappPath.path,
314
309
  CLI_OPTS.bootstrapUrl ? CLI_OPTS.bootstrapUrl : bootstrapUrl,
315
- CLI_OPTS.singalingUrl ? CLI_OPTS.singalingUrl : signalingUrl,
310
+ CLI_OPTS.relayUrl ? CLI_OPTS.relayUrl : relayUrl,
316
311
  CLI_OPTS.appId,
317
- CLI_OPTS.transport,
318
312
  CLI_OPTS.networkSeed,
319
313
  CLI_OPTS.targetArcFactor,
320
314
  );
@@ -11,10 +11,9 @@ export type CliOpts = {
11
11
  targetArcFactor?: number;
12
12
  uiPath?: string;
13
13
  uiPort?: number;
14
- signalingUrl?: string;
14
+ relayUrl?: string;
15
15
  bootstrapUrl?: string;
16
16
  openDevtools?: boolean;
17
- transport?: Transport;
18
17
  };
19
18
 
20
19
  export type CliOptsValidated = {
@@ -24,15 +23,12 @@ export type CliOptsValidated = {
24
23
  networkSeed: string | undefined;
25
24
  targetArcFactor: number | undefined;
26
25
  uiSource: UISource;
27
- singalingUrl: string | undefined;
26
+ relayUrl: string | undefined;
28
27
  bootstrapUrl: string | undefined;
29
28
  happOrWebhappPath: HappOrWebhappPath;
30
29
  openDevtools: boolean;
31
- transport: Transport;
32
30
  };
33
31
 
34
- export type Transport = 'quic' | 'webrtc';
35
-
36
32
  export type HappOrWebhappPath = {
37
33
  type: 'happ' | 'webhapp';
38
34
  path: string;
@@ -102,12 +98,11 @@ export function validateCliArgs(
102
98
  : cliOpts.uiPort
103
99
  ? { type: 'port', port: cliOpts.uiPort }
104
100
  : { type: 'path', path: path.join(appDataRootDir, 'apps', appId, 'ui') },
105
- singalingUrl: cliOpts.signalingUrl,
101
+ relayUrl: cliOpts.relayUrl,
106
102
  bootstrapUrl: cliOpts.bootstrapUrl,
107
103
  happOrWebhappPath: isHapp
108
104
  ? { type: 'happ', path: happOrWebhappPath }
109
105
  : { type: 'webhapp', path: happOrWebhappPath },
110
106
  openDevtools: cliOpts.openDevtools ? true : false,
111
- transport: cliOpts.transport || 'quic',
112
107
  };
113
108
  }