Reference

Roadmap

Devora.js is early and pre-1.0, built by one person. This page says what has shipped, version by version, and what is next. Every block below is taken from the changelog and the git tags (v0.3.2, v0.3.4 and v0.3.5 are the only tags).

The same content lives in ROADMAP.md on GitHub; the long, dated account of how each piece was built is the build log.

Done, by version

  1. 0.3.5

    2026-10-16tag v0.3.5
    • Faster request handling in devora start: work that never changes per request is done once. Interleaved A/B on one machine: +15% JSON list, +32% authenticated GET, +21% POST, +41% pre-rendered page, +23% server-rendered page; form POST about 32,000 to 82,000 req/s. No security default weakened.
    • A missing session store or secret stops devora start with one clear line; the header brand link's accessible name contains its visible text.
    • Guides for Live updates (WebSockets) and Background jobs, a new examples/background-jobs, backend benchmark scenarios, and a restored roadmap.
    • Packages: @devorajs/core 0.3.5, @devorajs/cli 0.3.5, create-devora 0.3.3; the adapters are unchanged.

    Release post · CHANGELOG: 0.3.5

  2. 0.3.4

    2026-10-16tag v0.3.4
    • Catch-all routes ([...slug], [[...slug]]) for pages and API routes; ctx.params stays a string, the array is ctx.catchAll.
    • Faster pre-rendered pages (served from memory with ETag and compression), correct content types, sitemap URLs from getStaticParams().
    • A documented live-updates pattern with a runnable example; publish scripts refuse to publish an empty dist/.

    Release post · CHANGELOG: 0.3.4

  3. 0.3.3

    Never published
    • Prepared and rolled into 0.3.4.

    CHANGELOG: 0.3.4 (says so)

  4. 0.3.2

    2026-10-12tag v0.3.2
    • Request access in loaders and actions, action results (fail(), 303 redirects), error pages, the head API, uploads, CORS, .env loading.
    • Cookie and proxy settings; the Vercel runtime is no longer hard-coded; the first published @devorajs/adapter-node.
    • Adapters 0.2.0 and 0.2.2 had been published without their build output and were replaced by 0.2.1 and 0.2.3.

    CHANGELOG: 0.3.2

  5. 0.3.1

    2026-09-24
    • create-devora scope: --scope=fullstack|frontend|backend; devora --version reports the real version.
    • The Vercel and Netlify adapters no longer fail on a backend-only app.

    CHANGELOG: 0.3.1

  6. 0.3.0

    2026-09-23
    • Breaking: unified session auth — opaque IDs in a SessionStore you provide, one lookup for cookie and Bearer, revocation.
    • api/** always answers JSON; devora dev --host; dev ports start at 10000.

    CHANGELOG: 0.3.0

  7. 0.2.2 and 0.2.1

    2026-09-16
    • @devorajs/core 0.2.1 (footer structure in the branding component) and 0.2.2 (footer styles and a package exports restructure). The CHANGELOG notes for them were reconstructed from git history and npm publish times.

    CHANGELOG: reconstructed notes

  8. 0.2.0

    2026-09-16
    • The v2 backend: defineModule(), API routes, middleware, backend-only apps, getStaticParams() for ssg/isr.
    • Repo-splitting (devora split, sync, status) and the streaming render mode.
    • A security audit pass: cross-app cookie binding, request-body caps, path-traversal fixes, a 405 for undeclared API methods.

    CHANGELOG: 2026-09-16

  9. 0.1.x

    • 0.1.1 and @devorajs/cli 0.1.2 (2026-09-08): the npm scope became @devorajs, the shared scaffold package, per-package READMEs.
    • @devorajs/core 0.1.2 (2026-09-09): dynamic routes and the devora deploy fixes of that day; its CHANGELOG note was reconstructed from git history.
    • 0.1.0: the CHANGELOG records only the initial commit, 2026-09-07 (SSR/SSG/CSR/ISR, islands, sessions, security headers, SEO, the CLI, the three adapters), without a version number.
    • 2026-09-09 has an entry (a CI fix, docs) with no version bump.

    CHANGELOG: 2026-09-08

What is ahead

Now

  • Outside testers: the 15-minute guide; what they hit shapes the next releases.
  • Deploy this site with the numbers measured on the published 0.3.5 packages, and the release post.
  • Verify 0.3.5 on a live Vercel and Netlify deployment (finding N1).

Later

  • A third-party security audit and signed release provenance, once the API surface settles.

Not planned

  • A built-in ORM, auth provider or file storage (bring your own).
  • A real-time sync engine (use a realtime server: Live updates (WebSockets)).
  • A custom RSC-style server/client serialization protocol.

Next: open findings, proposed order

A proposal for the maintainer to confirm or change, ranked by impact. Nothing here has a version or a date. Y1, Y6 and O2 stay Unconfirmed and are not ranked.

OrderFindingWhy it ranks here
1N1: 0.3.5 not verified on a live deploymentEvery deploy claim depends on it
2B5: several Set-Cookie headers and SSE from API routesA real capability gap testers hit
3O4: the scaffold writes @devorajs/backend into new projectsThe name could collide with a future real package; harder to change later
4U13, U14: an official session-store pattern or package; a built-in health routeEvery production app needs both
5P14: adb reverse docs for testing on a physical deviceSmall, docs only
6U4: apiRoute() catches errors itself, so an outer wrapper cannot see themSurprising for logging and monitoring wrappers
7O5: signSession and verifySession still exported (deprecated)A removal is a breaking change
8V6, Y2: one large function per app; backend duplicated per appNever measured; measure first
9N3, X2: isr regeneration on a serverless filesystemVerified only under adapter-node
10N2, N4, N5: container platforms, systemd unit, DB client under loadNeed real hosts or load tests
11U9, X1: the CLI bundles core; dynamic ssg/isr needs getStaticParams()By design; documented, not defects

Vision (not started, no dates)

A desktop app and a native mobile app. If they happen, business logic, the backend client, validation and design tokens would be shared and the UI would be platform-specific. React was chosen partly to keep that door open.

Ideas (open, not promised)

Nothing here is planned, scheduled or numbered.

  • Example: an idea goes here as one line, with no version and no date.

Performance program

The aim is to close the gaps and publish measured results, including where Devora.js is behind. Numbers come from the benchmark harness and are never edited by hand. After the first pass (published 0.3.5; a difference inside a framework's own run-to-run spread counts as a tie), Devora.js is ahead of the other four frameworks on the pre-rendered page, the server-rendered page and the form POST; on the JSON API scenarios it is behind Fastify, Hono and NestJS on Fastify, and level with four frameworks on the 2 ms async scenario (findings S1 to S4).

Definition of success

From architecture-v1 §14: v1 is "done" when a solo or small team can build a real project with a marketing site, an app and an admin panel sharing auth and a core, deploy each independently, get good SEO out of the box, and not hit a single window is not defined crash from a client library, all without reading framework internals to understand why something cached or didn't. Five things must all be true at once:

  1. Routes actually render (SSR, SSG, CSR, streaming, ISR per renderMode). SSR and SSG/CSR/ISR were done in v1; streaming was deferred from v1 and shipped in v2.
  2. Auth and session context is real, shared by default, isolable per app. Done.
  3. Client-only libraries (three.js, fabric.js) never crash on the server. Done; clientOnly() is verified with a real negative control.
  4. Each app deploys independently to at least one real target. Done: adapter-node, Vercel and Netlify were deployed live by the maintainer with releases before 0.3.2, by git integration and by devora deploy. 0.3.4 is not yet verified on a live deployment by this project.
  5. SEO primitives work: OG tags and a per-app opt-in sitemap.xml, both verified.

Status board

Done: built and verified

  • SSR, SSG, CSR, ISR and streaming rendering
  • Sessions, CSRF, per-app auth modes (shared, isolated, none)
  • Security headers (CSP, HSTS, X-Frame-Options) on by default
  • Islands and partial hydration, in dev and production
  • SEO primitives: OG tags, opt-in sitemap.xml
  • Dynamic routes with getStaticParams(); catch-all routes ([...slug], [[...slug]]) since 0.3.4
  • v2 backend: modules, API routes, middleware, backend-only apps, repo-splitting
  • 0.3.2: request access, action results, error pages, head API, uploads, cookie and proxy settings, CORS, .env loading, @devorajs/adapter-node
  • 0.3.4: catch-all routes, the static file cache, content types, sitemap URLs, the live-updates pattern
  • 0.3.5: faster request handling, one clear message for a missing session store, guides for live updates (WebSockets) and background jobs
  • clientOnly(); the devora CLI under npm, Yarn and pnpm
  • adapter-node, adapter-vercel, adapter-netlify: build output verified in isolation
  • Live Vercel and Netlify deployment (all three apps) with releases before 0.3.2
  • devora deploy: a real authenticated deploy on both platforms before 0.3.2
  • Docker, self-hosted VPS (nginx and Caddy; systemd unit template untested), GitHub Actions CI

In progress / partial

  • 0.3.5 on a live Vercel or Netlify deployment: not yet verified by this project
  • isr on Vercel and Netlify: the initial build serves correctly; ongoing regeneration on a non-persistent serverless filesystem is unverified
  • Domain auto-binding for a devora deploy-managed app: not built, deliberately scoped out

Known gaps, not scheduled

  • Several Set-Cookie headers and streamed (SSE) responses from API routes
  • Moving the esbuild override out of package.json's "pnpm" field (pnpm 11 ignores it)

Planned

  • A formal third-party security audit and signed release provenance, once the API surface stabilizes

Deliberately not planned

  • A built-in ORM, auth provider or file storage
  • A real-time sync engine
  • A custom RSC-style serialization protocol

Planned goals, not started

  • Desktop and native mobile apps. Nothing exists and there are no dates. React was chosen partly to keep that door open.

The 14 work items

Each is described in the build log as it was when it landed.

#ItemStatusSection
1SSR request handler (blocks nearly everything else)doneBuild log #1
2Request context (ctx.requireAuth() / ctx.session)doneBuild log #2
3Islands / partial hydrationdone, in both dev and productionBuild log #3
4Adapters: real build output, not just configdone, including real live Vercel and Netlify deploymentsBuild log #4
5CSP/HSTS enforcementdoneBuild log #5
6DB clientchecked; a real issue was found, and a verified fix is now documented as a guideBuild log #6
7SEO primitivesdoneBuild log #7
8devora CLI bindoneBuild log #8
9clientOnly() verificationdoneBuild log #9
10Redirects, login/logout, CSRF, Secure cookiedoneBuild log #10
11entry-server.tsx de-duplicationdone (pure refactor, prerequisite for #10/#12)Build log #11
12Render modes: ssg, csr, isr real; streaming explicitly deferred to v2doneBuild log #12
13Multi-app-aware Vercel/Netlifydone, including a real authenticated deploy on both platformsBuild log #13
14Three more environments tried for real — Docker, a bare VPS (nginx/Caddy), CIdoneBuild log #14

Live deployment history

  • Vercel, git integration: all three demo apps live with releases before 0.3.2. Two bugs only a live deploy found were fixed: Cannot find package 'react' and jsxDEV is not a function (NODE_ENV unset in the build step).
  • Netlify, git integration: all three demo apps live, before 0.3.2. Found live and fixed: Could not resolve entry module "index.html" (a build-output-only netlify.toml), then package.json and node_modules in included_files (2026-09-16).
  • devora deploy: a real authenticated deploy on both platforms, before 0.3.2. Domain auto-binding not built.
  • Docker: real build, run and compose; login, CSRF and tampered-cookie regression inside the container; all three apps concurrently. Container platforms (Cloud Run, App Runner, Azure Container Apps) not verified.
  • VPS: devora generate:proxy verified against a real local nginx and caddy validate. The systemd unit template is untested on a host.
  • CI: builds every app under npm, Yarn and pnpm, both adapter targets, and typechecks fresh scaffolds.
  • 0.3.5 live: not yet verified on a live deployment by this project. Generated functions were run outside the monorepo only.

Findings

88 findings from the pre-v3 hotfix list, hotfix round 3 and VERIFICATION.md. Fixed means a release plus a file, test or changelog line that proves it; Unconfirmed means never reproduced or checked, and is not guessed.

Fixed: 55Partly fixed: 5Open: 23N/A: 1Unconfirmed: 4
IDFindingStatusVersionEvidenceDescribed in
P1Published package was behind the docs (core 0.1.2 lacked defineModule/apiRoute)Fixed0.3.0create-devora pins ^0.3.0 (CHANGELOG 0.3.0); core 0.3.0 to 0.3.5 are on npm. The suggested CI check that fails a docs deploy when versions differ does not exist.pre #1
P2apiRoute() was a no-op; uncaught errors leaked HTML to API clientsFixed0.3.0packages/core/src/httpError.ts + apiRoute.ts wrapper; real-server tests devServer/prodServer.integration (JSON 500, message hidden in production); CHANGELOG 0.3.0pre #2
P3Dev server localhost-only; no --host, no LAN URLFixed0.3.0devora dev --host, packages/cli/src/server/devNetwork.ts; CHANGELOG 0.3.0pre #3
P4No route listing on dev bootFixed0.3.0CHANGELOG 0.3.0 (boot output includes each app's route table); packages/cli/src/terminal/bootSummary.tspre #4
P5Hand-rolled Bearer tokens never expire, cannot be revokedFixed0.3.0Superseded by the unified session auth: opaque IDs in a SessionStore, active/idle/dead states, ctx.revokeSession(); CHANGELOG 0.3.0 (breaking)pre #5
P6Unmatched /api/** returned HTMLFixed0.3.0isApiPath() in packages/core/src/apiRoute.ts; prodServer.integration test 'unmatched /api/** paths are a JSON 404'pre #6
P7Cookie-only auth, no Bearer supportFixed0.3.0One lookup for cookie and Authorization: Bearer; CHANGELOG 0.3.0pre #7
P8Action return values discarded; loaders had no query stringFixed0.3.2actionData / fail() / 303, ctx.url (CHANGELOG 0.3.2, Request access and Actions return data)pre #8
P9No <head> customization hookFixed0.3.2Head API: defineApp({ head }) and meta().head (CHANGELOG 0.3.2)pre #9
P10No backend 'batteries' (logging, CORS, rate limiting, validation, uploads, jobs, realtime, email, test utilities)Partly fixed0.3.2 / 0.3.4CORS (0.3.2), multipart uploads (0.3.2), realtime pattern (0.3.4, docs/guides/REALTIME.md), background jobs (three tested patterns, docs/guides/BACKGROUND-JOBS.md) and the /backend-capabilities docs page. Pagination helpers, background jobs, email, test utilities: not built, no plan.pre #10
P11Default dev port collisionsFixed0.3.0Ports 10000 + index, devPort, fall-forward with a log line; CHANGELOG 0.3.0; devNetwork.tspre #11
P12create-devora all-or-nothing, no frontend- or backend-only modeFixed0.3.1--scope=fullstack|frontend|backend; CHANGELOG 0.3.1pre #12
P13Dev LAN exposure needs an explicit, opt-in posture and a warningFixed0.3.0--host opt-in only; one-line warning when bound beyond loopback; CHANGELOG 0.3.0pre #13
P14'Testing on a physical device' (adb reverse) is undocumentedOpen-No 'adb reverse' text exists in this repo or the docs site (searched both).pre #14
C1No route listing on dev bootFixed0.3.0Same as P4r3 confirmed 1
C2Dev server localhost-onlyFixed0.3.0Same as P3, P13r3 confirmed 2
C3No native Bearer authFixed0.3.0Same as P7r3 confirmed 3
C4apiRoute() leaked HTML errorsFixed0.3.0Same as P2r3 confirmed 4
C5An isolated app's session could be replayed with a shared app's cookieFixed0.2.0CHANGELOG 2026-09-16: cookies are cryptographically bound to their own cookie namer3 confirmed 5
C6CSRF skipped for Bearer, enforced for cookiesFixed0.3.0CHANGELOG 0.3.0: verifyCsrf() skipped for Bearer-authenticated requestsr3 confirmed 6
B1No head hook; framework injected body{display:flex} and favicon unaskedFixed0.3.2Head API; stylesheet and favicon only on pages rendering PageShell/AppHeader (CHANGELOG 0.3.2 Behavior changes)r3 broken 1
B2Loaders had no query string, headers or client IPFixed0.3.2ctx.url, ctx.headers, ctx.ip, ctx.method, ctx.request (CHANGELOG 0.3.2)r3 broken 2
B3Actions could only redirectFixed0.3.2actionData and fail() (CHANGELOG 0.3.2)r3 broken 3
B4island() found only in route files; islands are separate React rootsPartly fixed0.3.2Islands found in every imported module and checked with the parser (CHANGELOG 0.3.2). Islands still have no shared React context; the documented workaround is a shared store or browser events.r3 broken 4
B5API responses fully buffered: no SSE from an API route, one Set-Cookie (WebSockets: a separate realtime server and ws through a wrapper both work)Open-No text/event-stream or WebSocket code in packages/ (searched). WebSockets: documented pattern with a separate server (0.3.4, docs/guides/REALTIME.md). A handler still sets headers as a plain object, so one Set-Cookie.r3 broken 5
U1Cookie Secure flag hardcoded to production; plain-HTTP logins failFixed0.3.2sessions.cookie.secure: true | 'auto' | false, trustProxy (CHANGELOG 0.3.2)r3 unconfirmed 1
U2Errors thrown in page actions became generic 500s; redirect after POST was 302Fixed0.3.2HttpError keeps its status, error.tsx, 303 (CHANGELOG 0.3.2 Behavior changes)r3 unconfirmed 2
U3Page actions could not receive file uploadsFixed0.3.2Multipart uploads as File objects, maxBodyBytes (CHANGELOG 0.3.2)r3 unconfirmed 3
U4apiRoute() catches errors itself, so a wrapper outside it cannot see the original errorOpen-packages/core/src/apiRoute.ts still returns apiErrorResponse(err) from inside the wrapper. A wrapper inside apiRoute() sees the error; outside it sees a JSON response. By design, not re-decided.r3 unconfirmed 4
U5devora build executed every server file, even request-time-only onesFixed0.3.2'devora build only imports ssg/isr routes' (CHANGELOG 0.3.2 Behavior changes)r3 unconfirmed 5
U6Type definitions broke tsc --noEmit in consuming apps (CsrfField returned unknown)Fixed0.3.2CsrfField returns ReactElement (packages/core/src/csrf.ts:51; CHANGELOG 0.3.2 Types); CI typechecks fresh scaffolds (scripts/typecheck-fresh-scaffold.mjs)r3 unconfirmed 6
U7devora start ignored PORT/HOSTFixed0.3.2CHANGELOG 0.3.2: devora start reads PORT and HOSTr3 unconfirmed 7
U8--adapter accepted any value silentlyFixed0.3.2CHANGELOG 0.3.2 Behavior changes; CLI test 'rejects an unknown adapter before building anything'r3 unconfirmed 8
U9The CLI bundles its own copy of coreOpen-By design: packages/cli/build.mjs inlines @devorajs/core. A core fix reaches dev/start only with a CLI release; the upgrade steps say to upgrade both together.r3 unconfirmed 9
U10Dev server silently moved to another portPartly fixed0.3.0Falls forward with a log line (CHANGELOG 0.3.0); no strict option for an explicit devPort.r3 unconfirmed 10
U11React-18-only peer range, no engines fieldFixed0.3.2peer ^18.3.0 || ^19.0.0; engines node >=20 (CHANGELOG 0.3.2)r3 unconfirmed 11
U12Error messages pointed to ROADMAP.mdFixed0.3.2CHANGELOG 0.3.2: error messages link the docsr3 unconfirmed 12
U13No official session storeOpen-No store package ships; patterns in packages/backend/AUTH.md and the docs site /deployment page.r3 unconfirmed 13
U14No built-in health-check routeOpen-A backend-only app answers GET / with a JSON status (CHANGELOG 0.3.2); no dedicated /_devora/health route.r3 unconfirmed 14
V1Adapter hardcoded the discontinued nodejs20.x runtimeFixed0.3.2CHANGELOG 0.3.2: vercel.runtime, else running Node major, else engines.node, else nodejs24.xr3 V1
V2apps/<name>/api collides with Vercel's reserved api/ folderFixed0.3.2apiDir (new apps use endpoints/); preflight warns about a top-level api/ (CHANGELOG 0.3.2)r3 V2
V3Scaffolded vercel.json not workspace-aware; no --outFixed0.3.2devora build --out <dir> with --adapter=vercel --app=<name> (CHANGELOG 0.3.2)r3 V3
V4No documented build hook for codegen on a clean checkoutFixed0.3.2defineApp({ prebuild: [...] }) (CHANGELOG 0.3.2)r3 V4
V5Misleading adapter log line 'NOT deployed ... see ROADMAP.md #4'Fixed0.3.2Log line replaced (CHANGELOG 0.3.2); the string no longer exists in adapters/ or packages/ (searched)r3 V5
V6Single 17 MB function per appOpen-Still one function per app; size and cold start under an ORM were never measured.r3 V6
V7Suggested preflight check before a Vercel buildFixed0.3.2Preflight checks: runtime, api/ at the Vercel root, session secret per auth mode, --out location (CHANGELOG 0.3.2)r3 V7
V8ESM bundle broke CommonJS dependencies at first request (pg)Fixed0.3.2createRequire banner in both esbuild passes of both adapters (CHANGELOG 0.3.2; adapters/adapter-vercel/src/bundleForDeploy.ts; runtime.test.ts)r3 V8
K1No SameSite / noindex / per-app session lifetimesFixed0.3.2cookie.sameSite, security.noindex, activeSeconds/idleSeconds (CHANGELOG 0.3.2)r3 K1
K2island() discovery silent outside route filesFixed0.3.2Same as B4; unsupported island() calls fail the build with file and liner3 K2
K3Route-imported CSS not linked in SSR/SSG HTMLFixed0.3.2docs/guides/PAGES.md 'CSS imported by a route'; build writes dist/server/route-css-manifest.jsonr3 K3
K4No built-in CORS helperFixed0.3.2defineApp({ cors }) (CHANGELOG 0.3.2); packages/core/src/cors.tsr3 K4
K5Monorepo .env convention undocumentedFixed0.3.2.env files loaded by dev, build, start, deploy (CHANGELOG 0.3.2)r3 K5
K6API-only apps pre-render /Fixed0.3.2A backend-only build prints no 'pre-rendered' line (run during this audit on a fresh backend scaffold)r3 K6
K7Questions Khepra asked the teamN/A-Questions, not defects; answered by the 0.3.2 settings above.r3 K7
Y1Dependency bundling for native addons / ORM engines on serverlessUnconfirmed-Never confirmed by a failing deploy; no test bundles a native addon.r3 YallaDo
Y2Backend code duplicated per app in the production bundleOpen-Not measured; each app is built separately.r3 YallaDo
Y3No automatic .env loadingFixed0.3.2Same as K5r3 YallaDo
Y4Fresh project did not typecheck (loose types)Fixed0.3.2Same as U6; scaffolds ship typescript, @types/* and a typecheck script (CHANGELOG create-devora 0.3.1 entry)r3 YallaDo
Y5devora add api generated unneeded page-app filesFixed0.3.2devora add --kind=pages|api (CHANGELOG 0.3.2)r3 YallaDo
Y6Transient 'invalid hook call' on first dev load (Vite re-optimization)Unconfirmed-Not reproduced in this audit; no documented note in the docs.r3 YallaDo
Y7CSRF cookie set on JSON responses to Bearer-only clientsFixed0.3.2csrf: false per app (no CSRF cookie issued; CHANGELOG 0.3.2)r3 YallaDo
Y8Docs contradicted each other on streaming maturityFixed0.3.5Every current document says streaming shipped in v2 (GET-only; buffered on Netlify); the old "deferred" wording is kept only in dated history (BUILD-LOG items, docs/history/CLAUDE-repo-state-archive.md, each marked as of its date)r3 YallaDo
L1Shared login did not carry across subdomainsFixed0.3.2shared.sessions.cookie.domain (CHANGELOG 0.3.2)r3 known limitation
O1devora --version printed 0.1.0Fixed0.3.1CHANGELOG 0.3.1r3 also open
O2Docs examples with bare devora commandsUnconfirmed-No bare 'devora <command>' line found by search in the site routes; pages were not read one by one.r3 also open
O3deployment page session-store stepFixed-Section id='session-store' exists in the docs site deployment router3 also open
O4Scaffold names the project backend @devorajs/backend (collides with a future real @devorajs/* package)Open-packages/scaffold/src/scaffoldAppFiles.ts:153 writes '@devorajs/backend' into new projects.r3 also open
O5signSession / verifySession still exported (deprecated)Open-packages/core/src/session.ts:177 and :184, marked @deprecated, not removed.r3 also open
N1A live Vercel or Netlify deployment of the current release is not verifiedOpen-Generated functions were run outside the monorepo; live deployments exist only for releases before 0.3.2 (docs/guides/DEPLOYING.md, VERIFICATION.md). Still 0.3.4 unverified live.VERIFICATION not verified
N2Container platforms (Cloud Run, App Runner/Fargate, Azure Container Apps, Oracle)Open-Docker image run locally only.VERIFICATION not verified
N3isr regeneration on Vercel/NetlifyOpen-Fully verified under adapter-node; not exercised on a serverless filesystem.VERIFICATION not verified
N4deploy/devora.service (systemd) against a real hostOpen-Template only.VERIFICATION not verified
N5A DB client under sustained production loadOpen-A real Drizzle + better-sqlite3 client was verified in dev and reverted; no load test.VERIFICATION not verified
X1A dynamic route without getStaticParams() cannot use ssg/isrOpen-By design: the build fails with a clear error (docs/history/VERIFICATION.md Known unsupported).VERIFICATION known unsupported
X2isr disk cache unverified under real serverless conditionsOpen-Same as N3.VERIFICATION known unsupported
S1Every request re-did work that never changes (path joins, build keys, a URL object and a Headers object, a session-key HMAC, two manifest reads from disk)Fixed0.3.5Five commits on perf/backend-speed (CHANGELOG 0.3.5). Interleaved A/B on one machine: +15% JSON list, +32% authenticated GET, +21% POST, +41% pre-rendered page, +23% server-rendered page; form POST 32,000 to 80,000 req/s in the full run (benchmarks/results/before-after.md, ab-published-vs-final.txt)benchmarks
S2Devora.js API routes are behind Fastify, Hono and NestJS on Fastify on every JSON scenarioOpen-Published 0.3.5, medians: JSON list 4th of 10 (26% below the leader), authenticated GET 6th (43% below), POST valid 5th (39%) and invalid 4th (36%); on POST it is level with Express (ranges overlap). Part of the gap is not in the framework (the same JSON.stringify runs in every app, about half of the list scenario); the rest is per-request work the bare frameworks do not do (security headers, a request context with session and CSRF methods, a real session lookup). benchmarks/results/backend-report.mdbenchmarks
S3The built-in memory session store clones each record on every read (structuredClone, about 8% of an authenticated request)Open-CPU profile of the authenticated scenario. Not changed: the clone keeps a handler from mutating the stored record; a cheaper copy needs a decision on that behavior.benchmarks
S4Memory after load is higher than the bare backend frameworksOpen-Published 0.3.5: Devora.js 285 MB after the API scenarios against 167 to 258 MB for Express, Fastify and both NestJS platforms (Hono 222 MB; Next.js, SvelteKit, React Router and Astro are higher, 329 to 600 MB). A faster server also keeps more heap, so this is not proof of a leak; the 10-minute soak on the 0.3.5 code held steady (about 314 MB, +3 MB between the halves of the run).benchmarks
R1ws on the same port as devora startPartly fixed-Works through a wrapper script that calls createNodeServer (the function the CLI calls; a public, documented export of @devorajs/adapter-node that returns the http.Server) and handles upgrade itself: bad token 401, good token connected and echoed, API and security headers unchanged on the same port. Plain devora start exposes no server and no hook. Smallest core change: an onServer(server) option. Guide: Live updates (WebSockets).lab
R2Server-sent events from an API routeOpen-A string body is sent complete after the handler finishes (first byte at 1.5 s for three events 0.5 s apart, then the connection closes, so an EventSource reconnects in a loop); a ReadableStream, an async iterable or a Readable as the body answers 500. Smallest core change: let sendApiResponse pipe a stream or async iterable and destroy it when the client disconnects.lab
R3Socket.IO as a separate server (examples/realtime)Fixed0.3.4Run from a scratch copy on the published 0.3.4 packages: all 19 checks of examples/check.mjs pass. Not tested in a browser.lab
R4Background jobs: BullMQ with Redis and a separate workerFixed0.3.5Tested on one Node server: an authenticated route enqueued (202), the worker ran it, the route returned completed in about 330 ms; unauthenticated enqueue is 401. bullmq needs ioredis installed separately. In CI as examples/background-jobs (the Redis part skips when there is no Redis). Guide: Background jobs.lab
R5Background jobs without Redis: a SQLite queue and a workerFixed0.3.5node:sqlite: result in about 100 to 220 ms. One server only (both processes share the file). In CI as examples/background-jobs, always run.lab
R6node-cron inside devora startPartly fixed-Works, but there is no start-up hook: the schedule registers when the route that contains it is first imported (at its first request).lab
R7Each of the above on Vercel or NetlifyUnconfirmed-Not deployed, so not verified. Expected from the platforms' documented model, not tested: WebSockets, long-lived timers and a SQLite file on a function's disk do not fit functions; a BullMQ worker must run elsewhere.lab
T1A fresh scaffold prints npm warn Unknown project config "link-workspace-packages" on every npm commandOpen-Source: packages/scaffold/src/scaffoldProjectFiles.ts:137 writes a project .npmrc containing link-workspace-packages=true, a pnpm setting (pnpm needs it so the plain "*" workspace dependencies link locally instead of being fetched from the registry). npm 11 does not know it and warns, saying it will stop working in the next major version. Verified: in a scaffold, npm config get registry warns with the .npmrc in place and is silent with it moved away. The repo root and every example carry the same file. Not fixed.smoke test of 0.3.5
T2On newer npm, install prints an allow-scripts warning for esbuild's postinstallOpen-Reproduced with npm 11.17.0 in an empty project: npm install esbuild@0.25.12 prints "1 package has install scripts not yet covered by allowScripts: esbuild@0.25.12 (postinstall: node install.js)". esbuild comes in through Vite. Install, devora dev and devora build still work. The warning comes from npm, not from Devora.js code; getting-started says so in one line. Not fixed.smoke test of 0.3.5

Where the dates come from

Dates are the changelog's and the tags' dates. Versions without a changelog entry are listed as such rather than filled in.