Skip to content

Stability Reference

Sloppy is public alpha software. APIs and artifact formats may change between alpha releases.

Version Fields in Current Artifacts

Current emitted/compiled version markers:

  • runtime CLI version string: 0.1.0-alpha.3
  • compiler version: sloppyc-0.8.0
  • plan runtime minimum version: 0.1.0
  • plan stdlib version: 0.1.0

Plan Schema Stability

Current native parser contract is schemaVersion: 1.

Parser behavior:

  • unsupported schema versions are rejected
  • required fields and known field types are strict
  • unknown extra fields are ignored

Compatibility Checks Enforced at Run Time

sloppy run validates artifact compatibility metadata before handler execution:

  • target platform/engine fields
  • runtime minimum version
  • route/handler consistency and related startup validation

Provider and Runtime Stability

  • Provider metadata supports sqlite, postgres, sqlserver.
  • Compiler-generated static provider handles are sqlite-only.
  • Typed-handler provider injection is generated for SQLite, PostgreSQL, and SQL Server. SQLite is embedded. PostgreSQL and SQL Server execution depends on optional provider dependencies, provider config, and live service setup only when those providers are used.
  • Live provider checks are opt-in and environment-dependent.

Feature Matrix

This matrix is the compact current-state map. supported means the surface is covered by current source and tests in that column. experimental means the surface exists in the public alpha runtime but may change. rejected means the compiler refuses the input rather than emitting a partial Plan.

FeatureApp-host/test-hostCompiler source inputGenerated app.js / PlanNative/V8 sloppy runNotes
RoutingsupportedsupportedsupportedsupportedDirect route registration supports GET, POST, PUT, PATCH, and DELETE; generated CORS preflight routes bind OPTIONS in Plan metadata. Dispatch precedence is static before parameter, constrained before unconstrained, longer/more-specific before shorter, then source order.
Route paramssupportedsupportedsupportedsupported{name}, {name:str}, {name:int}, {name:uuid}, {name:alpha}, and {name:float} values are strings in handler context.
QuerysupportedsupportedsupportedsupportedLast value wins for repeated keys.
Headerssupportedsupported through typed/header metadata and request contextsupportedsupported--once can supply bounded custom headers through --header.
Body helperssupportedsupported through body metadata and generated wrapperssupportedsupportedJSON/text/bytes/forms/multipart are bounded in memory.
Static filesAPI shape supportedsupported for literal app.staticFiles(...), app.spa(...), and compatibility app.useStaticFiles(...) optionsgenerated static routes and asset graph recordssupported through generated handlers and TestHost app modeBuild/package-time snapshot for supported file extensions; supports validators, ranges, precompressed variants, and SPA fallback; no directory listings or runtime file watching.
Cookiessupportedsupported metadata for ctx.cookies.get(...) and auth session cookiessupportedsupportedAuth session cookies are signed; general-purpose cookie signing/encryption remains application-owned.
Schema validationsupportedsupported for static Schema.* declarations, ctx.body.validate(...), .accepts(...), and .returns(...) identifierssupported Plan/OpenAPI metadata with route JSON request/response planssupported for native schema-backed JSON request validation through ctx.body.validate(...) and .accepts(...); supported .returns(...) response schemas use the bounded native JSON response writerRuntime schemas cover strings, numbers, integers, booleans, arrays, objects, enums, literals, optional, nullable, defaults, and common string/number bounds. Native response writing supports objects, arrays, nested objects, strings, finite numbers, integers, booleans, nulls, nullable values, and optional object fields; unsupported response schema shapes carry explicit fallback reasons.
Results helperssupportedsupported subsetsupportedsupportedtext, json, ok, created, accepted, noContent, notFound, badRequest, unauthorized, problem, status, html, bytes, and bounded stream have compiler/runtime coverage where fixtures exercise them. Literal/static Results.json and Results.ok can be emitted as native preencoded JSON responses; supported schema-backed dynamic JSON result bodies can use native bounded response serialization. Unsupported dynamic JSON result bodies use the alpha Sloppy serializer for dates, BigInts, bytes, undefined fields, class instances, errors, and circular-reference failures. Results.stream is a bounded descriptor builder serialized through native Core stream paths, not a WHATWG or Node stream.
Native Core streamsn/an/an/aexperimental native runtime capabilitySlReadableStream, SlWritableStream, bounded chunk-list/memory adapters, HTTP response stream adapter, request-body adapter, pump, stats, cancellation, partial-write, and backpressure statuses are used by native runtime components. No public JavaScript stream handle is exposed.
Error policysupportedplannedapp-host metadata onlyapp-host onlyapp.useErrors(...) and app.mapError(...) cover app-host problem responses, typed mappings, request IDs, redacted provider errors, and safe error logs. Compiler/OpenAPI/audit extraction is planned beyond the compatibility ProblemDetails.defaults(...) path.
ProblemDetailssupportedsupported as literal ProblemDetails.defaults(...)supportedsupportedCompatibility surface for safe handler-error mapping. Prefer app.useErrors(...) in new app-host code.
Realtime routestyped channels, app-host groups, single-process presence, memory backplane, TestHost realtime helpers, SSE, and raw WebSocket primitivessupported for literal app.realtime(...), app.sse(...), app.ws(...), and app.websocket(...) route registrationsroute kind, runtime.realtime, high-level realtime route metadata, routes CLI, and OpenAPI extensions supportedpublic V8-backed realtime routes use the generated runtime wrapper over the native WebSocket backend; protected realtime follows the native auth-principal limitationApp-host/TestHost realtime supports typed client/server events, schema validation, groups, presence, route and per-message auth, error envelopes, health checks, and low-cardinality metrics. The memory backplane is single-process only. Native WebSockets support HTTP/1.1 101 handshakes, text/binary frame delivery, server sends, close frames, and ping-to-pong handling; protected native routes fail closed until auth principals are materialized on upgraded connections. Artifact/package TestHost WebSockets report SLOPPY_E_TESTHOST_WEBSOCKET_UNSUPPORTED unless a runtime connector is supplied.
Middlewaresupportedsupported static subsetsupportedsupportedInline/top-level middleware is emitted into generated handlers; dynamic lookup and unsupported captures fail with SLOPPYC_E_UNSUPPORTED_MIDDLEWARE.
CORSsupportedsupported static subsetsupportedsupportedLiteral app.useCors({...}) policies emit response wrapping, Plan metadata, and generated OPTIONS preflight routes; dynamic policies fail with SLOPPYC_E_UNSUPPORTED_CORS.
Authsupportedsupported static subsetsupportedsupported with V8 stdlib crypto/codec/os featuresJWT bearer validates HS256 and static-key RS256 where WebCrypto is available; API keys support header validation, optional authorization-scheme keys, and static hashed keys; signed cookie sessions support sign-in/sign-out and CSRF; route/group auth supports schemes, scopes, roles, claims, policies, anonymous overrides, Plan metadata, and OpenAPI security schemes. OIDC discovery, remote JWKS fetch, OAuth flows, refresh tokens, and user management are not included.
Rate limitingsupportedsupported for .rateLimit(...) policy attachments with literal optionssupported route metadata and stdlib.rate-limit feature markersupported through the generated runtime wrapper over the app-host enforcerFirst-party RateLimit covers fixed-window, sliding-window, token-bucket, and concurrency algorithms; IP/user/API-key/header/claim/route-param/custom partitions with sensitive-value hashing; bounded memory store with stats and health; RateLimit.redis(...) is a named adapter slot that fails closed because the first-party Redis provider is not present on main. WebSocket upgrades are rate-limited before the socket handler accepts. Diagnostics and metrics do not include raw partition values.
Webhookssupportedsupported import metadataPlan feature metadatasupported where data, crypto, HTTP client, and workers runtime features are activeFirst-party webhook API includes event descriptors, provider-backed outbox SQL templates, subscription management, transactional publish, signed delivery attempts, retry/dead-letter handling, and inbound Sloppy signature verification. Delivery is at least once, not exactly once.
Jobs schedulersupported runtime APIsupported import metadataPlan feature metadatasupported where data, time, crypto, and provider runtime features are activesloppy/jobs provides provider-backed durable jobs, retries, worker leases, distributed locks, recurring five-field UTC cron schedules, redacted admin views, and SQLite scheduler CLI administration. PostgreSQL and SQL Server scheduler validation use live provider lanes.
Health and managementsupportedsupported for legacy app.mapHealthChecks(...); app.health() and app.management() are app-host APIslegacy health metadata supportedsupported for legacy health routes and app-host generated handlersHealth, Metrics, app.health(), and app.management() provide bootstrap app-host operations endpoints. Compiler extraction for the legacy health API remains separate from the richer app-host operations API.
Cacheexperimentalsupported for sloppy/cache imports and static route cache metadatasupported route metadata and stdlib.cache feature markersupported through app-host V8 bootstrap APIs; provider-backed caches require active data-provider bridgesCache.memory, SQLite/PostgreSQL/SQL Server distributed caches, hybrid caches, cache-aside helpers, tags, TestHost overlays, metrics, health checks, response cache headers, and OutputCache are first-party app-host surfaces. Memory cache is per process. PostgreSQL and SQL Server caches require their optional live-provider setup.
Servicessupportedsupported for literal registrations and Service<T>supportedsupported through generated wrappersApp-host exposes ctx.services; native base context does not.
Config/defaults/secretssupportedsupported for config metadata and Config<"KEY"> defaultssupportedsupportedSecret values are not persisted in Plan metadata.
SQLite providersupportedsupportedsupportedsupported with V8/provider bridgeStrongest current provider path. Query materialization is bounded by default and supports per-call maxRows; finite timeoutMs/deadline budgets can interrupt query/queryRaw and cursor work; public cursor APIs stream rows incrementally.
PostgreSQL providersupported through runtime API and typed injectionsupported metadata/generated typed injectionsupported generated wrapperlive-provider gatedOptional provider. Requires config, PostgreSQL client support, active bridge, and live PostgreSQL service when used. Current alpha packages do not yet ship package-local libpq. Query materialization is bounded by default and supports per-call maxRows; finite timeoutMs/deadline budgets can interrupt query/queryRaw and cursor work; public cursor APIs stream rows incrementally.
SQL Server providersupported through runtime API and typed injectionsupported metadata/generated typed injectionsupported generated wrapperlive-provider gatedOptional provider. Requires config, Microsoft ODBC Driver 17 or 18, active bridge, and live SQL Server service when used. The core package does not bundle Microsoft's ODBC driver. Query materialization is bounded by default and supports per-call maxRows; finite timeoutMs/deadline budgets can interrupt query/queryRaw and cursor work; public cursor APIs stream rows incrementally.
ORMsupported app-host APIimport recognized; static AST extraction where provablefeatures.orm, static orm.tables/orm.relations where proven, and partial metadata for runtime-dynamic shapessupported when provider/runtime bridge is availablesloppy/orm provides table/column DSL, schemas, CRUD, query builder, includes, transactions, migration snapshot/diff helpers, raw SQL, cursors, and Sloppy-native ORM errors. Runtime use works dynamically; Plan table/relation extraction is partial when definitions are too dynamic to prove statically.
Static provider handlessqlite supportedsqlite supportedsqlite supportedsqlite supportedStatic non-SQLite handles fail with SLOPPYC_E_UNSUPPORTED_PROVIDER_BRIDGE.
Typed bindingstest-host supportedsupportedsupportedsupportedRoute, Query, Header, Body, RequestContext, Service, Config, provider markers, and WorkQueue.
Compiler source inputn/asupported subsetemits Plan, bundle, source mapsupported with V8 for executionNot a full TypeScript type checker or npm resolver.
Program Moden/asupported route-free subsetemits kind: "program" Plan and generated entrypointsupported with V8main(args, ctx), default function entrypoints, top-level-only modules, console stdout/stderr, numeric exit codes, stdlib imports, compatible bundled packages, and packaged runs are covered. No full Node globals, native addons, or raw terminal API.
OpenAPImetadata consumerPlan-derivedmetadata-onlyCLI onlyRoute, response, validation, and auth security metadata are emitted from the Plan-supported subset. Full runtime-pipeline semantics remain outside current output.
Content negotiationstrict/fallback app option supportedmetadata onlyresponse media types recordedfallback by helper media type; stricter native negotiation is plannedApp/test host supports opt-in strict Accept checks. Generated/native runs keep deterministic helper media types and request Content-Type validation.
CLI buildn/asupportedemits artifactsno V8 requiredDeterministic for the same source, config inputs, compiler, and CLI overrides.
Compiler timingsn/asupported dev flagtiming JSON onlyn/asloppyc build --timings-json is local contributor tooling for phase/counter evidence, not a product API or public performance claim.
CLI runn/asupported source/project handoffvalidates artifactsV8 required for handlers--once creates a bounded synthetic request; repeatable headers plus text, file, and JSON bodies are supported for static route metadata and artifact/package smoke tests.
CLI devn/asupported source/project handoffrebuilds artifacts and optional OpenAPIexperimental V8-backed dev serverPolling watch mode rebuilds source/config/static/template/migration inputs, restarts after successful builds, and keeps the previous server running after build failures. Not a production supervisor.
CLI createn/an/acopies templatesno V8 requiredBuilt-in templates include api, minimal-api, program, cli, package-api, and node-compat.
CLI packagen/asupported source/project handoffemits app package directoryno V8 requiredCreates a local app package under .sloppy/package/ by default; dependency graph assets and local FFI libraries configured through ffiLibraries are copied with package manifest hashes/metadata. Not a runtime release archive.
CLI dbn/aPlan and sloppy.json migration metadatareads package manifest migrationsno V8 required; SQLite needs no external DB driver; PostgreSQL/SQL Server need optional provider config only when selectedstatus and migrate work for SQLite, PostgreSQL, and SQL Server artifacts/packages. PostgreSQL and SQL Server report provider-specific diagnostics when their optional driver/service dependencies are missing.
CLI orm migrationn/aPlan and sloppy.json migration metadatareads package manifest migrationsno V8 required; same provider rules as sloppy dbscript and add generate FK-safe reviewable SQL from compiler-emitted ORM table metadata; status aliases sloppy db status; apply aliases sloppy db migrate. JavaScript migration helpers are also available through orm.migrations.script/snapshot/diff.
CLI routesn/aPlan-derivedmetadata-onlyno V8 requiredReads route metadata from Plan.
CLI depsn/aPlan-derivedmetadata-onlyno V8 requiredReads dependency graph metadata from Plan or deps.graph.json.
CLI capabilitiesn/aPlan-derivedmetadata-onlyno V8 requiredShows declared capability/provider metadata.
CLI auditn/aPlan-derivedmetadata-onlyno V8 requiredReports static Plan issues and policy notes.
CLI doctorn/aPlan-derivedmetadata-onlyno V8 requiredReports artifact and feature readiness. Missing PostgreSQL or SQL Server dependencies are optional provider guidance unless the app uses that provider.
App test hostsupportedrejected importn/an/aTesting remains a JS test helper and is not valid compiler input. The test host records route-pattern HTTP metrics for matched app routes.
TestServicesexperimental in JS testsrejected importn/aDocker and provider bridge requiredStarts real PostgreSQL/SQL Server containers through Docker CLI and verifies readiness through the matching data provider bridge. Default CI keeps live containers opt-in.
Loggingsupportedsupported config metadatasupportedsupportedNative runtime owns console/file sinks; memory sink is deterministic app-host test surface.
Request IDssupported middlewaresupported static middlewaresupportedsupportedCompiler input supports static RequestId.defaults(...); generator callbacks remain app-host test-only. Native ctx.requestId exists.
Request loggingsupported middlewaresupported static middlewaresupportedsupportedCompiler input supports static RequestLogging.defaults(...); dynamic option values are rejected at build time. Native ctx.log is direct logging.
HTTP servern/aPlan/server config metadatasupportedexperimental dev serverHTTP/1.1 plus server HTTP/2 over TLS ALPN, h2c prior knowledge, and h2c Upgrade. Not a production edge.
Inbound TLSn/aconfig metadatasupported pathsexperimentalCertificate/key paths are Plan-visible today; diagnostics redact TLS material.
HttpClient / Http factorysupported APIlow-level HttpClient supported from sloppy/net; static factory metadata is Plan-visible for literal client declarationslow-level and factory feature metadata are Plan-visible where statically provableexperimental bridgeHttp from sloppy/http provides named clients, typed clients, generated OpenAPI clients, resilience policies, service registration, TestHost mocks across app/artifact/package modes, metrics, diagnostics, and health snapshots over the low-level pooled HttpClient. HTTP/1.1 by default; explicit h2/h2c, pooled h2 multiplexing, and HTTPS auto ALPN h2 selection are supported. https:// needs the private outbound TLS bridge.
Redis / Cacheexperimental APIRedis.client(...), Redis.locks(...), Cache.redis(...), TestServices.redis(...), and Health.redis(...) are bootstrap APIssloppy/redis, sloppy/cache, and root sloppy imports mark stdlib.redis, stdlib.cache, and stdlib.net requirements where visibleexperimental bridgeFirst-party RESP2 client over the Sloppy outbound network bridge. No npm Redis client, in-memory fallback, cluster, sentinel, pub/sub, streams, or modules contract.
Filesystem stdlibsupportedsupported from sloppy/fsstdlib.fs feature emittedV8 bridge requiredNode fs compatibility is a partial shim over supported Sloppy filesystem behavior, not full Node fs.
Network stdlib (TCP, local IPC)supportedsupported from sloppy/netstdlib.net feature emittedV8 bridge requiredHttpClient supports explicit h2/h2c, pooled h2 multiplexing, and HTTPS auto ALPN h2 selection; no standalone DNS, UDP API, or WebSocket client. Inbound WebSocket routes live under Realtime.
OS stdlib (System, Environment, Process, ProcessHandle, Signals, OsError)supportedsupported from sloppy/osstdlib.os feature emittedV8 bridge requirednode:process is partial compatibility. Bundled package programs may receive temporary global, process, and Buffer globals; no process-wide Node identity or child_process compatibility.
Time stdlibsupportedsupported from sloppy/timestdlib.time feature emittedV8 bridge for scheduling; pure JS for Deadline, CancellationController, Time.fakeClocknode:timers is partial and maps only where timer globals are available.
Crypto stdlibsupportedsupported from sloppy/cryptostdlib.crypto feature emittedV8 bridge required (platform-delegated)SHA-256/384/512, HMAC-SHA-256, Argon2id, OS CSPRNG, xxHash64.
Codec stdlibsupportedsupported from sloppy/codecstdlib.codec feature emittedpure JS except Compression (V8 bridge)node:buffer is partial compatibility and does not claim full Node Buffer identity.
Workers stdlibsupported app-hostsupported from sloppy/workersstdlib.workers feature emittedpure JS for BackgroundService/WorkQueue; V8 bridge for WorkerPool.run and Worker.startApp shutdown does not yet auto-stop background services.
Native FFI stdlibn/asupported static sloppy/ffi declarationsstdlib.ffi, native.ffi, and native.ffiStructs emittedexperimental V8/libffi bridgeP/Invoke-style typed C ABI calls, refs, buffers, and pointer-based sequential structs. Unsafe boundary; wrong signatures can crash. No callbacks, variadic functions, C++ ABI, struct-by-value, async FFI, native addons, or raw pointer-call API.
Examples and evidence catalogsupported categoriesmixedmixedmixedSee examples/README.md for coverage classification.
Package/dependency graphn/aexperimental installed pure-JavaScript package resolverbundled module graph, dependencyGraph, optional deps.graph.json, sloppy deps --explainsupported with V8 for compatible bundled modulesNo registry install, semver solving, native addons, full Node HTTP/socket parity, or unrestricted runtime discovery. Resolver behavior is exercised by the committed tests/fixtures/npm-compat/ matrix; the matrix is the regression baseline for currently tested package shapes and does not promise behavior for shapes outside it.
Package/install pathn/an/apackage layoutexperimentalWindows x64, Linux x64 glibc, and macOS npm alpha packages install the launcher, native runtime, stdlib, templates, selected docs/examples, and handler execution runtime.

Current Limits

  • Production hardening and application dependency workflows are separate product work.
  • Default local checks do not provide full cross-platform parity coverage.
  • Compiler benchmark reports are local measurement artifacts. They are not compatibility guarantees or public performance comparisons.
  • HTTP/3, gRPC, WebTransport, and server push are not included.

Public alpha. APIs and artifact formats may still change between alpha revisions.