The Jac Programming Language and Jaseci Stack

One Language forAI-Native Full-StackDevelopment

Build complete applications with backend + frontend + AI in a single unified language. Access both PyPI and npm ecosystems, deploy from laptop to cloud with zero code changes.

Install with one command

$curl -fsSL https://raw.githubusercontent.com/jaseci-labs/jaseci/main/scripts/install.sh | bash

Then launch a full-stack app

$jac create myapp --use fullstack
$cd myapp && jac start main.jac
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

Why Jaseci

Jaseci provides native AI integration, full-stack capabilities, and seamless deployment and scaling in one unified stack.

Full Stack in One File

Replaces Python, JavaScript, and C/Zig/Rust with full access to PyPI, npm, and C-ABI — backend, frontend, and AI in one language.

Jac replaces the need for Python, JavaScript, and C/Zig/Rust while maintaining full native compatibility. Import any PyPI package, use any npm package, and link with any C-ABI library. Write React components, backend logic, and AI integrations all in the same file. No more juggling three languages across three codebases.

Kill the Glue Code

No REST endpoints. No HTTP clients. No CORS. Frontend calls backend directly.

In traditional stacks, half your code is just connecting things: writing API routes, serializing data, configuring fetch calls. In Jac, frontend and backend live in the same file, so calling a backend service is just a function call. Authentication, type safety, and serialization are handled for you.

AI with No Manual Prompts

by llm() turns your function signature into the prompt. No prompt engineering required.

Declare what you want, not how to ask for it. Jac extracts the semantics from your code: function names, types, docstrings, and generates the right prompt automatically. Research shows developers complete tasks 3.2x faster with 45% fewer lines of code. [1]

Deploy Without DevOps

Same code, laptop to Kubernetes. Databases, auth, and API docs auto-provisioned.

jac start app.jac runs locally. Add --scale and you get Kubernetes deployments with MongoDB, Redis, JWT auth, and Swagger docs: all auto-configured. No Dockerfile, no manifests, no infrastructure setup.

Jac Replaces Python, JavaScript & C/Zig/Rust

One language that generates pure Python, pure JavaScript, and pure machine code

.jac
Write Once
Jac Compiler
Pure Python
Full PyPI Access
Pure JavaScript
Full npm Access
Pure Machine Code
C-ABI Compatible

Use Any Python Library (PyPI)

Use Any npm Package (React, MUI, etc.)

Write Once, Run Everywhere

Jac compiles to pure Python, pure JavaScript, and pure machine code. Import any PyPI package, any npm package, or link with any C-ABI library — all from a single language.

NEWjac-client

Full-Stack Applications in One Language

Build complete web applications with backend, frontend, and AI - all in Jac. No more context switching between languages.

Full-Stack Todo App (One File)

What You Get

  • React components written in Jac syntax
  • Automatic state management (has → useState)
  • Direct walker invocation (no HTTP boilerplate)
  • Type safety across frontend and backend
  • Hot module replacement for fast development
  • Full npm ecosystem access (MUI, Tailwind, etc.)

Write Once

Backend logic, frontend UI, and AI - all in one .jac file

Run Locally

jac start app.jac - instant dev server

Deploy to Production

jac start app.jac --scale - same code, infinite scale

NEWjac-scale

Zero to Infinite Scale Without Code Changes

Deploy the same code locally or to Kubernetes production. No Docker, no manifests, no configuration.

Local development with hot reload
$jac start app.jac
# App running at http://localhost:8000
SQLite storage
Fast iteration
Hot module replacement

What Gets Created Automatically

Kubernetes Deployment

With load balancing & health checks

Redis StatefulSet

For caching & session management

MongoDB StatefulSet

For persistent data storage

ConfigMaps & Secrets

Secure configuration management

Persistent Volumes

Data survives restarts

Kubernetes Orchestration

Auto-scaling deployments, health checks, and service discovery

Persistent Storage

MongoDB for data, Redis for caching - auto-provisioned

Built-in Auth

JWT authentication and SSO support out of the box

Auto API Docs

Swagger/OpenAPI documentation generated automatically

Zero DevOps Required. No Dockerfile, no Kubernetes manifests, no infrastructure setup. The same code that runs on your laptop scales to production with a single flag.

AI Native Programming Language

Meaning Typed Programming with byLLM and agentic Object-Spatial Programming

Jac introduces Meaning Typed Programming - replace function bodies with AI. The function signature IS the specification. No complex prompts needed, just declare what you want.

Jac Programming

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

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)

The Jaseci Stack

Everything you need to build AI-native full-stack applications

Jac Lang

The core language that replaces Python, JavaScript, and C/Zig/Rust — with full native compatibility for PyPI, npm, and C-ABI. Build AI systems with graph-based Object-Spatial Programming.

jac-client

Build full-stack web applications entirely in Jac. React components, state management, and backend APIs in one file.

jac-scale

Zero to infinite scale without code changes. Deploy to Kubernetes with auto-provisioned databases and authentication.

byLLM

AI integration without prompt engineering. Replace function bodies with LLMs.

References

[1] Jayanaka L. Dantanarayana, Yiping Kang, Kugesan Sivasothynathan, Christopher Clarke, Baichuan Li, Savini Kashmira, Krisztian Flautner, Lingjia Tang, and Jason Mars. 2025.

"MTP: A Meaning-Typed Language Abstraction for AI-Integrated Programming."

Proc. ACM Program. Lang. 9, OOPSLA2, Article 314 (October 2025), 29 pages. https://doi.org/10.1145/3763092