---
title: "v1.2.1 — API Architecture Hardening, Translations Cleanup, and Tailwind v3 Fix"
version: 1.2.1
date: 2025-05-12
description: "Patch release refining the new API architecture with oRPC + OpenAPI, consolidating translations into common keys, fixing Tailwind v3 layer collision, and improving schema validation and configuration defaults. Introduces a type-safe Node.js SDK and centralized routing."
tags:
  - release
  - stable
  - backend
  - openapi
  - translations
  - styling
canary: false
type: release
breaking: false
authors:
  - burnedchris
  - kayleewilliams
packages:
  - "c15t@1.2.1"
---
## Summary

This release delivers a major refactor and architecture upgrade across the API system, along with enhanced translation handling, styling fixes, and groundwork for future CLI and dashboard features. It introduces a type-safe Node.js SDK, centralized routing, and better configuration defaults — paving the way for production-ready scaling.

## 🚀 New Features

* Introduced a **Node.js SDK** for type-safe client access to the C15T API
* Added **OpenAPI** support for backend contracts
* New **contract-based routing** for consent and meta endpoints
* Support for **common translation strings** across UI components
* Early support for **dev vs prod** instance logic and origin handling

## 🐛 Bug Fixes

* Fixed Tailwind CSS v3 layer collision by removing unused `@layer` wrappers
* Improved schema validation for `setConsent`
* Fixed environment variable parsing for trusted origins
* Improved fallback handling for translations and jurisdiction detection

## 🧪 Tests

* Added test coverage for new consent contracts and schema validation
* Extended coverage for translations, error handling, and Node.js SDK
* Cleaned up outdated tests and fixtures

## 🧹 Refactor

* Migrated backend from H3 to **oRPC** for improved type safety
* Consolidated translation logic and **removed widget-specific translations**
* Introduced a **unified logger** utility
* Simplified consent manager configuration and routing structure

## 🔒 Closed Issues

* [#222](https://github.com/c15t/c15t/issues/222) — duplicate/overlapping translation keys between dialog and widget (resolved by consolidation to `common`)
* [#217](https://github.com/c15t/c15t/issues/217) / [#218](https://github.com/c15t/c15t/issues/218) — Tailwind v3 `@layer base` collision (fixed by removing layer wrappers)

## ✨ What's Changed

* refactor(api): switch to oRPC and unified contract routing by [@BurnedChris](https://github.com/BurnedChris) in [#213](https://github.com/c15t/c15t/pull/213)
* feat(sdk): introduce Node.js client with OpenAPI support by [@BurnedChris](https://github.com/BurnedChris) in [#214](https://github.com/c15t/c15t/pull/214)
* fix(styles): remove Tailwind layer to avoid collision by [@KayleeWilliams](https://github.com/KayleeWilliams) in [#217](https://github.com/c15t/c15t/pull/217)
* refactor(translations): consolidate into common + remove widget keys by [@KayleeWilliams](https://github.com/KayleeWilliams) in [#219](https://github.com/c15t/c15t/pull/219)
* fix(schema): improve `setConsent` validation by [@KayleeWilliams](https://github.com/KayleeWilliams)
* Version Packages by [@github-actions](https://github.com/github-actions) in [#220](https://github.com/c15t/c15t/pull/220)

Published via commit [f82e56a](https://github.com/c15t/c15t/commit/f82e56a) by [@github-actions](https://github.com/github-actions)

**Full Changelog**: [c15t@1.2.0...c15t@1.2.1](https://github.com/c15t/c15t/compare/c15t@1.2.0...c15t@1.2.1)

<ContributorBlock usernames={["BurnedChris", "KayleeWilliams"]} />
