Date Period
October 15, 2026
See it working: the Live Features Demo runs Server-Sent Events, background job progress, a live shared feed, a form_data file upload and the admin_logs query on the docs site. Open it in two tabs to watch the updates arrive in both.
Subscribe to a channel with Server-Sent Events: A page that only listens can now open a WebSocket channel with EventSource at /anycable-events instead of a WebSocket. There is nothing to enable on your instance and no channel code to change. Your channels/<name>/subscribed.liquid partial admits subscribers as before, the websockets_require_subscribed_partial and websockets_require_csrf_token settings apply unchanged, and channel_send_message reaches both kinds of subscriber. Pass the whole identifier as URL-encoded JSON (?identifier=...) and the CSRF token as authenticity_token in the same address. The stream opens with welcome and confirm_subscription events, and each message then arrives as a message event whose data is exactly the payload you sent. The connection is read-only, so a receive.liquid partial is never called. A refused subscription answers with an error status and closes the stream. The browser's own reconnect reuses the same address and token, so when the token goes stale, open a new EventSource with a fresh token.
Stable names for the _rc GraphQL fields: The 12 fields that only had a release-candidate name now also have a stable name, with the same arguments and results: documents, documents_insert, documents_upsert, documents_bulk_upsert, documents_delete, embeddings, embedding_create, embedding_update, embedding_delete, admin_search_index, records_create, and records_count on Table. The _rc names still work and are now deprecated. A default schema read leaves deprecated fields out, so autocomplete and introspection show only the stable names. Use the stable names in new code.
Send multipart/form-data with api_call_send: The api_call argument takes a new form_data list, so you can upload files to an external API without building the body yourself. Each part has a name and either a text value or a file, given by url or content_base64. It works with POST, PUT and PATCH and cannot be combined with body. It sets the Content-Type and boundary for you, and allows up to 100 parts, 10 downloaded files and 50MB in total.
Read your instance logs from GraphQL: The new admin_logs query returns the entries written with the log tag, oldest first, each with id, type, message, data and created_at. To poll for new entries, pass the last id you saw as id: { range: { gt: ... } }. type and message take the usual string filters.
Every GraphQL schema element has a description: Queries, mutations, arguments, fields, input types, enum values and scalars now describe their defaults, limits and errors, and deprecated fields name their replacement. Every root query and mutation belongs to a category, including two new ones: Notifications (api_call_send, email_send, sms_send) and Uploads.
Refused emails are easier to trace: When the mail server refuses an email, for example because the from address is not a verified sender, the MailNotSent log entry now includes the server's reason, along with the notification name, to, from, reply_to, cc, bcc, subject, unique_args, the template and line that sent it, and the background job ID. A permanent refusal is no longer retried, so it is logged once.
Background job IDs in error logs: BackgroundJob Error entries now include the job ID and job class.
A token-check outage is reported as an outage: While the service that checks API tokens is briefly unreachable, the instance now answers 503 Service Unavailable with a Retry-After header and the code partner_portal_unavailable. It used to answer 401, which looked like a revoked token. An up-to-date insites-cli waits and retries.
download_file enforces max_size while downloading: The limit applies to the bytes actually received, so a server that does not declare a size can no longer send more. The maximum remains 50MB.
admin_model_schemas, admin_transactable_schemas and admin_user_profile_schemas: use admin_tables.admin_forms: use a page with a GraphQL mutation.authentications on User.admin_translation_update and admin_translation_delete now point to admin_translation_set and admin_translation_unset. Before, each pointed to the other's replacement.sync: true on the *_delete_all mutations: records_delete_all, users_delete_all and admin_pages_delete_all ignored sync and always deleted in the background. With sync: true, the records are now gone before the mutation returns.
content_type.starts_with in presigned upload URLs: With include_content_type: true, property_upload_presigned_url now restricts uploads to files whose Content-Type starts with the given prefix. Before, the prefix was ignored.
Property filters inside or in the models query now respect the selected table, so a property with the same name in another table is no longer read as the wrong type.
WebSocket messages accept the token from the connection address: With websockets_require_csrf_token on, a client that passed its token in the socket address had its first message refused. The instance now uses the token the socket was opened with when the identifier carries none.
An API key shared across instances is accepted by each of them: Each instance now verifies a shared key itself. Before, all but one refused it for up to 10 minutes.
.txt pages are served as text/plain, whatever the Accept header.
A missing asset returns 404, not 403.
admin_background_jobs refuses a timestamp filter that is not a date, with timestamp must be a date or a time, got: .... Before, it matched every job or none.
Log entries no longer go missing: One failed delivery to the log service could lose the entries after it. The connection now recovers on its own.
October 14, 2026
insites-cli deploy works again for projects that have a modules/ folder and no app/ folder. From 6.3.0, these deploys stopped with The "path" argument must be of type string ... Received undefined before anything was uploaded.Request failed with status code 500. This was fixed on the server, now that the Insites Console has moved to a new address.October 13, 2026
env add --instance-uuid work again for instances on the shared stack, now that the Insites Console has moved to a new address. INSITES_CONSOLE_HOST still overrides the address.env add --instance-uuid no longer files an instance under the private stack when the Console can't be reached. It asks for --stack instead.October 13, 2026
insites-cli doctor checks your Node.js version against the versions the CLI supports.insites-cli env add <env> --instance-uuid <uuid> works again, instead of asking you to run it again with --stack.insites-cli doctor checks the INSITES_* variables, as every other command does, instead of failing with "No .insites file".npm install -g @insites/insites-cli --no-fund. The --no-fund option is optional: it hides the npm note about packages that accept donations.October 13, 2026
October 13, 2026
INSITES_* variables no longer print a warning about a stored instance key that named the environment as undefined.iak_...) in INSITES_INSTANCE_KEY is treated like one added with env add --token, so a pipeline on the private stack deploys through the Insites proxy and each deploy is recorded against the token's owner.October 13, 2026
ModuleRouteClash (error): reports a page that takes the same address, method and format as a page an Insites module ships, such as a second /404 or / page. The instance does not refuse such a page; the new page silently takes over the module's page, so deleting it later deletes the module page too.admin, api, crm and similar segments now applies only to custom endpoints created through the API module, which is where Insites enforces it.October 13, 2026
env add <env> --instance-uuid <uuid> --token iak_... builds the Insites proxy address for you. Use --console-tier staging for the staging Console.ReservedName (error) and ReservedParameterName (warning, action and controller).logsv2 is not available at the moment. Use insites-cli logs to follow an instance's logs.October 12, 2026
insites-cli env add <env> --url <proxy> --token iak_.... Requests go through the Insites proxy, which checks your role on every request and records each deploy and change in the instance's activity.deploy --dry-run validates a release on the instance and lists every error at once, without changing anything.--verbose lists the files, and --json prints the result as JSON.insites-cli doctor checks your setup, sign-in and instances, and tells you how to fix each problem.insites-cli logs --json prints one JSON object per log entry.pull, modules pull and data export show "Data export is not supported by the server" on a 404 again.October 12, 2026
insites-cli env refresh-token <env> to move an older environment onto the new sign-in.INSITES_POS_KEY is now INSITES_INSTANCE_KEY (the old name still works with a warning). INSITES_STACK names the stack in CI..insites-check.yml. The old file name still works with a warning.insites-cli migrations status <timestamp> and migrations retry <timestamp>.insites-cli env refresh-token <env>.modules init uses a starter bundled with the CLI.Filter by
Date Period