25 octobre 2026 Dernière version Corrections (1) Update company and contact details 2 versions de maintenance, aucun changement de comportement.
Maintenance et documentation (1) Update screenshots for various pages Corrections (1) admin · Update dashboard grid layout documentation and implementationMaintenance et documentation (1) form · Update section grouping and order in admin configuration7 versions de maintenance, aucun changement de comportement.
Maintenance et documentation (7) Reorder and update installation instructions Reorganize module documentation into numbered files Add start command in README README · Update landing page to remove redundant commandsREADME · Update content and structureUpdate documentation and CLI for version intermediately published on Fraza registry Update registry and installation documentation Corrections (1) Update icons and documentation Maintenance interne, aucun changement de comportement.
Maintenance et documentation (1) Extract npm view value handling into a reusable function 24 octobre 2026 Changements cassants Action après la mise à jour Changements cassants (47) Answer every API error from a French catalogue, let handlers throw ApiError Version the module contract, refuse an unknown one at startup Refuse an upload in French, with a stable code per layer Keep only the Stripe webhook, verify its signature without the SDK Publish a digest of a file's etag, never the value itself Voir les 42 autres Answer 404 for an unknown or refused admin page, inside the shell Render Table as a compact list on narrow screens, open its rows from the keyboard Replace Headless UI with a native dialog and a shared menu primitive Ship IBM's own WOFF2 subsets of Plex Sans and Plex Mono Resolve a path once per request, keep a failing resolver from taking the others down Answer ETag, 304, byte ranges and Cache-Control in buildFileResponse Declare a page's title and permission on the server, load its code on demand Declare in sideEffects only the files that act when imported Give each shared component its own entry, fail a module public page on a heavy barrel Boot from @fraza/core/init, keep only the boot and the config at the root Drop the public loading screen, which made every unknown URL answer 200 Answer a sign-up the same way whether or not the address has an account Hash a new account's password before its transaction opens Keep the admin role on its last holder Refuse the admin password, address and reset routes on one's own account Ship .env.example as a secret-free template, keep values in .env.local Write the project .npmrc in mode 0600 and warn about a token that can publish Store only the SHA-256 of session and link tokens, spend links atomically Read admin.access from the roles, drop the legacy role column Grant only what one holds, change only accounts one outranks Move account rules into a core/users service, written in transactions Refuse register() on an empty database Find system roles by a stable key and lock their name Store e-mail addresses normalized, unique regardless of case Stop exposing setSessionCookie and refreshSessionCookie as actions Remove dead user queries, refreshSession and the auth re-export shims Stop the per-email counter from locking the owner out of their account Throw from queueEmail when it cannot queue inside a transaction Require Next.js 16 Call the Resend REST API with fetch instead of the SDK Load the project env files without dotenv, require Node 20.12 Render emails with the core's own components instead of react-email Validate storage policies and refuse an unknown type Refuse an extension key or a route already taken by another source Lock jobs across instances in fraza_cron_runs and record every run Share counters through PostgreSQL, keep unknown addresses limited Encode S3 metadata values and send the URL that was signed Cap request bodies per route, answer 405 and 413 Add the shared http entry with apiFetch and the client IP readers Add civil date helpers and todayInZone, format in fr-CA by default Bound migration lock waits and reject malformed migrations Verify the TLS certificate by default, whatever NODE_ENV says À lancer après la mise à jour npx fraza-update les enchaîne seul.
Terminal
$ npx fraza-db migrate
$ npx fraza-doctor --fix
Variables d’environnement (59) + FRAZA_ADMIN_SITE_LINK + FRAZA_AUTH_REDIRECT_AFTER_LOGIN + FRAZA_AUTH_REGISTRATION + FRAZA_AUTH_SESSION_COOKIE_NAME + FRAZA_AUTH_SESSION_MAX_AGE_DAYS Voir les 54 autres + FRAZA_CURRENCY + FRAZA_CURRENCY_SYMBOL + FRAZA_DATABASE_URL + FRAZA_DATE_FORMAT + FRAZA_DB_CONNECT_TIMEOUT_MS + FRAZA_DB_MIGRATION_LOCK_TIMEOUT_MS + FRAZA_DB_POOL_MAX + FRAZA_DB_SSL_CA + FRAZA_DB_STATEMENT_TIMEOUT_MS + FRAZA_DEVKIT + FRAZA_EMAIL_FROM_ADDRESS + FRAZA_EMAIL_FROM_NAME + FRAZA_EMAIL_LOGO + FRAZA_EMAIL_LOGO_URL + FRAZA_EMAIL_OUTBOX_RETENTION_DAYS + FRAZA_EMAIL_PROVIDER + FRAZA_EMAIL_RESEND_APIKEY + FRAZA_EMAIL_SMTP_HOST + FRAZA_EMAIL_SMTP_PASSWORD + FRAZA_EMAIL_SMTP_PORT + FRAZA_EMAIL_SMTP_REQUIRE_TLS + FRAZA_EMAIL_SMTP_SECURE + FRAZA_EMAIL_SMTP_TIMEOUT_MS + FRAZA_EMAIL_SMTP_TLS_NO_VERIFY + FRAZA_EMAIL_SMTP_USER + FRAZA_ENCRYPTION_KEY + FRAZA_IMAGE_CONCURRENCY + FRAZA_IMAGE_MAX_PIXELS + FRAZA_LOGO_URL + FRAZA_LOGO_URL_DARK + FRAZA_LOG_FORMAT + FRAZA_LOG_LEVEL + FRAZA_NAME + FRAZA_SEO + FRAZA_SEO_SEPARATOR + FRAZA_SEO_TITLE_TEMPLATE + FRAZA_SITE_URL + FRAZA_STORAGE_ACCESS_KEY + FRAZA_STORAGE_BUCKET + FRAZA_STORAGE_ENDPOINT + FRAZA_STORAGE_PROVIDER + FRAZA_STORAGE_REGION + FRAZA_STORAGE_SECRET_KEY + FRAZA_STORAGE_TIMEOUT_MS + FRAZA_SUPPORT_EMAIL + FRAZA_TEST_DATABASE_URL + FRAZA_TEST_SCHEMA_TTL_HOURS + FRAZA_TIMEZONE + FRAZA_TRUST_PROXY + FRAZA_UPDATE_CHAIN + FRAZA_UPDATE_CHECK + NEXT_PUBLIC_URL + NEXT_TELEMETRY_DISABLED + STRIPE_WEBHOOK_SECRET Nouveautés (75) Add tests for icons package refactor(package.server.js): add ICONS_NAME constant and update package profile Add devkit colors page core · Add markUnread and deleteNotification functions and routesadmin · Add devkit scenario endpointcore · Add notification systemVoir les 70 autres tools · Accept an exact version in fraza-module releasetools · Bump the version in fraza-module release, patch by defaultUpdate version and changelog content api · Answer every API error from a French catalogue, let handlers throw ApiErrormodules · Declare soft dependencies with manifest.optionalModulesmodules · Version the module contract, refuse an unknown one at startupcompat · Check the peer range of a module even when it declares requiresCoretools · Add fraza-module test-clean to drop the leftover test schemastools · Drop the live test schemas on SIGINT and SIGTERMtools · Date the test schemas and sweep the ones a killed process leftapi · Measure a file read on demand, answer its length and its rangesapi · Let a file descriptor add X- headers to its responseapi · Let the read of a file refuse it with a status of its ownusers · Export the account input rules from a neutral @fraza/core/users/validationui · Let Combobox search on the serverui · Let a Table offer its own page sizestools · Give module tests the core tables, the migration context and the Next hookcrypto · Derive a key per purpose, sign and verify short tokensdatabase · Leave expected SQLSTATE codes out of the logs, add isUniqueViolationsql · Add escapeLike and containsPattern, clamp a limit of many digits to maxhttp · Add truncateIp, the network of an address in CIDR formstorage · Add isStorageConfigured and deletePrefixapi · Export runAfterResponse and parseFormDataemail · Export ADDRESS from a neutral @fraza/core/email/address entrydates · Edit an instant in a time zone, hand the site's zone to the admin pagesapi · Answer 502 and 503, let apiSuccess carry response headersapi · Let a file response refuse conditional requestsapi · Answer 404 when the read of a file finds the object goneui · Render Table as a compact list on narrow screens, open its rows from the keyboardui · Replace Headless UI with a native dialog and a shared menu primitiveui · Read the session of the admin and auth routes in a Suspense boundary under Cache Componentspublic-content · Add revalidatePublicContent(tag) for a module's cached public readsapi · Answer ETag, 304, byte ranges and Cache-Control in buildFileResponseadmin · Declare a page's title and permission on the server, load its code on demandtools · Check a module's ./client entry for server codecomponents · Give each shared component its own entry, fail a module public page on a heavy barrelinit · Boot from @fraza/core/init, keep only the boot and the config at the rootdoctor · Expect the error, loading and global error files in the project contractui · Add the error, loading and global error screens a project re-exportsdoctor · Warn when a FRAZA_MODULE_* flag differs from the generated manifestdoctor · Report an env file tracked by git that carries a secretenv · Ship .env.example as a secret-free template, keep values in .env.localauth · Read a session with its user in one query and end it after an absolute lifetimeauth · Hash passwords in a versioned scrypt format and rehash old ones at sign-inadmin · Check a new user's fields with the shared rules before sendingusers · Find system roles by a stable key and lock their nameusers · Store e-mail addresses normalized, unique regardless of caseemail · Send a Resend idempotency key with every outbox attemptemail · Add the shared email parts entryemail · Render emails with the core's own components instead of react-emailregistry · Refuse an extension key or a route already taken by another sourcecron · Purge expired sessions, tokens, counters and old outbox rows hourlyemail · Add an outbox that stores emails before sending and retries themcron · Lock jobs across instances in fraza_cron_runs and record every runrate-limit · Share counters through PostgreSQL, keep unknown addresses limitedapi · Cap request bodies per route, answer 405 and 413storage · Add bounded image processing on a lazily loaded sharpstorage · Add a streamed ZIP writer with ZIP64tools · Fail the core build when a client-safe entry reaches server codehttp · Add the shared http entry with apiFetch and the client IP readersdates · Add civil date helpers and todayInZone, format in fr-CA by defaultslug · Add a shared slugify and a database uniqueSlugdatabase · Add the shared sql helpers entrydatabase · Show the env files and the target database before fraza-db writesdatabase · Make the pool configurable, keep it on globalThis, return DATE as stringslogger · Keep error stacks, write failures to stderr, add json format and email maskingtools · Add the fraza-module command shared by every packagemodules · Recognise the @fraza-pro scope for Pro modulesdocs · Add icon support and documentationInitial Fraza 0.1.0 codebase Corrections (86) docs · Remove and rephrase description of requiresCore in module creation guideapi · Remove redundant sibling handling logicRemove deprecated components core · Update documentation for authentication page handlingshared-icons · Update icon sources and documentationVoir les 81 autres Set position: relative on shell and main for better overflow handling Update paths in package.json and documentation tools · Warn about breaking changes in a patch release instead of refusing ittools · Find each dependency on disk instead of trusting npm's pathtools · Refuse to bump again over a release stopped after its committools · Push the release branch and its tag atomicallytools · Fetch before a release, refuse a branch behind its remotetools · Refuse a release level below the breaking changes waitingpackage · Bump version to 0.2.0api · Percent-encode ' ( ) * in filename* as RFC 8187 asksadmin · Show the French message of a refused profile or user callmedia-registry · Answer a write without the media module in French, with a codeapi · Give Content-Disposition a readable ASCII filename fallbackpayments · Answer the Stripe webhook refusals in Frenchstorage · Refuse a file in French, answer a storage outage with a 502auth · Answer the user and role routes in French, leave internal errors to the routeradmin · Clear a page's error when its path changes under the same slugstorage · Refuse an upload in French, with a stable code per layermedia-registry · Pass client to the block helpers and getMediaByIds, keep the 404 out of cachesadmin · Pass the server title down to the header of the roles pageui · Name each selection checkbox of a table after its rowui · Open a table row from a real button on its title, not a focusable trui · Keep a disabled menu item focusable, announced as disabledui · Describe a dialog by its sentence, make a confirmation an alert dialogui · Open a dialog again after a native close its caller did not followui · Let Escape close the « Aucun résultat » panel of TagInput, not its dialogtools · Count a call in an initializer, a default export or a top-level if as an effectadmin · Download a page again after a failed chunk, on the way back tooadmin · Hide a nav item without the permission of the page it opensapi · Publish a digest of a file's etag, never the value itselfadmin · Answer 404 for an unknown or refused admin page, inside the shelladmin · Make the closed mobile drawer inert, close it on Escape, size it by dvhui · Label the core form fields by useId, describe them and mark their errorsblocks · Render a linked image from the filename the Medias module resolveshooks · Remove the mirror history entry of useUnsavedChanges once cleaneditor · Keep the block selection keys inside the editor that holds themblocks · Keep block links to http, https, mailto, tel and relative addressesadmin · Filter the bottom nav items by permission, mark them active in the browserui · Drop the public loading screen, which made every unknown URL answer 200auth · Apply the name rules on PUT /users/:idusers · Bound the memory a stored password hash may ask for, not each parameterauth · Check an older password hash in the time of a current one at sign-inauth · Answer a sign-up the same way whether or not the address has an accountauth · Issue and queue the verification link after the response of resendVerificationActionusers · Hash a new account's password before its transaction opensauth · Check the password before the address, count wrong current passwordsauth · Let an invited account whose invitation is gone still be activatedauth · Keep the admin role on its last holderauth · Refuse the admin password, address and reset routes on one's own accountregistry · Write the project .npmrc in mode 0600 and warn about a token that can publishauth · Issue and queue the reset link after the response of forgotPasswordActionauth · Close the other sessions on a password or address changeauth · Stop writing the session cookie while rendering, make it last the whole sessionauth · Store only the SHA-256 of session and link tokens, spend links atomicallystorage · Read admin.access from the roles, drop the legacy role columnauth · Grant only what one holds, change only accounts one outranksauth · Refuse register() on an empty databaseauth · Stop exposing setSessionCookie and refreshSessionCookie as actionsauth · Log a wrong password as one warning line, not an error with its stackauth · Rethrow Next.js control flow from getSession instead of logging itauth · Stop the per-email counter from locking the owner out of their accountrate-limit · Keep the public guessing presets on the caller's addresscron · Run a locked job once per tick, not once per instancemaintenance · Purge in batches so a first purge fits under statement_timeoutemail · Throw from queueEmail when it cannot queue inside a transactiondatabase · Raise when PostgreSQL turns the COMMIT of transaction() into a ROLLBACKrelease · Annotate the version tag so git push --follow-tags sends itdates · Read the years 0 to 99 as given in daysBetweenISOslug · Spell the combining marks range with escapesstorage · Validate storage policies and refuse an unknown typeapi · Apply a route's permission on user routes tooauth · Rate limit sign-in and password flows per targeted e-mail tooemail · Bound SMTP connection, TLS handshake and whole send, add REQUIRE_TLSstorage · Bound every S3 request, retry idempotent ones, batch deletesstorage · Encode S3 metadata values and send the URL that was signedpayments · Rate limit the Stripe webhook and cap its body at 64 KiBdatabase · Bound migration lock waits and reject malformed migrationsdatabase · Verify the TLS certificate by default, whatever NODE_ENV saysdatabase · Rethrow non-database errors from transaction() untoucheddatabase · Check table, column and index existence in the current schemaCorrect dimensions and descriptions for the admin bar Performances (9) fonts · Ship IBM's own WOFF2 subsets of Plex Sans and Plex Monopublic-content · Resolve a path once per request, keep a failing resolver from taking the others downhooks · Track the dirty state of useUnsavedChanges with a revision countereditor · Render only the changed block on a keystrokebuild · Declare in sideEffects only the files that act when importedVoir les 4 autres api · Check admin.access and a route's permission with one readusers · Count a role's permissions and holders with subqueriesauth · Ask once per request whether an account existsauth · Read the session and the permissions once per requestMaintenance et documentation (70) ui · Update icon references in multiple documents and code filescli · Update release command to include adjacent packages and Fraza dependency versionsImprove usage instructions for icon package core · Align dependencies with core rangeDocs/refactor: add documentation for fraza-update and fraza-doctor Docs/02-guides/mettre-a-jour-un-projet.md,.docs/03-reference/05-cli/fraza-doctor.md,src/core/doctor/imports.server.js,test/doctor-imports.test.js: Update deprecated imports for @fraza/icons (0.2.22) module · Update package notices and documentationDocs/drive): Improve menu actions and add copy functionality shared · Update documentation and component descriptionsAdd detailed drawing rules for icons Update permissions and roles documentation drive · Update icon logic and documentationEnhance installation and tour guides Update API route paths admin · Update widget registration with title, description, and sizeHandle close event delay during reopens admin · Update breadcrumb logic and documentationUpdate theme descriptions and styles admin · Reorganize and improve components layoutauth · Add anti-bot feature and update security guidelinespublication · Describe how @fraza/start runs fraza-module and its version moduleposts · Document the term_taken refusal of a duplicate term titledesign-system · Describe the inert mobile drawer and the title button of a table rowguides · Answer a storage failure with a 502 and a failed job with the catalogue 500posts · Document the French refusals and codes of the post and term routespages · Document the codes of the conflicts of a pagemedias · Document the codes of a refused media and the French file route textsforms · Document details.fieldErrors and the codes of a refusaldrive · Document the error codes of the drive routesbooking · Document the error answers and their codesfacturation · Document the error answers of the billing routesThe media module is an optional module, reminded by fraza-doctor Drop the long dash inside sentences of the api barrel, the logger and the handler signature comments drive · Link listCronRuns to the cron reference without a guessed anchormedias · GetMediaByIds reads on the caller's clientdrive · Describe the bounded history, the share unlock counter, the deletion queue and the core zipbooking · Describe one slot rule, the signed form token, framing, the outbox and theme coloursbilling · Describe the serialized ledger, the module's own Stripe and PDF, credit notes and the outboxposts · Describe strict declarations, private fields everywhere, batched reads and transactional writespages · Describe the server-paged tree, the restricted delete, the recursive resolution and the cache tagmedias · Describe the type table, the core image pipeline and the references in a transactionforms · Describe the per-type validation, the signed delay token, privacy and retentionpayments · Keep only the Stripe webhook, verify its signature without the SDKThe compact list keeps the depth of a child billing · The public invoice sends both layouts of its linesposts · The block editor loads with the form, not with the listspages · The block editor loads with the form, not with the listdrive · The counted download refuses conditional requestsdrive · A preview or thumbnail whose object is gone answers 404modules · Describe the admin 404 without the read permission, the compact lists and the file answers of the adapted modulesdrive · The unlock route counts on the share_unlock presetenv · Align the env file comments with .env.local and the platform variablesusers · Name consumeEmailChangeToken, which replaced verifyEmailChangeTokenusers · Move account rules into a core/users service, written in transactionsusers · Keep the password and name rules in one shared moduleusers · Remove dead user queries, refreshSession and the auth re-export shimsmodules · Say the version module comes from fraza-module sync-versiondatabase · Say which hosted databases need FRAZA_DB_SSL_CAemail · Call the Resend REST API with fetch instead of the SDKdrive · Say the blocklist reads the raw suffix of the namemodules · Document the body ceilings of the drive, medias and forms uploadshttp · Point the proxy settings at the http pageSplit modules into Gratuit and Pro, drop login from getting started admin · Enhance sidebar section toggle and state persistenceadmin · Update navigation sections and groupsauth · Update logo positioning and page dimensionsauth · Removed unused AuthLogoContexticons · Remove old iconsadmin · Remove unused mention from sidebar descriptionInitial commit