Skip to main content

OpenJet: run Qwen3.8-27B on your own GPU, 1.5x faster than llama.cpp

OpenJet sets up Qwen3.8-27B, or another open model that fits your hardware, and serves it to your coding tools: Claude Code, Codex, OpenCode, OpenClaw, OpenJet's own terminal agent, or your application. On NVIDIA RTX 30, 40 and 50-series GPUs with 24 GB, it serves Qwen3.8-27B with its own CUDA engine. Local mode needs no account, API key or hosted service, and works offline once the model is installed.

GitHub repository · Documentation · Coding tools · How the engine works · Discord

RTX 3090, Qwen3.8-27B Q4_K_M llama.cpp OpenJet
Reasoning mode, short prompts (what coding agents use) 60 tok/s 92 tok/s (1.5x)
Reasoning mode, 98K tokens in context 37 tok/s 79 tok/s (2.2x)
Reading a 98K-token prompt 112 s 82 s (1.4x)
Greedy, average of 4 prompts 63 tok/s 107 tok/s (1.7x)
Greedy, writing code 73 tok/s 140 tok/s (1.9x)
Reading your prompt, 2-8K tokens 1050-1140 tok/s 1530-1600 tok/s

Each figure is one conversation on one RTX 3090. llama.cpp runs with OpenJet's flags, including MTP speculative decoding. The first three rows are the current engine (thinking on at xhigh, temperature 1.0, 5 prompts x 4 seeds, and one 98K-token prompt); the others are from an earlier build.

Quick Start

Linux and macOS:

curl -fsSL https://github.com/L-Forster/open-jet/releases/latest/download/install.sh | sh

Windows PowerShell:

irm https://github.com/L-Forster/open-jet/releases/latest/download/install.ps1 | iex

The installer brings its own Python, so you don't need Python or pipx. Then, in a new terminal:

openjet setup      # finds your GPU, downloads the model and OpenJet's engine
openjet            # OpenJet's own coding agent

Already use Python? pipx install open-jet works too.

Or serve the model to the coding tool you already use:

openjet serve                     # OpenAI and Anthropic APIs on http://127.0.0.1:8080
openjet connect claude-code       # or codex, opencode, openclaw
Tool API Set up with
Claude Code Anthropic Messages (/v1/messages) openjet connect claude-code
Codex CLI OpenAI Responses (/v1/responses) openjet connect codex
OpenCode OpenAI Chat Completions openjet connect opencode
OpenClaw OpenAI Chat Completions openjet connect openclaw

Or paste this into Claude Code, Codex or another agent with terminal access:

Install OpenJet on this machine by following https://github.com/l-forster/open-jet/blob/master/docs/agent-install.md. Inspect my hardware, choose a suitable local coding model, configure it without the setup wizard, verify inference works, and tell me how to use OpenJet.

To accept the hardware recommendation without the wizard, run openjet setup --yes.

What you need

OpenJet's engine runs Qwen3.8-27B on an NVIDIA RTX 30, 40 or 50-series GPU with 24 GB, on Linux. The model is unsloth's Qwen3.8-27B-Q4_K_M.gguf, which openjet setup downloads for you. On any other GPU, Apple silicon or CPU only, OpenJet sets up the best model that fits and runs it on llama.cpp.

Requirements · Which model fits your hardware

CLI

The primary entrypoint is the openjet command:

openjet                     # start interactive session
openjet setup               # provision a coding model for this machine
openjet project             # provision the model your application ships with
openjet bench               # measure this machine and write a results file to share
openjet benchmark --sweep   # tune llama.cpp settings with llama-bench

The CLI is a full terminal agent that can:

  • Work with local files — search, read, create, and update files in your projects
  • Run shell commands — with explicit approval before execution
  • Run workflows and checks — inspect results, update files, and try again against the local model
  • Resume sessions — close the terminal and pick up where you left off
  • Work on constrained hardware — automatic context condensing and model unload/reload around heavy tasks
  • Connect to devices — cameras, microphones, GPIO, and remote devices for edge and embedded workflows
  • Connect tools — trusted MCP servers are exposed through the normal OpenJet tool registry

Embed a local LLM in your own application

Provision the model once, at build time, in the project that will ship it:

cd your-project
openjet project --use-case dialogue --target handheld --budget 4

Selection is driven by what the model is for, the device you ship to (declared, not detected — the machine you build on is not the machine your users have), and the memory your application can concede. The weights land in .openjet/models/ so your build can bundle them, and .openjet/config.yaml pins them for the SDK.

import asyncio

from openjet.sdk import create_inference_session


async def main() -> None:
    session = await create_inference_session()
    try:
        result = await session.run("Summarise this support ticket in one line.")
        print(result.text)
    finally:
        await session.close()


asyncio.run(main())

create_inference_session() refuses every tool — text in, text out — so an embedded model cannot reach the shell or the filesystem no matter what it generates. Use create_agent() when you do want the full agent surface.

Nothing downloads at runtime. A missing model raises immediately rather than reaching for the network on a user's machine, so your users never fetch a file, see a config, or need an internet connection.

Python SDK

Use openjet.sdk to embed the same runtime in your own Python application.

from openjet.sdk import OpenJetSession, create_inference_session, recommend_hardware_config

Session API

Run agent sessions programmatically:

import asyncio
from openjet.sdk import OpenJetSession


async def main() -> None:
    session = await OpenJetSession.create()
    try:
        result = await session.run("Summarize the current README")
        print(result.text)
    finally:
        await session.close()


asyncio.run(main())

The session API exposes:

  • OpenJetSession.create(...) — create a session
  • session.run(...) — run a prompt and get the result
  • session.stream(...) — stream events as they arrive
  • session.set_airgapped(...) — toggle air-gapped mode
  • session.add_turn_context(...) / session.clear_turn_context(...) — manage turn context
  • create_agent(...) — construct an agent instance

Hardware Recommendation API

Get model and runtime recommendations for your hardware:

from openjet.sdk import recommend_hardware_config

result = recommend_hardware_config(
    {
        "total_ram_gb": 16,
        "gpu": "cuda",
        "vram_mb": 24576,
        "label": "RTX 4090 box",
    }
)

print(result.model.label)
print(result.model.target_path)
print(result.llama.device)
print(result.llama.gpu_layers)
print(result.llama.context_window_tokens)

Typed input is also supported:

from openjet.sdk import HardwareRecommendationInput, recommend_hardware_config

result = recommend_hardware_config(
    HardwareRecommendationInput(
        total_ram_gb=8.0,
        gpu="cpu",
        hardware_profile="other",
        hardware_override="desktop_8",
    )
)

SDK Surface

The supported public SDK surface:

from openjet.sdk import (
    HardwareRecommendation,
    HardwareRecommendationInput,
    OpenJetSession,
    RecommendedLlamaConfig,
    RecommendedModel,
    SDKEvent,
    SDKEventKind,
    SDKResponse,
    ToolResult,
    create_agent,
    create_inference_session,
    recommend_hardware_config,
)

Package Contents

This wheel includes the full OpenJet package:

  • openjet.sdk — Python integrations
  • CLI entrypoint openjet (installed as open-jet on PyPI)
  • Benchmark entrypoints via openjet bench and openjet benchmark
  • The local/session runtime shared by the SDK and CLI
  • OpenJet's Qwen3.8-27B engine server and source (megakernel/); openjet setup downloads the prebuilt library for your GPU, or compiles it when none matches

Frequently asked questions

Can I use OpenJet with Ollama or LM Studio? Yes. Install open-jet[cloud] for the LiteLLM integration and configure an OpenAI-compatible local server profile. See local server configuration. The default managed llama.cpp integration does not require this extra.

Does OpenJet work offline? Yes. After installing the package, runtime and model, local inference works offline. Set airgapped: true to block non-loopback model and tool endpoints. Cloud modes are optional.

Which hardware can run OpenJet? A GPU with 14 GB+ VRAM or Apple silicon with 24 GB+ unified memory is recommended for the coding agent. CPU-only inference is also supported. OpenJet's engine requires Linux, a supported RTX 30, 40 or 50-series GPU with 24 GB+, a recent NVIDIA driver and a compatible Qwen3.8-27B model.

Can I use it without OpenJet's coding agent? Yes. openjet serve serves the model to Claude Code, Codex, OpenCode, OpenClaw or any OpenAI- or Anthropic-compatible client; see Coding tools. The engine docs cover the standalone openjet-engine command and its HTTP API.

Documentation and community

License

OpenJet core is licensed under AGPL-3.0-only.

This package covers the AGPL-licensed core SDK and CLI. Future hosted, team, or enterprise offerings may be licensed separately.

External contributions are accepted under the contributor terms in the repository's CONTRIBUTING.md and CLA.md.

Metadata

Release files for open-jet 0.5.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for open-jet 0.5.4
File Actions
open_jet-0.5.4-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for open_jet-0.5.4-py3-none-win_amd64.whl
open_jet-0.5.4-py3-none-manylinux_2_17_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for open_jet-0.5.4-py3-none-manylinux_2_17_x86_64.whl
open_jet-0.5.4-py3-none-manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for open_jet-0.5.4-py3-none-manylinux_2_17_aarch64.whl
open_jet-0.5.4-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for open_jet-0.5.4-py3-none-macosx_11_0_arm64.whl
open_jet-0.5.4-py3-none-macosx_10_15_x86_64.whl Python 3 none macOS 10.15+ x86-64 Details for open_jet-0.5.4-py3-none-macosx_10_15_x86_64.whl

Total release size: 186.7 MB

Release files / open_jet-0.5.4-py3-none-win_amd64.whl

Download URL open_jet-0.5.4-py3-none-win_amd64.whl
Size 44.6 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
60efa6fecc4bf818910b8326a528c946344183e82afb4b0705675b09be519ebb
BLAKE2b-256 checksum
How to use checksums
1a0c6a474e928da062cbf3ca9938aa07a0153bfbb200861be225dfff4c7ffb6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / open_jet-0.5.4-py3-none-manylinux_2_17_x86_64.whl

Download URL open_jet-0.5.4-py3-none-manylinux_2_17_x86_64.whl
Size 42.9 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
eff7b4d8ff55f65ad30ee993a3760eee6f9e243b282401263419b673555c2388
BLAKE2b-256 checksum
How to use checksums
886fccae65a541104b97ecc0393cf9509ff68218190470a71b11e81e8621d2b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / open_jet-0.5.4-py3-none-manylinux_2_17_aarch64.whl

Download URL open_jet-0.5.4-py3-none-manylinux_2_17_aarch64.whl
Size 42.4 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
33a4d693ca64c3538480144a8b665188a2be28a028d7deda02f9aa0f7fae0bb0
BLAKE2b-256 checksum
How to use checksums
c148b1c997c731ce2768c0b05499d92caffffebca34801368c8a1765aacfc75a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / open_jet-0.5.4-py3-none-macosx_11_0_arm64.whl

Download URL open_jet-0.5.4-py3-none-macosx_11_0_arm64.whl
Size 27.3 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1004b24fe49bffdc59239f8f993594652148ff9e7ef08c86d2276a3ea5c5a919
BLAKE2b-256 checksum
How to use checksums
b4c93e9fa76fd005cefb41f1e5e938847e85447366113dbb28206e199aa51ba1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / open_jet-0.5.4-py3-none-macosx_10_15_x86_64.whl

Download URL open_jet-0.5.4-py3-none-macosx_10_15_x86_64.whl
Size 29.5 MB
Tags Python 3 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
8b490e4c1b006007af7c90a7d738bc475fcbd33100e7c0611a1b2555ba40da12
BLAKE2b-256 checksum
How to use checksums
608b67cc87fe26645c8af4145cdb4802db5cb7a1a59e10de24aecd05aa3bd367
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for open-jet 0.5.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.5.4 This release

5 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page