localhost:8888 — Jupyter Notebook

Jupyter Notebook is the reason data scientists can write code, see results, add explanations, and share everything as a single document. It runs a web server on port 8888 that serves an interactive coding environment in your browser — write Python in one cell, see a chart in the next, add markdown notes in between. It's not quite an IDE, not quite a document — it's something in between that turns out to be perfect for exploratory data analysis, machine learning experiments, and teaching.

The name "Jupyter" comes from three languages: Julia, Python, and R — though Python is overwhelmingly the most used kernel.

Quick Access: Open localhost:8888

Installing and Launching

# With pip
pip install notebook
jupyter notebook
# Opens browser at http://localhost:8888/?token=abc123...

# JupyterLab (the newer interface)
pip install jupyterlab
jupyter lab

# With conda (Anaconda/Miniconda)
conda install -c conda-forge notebook
jupyter notebook

# Docker (includes scientific Python stack)
docker run -p 8888:8888 jupyter/scipy-notebook

When Jupyter starts, it generates a unique access token and prints it in the terminal. The browser usually opens automatically, but if it doesn't, copy the full URL with the token from the terminal output.

Notebook vs. JupyterLab

Jupyter Notebook (classic) is the simpler interface — a file browser and a notebook editor. It's been around since 2014 and is what most tutorials still reference.

JupyterLab is the next generation — a full IDE-like environment with tabs, a file browser panel, terminal access, and the ability to view notebooks, CSVs, images, and markdown side by side. It runs on the same port 8888 and can open classic notebooks. If you're starting fresh, use JupyterLab.

Both are accessed through your browser. Neither is a desktop application — they're web apps served locally.

The Token Authentication System

The most confusing thing about Jupyter for newcomers is the token. When you open localhost:8888 for the first time, it asks for a "Password or token." The token is the long random string Jupyter printed when it started:

# Look in terminal for:
# http://localhost:8888/?token=a1b2c3d4e5f6...
# Copy everything after token=

# Set a permanent password instead:
jupyter notebook password
# Enter and confirm a password
# Now you can use that password instead of tokens

# Or disable authentication entirely (only for local dev):
jupyter notebook --NotebookApp.token='' --NotebookApp.password=''

Common Use Cases

Data analysis with Pandas: Load a CSV, explore it, filter, group, aggregate — all interactively with immediate visual feedback. This is Jupyter's sweet spot.

Machine learning prototyping: Train a model in one cell, evaluate it in the next, tweak parameters, re-run. The iterative nature of notebooks matches the ML workflow perfectly.

Visualization: Matplotlib, Seaborn, Plotly charts render inline. You see the chart right below the code that generated it.

Teaching and documentation: Notebooks mix code, output, and explanatory text. They're widely used in university courses and online tutorials.

Troubleshooting

Port 8888 already in use: You probably have another Jupyter instance running. Jupyter auto-increments to 8889, 8890, etc. To find and stop old instances: jupyter notebook list shows all running servers. Stop them with jupyter notebook stop 8888.

"403 Forbidden" or token rejected: The token changes every time Jupyter starts. Check the terminal output for the current token. Or set a permanent password (see above).

Kernel keeps dying: Usually a memory issue. Your notebook is consuming too much RAM (common with large datasets). Check system memory, or limit data loading to smaller chunks.