# Xyvenra > Xyvenra by Ouroboros is a developer platform with five products and one account: Code, Cloud, Data, Mobile, and Studio. Xyvenra is for individual developers. Limits are stated up front. You bring your own cloud AI provider account or key for Code and Studio; that provider bills you directly. ## What is available today - Code: in-app chat and editor with bring-your-own-key. Plus is $7/month or $70/year and Premium is $25/month or $250/year, each with a 14-day trial. Seats are a little under the Cursor Plus and Premium list prices. Code does not include model tokens or a usage pool. No included model tokens. Agent mode stays in the browser. A remote coding VM, hosted terminal, and background agent are not available. Checkout is open. Buy Plus with planKey forge-entry or Premium with planKey forge-advanced, and interval month or year, at /api/checkout. - Cloud: in-app static sites. Publish self-contained HTML (180 KB) or a static-site ZIP (4 MB) to a `xyvenra.com/sites/{slug}` URL. Public env vars are written into that page at publish. Private values are not. This is not a Node or Next.js host. - Data: in-app projects, typed tables, records, private files, a poll of `updated_at`, and project-scoped API keys (`xyv_data_`). Project app-user auth, app-user record and file access, app-user table access, app-user record-event polls, app-user table-event polls, app-user file-event polls, app-user signed file URLs, app-user hook invocation, app-user password changes, app-user grant listings, app-user private file writes, a public bucket, Realtime, and Edge Functions are not provisioned and are not available. Turning on app-user auth does not grant record, file, or table access. A table grant would cover one table, not the whole project, and it is not provisioned. A private file-write grant would cover one app user, not every user in the project, and it is not provisioned. Record-event polls, file-event polls, and table-event polls do not open a websocket, and data-app-hook is not invoked. Table-event polls are not provisioned. Project-key event polls are not provisioned. They do not open a websocket. An app session is not a project key. XYVENRA_DATA_PROJECT_EVENTS_ENABLED does not start event writers. No enable, apply, or deploy action is offered for project-key event polls. Record and file event writers are not provisioned. No enable, apply, or deploy action is offered. A later record write runs when XYVENRA_DATA_APP_EVENTS_ENABLED or XYVENRA_DATA_APP_TABLE_EVENTS_ENABLED is exactly true, once if both are, and a later file write runs only when XYVENRA_DATA_APP_FILE_EVENTS_ENABLED is exactly true. The events table must be insertable, and a failed insert does not undo the record or file change. Those writers do not open polls, hooks, signed URLs, file writes, or table access. A file-write grant does not include file events. Signed file URLs are not provisioned. They would expire, they would not set a bucket public, and a file-write, record, or table grant would not mint one. App-user password changes are not provisioned. Turning on app-user auth does not open them. A project key is not an app session. No enable, apply, or deploy action is offered. App-user grant listings are not provisioned. Turning on app-user auth or access does not open them. A project key is not an app session. No enable, apply, or deploy action is offered. - Mobile: in-app Expo starter preview and an EAS-ready project ZIP. A customer can dispatch an existing Expo workflow with their own token. Xyvenra does not pay Expo or upload the starter. - Studio: in-app multi-file browser-app editing, saved starter kits that do not call a provider, preview text, link href, image alt, and inline style edits, including border, radius, width, max-width, display, flex direction, wrap, justify, align, gap, opacity, and box shadow, a page outline, in-tab undo, and a selected element saved as a local block in this browser, a local site theme, page description, language, favicon, and Open Graph title, description, and image from a local PNG, JPEG, WebP, or GIF, local notes for missing alt text, empty buttons, and skipped headings, bounded local PNG/JPEG/WebP/GIF files, source ZIP download, and sending a saved page to Cloud. The preview inspector can also set line height, letter spacing, font style, text decoration, and text transform as inline styles on the selected element. A blank field leaves that value unchanged. Shared CSS is not rewritten. The preview inspector can also set position, top, right, bottom, left, z-index, overflow, min-width, min-height, max-height, flex-grow, flex-shrink, flex-basis, align-self, and order as inline styles on the selected element. A blank field leaves that value unchanged. Shared CSS is not rewritten. The preview inspector can also set a background image as an inline style on the selected element from a local PNG, JPEG, WebP, or GIF already in the project. A blank field leaves that value unchanged. Shared CSS is not rewritten. The preview inspector can also set style values for the selected element at the existing Mobile (390), Tablet (768), and Desktop (1280) preview widths. Those overrides are stored as media queries in the project stylesheet. A blank field leaves that value unchanged. Shared CSS already in the project is not rewritten. The preview inspector can also set those same style values for the selected element on hover and on focus, including a background image from a local PNG, JPEG, WebP, or GIF already in the project. Those overrides are stored as :hover and :focus rules in a marked block in the project stylesheet. A blank field leaves that value unchanged. Clear removes one hover or focus value in the marked states block, the same way it removes one value at a preview width. Shared CSS already in the project is not rewritten. The preview inspector can also set a transform, a transform origin, and a transition on the selected element. A blank field leaves that value unchanged. Shared CSS already in the project is not rewritten. The preview inspector can also set CSS Grid on the selected element, including display grid or inline-grid, template columns, template rows, template areas, auto flow, and grid placement. A blank field leaves that value unchanged. Shared CSS already in the project is not rewritten. This is not a visual IDE, device emulator, or hosted build service. Platform create, list, source ZIP, and an explicit send to Cloud. Paid Cloud, Data, Mobile, and Studio plans are not offered yet. A $0 free tier is proposed, not launched. See the free-tier proposal in the repository; it is not a public offer. ## Docs - [Documentation index](https://xyvenra.com/docs): product overview and status - [Quickstart](https://xyvenra.com/docs/quickstart): sign in, create a Data project or Cloud site, deploy static HTML - [API reference](https://xyvenra.com/docs/api): platform, Cloud, and Data APIs - [MCP](https://xyvenra.com/docs/mcp): OAuth or a platform API key, and the live tool list - [Code](https://xyvenra.com/docs/code) - [Cloud](https://xyvenra.com/docs/cloud) - [Data](https://xyvenra.com/docs/data) - [Mobile](https://xyvenra.com/docs/mobile) (Expo starter and ZIP; paid plans coming soon; no EAS builds) - [Studio](https://xyvenra.com/docs/studio) (browser app and ZIP; paid plans coming soon) - [Product guides](https://xyvenra.com/guides) - [Full text for agents](https://xyvenra.com/llms-full.txt) ## Platform tools for agents A human must sign in at https://xyvenra.com/login (GitHub or Google) and create a platform API key at https://xyvenra.com/app/keys. The plaintext key is shown once. Prefix: `xyv_plat_`. Agents cannot complete signup or key creation in a browser. ```bash npx xyvenra login --api-key xyv_plat_... npx xyvenra init static-site --dir mysite # The CLI does not create sites. Create one, then deploy: curl -X POST https://xyvenra.com/api/platform/v1/projects \ -H "Authorization: Bearer xyv_plat_..." \ -H "Content-Type: application/json" \ -d '{"product":"cloud","name":"Launch site","slug":"launch-site"}' npx xyvenra deploy --site-id SITE_ID --file mysite/index.html npx xyvenra status npx xyvenra guidance --product cloud --project-id SITE_ID ``` - Remote MCP: `https://xyvenra.com/api/mcp`. Official registry: `io.github.LAHutchins91/xyvenra`. Connect with OAuth 2.1 first. A platform API key (`xyv_plat_`) is the fallback. OAuth access tokens use `xyv_oat_` - CLI: `npm install -g xyvenra` or `npx xyvenra` (package `xyvenra` on npm) - Tools today: `create_project`, `list_projects`, `project` (read Cloud HTML, Studio source, or a Mobile draft; save Studio source or a Mobile draft), `deploy` (static Cloud HTML or a saved Studio page, with public env values written in), `export` (Studio ZIP, Mobile ZIP, Data JSON), `env_vars`, `database` (query, batch create, get, update, delete, table delete, and a record poll), `files`, `eas_dispatch` (customer Expo token only), `guidance`, and `status`. Guide: https://xyvenra.com/docs/mcp - CLI environment variables that work today: `XYVENRA_API_KEY`, `XYVENRA_API_URL` (default `https://xyvenra.com`), and `XYVENRA_CONFIG_DIR` - Project env vars: `GET`, `POST`, `PATCH`, and `DELETE /api/platform/v1/env`. `exposure` is `secret` or `public` (default secret). Cloud publish writes public values into the static page and replaces `{{XYVENRA_PUBLIC:NAME}}`. Private values are not written into the page. There is no server runtime. If the exposure column is not installed yet, a public value is refused and nothing is saved as public - `guidance` asks once about a real next step (Mobile starter, Data project, Studio app, another Cloud site, static deploy, or the MCP plugin). Decline turns that path off. `continue` creates only the named step and does not deploy or charge - MCP OAuth 2.1 (protected resource metadata, authorization server metadata, dynamic client registration, PKCE S256, and a consent screen that reuses GitHub or Google sign-in) is the primary way to connect. A platform API key remains the fallback. Tokens map to the same account as platform keys. API-key bearer auth continues to work Do not invent server-side Cloud runtimes, unpublished paid plans, or a launched free tier.