I'm concerned about the state of gSender

Technical Debt Assessment & Offer to Help

Hi team,

I’ve been using gSender and recently took a deep dive into the codebase. I’d love to contribute, but before opening any large PRs, I wanted to share some findings and gauge your appetite for accepting significant refactoring work.

Summary of Findings

After auditing the codebase, I found three areas of concern:

1. Dependency Health

Running yarn install produces 100+ deprecation warnings. Some of these have real implications for a CNC controller:

Issue Impact
core-js@2.x in dependency tree V8 feature detection can cause up to 100x slowdown
inflight@1.0.6 (via old glob) Known memory leak - problematic for long-running jobs
Duplicate packages react-beautiful-dnd + @dnd-kit, superagent + axios, xterm + @xterm/xterm
Webpack 4, ESLint 5 4-5 major versions behind, missing perf improvements and bug fixes

Several packages are abandoned (bcrypt-nodejs, react-router-redux, webappengine) or pull in heavy deprecated chains (quick-local-ip brings in ancient mocha, jade, glob@3).

2. Test Coverage

For a safety-critical application that controls physical machinery, test coverage is minimal:

  • 6 unit test files (~56 tests) for 700+ source files

  • 1 frontend test (smoke test that just checks if <App /> renders)

  • 11 Cypress specs (connection and jogging only)

Critical paths with zero test coverage:

  • Serial connection handling (Connection.js)

  • G-code transmission (Sender.js, Feeder.js)

  • grblHAL controller (entire implementation)

  • Probe operations (crash risk if calculations are wrong)

  • Firmware flashing

  • All 19 API endpoints

3. Mixed TypeScript/JavaScript

The frontend is ~63% TypeScript, but the server (where all the CNC communication happens) is entirely JavaScript with no type definitions. This makes refactoring risky and bugs harder to catch.

Why This Matters

For a desktop app controlling expensive machinery and potentially dangerous tools:

  • A memory leak during a 4-hour carve could crash the job

  • Performance hiccups during active cutting could affect quality

  • Untested probe logic could crash the bit into the workpiece

  • Untested G-code sender could send malformed commands

I Want to Help

I’m willing to put in significant effort to help address these issues. I could work on:

  1. Dependency cleanup - Eliminate core-js@2, inflight, duplicate packages

  2. Testing infrastructure - Set up Vitest, create serial port mocks, write tests for critical paths

  3. Webpack 5 migration - Update build tooling

  4. Incremental TypeScript - Add types to server code starting with API contracts

Questions for Maintainers

Before I invest time in large PRs:

  1. Are significant refactoring PRs welcome? I understand large PRs are harder to review, but some of this work (webpack migration, dependency cleanup) is inherently large.
  2. What’s your preferred approach? Would you rather see:
  • One large PR per theme (e.g., “dependency cleanup”)
  • Many small PRs (more review overhead but easier to digest)
  • A feature branch I work on that you periodically review
  1. Are there areas that are off-limits or need special care? Any sacred cows or “here be dragons” zones I should know about?
  2. Is there an existing roadmap or priorities? Happy to align my efforts with what you’re already planning.

I’ve written up a detailed analysis document that I can share if you’re interested. It includes specific packages to address, priority ordering, and suggested phases.

Looking forward to hearing your thoughts. Happy to discuss any of this further.

Cheers

9 Likes

Your first link seems broken, the 100x slowdown one (404 Page not found). Unless I can’t see it because I deleted my GitHub account.

Older versions of core-js used feature detection methods that interacted poorly with V8’s optimization strategies, leading to extreme performance drops. In long-running applications or CI environments (like Cypress or Node.js builds), this can manifest as an apparent memory leak or process crash due to excessive resource consumption.

The fix is to upgrade core-js to a much more recent version to ensure compatibility with modern V8 engines.

If you want to see all warnings just download the repo and do “yarn install” to see this terrifying sequence of warnings.

❯ yarn install
yarn install v1.22.22
warning ../../package.json: No license field
info No lockfile found.
[1/5] 🔍  Validating package.json...
[2/5] 🔍  Resolving packages...
warning @babel/polyfill@7.4.4: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.
warning @babel/polyfill > core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
warning @electron/rebuild > @electron/node-gyp > glob@8.1.0: Glob versions prior to v9 are no longer supported
warning @electron/rebuild > @electron/node-gyp > glob > inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
warning @electron/rebuild > @electron/node-gyp > make-fetch-happen > cacache > glob@8.1.0: Glob versions prior to v9 are no longer supported
warning @electron/rebuild > @electron/node-gyp > make-fetch-happen > cacache > rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
warning @electron/rebuild > @electron/node-gyp > make-fetch-happen > cacache > rimraf > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning @electron/rebuild > @electron/node-gyp > make-fetch-happen > cacache > rimraf > glob > inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
warning @electron/rebuild > @electron/node-gyp > make-fetch-happen > cacache > @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
warning @electron/rebuild > @electron/node-gyp > make-fetch-happen > cacache > @npmcli/move-file > rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
warning @types/uuid@11.0.0: This is a stub types definition. uuid provides its own type definitions, so you do not need this installed.
warning bcrypt-nodejs@0.0.3: bcrypt-nodejs is no longer actively maintained. Please use bcrypt or bcryptjs. See https://github.com/kelektiv/node.bcrypt.js/wiki/bcrypt-vs-brypt.js to learn more about these two options
warning bootstrap@3.3.7: This version of Bootstrap is no longer supported. Please upgrade to the latest version.
warning connect-multiparty@2.2.0: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions
warning consolidate@0.15.1: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog
warning debug@4.1.1: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
warning electron-updater > lodash.isequal@4.5.0: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
warning hogan.js > mkdirp@0.3.0: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
warning i18next-scanner > acorn-dynamic-import@4.0.0: This is probably built in to whatever tool you're using. If you still need it... idk
warning i18next-scanner > vinyl-fs > glob-stream > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning multer@1.4.5-lts.2: Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.
warning quick-local-ip > mocha > glob@3.2.11: Glob versions prior to v9 are no longer supported
warning quick-local-ip > mocha > mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
warning quick-local-ip > mocha > glob > minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
warning quick-local-ip > mocha > to-iso-string@0.0.2: to-iso-string has been deprecated, use @segment/to-iso-string instead.
warning quick-local-ip > mocha > jade@0.26.3: Jade has been renamed to pug, please install the latest version of pug instead of jade
warning quick-local-ip > mocha > jade > mkdirp@0.3.0: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
warning rc-slider > babel-runtime > core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
warning react-beautiful-dnd@13.1.1: react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672
warning react-dropzone > attr-accept > core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
warning react-router-redux@5.0.0-alpha.9: This project is no longer maintained.
warning react-vertical-timeline-component > @babel/preset-es2015@7.0.0-beta.53: đź‘‹ We've deprecated any official yearly presets in 6.x in favor or babel-preset-env. For 7.x it would be @babel/preset-env.
warning redux-action > uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
warning rimraf@2.6.3: Rimraf versions prior to v4 are no longer supported
warning rimraf > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning superagent@6.1.0: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net
warning superagent > formidable@1.2.6: Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau
warning uuid@3.3.3: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
warning webappengine > connect-multiparty@2.0.0: This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions
warning webappengine > consolidate@0.14.5: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog
warning webappengine > del > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning webappengine > del > rimraf > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning webappengine > i18next-node-fs-backend@1.0.0: replaced by i18next-fs-backend
warning webappengine > i18next-express-middleware@1.0.11: replaced by i18next-http-middleware
warning webappengine > del > globby > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning webappengine > i18next-express-middleware > cookies > keygrip@1.0.3: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
warning xterm@5.3.0: This package is now deprecated. Move to @xterm/xterm instead.
warning xterm-addon-fit@0.8.0: This package is now deprecated. Move to @xterm/addon-fit instead.
warning @babel/cli > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning @babel/cli > chokidar > fsevents@1.2.13: Upgrade to fsevents v2 to mitigate potential security issues
warning @babel/cli > chokidar > braces > snapdragon > source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
warning @babel/cli > chokidar > braces > snapdragon > source-map-resolve > resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
warning @babel/cli > chokidar > braces > snapdragon > source-map-resolve > urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
warning @babel/cli > chokidar > braces > snapdragon > source-map-resolve > source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
warning @babel/node > @babel/polyfill@7.12.1: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.
warning @babel/node > @babel/polyfill > core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
warning @trendmicro/babel-config > @babel/plugin-proposal-logical-assignment-operators@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.
warning @trendmicro/babel-config > @babel/plugin-proposal-export-namespace-from@7.18.9: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.
warning @trendmicro/babel-config > @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
warning @trendmicro/babel-config > @babel/plugin-proposal-json-strings@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.
warning @trendmicro/babel-config > @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
warning @trendmicro/babel-config > @babel/plugin-proposal-optional-chaining@7.21.0: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
warning @trendmicro/babel-config > @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
warning babel-eslint@10.0.3: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
warning babel-plugin-lodash > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning boolean@1.0.0: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
warning coveralls > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
warning coveralls > request > uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
warning coveralls > request > har-validator@5.1.5: this library is no longer supported
warning electron > @electron/get > global-agent > boolean@3.2.0: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
warning electron > @electron/get > global-agent > roarr > boolean@3.2.0: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
warning electron-builder > app-builder-lib > electron-osx-sign@0.6.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
warning electron-builder > app-builder-lib > @electron/universal > asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
warning electron-builder > app-builder-lib > @electron/universal > asar > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning electron-builder > app-builder-lib > @electron/universal > asar > @types/glob > @types/minimatch@6.0.0: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed.
warning eslint@5.16.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
warning eslint > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning eslint > file-entry-cache > flat-cache > rimraf@2.6.3: Rimraf versions prior to v4 are no longer supported
warning eslint-loader@2.1.2: This loader has been deprecated. Please use eslint-webpack-plugin
warning eslint-loader > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning find-imports > @babel/plugin-proposal-class-properties@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
warning find-imports > @babel/plugin-proposal-export-namespace-from@7.18.9: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.
warning find-imports > @babel/plugin-proposal-json-strings@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.
warning find-imports > @babel/plugin-proposal-logical-assignment-operators@7.20.7: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.
warning find-imports > @babel/plugin-proposal-nullish-coalescing-operator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
warning find-imports > @babel/plugin-proposal-numeric-separator@7.18.6: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
warning find-imports > @babel/plugin-proposal-optional-chaining@7.21.0: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
warning find-imports > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning github-release-cli > @octokit/rest > lodash.get@4.4.2: This package is deprecated. Use the optional chaining (?.) operator instead.
warning glob@7.1.7: Glob versions prior to v9 are no longer supported
warning glob > inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
warning html-webpack-plugin@3.2.0: 3.x is no longer supported
warning nib > stylus > glob@7.0.6: Glob versions prior to v9 are no longer supported
warning nib > stylus > glob > inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
warning node-gyp > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning node-gyp > rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
warning node-gyp > npmlog@6.0.2: This package is no longer supported.
warning node-gyp > npmlog > gauge@4.0.4: This package is no longer supported.
warning node-gyp > npmlog > are-we-there-yet@3.0.1: This package is no longer supported.
warning optimize-css-assets-webpack-plugin > cssnano > cssnano-preset-default > postcss-svgo > svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
warning optimize-css-assets-webpack-plugin > cssnano > cssnano-preset-default > postcss-svgo > svgo > stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
warning optimize-css-assets-webpack-plugin > cssnano > cssnano-preset-default > postcss-svgo > svgo > coa > q@1.5.1: You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.

(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)
warning redux-devtools@3.5.0: Package moved to @redux-devtools/core.
warning redux-devtools > redux-devtools-instrument@1.10.0: Package moved to @redux-devtools/instrument.
warning stylint > glob@7.0.4: Glob versions prior to v9 are no longer supported
warning stylint > chokidar > fsevents@1.2.13: Upgrade to fsevents v2 to mitigate potential security issues
warning stylint > glob > inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
warning stylus > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning tap@12.6.6: Versions of tap before v18 are no longer maintained. Please upgrade.
warning tap > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning tap > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning tap > coveralls > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
warning tap > nyc > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning tap > nyc > uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
warning tap > nyc > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning tap > tap-mocha-reporter > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning tap > nyc > spawn-wrap > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning tap > nyc > test-exclude > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning tap > nyc > istanbul-lib-source-maps > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning terser-webpack-plugin > cacache > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning terser-webpack-plugin > cacache > rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
warning terser-webpack-plugin > cacache > @npmcli/move-file@1.1.2: This functionality has been moved to @npmcli/fs
warning terser-webpack-plugin > cacache > @npmcli/move-file > rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
warning webpack > terser-webpack-plugin > cacache > glob@7.2.3: Glob versions prior to v9 are no longer supported
warning webpack > terser-webpack-plugin > cacache > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning webpack > terser-webpack-plugin > cacache > move-concurrently@1.0.1: This package is no longer supported.
warning webpack > terser-webpack-plugin > cacache > move-concurrently > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning webpack > terser-webpack-plugin > cacache > figgy-pudding@3.5.2: This module is no longer supported.
warning webpack > terser-webpack-plugin > cacache > ssri > figgy-pudding@3.5.2: This module is no longer supported.
warning webpack > terser-webpack-plugin > cacache > move-concurrently > copy-concurrently@1.0.5: This package is no longer supported.
warning webpack > terser-webpack-plugin > cacache > move-concurrently > copy-concurrently > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning webpack > terser-webpack-plugin > cacache > move-concurrently > fs-write-stream-atomic@1.0.10: This package is no longer supported.
warning webpack > terser-webpack-plugin > cacache > move-concurrently > copy-concurrently > fs-write-stream-atomic@1.0.10: This package is no longer supported.
warning webpack-dev-middleware > webpack-log > uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
warning webpack-dev-server > del > rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
warning webpack-dev-server > sockjs > uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
warning webpack-hot-middleware > querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
1 Like

gSender is so much better than [insert list of other / older programs we’ve all used…]. Kudos to those who’ve put in so much work to make a great program, I love it!

Having said that, and I really mean what I said about gSender, you should check out ncSender from FrancisCreation. It is an offshoot of gSender in spirit, if not codebase, and is about as cutting edge as you can get with a CNC application :slight_smile: :slight_smile:

The difference - as I see it - is that gSender is a CNC program written by CNC people for CNC use, while ncSender is a CNC program written by a software engineer for his own enjoyment, which happens to be CNC use.

-John

I do not understand the spirit of this reply tbh. Right now gSender’s codebase is hard to work with, slow and buggy. That gets in the way of doing actual CNC work, and leads to very long iteration times. It’s not written in stone that it has to be that way, there’s engineering practices that could help tremendously with the issue in very little time.

What I suggested could be done in 2-3 weeks tops with the help of modern tools and would cut months out of future iterations of gSender, not to mention bugs and headaches.

It literally makes no sense not doing it.

4 Likes

You can always submit a gSender PR with the changes you want to see. It might or might not be accepted…at some uncertain time. Until then, you have the choice of using your private branch or waiting for Sienci to merge and release a version with your changes.

The first path gets you a “better” cnc workflow quickly, the second doesn’t, with you putting in several weeks of work in either case.

In addition, you could also look at ncSender. It may be that it isn’t your cup of hot caffeine- or - it might be the solid foundation you are looking for.

Looking costs you nothing, and might save you weeks of work. Or not, if contributing to gSender is the right answer for you.

I don’t know how familiar are you with open source but it doesn’t work that way. For a refactor this huge you just don’t go ahead and do it speculatively, you ask the maintainers first.

What you’re suggesting is a fork which I’m not interested in maintaining long term, and I don’t have the means since I don’t develop the Longboard.

5 Likes

Just a heads up if your not aware. I think the Sienci team is off from Christmas to New Years so you might not hear from the devs til then.

1 Like

I’m just a CNC user, not affiliated with sienci labs, but wanted to say I appreciate you putting forward the initiative to improve gSender!

I hope the dev team is receptive to the help and collaboration

7 Likes

7 posts were split to a new topic: Issues with tool changing

I did a couple of PRs, and some of them already made it into main. I get where you’re coming from though. I stopped contributing and started building my own ncSender from scratch just for fun, but I got carried away and added all the things I wanted that I couldn’t do with gSender.

  • Pure client/server architecture. All settings reside on the server, so it doesn’t matter where you open the client. You get consistent settings such as macros, etc.
  • Plugin-based architecture, so others can build plugins without affecting the core app. This also reduces regression testing. I’ve already built a few plugins, including RapidChangeATC, boring, cutting, planer, and box joints tools.
  • 3D probing with inner and counter holes, with improved visualization and workflow.
  • G-code viewer (it looks like gSender has added this already).
  • Almost a full-blown G-code editor.
  • File management. Since it’s a pure client/server design, all files are uploaded to the server. You can easily upload a job from any machine on your network and open it anywhere.
  • Better G-code visualizer. Recently, you can even select a segment in the visualizer to pick the start line number.
  • Optimized for portrait orientation.
  • Better terminal or MDI.
  • Improved CI/CD pipeline.
  • No more Connect button. The app always tries to connect to the controller as soon as you open it. I don’t really see much use for a Connect/Disconnect button.

You can check out my YouTube channel to see the work I’ve done:

Github: GitHub - siganberg/ncSender

2 Likes

Thank you to all the contributors to this discussion. I appreciate Luckymethod’s concerns about Gsender, and others who have been wonderfully helpful with their candid comments as well.

As SIENCI Labs are making such good equipment, (I have just bought a new Altmill with closed Loop motors) and obivously try very hard to get things right, it seems a shame that their deep experience in making robust software has not been afforded the same level of input. Not that I’m complaining about Gsender. I admire their design and emphasis on usability.

I am primarily involved in making complicated landscapes, some of which involve 20 hours of minute detailed finishing cuts. I have had to revert to Openbuilds gcode handler to get enough reliability to avoid crashes that spoil weeks of preparation and machining.

I will definitely consider trying NCSender. I am happy to contribute to siganberg’s efforts.

What I’d like to see is a re-commitment by SIENCI management to re-evaluating where this project stands and bringing it to a complete ly solid an fully tested basis. This is not an insult to any present developers. But my experience is without fulsome management commitment, these things just drift along, just slightly out of full visability.

Best wishes to all involved

David

@david_kelly Welcome back, David. Just to satisfy my curiousity, are you having these reliabilty issues connected by ethernet?

Hey, this is great, and thank you for taking a detailed look.

Like others, I am not a programmer by any means, but I use my machine for my business. There were a few issues I discussed with my friend about Gsender, who is a programmer/CNC wizard, and I feel like there are things you mentioned that they also did. Sorry, I can’t remember the semantics of it.

I do feel like there are issues in Gsender for sure. The few times I have even questioned it were kind of answered with…” hey, Gsender is better than any other thing out there, why would you question its stability?” One thing I always hated was those random disconnects after 2 hours of milling. I have done all that I can to mitigate that on my end, but sometimes it happens randomly. Most of my machining requires a couple of hours or more, plus multiple tool changes. The only solution is for me to take a “break” every 1.5 hours or so and reset my computer.

I look forward to seeing your improvements!

@dehoutwinkel Daryl: Have you continued to have disconnects using an ethernet connection rather than USB?

My Mac doesn’t have an ethernet connection.

@dehoutwinkel Understood. Bummer because, like you early on I had disconnect issues. I’ve had none since going to ethernet.

It’s been suggested before to use a usb to ethernet adapter and then connect via ethernet to the mill. Apparently this can work.

@Jens That has been suggested. I could never get my head around the issue that you are still coming out of the PC via USB. You are right, though, that members have said that it worked, my opinion is only worth what you paid for it. :grinning_face: I was lucky to have the ability to have 2 ethernet cards in my controlling PC, one to connect my network via DHCP and one to connect to the SLB via a static address. I appreciate that not everyone has that benefit.

I think that I have taken this as far off topic as it should be. In my ignorance, it seems to me that if disconnects are solved by moving from a USB connection to an ethernet connection, the disconnect issue may not be related to gSender at all.

Well most modern computers don’t have those connections anymore :man_shrugging: I use a higher quality cable, plus anti-static hose. I know the hose works and that probably solved the issue of disconnect from static alone.