# Understand node types in IPFS Companion
IPFS Companion's preferences screen allows you to choose from several different node types. The available types you'll see in your Companion preferences depends on the browser you're using (i.e. Firefox, Chrome, Brave), but the full list is as follows:
If you're already running a local IPFS node, choose External. If not, do one of the following:
- Install and run IPFS as an external node (recommended).
- Use a native node built into your browser (Brave v1.19 or later only) or the embedded node built into Companion.
An external node can be any instance of an IPFS daemon that:
- Runs outside of your web browser.
- Exposes a gateway and writeable API over HTTP at TCP ports.
The go-ipfs (opens new window) implementation of IPFS is the recommended choice for running an external IPFS node. It's less power-hungry than other implementations and uses the
dhtclient mode to decrease ambient bandwidth use and reduce battery drain.
A good practice is to run your go-ipfs daemon on localhost (
127.0.0.1), as it provides:
- Increased security: native IPFS used as end-to-end transport.
- Better UX in the browser: no mixed-content warnings.
- Improved performance: local loopback is used, so no network overhead.
You can get started with running a go-ipfs node on your local machine in several ways:
- IPFS Desktop (opens new window) installs and manages a local node for you, as well as offering an easy, convenient user interface for managing files and peers.
- If you're comfortable with the command line and don't need the convenience of the IPFS Desktop UI, follow the directions in the command line quick-start guide.
- Docker fans can run and use go-ipfs from inside a Docker container (opens new window).
# Provided by Brave
Users of the Brave (opens new window) browser (v1.19 or later) can enable native support for IPFS using a go-ipfs node built directly into the browser itself. This is a great way to experiment with IPFS without having to install or run IPFS Desktop or the command-line daemon.
This node type offers the same benefits as an external node, with additional features provided within Brave itself:
- Native support for
- Built-in fallback to a public gateway.
- Ability to change your preferred public gateway from Brave's settings page.
- Options for default resolution of IPFS resources: through a public gateway, through a local node, or asking each time.
- The IPFS node is managed by Brave itself:
- Automatic go-ipfs updates and migrations.
- Your node is only running when Brave is open.
- You can start/stop your Brave-based node by clicking the power button icon in IPFS Companion's main menu.
TOOLS FOR BRAVE USERS
Popular URI for triggering and testing native IPFS support
One-click Companion install and URI resolution settings
Status page for Brave's built-in go-ipfs node
An embedded node is a js-ipfs instance running in the browser in-memory, without the need for any external software.
Please note that there are some limitations when running an embedded js-ipfs instance in the browser context using Companion:
- Embedded js-ipfs cannot act as an HTTP gateway; the extension uses a public one as a fallback.
- Running an embedded js-ipfs instance is known to be CPU-hungry over time, which may drain your battery. See GitHub issues (#450 (opens new window) and ipfs/js-ipfs#1190 (opens new window)) for further details
- Missing DHT (see js-ipfs/#856 (opens new window)).
- Default transports limited to websockets (js-ipfs/#1088 (opens new window)):
- Lack of connection closing (ipfs/js-ipfs#962 (opens new window))
- Missing relay discovery (js-ipfs/v0.29.x/examples/circuit-relaying (opens new window))
- An embedded node does not run when an external node is selected; every time you switch back to the embedded node, a new instance is created on demand, and it can take a few seconds for a newly running node to find peers.
# Embedded +
This node type has been deprecated and is no longer supported by Chromium browsers. While this option still appears in IPFS Companion preferences, users of this node type are strongly urged to migrate to a different node type.
A public node is used as a fallback for gateway functionality when an external node is offline or an embedded node is used. It does not expose the API port. This type of node is not included as an option in Companion's preferences.