Changelog
What changed in each release of typebase-io and typebase-io-cli.
Last updated on
typebase-io and typebase-io-cli are released together and always share a version number, so upgrade them as a pair:
npm install typebase-io@latestnpm install -D typebase-io-cli@latestRun npx typebase-io-cli codegen after every upgrade. _generated/ is written by the version that generated it, so a folder
left over from an older release can describe a context your server no longer provides.
0.1.15
2026-08-26.
Added
InferStreamEventfromtypebase-io/server: give it theRouterOutputsentry of a streaming action and it gives you the type of one event, so you no longer have to unwrap the async iterable by hand to type the state a stream feeds.- The CLI checks itself against the installed
typebase-iobefore running a command and warns when the two versions differ, since they are released together and a mismatched pair can generate code your server doesn't understand.npx typebase-io-cli --versionprints the CLI's own version.
Changed
- A stream declared without
.output()now reports the same type as one declared with it. Before, itsRouterOutputsentry was the generator type of the handler that happened to implement it —AsyncGenerator<Event, void, unknown>— so adding an output schema, or rewriting the handler as something other than a generator function, silently changed the action's public type. Both now describe the same event iterator, matching the value an oRPC client actually hands back. Nothing changes at runtime, but code that namedAsyncGeneratorexplicitly to type a stream needs updating;InferStreamEventis the replacement.
0.1.14
2026-08-24.
Added
- Streaming actions: swap
.handler()for.stream()and an action becomes an async generator that pushes events to the client over SSE for as long as it's listening..output()describes one event rather than the whole response, and the generator getssignalandlastEventIdon top of the usual handler context. The compiler enforces that a stream yields at least once, that events are yielded rather than returned, and that each one matches.output(). definePublisher: declare the events your actions publish intypebase/publisher.ts, and every action gets a typedpublisheron its context. A mutation publishes an event, a stream subscribed to it forwards the event to every client watching. Event names and payloads are checked at compile time, andpublish(name, payload, { tx })joins a transaction so a rollback publishes nothing.- The
dbpublisher provider keeps events in aneventstable in your own database, polls it on a loop shared by every subscriber on the instance, and tags each event with its row id, so a client that reconnects resumes from the last event it saw instead of missing whatever was published while it was away. The table is declared in your owndb/schema.tslike any other. withEventMetaandgetEventMetafromtypebase-io/server, for attaching anidorretryto an event and reading it back.init --with-db-publisher: scaffoldspublisher.ts, theeventstable, its relation, and example actions that publish and stream. Like--with-auth, it can't be combined with--skip-example.consumeStreamfromtypebase-io/client, for reading a stream with callbacks instead offor await. Create a client first, then pass the stream call:client.path.to.stream()forcreateRouterClient, orclient.path.to.stream.call()forcreateTanstackQueryClient. It starts immediately and returns an unsubscribe function, so UI code must start it from the component's mount lifecycle and unsubscribe during cleanup rather than calling it during render.typebase-io/client/pluginsre-exports every oRPC client plugin, soClientRetryPluginand the rest work without adding a dependency. Streams don't reconnect on their own, so this is what you reach for to make a dropped connection resume.
Changed
codegennow also has to be rerun whenpublisher.tsis added or removed, the same asauth.tsandenv.ts. Editing an existing one doesn't need it.
0.1.13
2026-08-19.
Added
db pull: read an existing PostgreSQL database and write it todb/schema.tsanddb/relations.ts, then regenerate the types. Column types, defaults, primary keys, unique constraints, indexes, foreign keys, enums and views all come across, every table gets registered in relations (Drizzle only writes the ones that have a foreign key), and the result is written in the shorthand a Typebase schema is normally written in. It asks before replacing existing files unless you pass--force.
0.1.12
2026-08-17.
Added
config: prints thetypebase.jsonJSON Schema with every option annotated with the value in effect and whether it came from a default. Read-only, and the one command that doesn't needtypebase-ioinstalled, so tooling can read a project's setup without reimplementing the schema or its defaults.initnow creates atypebase.jsonholding a$schemareference, so your editor autocompletes the config from the start. Values already in an existing file are kept.
0.1.11
2026-08-02.
Added
generate-server --watchkeeps the command running and rebuildstypebase/_server/whenever anything insidetypebase/changes. See Work locally.
0.1.10
2026-08-01.
Fixed
- Simplified the
envtype, so editors show the keys you declared instead of an expanded internal type.
0.1.9
2026-08-01.
Added
defineEnv: declare the variables your server needs intypebase/env.tsand read them from the handler context asenv, each one a plainstring. The generated server validates the whole schema before it serves a single request, so a missing variable is a startup error instead of anundefinedsurfacing deep inside a handler later.DATABASE_URLandBETTER_AUTH_SECRETare added for you.- The generated server carries its own env module, and
@t3-oss/env-coreis added to its dependencies only when the project needs one.
Changed
- Empty database and relation types are
neverrather than{}, so a project without a schema no longer offers adbyou can't use. - A project with an
auth.tsbut nodb/schema.tsis now refused instead of building a server whose auth could never work. - Removed
skipLoadEnv.
Fixed
- Types are generated before they are validated, so the first run type-checks against fresh types.
- Type errors inside
_generated/are no longer reported as yours.
0.1.8
2026-07-29.
Added
logs <dev|prod>: stream runtime logs from Vercel, Cloudflare Workers or Deno Deploy until you stop it.deploy <target> --logstails the server as soon as the deploy goes live.
Fixed
proxyToTypebasestripsx-forwarded-*headers from the proxied request, which some providers rejected.
0.1.7
2026-07-20.
Added
server.portis part of the config schema, so editors validate it intypebase.json.
Changed
generate-serverremoves the files an earlier run left behind instead of writing over them.
Fixed
init --with-authwrites the correct relations for the example.- Clearer failures instead of silent ones: an unreadable
auth.ts, code that cannot be parsed, and relations thatauth generatecannot update now stop with an explanation.
0.1.6
2026-07-03.
Added
RouterInputsandRouterOutputsin the generated server types, plusInferRouterInputsandInferRouterOutputsfromtypebase-io, so you can name an action's input or output type without redeclaring its shape. See Generated Code.
0.1.5
2026-07-03.
Fixed
auth generateadds the plugin import to the generated auth file when a plugin needs one.- A formatting error in generated files.
0.1.4
2026-07-01.
Changed
- The CLI got a test suite, and CI now runs it on every change.
0.1.3
2026-06-10.
Changed
env <target> addtakes--no-encryptedinstead of--encrypted, so values are encrypted unless you opt out.
Fixed
- Writing the project
.envkeeps the variables already in it. - Router generation handles nested action files correctly.
- Type validation ignores
_generated/. - A command run in a project without
typebase-ioinstalled says so, and failures exit with a non-zero code. defineAuthwarns when it cannot readtrustedOriginsinstead of carrying on with an empty list.
0.1.2
2026-06-08.
Added
- Every built-in better-auth plugin is re-exported through
typebase-io/server/auth-pluginsandtypebase-io/client/auth-plugins, so you don't have to depend onbetter-authdirectly. See Auth. init --skip-examplestill writes basedb/schema.tsanddb/relations.tsfiles.
Changed
deployregenerates types as part of every deploy.
0.1.1
2026-06-03.
Fixed
defineAuthinfers its options correctly, so plugin and provider config reaches the client types.- The example relations file generated with
--with-authregisters the auth tables.
0.1.0
2026-05-13.
Added
- The AI Skill: a single
SKILL.mdthat teaches a coding agent the file layout, CLI commands and conventions. generate-server --port, with a new default port.- Dev deploys save their URL to
.envasTYPEBASE_APP_URL_DEV, so the dev and prod URLs coexist. - The generated server records a
packageManagerfield and installs with the package manager your project uses.
Fixed
- Vercel: a placeholder is deployed on a first
devdeploy when there is no production deployment yet. - Neon: the CLI waits for a new dev branch to be ready, and no longer copies data into it.
- Deno Deploy: fixed the deploy flow and a terminal read error.
- Only actions end up on the router; helpers exported alongside them are ignored.