TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
OpenFilz - Community Edition
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
OpenFilz is a modern, reactive document management API designed for scalability, security, and performance. Built on Spring Boot 4+ / WebFlux, it provides a centralized solution for handling document and folder-related operations through comprehensive REST and GraphQL APIs. Try the live demo | Swagger API Documentation Pick the guide that matches your role: • OpenFilz Web - Angular web interface for m [README 설치·사용 부분 발췌] Quick Start Examples查看完整 README ↗
OpenFilz is a modern, reactive document management API designed for scalability, security, and performance. Built on Spring Boot 4+ / WebFlux, it provides a centralized solution for handling document and folder-related operations through comprehensive REST and GraphQL APIs.
Try the live demo | Swagger API Documentation
Quick links: Features | SDKs | Architecture | Deployment | Building
Pick the guide that matches your role:
| I want to... | Guide |
|---|---|
| Use OpenFilz (browse folders, upload files, search, favorites, etc.) | User Guide |
| Install & configure OpenFilz (Docker, Helm, Keycloak, storage, feature toggles) | Installation & Administration Guide |
| Integrate with the REST / GraphQL API or use an SDK | Developer Guide |
| Decide what AI to switch on — what chat, reorganisation and auto-filing do, and how to run OpenFilz without an LLM | AI Overview |
| Understand the AI feature (config resolution, ingestion & indexing, chat pipeline, BYOK) | AI Architecture |
| Connect an AI agent (Claude Code/Desktop, n8n, custom agents) over MCP | MCP Server |
| Send documents for electronic signature (envelopes, fields, templates, seals, configuration) | e-Sign Guide |
| Run document workflows (statuses, transitions, tasks, hot folders, reminders — no external engine) | Workflows Guide |
| Contribute to the open-source codebase | Contributor Guide |
| Component | Technology |
|---|---|
| Language | Java 25 |
| Framework | Spring Boot 4+, Spring WebFlux |
| Database | PostgreSQL (R2DBC, non-blocking) |
| Migrations | Flyway |
| Storage | Local filesystem or S3/MinIO (pluggable) |
| Authentication | OIDC / JWT (Keycloak) |
| APIs | REST (OpenAPI/Swagger) + GraphQL (GraphiQL) |
| Build | Maven, Jib (Docker images) |
| Testing | JUnit 5, Testcontainers |
PUT request.POST /api/v1/tus - Create uploadPATCH /api/v1/tus/{uploadId} - Upload chunkPOST /api/v1/tus/{uploadId}/finalize - Complete uploadopenfilz.tus.enabledmultipart/form-data request, with optional metadata and target folder..zip archive.POST /mcp. Read-only by default, scoped to the calling user's permissions, and needs no LLM of its own — the agent brings its own model. See the MCP Server guide.openfilz.signature.active). When disabled, every e-Sign endpoint answers 404 and the scheduler idles.Full configuration reference: e-Sign Guide.
READER, CONTRIBUTOR, CLEANER, AUDITOR. Roles extracted from JWT claims.openfilz.security.no-auth.Flexible GraphQL endpoint at /graphql/v1 with interactive GraphiQL explorer:
type Query {
listFolder(request: ListFolderRequest!): [FolderElementInfo]
documentById(id: UUID!): DocumentInfo
count(request: ListFolderRequest): Long
listFavorites(request: FavoriteRequest!): [FolderElementInfo]
countFavorites(request: FavoriteRequest): Long
listAllFolder(request: ListFolderRequest!): [FolderElementInfo]
countAllFolder(request: ListFolderRequest): Long
listFolderPosition(request: ListFolderRequest!, documentId: UUID!): Long
listAllFolderPosition(request: ListFolderRequest!, documentId: UUID!): Long
}
PageInfo input with configurable page size, sort field, and order.16 controllers providing 40+ endpoints:
| Controller | Purpose |
|---|---|
DocumentController | Core CRUD operations, upload, download |
FileController | File-specific operations (move, copy, delete) |
FolderController | Folder management (create, list, move, copy) |
TusController | Resumable uploads (TUS protocol, 9 endpoints) |
FavoriteController | Favorites management |
RecycleBinController | Soft-delete and recovery |
DashboardController | Statistics and metrics |
ThumbnailController | Thumbnail generation and serving |
AiChatController | AI document chat (SSE streaming, conversations) |
MCP server (/mcp) | Same tools, served to external AI agents (service/mcp/**) |
AuditController | Audit trail queries |
OnlyOfficeController | OnlyOffice editor integration |
DocumentSuggestionController | Document suggestions |
SettingsController | User settings |
Full OpenAPI documentation available at /swagger-ui.html.
OpenFilz provides 5 official SDKs auto-generated from the OpenAPI specification, so every SDK stays in sync with the API. Pick your language and start building immediately. See the SDK overview for build, publishing, and CI details.
Java Blocking
Java Reactive Non-blocking
TypeScript Promise-based
Python Synchronous
C# / .NET Async + DI
Mono/Flux for Reactive Java, async/await for C# and TypeScript, context managers for Python.var client = new ApiClient().setBasePath("https://api.example.com");
client.setAccessToken("your-jwt-token");
var api = new DocumentControllerApi(client);
var response = api.uploadDocument(file, parentId, null);
var client = new ApiClient().setBasePath("https://api.example.com");
client.setBearerToken("your-jwt-token");
var api = new DocumentControllerApi(client);
api.uploadDocument(file, parentId, null)
.flatMap(uploaded -> api.getDocumentInfo(uploaded.getId()))
.subscribe(doc -> System.out.println(doc.getName()));
import { Configuration, DocumentControllerApi } from '@openfilz-sdk/typescript';
const config = new Configuration({
basePath: 'https://api.example.com',
accessToken: 'your-jwt-token',
});
const api = new DocumentControllerApi(config);
const response = await api.uploadDocument(file, parentId);
from openfilz_sdk import Configuration, ApiClient, DocumentControllerApi
config = Configuration(host="https://api.example.com",
access_token="your-jwt-token")
with ApiClient(config) as client:
api = DocumentControllerApi(client)
response = api.upload_document(file=file, parent_id=parent_id)
var host = Host.CreateDefaultBuilder()
.ConfigureApi((ctx, services, options) =>
{
options.AddTokens(new BearerToken("your-jwt-token"));
options.AddApiHttpClients(c =>
c.BaseAddress = new Uri("https://api.example.com"));
})
.Build();
var api = host.Services.GetRequiredService<IDocumentControllerApi>();
var response = await api.UploadDocument1Async(file, parentId);
var uploaded = response.Ok()!;
graph LR
subgraph Clients["Clients"]
WEB["🌐 OpenFilz Web"]
SDK["🔌 SDKs & APIs"]
end
subgraph Auth["Identity"]
KC["🔐 Keycloak\nOIDC · JWT"]
end
subgraph Core["OpenFilz Reactive API"]
direction TB
ENDPOINTS["REST · GraphQL · TUS"]
SERVICES["Document · Folder · Metadata · Audit\nSearch · WORM · Favorites · Recycle Bin"]
ABSTRACTION["Storage Abstraction"]
ENDPOINTS --> SERVICES --> ABSTRACTION
end
subgraph Data["Data Layer"]
direction TB
PG["🗄️ PostgreSQL\nR2DBC · JSONB"]
FS["📁 Local FS"]
S3["☁️ S3 / MinIO"]
end
subgraph Plugins["Optional"]
direction TB
OO["📝 OnlyOffice"]
OS["🔍 OpenSearch"]
GOT["🖼️ Gotenberg"]
AI["🤖 AI / LLM\nOllama · OpenAI"]
end
Clients -->|"OIDC"| Auth
Clients -->|"REST · GraphQL"| Core
Core -->|"JWT"| Auth
Core --> Data
Core -.-> Plugins
classDef clientBox fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e3a5f
classDef authBox fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#4c1d95
classDef coreBox fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d
classDef dataBox fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#78350f
classDef pluginBox fill:#f1f5f9,stroke:#94a3b8,stroke-width:1px,stroke-dasharray:5 5,color:#475569
class WEB,SDK clientBox
class KC authBox
class ENDPOINTS,SERVICES,ABSTRACTION coreBox
class PG,FS,S3 dataBox
class OO,OS,GOT,AI pluginBox
storage.type=local) and MinIO/S3 (storage.type=minio) via configuration, without code changes.sequenceDiagram
autonumber
participant Client as 🖥️ Client Application
participant Gateway as 🔐 Identity Provider<br/>(Keycloak)
participant API as ⚡ OpenFilz API<br/>(Spring WebFlux)
participant Storage as 📦 Object Storage<br/>(S3 / MinIO / Local)
participant DB as 🗄️ PostgreSQL<br/>(R2DBC)
rect rgb(240, 248, 255)
Note over Client, Gateway: Authentication
Client->>+Gateway: Authenticate (OIDC)
Gateway-->>-Client: JWT Access Token
end
rect rgb(245, 250, 245)
Note over Client, DB: API Request (Non-blocking)
Client->>+API: REST / GraphQL + Bearer Token
API->>Gateway: Validate JWT (JWKS)
Gateway-->>API: Token Valid
API->>+Storage: Store / Retrieve File
Storage-->>-API: OK
API->>+DB: Persist Document Metadata (JSONB)
DB-->>-API: OK
API->>+DB: Append Audit Log (Immutable)
DB-->>-API: OK
API-->>-Client: Response (JSON)
end
All deployment configurations are located in the deploy/ directory. See the deployment README for architecture diagrams and details.
# Build Docker image
docker build -t ghcr.io/openfilz/openfilz-api:latest openfilz-api/
# Or using Jib (no Docker daemon required)
mvn clean install -Pkube -pl openfilz-api -am
Located in deploy/docker-compose/. A Makefile automates service composition and frontend config generation.
cd deploy/docker-compose
cp .env.example .env
make up # Base services (PostgreSQL, API, Web)
make up-auth # + Keycloak authentication
make up-minio # + MinIO S3 storage
make up-onlyoffice # + OnlyOffice document editing
make up-fulltext # + OpenSearch full-text search
make up-demo # All CE features (no auth) for demo
make up-full # All services (auth, MinIO, OnlyOffice, OpenSearch, thumbnails)
Multiple compose overlay files for different configurations:
| File | Purpose |
|---|---|
docker-compose.yml | Core services (PostgreSQL, API, Web) |
docker-compose.auth.yml | Keycloak authentication |
docker-compose.minio.yml | MinIO S3 storage |
docker-compose.onlyoffice.yml | OnlyOffice document editing |
docker-compose.fulltext.yml | OpenSearch full-text search |
docker-compose-thumbnails.yml | Gotenberg thumbnail generation (PDF, Office documents) |
docker-compose-gotenberg-dev.yml | Gotenberg standalone for local development |
See the Docker Compose README for full documentation on environment variables, combinations, and troubleshooting.
Helm charts available in deploy/helm/ for openfilz-api and openfilz-web with templates for:
Single compose file in deploy/docker-compose/dokploy/ for Dokploy platform deployment.
See the Installation & Administration Guide for full deployment instructions or the Contributor Guide for development setup with Testcontainers.
# Prerequisites: Java 25, Maven 3.x, Docker
# Build all modules
mvn clean install
# Build only API module
mvn clean install -pl openfilz-api -am
# Run API (port 8081)
cd openfilz-api && mvn spring-boot:run
openfilz-core/
├── openfilz-api/ # Core DMS service (REST + GraphQL)
│ ├── src/main/java/org/openfilz/dms/
│ │ ├── controller/ # REST & GraphQL controllers
│ │ ├── service/ # Business logic
│ │ ├── repository/ # R2DBC repositories
│ │ ├── entity/ # Database entities
│ │ ├── dto/ # Request/Response DTOs
│ │ └── config/ # Spring configurations
│ └── src/main/resources/
│ └── graphql/ # GraphQL schema
├── openfilz-sdk/ # Official SDKs (auto-generated from OpenAPI)
│ ├── openfilz-sdk-java/ # Java SDK (blocking, OkHttp)
│ ├── openfilz-sdk-java-reactive/# Java Reactive SDK (WebClient, Mono/Flux)
│ ├── openfilz-sdk-typescript/ # TypeScript SDK (Axios, Promise-based)
│ ├── openfilz-sdk-python/ # Python SDK (urllib3, Pydantic)
│ ├── openfilz-sdk-csharp/ # C# SDK (.NET 8+, async + DI)
│ └── openfilz-sdk-samples-test/ # SDK integration tests
└── deploy/
├── docker-compose/ # Docker Compose files & Makefile
│ └── dokploy/ # Dokploy deployment
└── helm/ # Kubernetes Helm charts
OpenFilz Community Edition is dual-licensed:
AGPL-3.0 (GNU Affero General Public License v3) - See LICENSE for the full text. This is a copyleft license: if you modify OpenFilz and make it available over a network, you must release your modifications under the same license.
Commercial License - For businesses that cannot comply with the AGPL-3.0 copyleft requirements (e.g., SaaS providers, proprietary integrations, or organizations that cannot disclose source code), a commercial license is available. Contact [email protected] or visit openfilz.com/enterprise for details.