Skip to content

Changelog

The File Service’s API is versioned in its path (/api/v1); within a version, changes only add (new fields, new operations, new error codes) and never remove or rename. The libraries follow semver; their own changelogs are generated from each package.

Package Version Changelog
@central-code-station/ccs-files-client 2.0.0 ccs-files-client changelog
@central-code-station/ccs-files-user-client 1.3.0 ccs-files-user-client changelog
ccs_files_user_client (Flutter) 1.3.0 ccs_files_user_client changelog

2026-10-25: production addresses by default

Section titled “2026-10-25: production addresses by default”
  • ccs-files-client 2.0.0. The File Service’s address is two variables, FILES_API_URL and FILES_API_RESOURCE (either one alone is enough when it has the usual …/api/v1 or …/api shape), else CCS_ENVIRONMENT; filesEndpoints() returns { apiUrl, resource }. FileLock.user_id, which the service never sent, is gone. No change to the API.
  • The libraries know where the platform runs. ccs-files-client 1.4.0 makes issuerUrl, apiUrl and resource optional: omitted, they are production’s (https://auth.centralcodestation.com, https://files.centralcodestation.com/api/v1 and /api), and CCS_ENVIRONMENT=local or staging (or CCS_ISSUER_URL and, since 2.0.0, FILES_API_URL + FILES_API_RESOURCE) in the backend’s environment moves them; an explicit option always wins, env: {} ignores the environment. ccs-files-user-client 1.3.0 and ccs_files_user_client 1.3.0 make apiUrl optional with the production default; fromTokenRoute is unchanged and still the recommended way. No change to the API.
  • Requests may carry an x-request-id (letters, digits, ., _, : and -, up to 128 characters); the service echoes it, or a new one, in the response.
  • Application-managed folders: a backend client with files:manage creates a folder with managed: true, or marks and unmarks one with PATCH P/folders/:folder_id. The folder and its subtree become read-only for people, the tenant owner included, so a change in the Files console cannot break the references the application keeps; its backend clients change them as before. People keep viewing, downloading, copying out, legal holds and emptying the trash. Inside a managed folder only the application’s backend creates share links; a link a person made before the mark answers share_gone. Every folder and file gains managed and managed_by. New error code folder_managed. New route POST P/folders/:folder_id/release-management: the tenant owner’s audited emergency release, with a reason. Audited as folder.managed, folder.unmanaged, folder.management_released. In the console, a Managed by badge, the editing actions hidden, and Release from app management for the tenant owner. See Application-managed folders.
  • ccs-files-client 1.3.0 (managed on folders.create and folders.update), ccs-files-user-client 1.2.0 and ccs_files_user_client 1.2.0 (managed, managed_by, the read-only helper and releaseManagement); all three read folder_managed.
Section titled “2026-10-23: legal hold, search at scale, storage of your own, platform reports”
  • Legal hold: a hold with a reason and an optional end keeps a file’s bytes; purging it and deleting its versions answer file_on_hold, the trash and version pruning keep it, and the work on it goes on. File.hold gains until. New routes PUT and DELETE P/files/:file_id/hold and GET P/holds, with files.manage; in the console, a banner and actions on the file page and a Legal holds page. Audited as hold.placed, hold.updated, hold.released. See Legal hold.
  • Search in large applications: in=name now matches names that start with the query, ignoring case (it matched inside names before, and titles); titles and other words match whole words through keywords, and the default search falls back to the name prefix when no whole word matches. total stays exact up to 10,000 and null above. See Search.
  • A tenant’s files in its own storage: platform administrators can add storage accounts, assign a tenant to one, and move its files there or back while downloads and uploads keep working; file ids never change. A public file’s public_url can change after a move: read it from the file again. Treat every upload, download and public URL as opaque: it may point at a store, a CDN or the service’s own host. New error codes for storage accounts (storage_account_not_found, storage_account_in_use, storage_account_not_verified, storage_account_verification_failed, storage_adapter_not_allowed, storage_migration_not_found, storage_migration_in_progress). See Where files are stored and Storage accounts.
  • Usage trends and platform reports: GET P/usage answers daily, the application’s last 30 days, from daily snapshots kept 400 days. Platform administrators get usage trends across tenants (largest, fastest growing, closest to their quota), a tenant’s trend per application, a tenant’s audit log across its applications, and audit and usage exports in NDJSON or CSV, each read and export audited. See Platform administration.
  • ccs-files-client 1.2.0 (legal hold, daily, the platform namespace), ccs-files-user-client 1.1.0 and ccs_files_user_client 1.1.0 (legal hold and the typed hold).
  • CCS Chat stores its attachments here. Photos, videos and files of Chat messages are files of the tenant application, in a chat folder with one folder per conversation, open to the conversation’s members. Chat’s uploads use the upload policy named chat when the application defines one, and the application’s own rules otherwise; scanning, renditions, quota and the trash apply as to any file. No change to the API. See Media in Chat.

2026-10-23: scanning, previews, content search, webhooks and the user clients

Section titled “2026-10-23: scanning, previews, content search, webhooks and the user clients”
  • Malware scanning of every upload, with a choice per application: block downloads until the scan is clean (the default), serve during the scan, or off; and what a file whose scan failed or that is too large to scan gets. Infected files are quarantined and file.quarantined is published. See Malware scanning.
  • PDF previews: the first page as thumbnail and preview. Playable video: mp4_720p and mp4_1080p renditions, picked by the preview call. Office documents get no preview. See Previews and renditions.
  • Media metadata: the capture date and the camera of photos, the title and the author of PDFs.
  • Content search: in=content matches the text of PDF, Office, OpenDocument, text, HTML and JSON files, with highlights. See Searching inside documents.
  • Webhooks: the events as signed HTTPS calls to your backend, with a ping when saved, retries, a delivery log, and switching off after repeated failures. New error code webhook_url_not_allowed. See Webhooks.
  • ccs-files-user-client 1.0.0, the web client (uploads with progress, pause, resume and cancel, previews, Angular and React), and ccs_files_user_client 1.0.0, the Flutter package (uploads that resume after a restart, a persisted queue). See the web and Flutter quickstarts.
  • ccs-files-client 1.1.0: the new fields, and response types corrected to match the API.
  • The File Service API v1: folders, upload tickets with single PUT and multipart uploads to signed URLs, files with metadata, external references, versions, renditions of images and videos, signed download, preview and batch URLs, visibility (private, application, public), search with filters, access entries with inheritance, the role matrix of the eleven files.* keys, share links with expiry, password and download limits, the trash, quotas per application and tenant, settings, usage and the audit log.
  • The Files console: browse and upload (files and folders, with pause and resume), file details with versions, permissions, share links and activity, search, trash, share links, the Permissions, Settings, Usage and Audit pages, platform administration, and public share link pages.
  • Events through the Notification Service: file.ready, file.failed, file.status.changed, file.shared, file.version.created and folder.changed.
  • ccs-files-client 1.0.0, the Node.js client for backends.
  • Also in this release: on_name_conflict: "rename" on upload tickets, external_ref on folders with GET P/folders/by-external-ref/:external_ref, GET P/jobs/:job_id for background work, and users listing their own share links on GET P/shares.

What is coming is on What’s coming.