Skip to main content

Build full-stack web applications with Jac - one language for frontend and backend.

Project description

Jac Client

Build full-stack web applications with Jac - one language for frontend and backend.

Jac Client enables you to write React-like components, manage state, and build interactive UIs all in Jac. No need for separate frontend frameworks, HTTP clients, or complex build configurations.


✨ Features

  • Single Language: Write frontend and backend in Jac
  • No HTTP Client: Use jacSpawn() instead of fetch/axios
  • React Hooks: Use standard React useState and useEffect hooks
  • Component-Based: Build reusable UI components with JSX
  • Graph Database: Built-in graph data model eliminates need for SQL/NoSQL
  • Type Safety: Type checking across frontend and backend
  • Vite-Powered: Optimized production bundles with Vite

🚀 Quick Start

Installation

pip install jac-client

Create a New App

jac create_jac_app my-app
cd my-app
jac serve app.jac

Visit http://localhost:8000/page/app to see your app!


📚 Documentation

For detailed guides and tutorials, see the docs folder:

  • Getting Started Guide - Complete beginner's guide
  • Routing - Multi-page applications with declarative routing (<Router>, <Routes>, <Route>)
  • Lifecycle Hooks - Using React hooks (useState, useEffect)
  • Advanced State - Managing complex state with React hooks
  • Imports - Importing third-party libraries (React, Ant Design, Lodash), Jac files, and JavaScript modules

💡 Example

Simple Counter with React Hooks

cl import from react { useState, useEffect }

cl {
    def Counter() -> any {
        let [count, setCount] = useState(0);

        useEffect(lambda -> None {
            console.log("Count changed:", count);
        }, [count]);

        return <div>
            <h1>Count: {count}</h1>
            <button onClick={lambda e: any -> None {
                setCount(count + 1);
            }}>
                Increment
            </button>
        </div>;
    }

    def app() -> any {
        return Counter();
    }
}

Full-Stack Todo App

cl import from react { useState, useEffect }
cl import from '@jac-client/utils' { jacSpawn }

# Backend: Jac nodes and walkers
node Todo {
    has text: str;
    has done: bool = False;
}

walker create_todo {
    has text: str;
    can create with `root entry {
        new_todo = here ++> Todo(text=self.text);
        report new_todo;
    }
}

walker read_todos {
    can read with `root entry {
        visit [-->(`?Todo)];
    }
}

# Frontend: React component
cl {
    def app() -> any {
        let [todos, setTodos] = useState([]);

        useEffect(lambda -> None {
            async def loadTodos() -> None {
                result = await jacSpawn("read_todos", "", {});
                setTodos(result.reports);
            }
            loadTodos();
        }, []);

        return <div>
            <h1>My Todos</h1>
            {todos.map(lambda todo: any -> any {
                return <div key={todo._jac_id}>{todo.text}</div>;
            })}
        </div>;
    }
}

🔧 Requirements

  • Python: 3.12+
  • Node.js: For npm and Vite
  • Jac Language: jaclang (installed automatically)

🛠️ How It Works

Jac Client is a plugin that:

  1. Compiles your .jac client code to JavaScript
  2. Bundles dependencies with Vite for optimal performance
  3. Provides a runtime for reactive state and components
  4. Integrates seamlessly with Jac's backend graph operations

📖 Learn More

  • Full Documentation: See docs/ for comprehensive guides
  • Examples: Check jac_client/examples/ for working examples
  • Issues: Report bugs on GitHub Issues

📄 License

MIT License - see LICENSE file.


Happy coding with Jac! 🎉

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jac_client-0.2.3.tar.gz (417.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jac_client-0.2.3-py3-none-any.whl (487.4 kB view details)

Uploaded Python 3

File details

Details for the file jac_client-0.2.3.tar.gz.

File metadata

  • Download URL: jac_client-0.2.3.tar.gz
  • Upload date:
  • Size: 417.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for jac_client-0.2.3.tar.gz
Algorithm Hash digest
SHA256 01f32e113f3c0e0ad64a5c523d429dc1e3d0060f1baa508fb6c20e0ed614d4aa
MD5 41707b79e39ee80df6af3ce7528994aa
BLAKE2b-256 5cff11a229ec6a557520a448824b4d803f755fa6215264f1c497602884d1ff94

See more details on using hashes here.

File details

Details for the file jac_client-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: jac_client-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 487.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for jac_client-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8bb8dfc7acff13fb66ebb4eae6089bb406f0cd95eadb3a96cf12c79b01d428e9
MD5 b9ff23621664c90e5fc1fb50c81a4f54
BLAKE2b-256 80ef8bc90a74463935e6126bcee42691d5477df73cb343d7db6c4560d7996176

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page