Given that Node.js maintains an internal thread pool, some developers in my company argue that Node is multi-threaded. But I would like to believe that it's single threaded since we as developers can never spawn threads in Node.js. What's your opinion?
Multi-Threaded, PERIOD. It's not something to vote on. Read the source, please. Node.JS is based on libuv, which provides a multi-threaded event loop. Just because a developer cannot spawn threads does not magically make it is single-threaded. MT has something to do with how asynchronous a program is and how well it works with multiple cores, but most of all about the technology used to do so. Node.JS clearly is asynchronous and uses thread implementations on various platforms.
Different example: There are many game engines, which use multiple threads, yet you never get to see them. Take Blueprint for Unreal Engine. No one would argue that UE is single-threaded, just because Blueprint developers cannot spawn threads...
By the way: You can explicitely spawn threads, even using Node.JS. Just make a C-style plugin. However, that does not make a lot of sense and most likely will disrupt all positive aspects of libuv.
Node.js is multi-threaded, but Node.js programs are single threaded.
Given that Node.js maintains an internal thread pool, some developers in my company argue that Node is multi-threaded.
And they would be right for precisely that reason. Node is a multi-threaded application which uses a threadpool for managing the event loop.
But I would like to believe that it's single threaded since we as developers can never spawn threads in Node.js.
What is userland code can be a contentious point. While node standard library does not provide low level API access to the thread management utilities, multiple libraries (which integrate with node at native level) do, a notable example being node-worker-threads which provides a web-worker API implementation for node applications.
As the author has comprehensively illustrated, it allows developers to leverage worker threads for CPU bound tasks.

it's async can be multiprocess but not really multithreaded from the concept of a thread.
Open Web Enthusiast
Jonathan Apodaca
/* no comment */
Short answer: the core of Node.JS is multithreaded, but all user-code (i.e., JavaScript that you write) is single-threaded. Node.JS spawns multiple threads (allocated strictly for I/O operations), gathers their results and then posts each result back to the one/main/single thread.
So it depends on your perspective, if you will: From the point of the JavaScript developer, Node.JS is single threaded. From the perspective of Node.JS core (libuv), it is multi-threaded.
Multithreaded, but...