Port 8888 is where scientists think out loud.
Every time a researcher opens a Jupyter notebook, every time a data scientist runs a cell of Python code and watches the output appear beneath it, every time someone iterates on an algorithm at the speed of thought, port 8888 is carrying that conversation between the browser and the kernel.
This is the port that helped produce the first image of a black hole.1 The Event Horizon Telescope collaboration processed 14 petabytes of data using Python and Jupyter notebooks, iterating through imaging algorithms until they could see what no human had ever seen: the shadow of a supermassive black hole at the center of galaxy M87, 55 million light-years away.
What Port 8888 Does
Port 8888 serves as the default port for Jupyter Notebook and JupyterLab, the most widely used interactive computing environments in data science, research, and education. When you run jupyter notebook on your machine, a web server starts on port 8888 and opens your browser to localhost:8888, presenting an interface where code, visualizations, and documentation live together in a single document.
The port runs HTTP traffic. Your browser sends requests, the Jupyter server responds with HTML, JavaScript, and JSON. When you execute a cell, the code travels over a WebSocket connection to a kernel process that actually runs your Python, R, or Julia code, then sends the results back to be rendered in your browser.
It is an alternate HTTP port, one of the 8xxx ports that developers use when they need something that is not port 80 and not port 8080. The pattern of four identical digits makes it memorable, easy to type in a URL bar.
The IANA Registration
Officially, IANA has port 8888 registered for "ddi-tcp-1" and "ddi-udp-1," described as "NewsEDGE server."2 This traces back to Desktop Data, Inc. (DDI), a company founded in 1988 that pioneered financial news delivery to trading desks.3 NewsEDGE merged Desktop Data with Individual, Inc. in 1997, creating a system that pushed real-time business news directly to inboxes and portals. Thomson acquired NewsEDGE in 2001 for $43 million, later selling it to Acquire Media in 2007.4
The NewsEDGE registration is a relic. The protocol it describes is obsolete. But the port number lives on, repurposed by the open source community for something far more consequential.
The Birth of Jupyter
In 2001, Fernando Pérez was a graduate student in particle physics at the University of Colorado, Boulder, searching for a better way to analyze his simulation data.5 One afternoon, procrastinating from his actual research, he wrote IPython, an enhanced interactive Python interpreter.
In 2004, Pérez and Brian Granger, who had met on their first day of graduate school, discussed creating a web-based notebook interface. The technology was not ready yet. They built prototypes, abandoned them, kept iterating.
On March 21-24, 2009, during a spring break visit to Granger's home in San Luis Obispo, Pérez and Granger completed the first IPython kernel with tab completion, asynchronous output, and support for multiple clients.6 In 2011, they released the first version of IPython Notebook, and the world of computational science changed.
The default port was 8888. Why? It is easy to remember, four identical digits. It is high enough to avoid system services, which live below 1024. And it does not conflict with other common development ports like 3000, 8000, or 8080.7
In 2014, IPython Notebook became Project Jupyter, named for the three original languages it supported: Julia, Python, and R. The name also honors Galileo's notebooks documenting the moons of Jupiter.8 Today, Jupyter supports about 100 programming languages.
The Scale of Discovery
Nearly 10 million Jupyter notebooks have been shared publicly on GitHub.9 The tool has been called one of ten computer codes that transformed science by Nature.
The Event Horizon Telescope used Jupyter notebooks to iterate through imaging algorithms, processing data from eight synchronized radio telescopes around the world.1 NumPy, SciPy, Matplotlib, and other open source tools enabled the team to finish work in two years that would have taken far longer in traditional compiled languages.
"It is thought that Python alone would be too slow to process our volumes of data," one EHT team member explained. "However, with the open source projects in NumFOCUS, we were able to iterate our algorithms so fast."1
This is what port 8888 carries: the speed of scientific thought.
The Shadow Side
The same openness that makes Jupyter powerful makes it dangerous when exposed.
Security researchers at Aqua Security created a honeypot Jupyter notebook listening on port 8888 and documented what happened.10 Within hours, attackers discovered it through Shodan, a search engine that indexes Internet-connected devices. The attacks came fast:
- TeamTNT's botnet detected the exposed notebook and ran scripts to download attack components from command-and-control servers
- One attacker deployed Cobalt Strike for backdoor access and privilege escalation
- Another exploited the sudoedit vulnerability (CVE-2021-3165) and the Dirty Pipe vulnerability (CVE-2022-0847) to gain root access
- Cryptominers were downloaded and executed, hijacking the server's computing power to mine cryptocurrency
A Shodan query found over 70 JupyterLab instances exposed to the Internet without authentication.10 Most were already infected with malware.
The Qubitstrike campaign specifically targets Jupyter notebooks, deploying cryptominers, establishing persistence through cron jobs, inserting SSH keys for remote access, and installing the Diamorphine rootkit to hide malicious processes.11 It even exfiltrates AWS and Google Cloud credentials via Telegram.
The attack surface is simple: Jupyter notebooks execute arbitrary code by design. That is the feature. An unprotected notebook on port 8888 is an invitation to run whatever an attacker wants.
How to Protect Port 8888
Jupyter notebooks were never designed to face the public Internet. They were built for local development, for researchers iterating on their own machines or trusted internal networks.
If you must expose Jupyter remotely:
- Enable authentication. Always require a token or password. Never run with
--NotebookApp.token=''. - Use HTTPS. Configure SSL/TLS to encrypt traffic between your browser and the server.
- Restrict network access. Use firewall rules, VPN, or SSH tunneling. Port 8888 should not be reachable from the public Internet.
- Monitor for exposure. Check periodically whether your assets are being indexed by Shodan or Censys. If port 8888 appears, close it.
The Shodan dork that attackers use is simple: port:8888 title:"Home Page – Select or create a notebook"12. If that query finds your notebook, so will the bots.
The Other Lives of Port 8888
Before Jupyter claimed it, port 8888 served other purposes:
Sun Answerbook used port 8888 for its DWhttpd documentation server, starting in 1989.13 The service let customers access technical manuals through a web interface. Sun discontinued it in 2006.
HyperVM uses port 8888 for its HTTPS management interface, allowing administrators to manage virtual machines.
MAMP, a popular local development environment for macOS, defaults to port 8888 for its Apache server, keeping it separate from any system-level web server on port 80.
Freenet, the decentralized peer-to-peer network, uses port 8888 for local access to its web interface.
The pattern is consistent: port 8888 is an alternate HTTP port, used when something else is already on 80 or when you want a memorable number for development.
Related Ports
| Port | Service | Relationship |
|---|---|---|
| 80 | HTTP | The standard web port that 8888 substitutes for |
| 443 | HTTPS | Secure web traffic |
| 8080 | HTTP Alternate | Another common alternate HTTP port |
| 8000 | HTTP Alternate | Django's default development port |
| 3000 | HTTP Alternate | Node.js/Express default, React development server |
| 8889 | Jupyter | Second notebook when 8888 is in use |
| 8890 | Jupyter | Third notebook when 8888 and 8889 are in use |
Frequently Asked Questions
Was this page helpful?