The Jac Programming Language and Jaseci Stack

Enable fast, low-complexitydevelopment of AI-powered,scalable applications

The Jac programming language and Jaseci runtime stack builds on Python, introducing AI-first constructs, object-spatial programming, and scale-native constructs.

Our journey is strengthened by our sponsors and partners

Affiliation 1

Part of Nvidia Inception Program, supporting cutting edge AI innovation and scalability

Affiliation 2

Research led by faculty and researchers at University of Michigan, United States

Affiliation 3

Sponsored by NSF, advancing community driven open source ecosystem

Jac Supersets Python

Like TypeScript for JavaScript, Jac extends Python with its own features

Jac Supersets Python Diagram

Use Jac in Python as a library

import jaclang #enable .jac imports

# Importing Jac module /app/logic.jac from the package "app/"
import app.logic

# Use exported classes and fucntions from the logic.jac
print(app.logic.some_function())

100% Python Compatible, use all Python libraries in Jac

Everything Python: OOP+ with Native AI & Infinite Scale

Start with familiar Python syntax, then unlock AI capabilities, scale native programming and object spatial programming. Use Jac as a library in Python or write full Jac programs.

Why should I use Jac?

Discover the power of Jac through interactive examples

Jac introduces programming abstractions designed for AI, making it easy to integrate LLMs and multimodal models directly into your code with minimal effort.

Jac Programming

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Traditional Programming

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import json, base64
from datetime import datetime
from openai import OpenAI

client = OpenAI()

# --- Lots of boilerplate just to define a schema ---
tools = [{
    "type": "function",
    "function": {
        "name": "process_memory",
        "description": 
            "Extract structured memory details from the photo",
        "parameters": {
            "type": "object",
            "properties": {
                "who": {
                    "type": "array",
                    "items": {"type": "string"},
                    "description": "Names of people in the photo"
                },
                "what": {
                    "type": "string",
                    "description": "What is happening in the scene"
                },
                "where": {
                    "type": "string",
                    "description": 
                        "Location or setting of the photo"
                }
            },
            "required": ["who", "what", "where"]
        }
    }
}]

# --- The prompt has to sit here like a Novel ---
SYS_PROMPT = """
# Role and Objective
Your goal is to extract structured memory details from
referenced images and user context. Engage in a way that feels 
natural, as if you were helping someone document their 
experiences, but always return structured output.

# Instructions
- Extract details only based on the image and user input.
- Avoid hallucinations or assumptions if information is missing.
- Always call the `process_memory` tool to return results.
- Keep results short, factual, and consistent.

# Sub-categories for more detailed instructions
## First Turn
- React to the image or context briefly.
- Encourage clarification if information is incomplete.

## Field Writing (for process_memory)
- **who**: list of people, animals, or notable entities.
- **what**: concise description of the activity or event 
  (3-5 words).
- **where**: specific place, city, or landmark provided 
   or visible.

### Reasoning Steps
- If the user corrects existing information, update the fields.
- If new information is provided, add it without discarding 
  existing relevant details.
- If a field is not mentioned or visible, leave it empty.

## Response Writing
- Keep responses factual and grounded in what's visible or given.
- Never ask the user irrelevant questions.
- Use the photo context to refine details when applicable.

# Output Format
Always return JSON via the `process_memory` tool with:
- `who`: list of strings
- `what`: string (short activity/event description)
- `where`: string (location or place)
"""

with open("image.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode("utf-8")

# --- Verbose message construction ---
messages = [
    {"role": "system", "content": SYS_PROMPT},
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Photo took in Paris."},
            {"type": "image_url", "image_url": {
                "url": f"data:image/png;base64,{image_b64}"}
            }
        ]
    }
]

response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    tools=tools,
    tool_choice={
        "type": "function", 
        "function": {"name": "process_memory"}
    }
)

result = json.loads(
    response.choices[0].message.tool_calls[0].function.arguments
)

print(result)

Get Started with Jaseci Stack

Explore the core components of the Jaseci ecosystem

📘

Jac Lang

Lets you build complex AI systems by modeling your data as a traversable graph.

☁️

Jac Cloud

A serverless platform that automatically handles the scaling and persistence of your Jac applications.

🤖

byLLM

Integrates AI into the language, allowing you to generate code just by describing your logic.

Why We Built Jaseci

The world of software development has evolved dramatically. Here's why we created Jaseci to meet modern challenges.

Built for the Era of Scale

Old abstractions from the 80s and 90s can't keep up with today's cloud, AI, and distributed software. Jaseci introduces modern tools built for this era.

An Extension, Not a Replacement

Jaseci extends Python with new language features and runtimes, letting you stay in the ecosystem you already know.

Innovation Across the Stack

From compiler to runtime to system integrations - Jaseci rethinks how every layer of software development works together.

The Jaseci Stack & Extensibility

With Jac Cloud for scaling, ByLLM for AI-native workflows, and an open plugin system, Jaseci makes it easy to build and extend modern apps.

Journey of Jaseci

~ The story of an idea realized ~

01
2020
Read

In 2020, the concept of a new way of developing software in the AI era is conceived and later described in a Forbes blog article.

02
2022
Read

In 2022, the idea has evolved and the first intellectual step in the journey of Jaseci and Jac is described.

03
2023
Read

Then in 2023, the idea survives peer-review at Computer Architecture Letters.

04
2024
Read

In 2024, the idea that AI should be a conventional code construct in the language is conjured and elucidated.

05
2025
Read

Then in 2025, the idea survives peer-review. (pending)

06
2025
Read

That same year (2025), "data-spatial programming" described in earlier works becomes "object-spatial programming" and is rigorously defined.

07
2025
Read

In 2025, the notion of "scale-native programming" through language abstraction is rigorously defined though it was first described in the original 2022 paper.

And the journey continues...