IMPORTANT: To view this page as Markdown, append `.md` to the URL (e.g. /docs/manual/basics.md). For the complete Mojo documentation index, see llms.txt.
Skip to main content
Version: Nightly
For the complete Mojo documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /docs/manual/basics.md).

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.

Use the following command to install the nightly buildTo get the stable build, change the version in the website header.:

  1. If needed, install uv:

    curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Install Mojo:

    uv pip install mojo \
    --index https://whl.modular.com/nightly/simple/ \
    --prerelease allow

    Or create a project and install Mojo:

    uv init temperature-analyzer
    cd temperature-analyzer
    uv add mojo \
    --index https://whl.modular.com/nightly/simple/ \
    --prerelease allow

These commands install the nightly build, which isn't complete and might have new bugs.

Hello Mojo

Create analyzer.mojo in your favorite IDE or editor.

Add this to analyzer.mojo:

def main():
print("Temperature Analyzer")

Run it:

mojo analyzer.mojo

Insights:

  • 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:

def main():
print("Temperature Analyzer")

# [Float64] tells 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:

def main():
# ... existing code ...

for index in range(len(temps)): # The range is [0, len(temps))
print(t" Day {index + 1}: {temps[index]}°C")

Insights:

  • The day is offset by 1 because the range uses zero-based indexing.
  • The t"..." prefix creates a template string: braces {} interpolate expressions directly into the output. This is useful because it avoids memory allocations for the intermediate values.

Functions

Add this function above main() to calculate the average temperature:

def calculate_average(temps: List[Float64]) -> Float64:
# The 0.0 floating point literal defaults to Float64
var total = 0.0
for temp in temps:
total += temp
return total / Float64(len(temps))

def main():
# ... existing code ...

Add to the end of main() to call the function:

var avg = calculate_average(temps)
print(t"Average: {round(avg, 2)}°C")

This code uses round() to limit the average to two decimal places.

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.

def calculate_average(temps: List[Float64]) raises -> Float64:
if len(temps) == 0: # Empty list of temperatures
raise Error("No temperature data")

var total = 0.0
for temp in temps:
total += temp
return total / Float64(len(temps))

What changed:

  • You add raises before the return arrow.
  • You add the check for an empty list.
  • You raise an Error if it's empty.

Handle errors

In main(), wrap your code in try-except for error handling:

try:
var avg = calculate_average(temps)
print(t"Average: {round(avg, 2)}°C")

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 []. Confirm that your app errors with "No temperature data".

Python integration

Add statistics with Python's numpy. First, install it:

uv pip install numpy

Then, add the following imports at the top of your file:

from std.python import Python, PythonObject
from std.python.numpy import copy_to_numpy_array

Now, calculate Python stats at the end of the try block in main():

var np = Python.import_module("numpy")
var pytemps = copy_to_numpy_array(temps)
var std_dev = np.std(pytemps)
print("Temperature standard deviation:", std_dev)

Final code

Your complete analyzer.mojo:

from std.python import Python, PythonObject
from std.python.numpy import copy_to_numpy_array


def calculate_average(temps: List[Float64]) raises -> Float64:
if len(temps) == 0:
raise Error("No temperature data")

var total = 0.0
for temp in temps:
total += temp
return total / Float64(len(temps))


def 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(t" Day {index + 1}: {temps[index]}°C")

try:
var avg = calculate_average(temps)
print(t"Average: {round(avg, 2)}°C")

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 = copy_to_numpy_array(temps)
var std_dev = np.std(pytemps)
print("Temperature standard deviation:", std_dev)
except e:
print("Error:", e)

What you touched

Mojo variables, lists, loops, functions, conditionals, error handling, and Python integration, all in one working program.

Use Mojo with AI coding assistants

If you use AI coding assistants, the mojo-syntax skill keeps you aligned with the latest nightly language releases. Stay up to date with Mojo's rapid development:

npx skills add modular/skills

This installs all four Mojo agent skills, including mojo-syntax.

Keep going

Build something bigger: Tutorial: Game of Life Language guide: Mojo Manual API docs: Standard Library