Over 1000+ developers use Orcus. Read the documentation before shipping.

No LLM API Credits Required with Orcus

Orcus lets you use multiple LLM through their web interfaces as API-style services, turning web based AI interactions into programmatic access for your applications.

npm install @orcushq/gemini

Provider packages

ChatGPT are under devlopment and not published yet. Provider status

src/app.ts
1import 'dotenv/config';
2import { GeminiWeb } from '@orcushq/gemini';
3
4// Authenticated session using credentials from your .env file.
5const gemini = new GeminiWeb({
6 model: 'gemini-3.6-flash',
7 cookies: process.env.GEMINI_COOKIES,
8 xsrfToken: process.env.GEMINI_XSRF_TOKEN,
9});
10
11const response = await gemini.invoke('Explain closures in one sentence.');
12
13console.log(response.content);
14console.log(response.metadata.requestedModel); // what you asked for
15console.log(response.metadata.modelId); // model that answered
16 
17 
18 
19 
20 
21 

$ npx tsx src/app.ts

A closure is a function that remembers the variables of the scope it was

defined in, so it can still read them after that scope has finished running.

gemini-3.6-flash

gemini-3.6-flash

Build with orcus

From a single prompt to streaming, tools, and structured outputs.

Orcus playgroundinvoke()
One call, one answer
import { GeminiWeb } from '@orcushq/gemini' const model = new GeminiWeb({ model: 'gemini-3.6-flash' })const response = await model.invoke('Explain closures.')console.log(response.content)
Explore invoke()
Orcus playgroundstream()
Answers as they arrive
const stream = await model.stream('Write a haiku') for await (const chunk of stream) {  process.stdout.write(chunk.content)}
Explore stream()
Orcus playgroundbatch()
Many prompts, one call
const responses = await model.batch(['one', 'two', 'three'], {  concurrency: 4,})
Explore batch()
Orcus playgroundstructured output
JSON you can trust
import { z } from 'zod' const person = z.object({ name: z.string(), age: z.number() })const structured = model.withStructuredOutput(person)const { value } = await structured.invoke('I am Vikas, 21')
Explore structured output
Orcus playgroundbindTools()
Your own tools
const model = new GeminiWeb({ cookies }).bindTools([  {    name: 'get_weather',    description: 'Current weather for a city',    parameters: {      type: 'object',      properties: { city: { type: 'string' } },      required: ['city'],    },  },])
Explore bindTools()
Orcus playgroundimage input
Pictures and screenshots
await model.invoke([  { role: 'user', content: [    { type: 'text', text: 'What is in this picture?' },    { type: 'image', data: pngBytes, mime_type: 'image/png' },  ] },])
Explore image input

Frequently asked questions

Frequently asked questions

What these packages are, what they are not, and where the boundaries sit.

Getstart with the provider you need

Start with the quickstart, then read the limitations before you depend on it.