Mojo quickstart
This page quickly teaches you Mojo's syntax by focusing on code.
For more explanation of the language features, see the Mojo get started tutorial or Mojo language basics.
Project setup
You can install Mojo using any Python or Conda package manager,
but we recommend either pixi or uv.
- uv
- pixi
- pip
- conda
-
If needed, install
uv:curl -LsSf https://astral.sh/uv/install.sh | sh -
Create a project and install Mojo:
uv init temperature-analyzer && cd temperature-analyzer uv venv && source .venv/bin/activate uv pip install mojo --extra-index-url https://modular.gateway.scarf.sh/simple/
-
If needed, install
pixi:curl -fsSL https://pixi.sh/install.sh | sh -
Create a project and install Mojo:
pixi init temperature-analyzer \ -c https://conda.modular.com/max-nightly/ -c conda-forge cd temperature-analyzer pixi add mojo pixi shell
Create a project and install Mojo:
mkdir temperature-analyzer && cd temperature-analyzer
python3 -m venv .venv && source .venv/bin/activate
pip install mojo --extra-index-url https://modular.gateway.scarf.sh/simple/- macOS
- Linux
-
If needed, install Conda:
brew install miniconda conda init zsh source ~/.zshrc # Or other shell rc file -
Create a project and install Mojo:
conda create -n temperature-analyzer conda activate temperature-analyzer conda install -c conda-forge -c https://conda.modular.com/max/ mojo
-
If needed, install Conda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh conda init bash source ~/.bashrc # Or other shell rc file -
Create a project and install Mojo:
conda create -n temperature-analyzer conda activate temperature-analyzer conda install -c conda-forge -c https://conda.modular.com/max/ mojo
Hello Mojo
Create analyzer.mojo in your favorite IDE or editor.
Add this to analyzer.mojo:
fn main():
print("Temperature Analyzer")Run it:
mojo analyzer.mojoInsights:
- If you see "Temperature Analyzer", your setup works.
- All Mojo executables use
main()as their entry point.
Variables and data
Update your file to add temperature data:
fn main():
print("Temperature Analyzer")
# Square brackets tell Mojo the `List` type at compile time
var temps: List[Float64] = [20.5, 22.3, 19.8, 25.1]
print("Recorded", len(temps), "temperatures")Loops
Print each temperature. Add to main() under the print statement:
fn main():
# ... existing code ...
for index in range(len(temps)): # The range is [0, len(temps))
print(" Day {}: {}°C".format(index + 1, temps[index]))Insights:
- The day is offset by 1 because the range uses zero-based indexing.
Functions
Add this function above main() to calculate the average temperature:
fn calculate_average(temps: List[Float64]) -> Float64:
var total: Float64 = 0.0
for index in range(len(temps)):
total += temps[index]
return total / len(temps)
fn main():
# ... existing code ...Add to the end of main() to call the function:
var avg = calculate_average(temps)
print("Average: {}°C".format(avg))Conditionals
Classify the average temperature. Add to the end of main():
if avg > 25.0:
print("Status: Hot week")
elif avg > 20.0:
print("Status: Comfortable week")
else:
print("Status: Cool week")Raise errors
Handle empty data by updating calculate_average. Now the function
can raise an error.
fn calculate_average(temps: List[Float64]) raises -> Float64:
if len(temps) == 0: # Empty list of temperatures
raise Error("No temperature data")
var total: Float64 = 0.0
for index in range(len(temps)):
total += temps[index]
return total / len(temps)What changed:
- You add
raisesbefore the return arrow. - You add the check for an empty list.
- You raise an
Errorif it's empty.
Handle errors
In main(), wrap your code in try-except for error handling:
try:
var avg = calculate_average(temps)
print("Average: {}°C".format(avg))
if avg > 25.0:
print("Status: Hot week")
elif avg > 20.0:
print("Status: Comfortable week")
else:
print("Status: Cool week")
except e:
print("Error:", e)To test the error, replace temps with List[Float64]().
Confirm that your app errors with "No temperature data".
Python integration
Add statistics with Python's numpy. First, install it:
- uv
- pixi
- pip
- conda
uv pip install numpypixi add numpypip install numpyconda install numpyThen, add the following imports at the top of your file:
from python import Python, PythonObjectNow, calculate Python stats at the end of the try block in main():
var np = Python.import_module("numpy")
var pytemps: PythonObject = [20.5, 22.3, 19.8, 25.1]
print("Temperature standard deviation:", np.std(pytemps))Final code
Your complete analyzer.mojo:
from python import Python, PythonObject
fn calculate_average(temps: List[Float64]) raises -> Float64:
if len(temps) == 0:
raise Error("No temperature data")
var total: Float64 = 0.0
for index in range(len(temps)):
total += temps[index]
return total / len(temps)
fn main():
print("Temperature Analyzer")
var temps: List[Float64] = [20.5, 22.3, 19.8, 25.1]
print("Recorded", len(temps), "temperatures")
for index in range(len(temps)):
print(" Day {}: {}°C".format(index + 1, temps[index]))
try:
var avg = calculate_average(temps)
print("Average: {}°C".format(avg))
if avg > 25.0:
print("Status: Hot week")
elif avg > 20.0:
print("Status: Comfortable week")
else:
print("Status: Cool week")
var np = Python.import_module("numpy")
var pytemps: PythonObject = [20.5, 22.3, 19.8, 25.1]
print("Temperature standard deviation:", np.std(pytemps))
_ = pytemps^ # Allow the Python object to deallocate
except e:
print("Error:", e)What you touched
Mojo variables, lists, loops, functions, conditionals, error handling, and Python integration, all in one working program.
Build something bigger: Tutorial: Game of Life Language guide: Mojo Manual API docs: Standard Library
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!