A dusk game world with a glowing AI character mid-conversation
For live-service games

Characters your players
come back for.

Go viral with characters that act in your world and interact with players.
Journale is the safe backend that makes it possible

no credit card required · 500 credits monthly, forever
The shift

Your scripted characters are driving players away.
Give them a character they want to talk to.

Security

Journale prevents
a huge bill.

Troll player spams your NPC: You wake to a four-figure bill.
Your model says the wrong thing to a 12-year-old: Roblox moderates your experience.

Journale sits between your players and the model: per-player limits, moderation, signed sessions. The dangerous 99% already solved.

npc_endpoint · liveplayer_4471
→ "hello" save money · 1 cr
→ "hello" spam detected
→ "hello" spam detected
→ "hello" spam detected
// Journale flags and limits this player
metered / 6 min$2,140
Why you need this

Characters are how Roblox decides to show your game.

Algorithms rank you on engagement, session length, return rate, qualified plays. A character players connect with feed those exact signals. More engagement is more free placement, more players, at no acquisition cost.

01

A hook competitors don't have

"Talk to anyone, say anything. They remember you, they act on your words."

02

Unlimited content

Character say things that you don't hand-build every week.

03

Players make your marketing

Surprising AI moments get clipped to TikTok. Free user acquisition.

An illustrated lore map of a game world
custom characters

Define them once. They live everywhere.

Three distinct AI game characters
Silas
character · silas_merchant

Knows the market, the factions, the going rate. Will haggle.

market_loregive_itemstart_quest
Vael
character · vael_warden

Suspicious of strangers. Decides who gets through.

city_loreopen_gateturn_hostile
Mire The Companion
character · mire_companion

Remembers your last run. Reacts to where you've been.

player_memoryemoteguide
Integration

Three steps, no infrastructure.

STEP 01

Create a character

Personality, appearance, lore & knowledge books, permitted actions.

STEP 02

Drop in the SDK

Open-source Unity or Roblox package. One call. Key stays server-side.

STEP 03

Ship it

Limits, moderation, sessions and analytics already on.

Questions

FAQ

How do you stop a player from running up my bill?
Journale uses per-player sliding-window rate limits, concurrency caps, and bad-actor tracking. All on by default.
Where does my model key live?
On Journale's servers. Your game calls the Journale endpoint with a signed player session and we call the model. You can also use a Journale API Key if you have your own backend (with the same security per-call)
Is content moderation always on?
Yes, for now. Output is filtered between the model and the player before it reaches them. A single bad generation can get a game deleted.
Which engines do you support?
Currently, we support Unity and Roblox.
The HTTP API is engine-agnostic, so you can easily build a client for anything else (Godot, Unreal, FiveM). Submit your open-source SDKs to [email protected] for review to make them official!
How is this different from just calling OpenAI?
The model call is the easy 1%. Journale is the 99% around it: rate limits, content moderation, player sessions, custom characters creator, lore books, knowledge books, in-game action triggers, and conversation analytics.
What does it cost? Is there a free tier?
We use credit-based pricing, with one credit roughly 4K context tokens. The free tier is 500 credits a month with no credit card. Paid plans start at $9.99/mo and scale to Studio at $99.99/mo for 60,000 credits. Full breakdown on pricing.
Are the SDKs open source?
Yes, both the Unity and Roblox SDKs are open source. You can fork them, audit them, or use them as a reference to build a client for any other engine.

Make characters your competitive edge.

Start a free project and integrate a character that sets your game apart from the competition.

-- Roblox Luau
local Journale = require(JournaleSDK)

Journale.ChatWithCharacter(player,
  "silas_merchant", "Any work?")
-- reply ~600ms · moderated · 1 cr