Releases: error311/FileRise
v3.2.4
Changes 01/30/2026 (v3.2.4)
release(v3.2.4): OIDC group-claim mapping + extra scopes (Authentik & Keycloak-friendly) + sponsor list update
Commit message
release(v3.2.4): OIDC group-claim mapping + extra scopes (Authentik & Keycloak-friendly) + sponsor list update
- OIDC: add configurable group claim + extra scopes (Admin + env overrides)
- OIDC: extract group tags from both userinfo and ID token, supports dot-path claims (e.g. realm_access.roles)
- Admin: surface effective & locked groupClaim + extraScopes values and include them in OIDC debug snapshot
- Docs OpenAPI: document new OIDC config fields
- Admin: add new Pro supporter name to thanks list
Added
- OIDC: configurable group claim name
- Admin setting:
oidc.groupClaim(default behavior remainsgroups) - Env override:
FR_OIDC_GROUP_CLAIM(locks Admin field when set) - Supports dot-path claims (example:
realm_access.roles)
- Admin setting:
- OIDC: extra scopes
- Admin setting:
oidc.extraScopes(space/comma separated) - Env override:
FR_OIDC_EXTRA_SCOPES(locks Admin field when set) - Effective scopes become:
openid profile email+ your extras
- Admin setting:
- OIDC debug snapshot improvements
/api/admin/oidcDebugInfo.phpnow shows:groupClaim+ source (env|config|default)extraScopes+ source (env|config|none)- final
scopes[]list
Changed
- Group mapping reads both claim sets
- Group tags are extracted from:
- Userinfo response, and
- ID Token payload (when available from the OIDC library)
- This improves compatibility with IdPs that only place groups/roles in one of those.
- Group tags are extracted from:
Fixed
- Group mapping reliability with IdPs like Authentik/Keycloak where:
- groups are not under the default
groupsclaim, and/or - groups require requesting an additional scope.
- groups are not under the default
Security / Hardening
groupClaimandextraScopesinputs are sanitized on save (control chars stripped + length capped).- No user-controlled HTML is introduced; config values are escaped in the Admin UI.
- No secrets are logged or echoed back.
v3.2.4
Full Changelog
SHA-256 (zip)
2139cc94ddf70d70221b9169785f1258931bdd9cf828ea72f351b2d5169fdcc7 FileRise-v3.2.4.zip
v3.2.3
Changes 01/29/2026 (v3.2.3)
release(v3.2.3): resumable upload UX fixes + stale chunk cleanup + folder re-upload conflict handling (closes #100, closes #101, closes #102)
Commit message
release(v3.2.3): resumable upload UX fixes + stale chunk cleanup + folder re-upload conflict handling (closes #100, closes #101, closes #102)
- uploads: fix resumable resume banner layout for long filenames + improve dismiss behavior
- uploads: add preflight check existing files flow for folder uploads (resume+skip+overwrite)
- cleanup: add resumable TTL (Admin + env) + background sweeps + admin CLI cleanup tools
- folders: allow deleting empty folders by cleaning resumable temp dirs first
- docs: update OpenAPI (uploads config, checkExisting endpoint, cleanup endpoint)
Fixed
- #100: Resumable resume banner Dismiss button is now reliably visible even with very long filenames.
- Wrapped banner content and forced safe word wrapping so long names don’t push the button off-screen.
- #101: You can now delete a folder that only contains unfinished resumable chunks (refresh → dismiss → folder looked empty but wouldn’t delete).
- Folder delete now cleans
resumable_*temp dirs for that folder before the “is empty” check.
- Folder delete now cleans
- #102: Re-uploading a folder after an interruption no longer blindly re-uploads files that already exist.
- New “Existing files detected” modal lets users choose: Resume (skip same-size), Skip existing, or Overwrite.
Added
- Upload preflight endpoint:
POST /api/upload/checkExisting.php- Checks a list of relative paths and reports which already exist (and whether size matches).
- Supports
sourceIdwhen Sources is enabled.
- Resumable cleanup controls
- Admin setting: Resumable cleanup age (hours) (
uploads.resumableTtlHours, default 6h) - Admin action: Run cleanup now (
POST /api/admin/resumableCleanup.php) - CLI tool:
src/cli/resumable_cleanup.php(supports--all,--source,--respect-interval)
- Admin setting: Resumable cleanup age (hours) (
Changed
- Resumable drafts banner UX
- Banner copy now explains how to resume and that Dismiss clears partial uploads + temp files.
- Dismiss now attempts cleanup via
removeChunksfor all pending identifiers in the current folder.
- Resumable temp management
- Tracks folders with pending resumable temp dirs via a small index (
resumable_pending.json) - Performs periodic TTL-based sweeps (rate-limited) to remove stale temp folders automatically.
- Tracks folders with pending resumable temp dirs via a small index (
- Admin config / siteConfig
uploads.resumableTtlHoursis now included in config payloads.
- OpenAPI
- Docs updated for uploads config,
checkExisting, and admin cleanup endpoints.
- Docs updated for uploads config,
v3.2.3
Full Changelog
SHA-256 (zip)
75f5095f37fcee2cafccedeebfa03a060c4ed242083cfbe52d5d4e9e109f0da0 FileRise-v3.2.3.zip
v3.2.2
Changes 01/28/2026 (v3.2.2)
release(v3.2.2): update OpenAPI spec to match shipped endpoints
- OpenAPI spec (openapi.json.dist) updated to reflect current behavior
- Archive downloads are queued jobs (JSON response) and support format: zip|7z
- downloadZipFile now documents “archive stream” (not zip-only wording)
- Extract endpoint docs now reflect ZIP/7Z/RAR support
- File share supports view=1 landing page + inline=1 for safe types
- Shared folder APIs documented for path= (subfolders) + new shared folder zip download endpoint
- New thumbnail endpoint documented (/api/file/thumbnail.php)
- OpenAPI info.version bumped to 3.2.2
v3.2.2
Full Changelog
SHA-256 (zip)
97c7bf1cb363c974e5ed647a5aff36902e9ca4c9cc342306eed8f2c4f479fd10 FileRise-v3.2.2.zip
v3.2.1
Changes 01/28/2026 (v3.2.0 & v3.2.1)
release(v3.2.1): fix asset stamper to stamp src/ templates + APP_QVER placeholders
- stamp-assets: include src/ alongside public/ for stamping
- stamp-assets: replace {{APP_QVER}} in HTML/CSS/PHP templates and validate no placeholders remain
release(v3.2.0): share pages revamp + portals browse/download-all + Pro branding upgrades
Commit message
release(v3.2.0): share pages revamp + portals browse/download-all + Pro branding upgrades
- shares: modern Dropbox-like share UI (file + folder), safe inline previews, and optional subfolder access
- portals: subfolder browsing + pagination, list/gallery toggle, download-all zip, resumable uploads, submission IDs
- branding (Pro): meta description + favicons + theme colors + login/app backgrounds + share/portal branding
- security: sanitize footer HTML; tighten shared uploads with per-share upload token; validate share/portal paths
Added
-
Shares (Core)
- Folder shares can optionally include subfolders (
allowSubfolders) when creating the link. - Shared folder browsing supports
path=for subfolder navigation (when enabled). - New public endpoint:
GET /api/folder/downloadSharedFolder.phpto download a shared folder (or subfolder) as a ZIP (local storage only). - Shared downloads support
inline=1for safe types (images/video/audio/pdf) and never inline SVG.
- Folder shares can optionally include subfolders (
-
Share UI revamp (Core)
- New modern share layout + styles in
public/css/share.css(folder + file share views). - Shared folder now supports:
- Download all
- List/Gallery toggle
- Search within the shared folder
- Breadcrumbs when subfolder browsing is enabled
- Optional XHR upload progress UI for shared-folder uploads
- File shares now generate a link that defaults to a landing page (
&view=1) with metadata + preview.
- New modern share layout + styles in
-
Portals (Pro)
- New API:
GET /api/pro/portals/listEntries.php(folders + files, pagination, optional “all files” mode). - Portal UI now supports:
- Subfolder browsing (optional, per portal) using
?path=... - Breadcrumbs + pagination
- List/Gallery toggle
- Download all (queues a ZIP via
/api/file/downloadZip.php) - Resumable uploads for portals (with standard upload fallback)
- Optional Submission ID tracking + show in thank-you screen
- 5 New preset templates
- Subfolder browsing (optional, per portal) using
- New API:
-
Branding upgrades (Pro)
- Admin branding now supports:
- Meta description
- Favicons (SVG/PNG/ICO), Apple touch icon, Safari pinned mask icon + color
- Theme color (light/dark) for browser UI
- Login background (light/dark) and App background (light/dark)
- Optional login tagline
- New
public/js/shareBranding.jsapplies Pro branding to share pages (logo, accents, footer, icons, theme-color). - New
public/index.phpcan serveindex.htmlwith branding meta/favicons applied (via.htaccessDirectoryIndex).
- Admin branding now supports:
Changed
-
Shared folder data model
- Shared folder listing now returns a unified
entries[]array (folders + files), plusshareRoot,path, andallowSubfolders. - Shared file download supports
path=subfolder/file.ext(with subfolder gating).
- Shared folder listing now returns a unified
-
Shared uploads hardening
- Shared-folder upload POST now supports
pass+pathand includes a per-shareshare_upload_tokenguard (HMAC) to reduce abuse.
- Shared-folder upload POST now supports
-
Portal uploads enforcement
- Portal uploads are enforced server-side:
- Must stay within the portal’s configured folder
- Subfolder uploads are blocked unless the portal enables them
- Portal sourceId must match (when configured)
- Portal uploads are enforced server-side:
-
Portals admin UX
- Adds portal theme presets (new industries), per-portal theme override fields, and portal logo field.
- Adds “portal user” controls (optional per-portal user + password, preset modes).
-
Branding plumbing
main.jsnow applies branding meta + icons + theme color + backgrounds, and sanitizes footer HTML before injecting.
Fixed
- Shared folder password form and file share password form now use the unified share UI and preserve
pathwhen prompting. downloadZipnow supports passing an explicitsourceId(local sources) by running inside a source context.- Various base-path issues resolved for share/portal JS/CSS includes by using
withBase()and versioned assets.
Security
- Share and portal subpaths are normalized/validated (no
.., invalid segments). - Shared downloads: SVG/SVGZ are always attachment-only (defense in depth).
- Footer branding HTML is sanitized (allowlist) before inserting into DOM.
Notes
downloadSharedFolder.phponly supports local storage; remote adapters return a clear error.- Portals “download all” depends on ZIP being enabled for the account + server having the needed tooling for ZIP/7z where applicable.
v3.2.1
Full Changelog
SHA-256 (zip)
872bd10338caddde44fe412caf6bb80241e01df351fec94ff9cf2e277121474f FileRise-v3.2.1.zip
v3.1.7
Changes 01/24/2026 (v3.1.7)
release(v3.1.7): fix table header select-all checkbox + Pro bundle install progress UI (closes #99)
Commit message
release(v3.1.7): fix table header select-all checkbox + Pro bundle install progress UI (closes #99)
- file list fix header select-all checkbox robust click handling + sync state
- file list preserve file selections when table re-renders after folder strip loads
- admin show transfer progress for Pro bundle upload/download install actions
Closes #99
Fixed
- #99: The checkbox left of the Name column now correctly toggles “select all” in table view.
- Uses a stable selector (
.select-all+data-select-all) and robust click handling (checkbox + header cell click). - Keeps the header checkbox state synced (checked/indeterminate) as individual rows change.
- Excludes folder rows from file “select all” so only file rows are toggled.
- Uses a stable selector (
Changed
- Selection preservation on table refresh
- When subfolders are loaded and the table view re-renders (inline folders above files), existing file selections are preserved.
- Pro bundle install UX
- Admin “Upload Pro bundle” and “Download latest Pro bundle” actions now use the existing transfer progress UI (minimizable card) and surface success/failure cleanly.
v3.1.7
Full Changelog
SHA-256 (zip)
de1aebbd6bfc52585284920bb1f4f7cc9b2cadbc1ecb6f1fef898958e2c99d12 FileRise-v3.1.7.zip
v3.1.6
Changes 01/24/2026 (v3.1.5 & v3.1.6)
release(v3.1.6): CodeQL fix for error handling (strip HTML safely in fileActions)
release(v3.1.5): Pro Sources adds OneDrive + Dropbox + source-aware UX fixes

Commit message
release(v3.1.5): Pro Sources adds OneDrive + Dropbox + source-aware UX fixes
- Pro v1.6.0 adds OneDrive + Dropbox storage adapters/sources
- core wire onedrive/dropbox adapters in StorageFactory and extend remote-indexing skip list
- UI make previews/downloads/editor source-aware + add loading/busy feedback for create/delete/preview
- ACL support group grants per source (grantsBySource) incl. Group ACL modal source selector
- misc harden adapter error reporting + fix trash auto-purge + portal doc title
Added
- Pro v1.6.0 Sources: OneDrive + Dropbox adapters (new source types).
- Admin → Sources UI fields and setup hints for OneDrive + Dropbox:
- OneDrive: client id/secret/refresh token, tenant, driveId/siteId, optional root path
- Dropbox: app key/secret/refresh token, optional root path + business team fields
- Group ACL per source
- Group data supports
grantsBySourceto scope group folder grants to a specific source - Group ACL modal now includes a Source selector so you can edit grants per source
- Group data supports
- UX feedback
- Busy/disabled states for Create folder and Create file
- Preview overlays show a loading indicator and “preview not available” error state
- Delete flow integrates with transfer progress UI (shows totals + completion status)
Changed
- Source-aware file list metadata
- File list responses now include
sourceId - Each file entry includes
sourceIdso frontend can build correct URLs
- File list responses now include
- Preview/Download URLs now include
sourceId- Preview, snippet fetch, gallery thumbnails, queued downloads, and file menu actions now pass the correct source id
- Editor improvements
- Editor accepts
sourceId+sizeByteshint, shows a loading pill, supports aborting previous loads, and adds a “Saving…” state - Remote sources skip size probing that relies on Range/HEAD when not reliable
- Editor accepts
- Remote source performance guards
- Treats
ftp/sftp/webdav/smb/gdrive/onedrive/dropboxas “slow remote sources” and skips folder stats/peek probes for them
- Treats
- FileController hardening
saveFileis source-aware (supportssourceId, blocks disabled sources for non-admins, blocks read-only sources)downloadFileensures session is active; streaming usesset_time_limit(0)and improved adapter error detail messages- Range openReadStream now only applies offset/length when a Range is actually requested
- S3 hints
- Sources hint text expanded to call out common S3-compatible providers (Wasabi/MinIO/B2/Spaces/R2)
- Portals
portal_doc_titlechanged to just{title}(lets the portal title stand alone)
Fixed
- Trash auto-purge now correctly handles API responses that return
{ items: [...] }instead of a raw array. - Folder tree init order: load folder tree after the source selector finishes initializing (prevents race conditions on boot).
- Group grants visibility and save paths now keep
grantsBySourceintact when admin saves groups. - Preview stability on Sources
- Prevents “wrong source” previews/downloads when panes/sources differ or when file metadata lacks a direct sourceId.
Notes
- OneDrive/Dropbox are Pro Sources (requires Pro bundle v1.6.0+).
- Some remote sources don’t support “Trash” semantics; behavior remains backend-dependent (Drive already notes permanent deletes).
- For best results, keep OneDrive/Dropbox root paths scoped (optional) so listings remain snappy.
v3.1.6
Full Changelog
SHA-256 (zip)
92b647d5bc08b5a21d384f3d40ab21ac8c5b08aed4f617aeba339216e30fc826 FileRise-v3.1.6.zip
v3.1.4
Changes 01/20/2026 (v3.1.4)
release(v3.1.4): restore resumable upload resume checks (testChunks) + wording polish (fixes #93)
release(v3.1.4): restore resumable upload resume checks (testChunks) + wording polish (fixes #93)
- uploads: re-enable Resumable.js testChunks so interrupted uploads can resume
- admin: tweak Instance ID / renewal copy to “12-month updates” wording
Fixes #93
Fixed
- Resumable uploads resume again (fixes #93)
- Re-enabled testChunks in Resumable.js so the uploader checks which chunks already exist and continues where it left off after an interrupted upload.
Changed
- Admin Pro license UI wording
- Updated copy to say “12-month updates plans” and “Renew 12-month updates” (clarifies it’s not a forced yearly subscription).
v3.1.4
Full Changelog
SHA-256 (zip)
7addb3516e611944b5351a98a629e1f7d5e3276cc8df8d28557225897b84fe78 FileRise-v3.1.4.zip
v3.1.3
Changes 01/20/2026 (v3.1.3)
release(v3.1.3): document VIRUS_SCAN_EXCLUDE_DIRS for ClamAV upload scanning
release(v3.1.3): ClamAV exclude paths (Admin + env) for upload scanning (answers #94)

Commit message
release(v3.1.3): ClamAV exclude paths (Admin + env) for upload scanning (answers #94)
- add VIRUS_SCAN_EXCLUDE_DIRS (env) + Admin setting to exclude upload paths from ClamAV scanning
- support comma/newline-separated exclude paths relative to the source root
- allow per-source excludes via `sourceId:/path` prefixes (Pro Sources)
- apply excludes in UploadModel scan flow (local + shared-folder uploads) and lock Admin field when env is set
Added
- ClamAV exclude paths setting
- Admin setting: Exclude upload paths (
clamav.excludeDirs) - Env override:
VIRUS_SCAN_EXCLUDE_DIRS(locks the Admin field when set) - Input format: comma or newline-separated paths relative to the source root
- Examples:
snapshot,tmp - Pro Sources: prefix with a source id:
s3:/snapshot,gdrive:/tmp
- Examples:
- Admin setting: Exclude upload paths (
Changed
- Upload virus scan now checks excludes before running ClamAV
- Exclude rules are normalized (trim, normalize slashes, strip leading/trailing
/) - Rules can optionally target a specific source id; otherwise they apply to the active source
- Exclude rules are normalized (trim, normalize slashes, strip leading/trailing
- Shared-folder uploads pass folder context into the scan
- Shared uploads now reuse the same exclude logic by providing the destination folder key.
Notes
- Excludes match against the destination folder path (relative to the source root). Keep patterns simple (short paths) for predictable behavior.
- If
VIRUS_SCAN_EXCLUDE_DIRSis set, it is treated as the source of truth and the Admin field is read-only.
v3.1.3
Full Changelog
SHA-256 (zip)
759e7ab1f8161414d85c4ddd7ff6e3fd852436db1ff8638440f1cfc8a3a63780 FileRise-v3.1.3.zip
v3.1.2
Changes 01/20/2026 (v3.1.2)
release(v3.1.2): configurable ignore rules for indexing/tree + admin UX polish (fixes #91, refs #92)

Commit message
release(v3.1.2): configurable ignore rules for indexing/tree + admin UX polish (fixes #91, refs #92)
- add ignoreRegex setting (admin config) with env override FR_IGNORE_REGEX to hide folders from tree/counts/indexing
- add snapshot preset helper for common NAS snapshot paths (fixes #91)
- unify ignore logic via FS::shouldIgnoreEntry across folder counts, tree listing, and disk usage scans
- admin: improve settings search UX (clear button) + smoother section header styling
- UI: polish header dock collapse/expand icon animations (landing/lift + reduced-motion support)
Fixes #91
Refs #92
Co-authored-by: nikp123 <[email protected]>
Added
- Indexing ignore rules (regex):
- Admin setting: Ignore paths (regex) (
ignoreRegex) — one pattern per line. - Env override:
FR_IGNORE_REGEX(locks the field when set). - Built-in “quick add” button for a common snapshot preset:
(^|/)(@?snapshots?)(/|$)(helps with NAS snapshot dirs).
- Admin setting: Ignore paths (regex) (
- Centralized ignore helper:
FS::shouldIgnoreEntry($name, $parentRel)applies built-in ignores plus optional regex patterns.
Changed
- Folder tree / listing / counts now share ignore logic:
- Replaced scattered ignore arrays with
FS::shouldIgnoreEntry(...)in folder enumeration paths.
- Replaced scattered ignore arrays with
- Disk usage scan now filters earlier:
- Uses a
RecursiveCallbackFilterIteratorso ignored entries are skipped before deeper traversal.
- Uses a
- Admin Panel UX:
- Settings search now includes a dedicated clear (X) button that appears only when a query exists.
- Section headers now render via a
.section-header-innerwrapper for cleaner layout/hover/active styles. - Audit table area now caps height and scrolls to avoid huge modal growth.
- Header dock polish:
- Adds “lift” and “land” animations for header dock icon buttons during card collapse/expand.
- Respects
prefers-reduced-motion.
Fixed
- #91: Snapshot folders (e.g.,
snapshot,@snapshots) can now be excluded cleanly from the tree, counts, indexing, and disk usage views via ignore rules. - Prevents “stuck landing” icon states by cleaning up animation classes/inline vars on
animationend.
Notes
- Ignore rules are applied frequently during tree/list/count operations. Keep patterns simple to avoid expensive regexes.
- Invalid regex lines are ignored safely (and won’t crash listing/indexing).
v3.1.2
Full Changelog
SHA-256 (zip)
2d5b01afa43b7221cd161b98ae405746494ed81c8351e388dd69eda24b197d53 FileRise-v3.1.2.zip
v3.1.1
Changes 01/17/2026 (v3.1.1)
release(v3.1.1): OIDC env overrides + configurable resumable chunk size + clearer startup logs (closes #86, closes #87, closes #90)

Commit message
release(v3.1.1): OIDC env overrides + configurable resumable chunk size + clearer startup logs (closes #86, closes #87, closes #90)
- config: allow env overrides for OIDC knobs (auto-create, group claim, admin group, Pro group prefix)
- uploads: add configurable Resumable.js chunk size (Admin + siteConfig) and honor it in upload.js
- uploads: improve relative-path folder uploads and remote staging/cleanup for non-local sources
- admin: add settings search + smoother section open/close animations
- admin: restrict Pro license actions to the registered/primary admin user
- remote storage: add FR_REMOTE_DIR_MARKER to preserve empty dirs; skip Trash on Google Drive sources
- UX: clearer “FileRise startup complete” log line + better long-running delete/restore/loading feedback
Closes #86
Closes #87
Closes #90
Added
- OIDC env overrides (in addition to config defaults):
FR_OIDC_AUTO_CREATE,FR_OIDC_GROUP_CLAIM,FR_OIDC_ADMIN_GROUP,FR_OIDC_PRO_GROUP_PREFIX. - Upload tuning (Admin): “Resumable chunk size (MB)” (0.5–100 MB).
Exported via siteConfig so the frontend can size chunks dynamically. - Remote folder marker:
FR_REMOTE_DIR_MARKER(default:.filerise_keep) to preserve empty remote folders (S3-style prefix backends). - Admin settings search: quick filter for sections/settings in the Admin panel UI.
Changed
- Resumable uploads honor configured chunk size (used by file picker + drag/drop when Resumable is available).
- Upload handling for folder paths:
- validates and sanitizes
resumableRelativePath/relativePath - supports subfolder uploads more consistently
- remote sources stage chunks in meta root (
uploadtmp/) and push via adapter, then cleanup temp folders
- validates and sanitizes
- Admin Pro license visibility/actions are restricted to the primary/registered admin (first admin in
users.txtorder). - Remote deletes / Trash behavior:
- Google Drive sources skip Trash (deletes are permanent)
- remote folder “empty checks” ignore the marker file
- Docker startup log clarity:
start.shprints a “startup complete” line and clarifies that further output is Apache logs.
Fixed
- #86: OIDC behavior is now controllable via environment variables (no code/config edits required).
- #87: Resumable chunk size is now configurable to fit proxy limits (e.g., tunnels/CDNs).
- #90: Clearer startup output + better guidance for collecting logs.
- UI responsiveness / long operations
- “Deleting…” busy states for file/folder delete confirmations and Trash restore/delete actions
- “Still loading…” toast for slow remote listings, with a fallback if a folder no longer exists
Notes
FR_REMOTE_DIR_MARKERis best-effort and primarily intended for remote backends that treat directories as prefixes (e.g., S3).- Google Drive sources do not support Trash semantics in the adapter; the UI notes this and deletes are permanent.
- Some Admin Panel strings still fall back to English; translations will continue to improve over time.
v3.1.1
Full Changelog
SHA-256 (zip)
dce7c531fd4b52dd5f0cda4b74774871ce78b9685f1010aaf01f0e44a01f0faf FileRise-v3.1.1.zip