DeepFellow DOCS

Changelog

What changed in each DeepFellow release.

This page lists DeepFellow releases starting with 0.32.0.

0.36.0 – October 21, 2026

This release tightens the default network exposure of CLI installs, lets vector stores feed the knowledge graph automatically, and versions the documentation by release.

Highlights

  • Services published only where you need them: deepfellow server install now publishes MongoDB and the --dev ports on 127.0.0.1 only, the new --bind-address option publishes the API port on one address, and DeepFellow Infra now sends security headers and Cache-Control: no-store on its API responses. See DeepFellow Server.

  • Vector stores feed the knowledge graph: The new knowledge_graph vector store policy ingests every file the vector store finishes processing into the project's knowledge graph, and ontology discovery now warns about or merges entity types that mean the same thing through graph.ontology_discovery_semantic_fold_mode. See Knowledge Graph.

    The policy needs the knowledge graph enabled on DeepFellow Server and a reachable RabbitMQ. graph.ontology_discovery_semantic_fold_mode defaults to warn, so types are merged only after you set it to merge.

  • Installs that warn before they fail: deepfellow suite install prints the estimated VRAM of its template's models before it asks for anything, deepfellow server install warns that a local Qdrant does not suit large data volumes, and adding a custom vLLM model rejects a Hugging Face repository that does not exist or that DeepFellow Infra cannot access. See DeepFellow Suite.

    The VRAM estimate covers model weights only. The context window and runtime overhead come on top.

  • More stable DeepFellow Server: The server image no longer crashes at startup with exit code 132 on CPUs without AVX-512, Milvus no longer fails with DEADLINE_EXCEEDED when you create a vector store or start the server, and cancelled or unreadable files no longer leave orphaned vectors or retry in vain. See Using Vector Stores.

  • Documentation versioned by release: The documentation has a version dropdown with the current 0.36.x release and the archived 0.33.x, 0.34.x, and 0.35.x trees, search covers only the version you read, and the API reference matches DeepFellow Server 0.36.0. See Welcome to DeepFellow Docs.

  • Newer model engines: New installs default to vLLM v0.32.0, SGLang v0.5.22, and llama.cpp b11783, and the Ollama, vLLM, SGLang, and llama.cpp model catalogs are refreshed. See DeepFellow Infra Web Panel.

    Installed models keep their image until you update them with the Update action or the image version field.

Also in This Release

  • Alias targets in the model list: GET /v1/models with additional_data=true now reports props.alias_of, the models an alias points to. See Listing Models.
  • Anonymization of models called by alias: The df_anonymize plugin now also anonymizes requests to a listed model that you call by its DeepFellow Infra alias. See Plugins.
  • Plain-text transcriptions: POST /v1/audio/transcriptions with response_format=text now returns plain text for every backend, including backends that answer with JSON. See Speech to Text.
  • Form defaults for models installed through the API: A model that you install or edit through the API with partial settings now gets the same defaults as the DeepFellow Infra Web Panel form, and existing models keep their settings until you edit them.
  • Masked Doc Chunker API key: The infra_api_key field of Doc Chunker is now a password field, masked in the DeepFellow Infra Web Panel. See Doc Chunker.
  • Stable operation IDs: Every DeepFellow Server API operation now has an explicit snake_case operationId, so generated API clients keep their method names across releases.
  • --yes answers every question: --yes now applies to every yes/no question of the CLI, including server * delete and server project archive. See DeepFellow Server.
  • RabbitMQ settings stay in config.json: deepfellow server env set no longer writes DF_RABBITMQ_* to .env when DeepFellow Server manages the RabbitMQ settings, and points you to deepfellow server config set. See DeepFellow Server.
  • Mesh in the infra connect help: The help of deepfellow infra connect and disconnect now calls the network a Mesh. See DeepFellow Infra.
  • Changelog page: The documentation now has this page.

Breaking Changes

MongoDB and --dev ports listen on 127.0.0.1 only: After deepfellow server install, the bundled MongoDB and the ports that --dev publishes are no longer reachable from other hosts. To publish them on all interfaces again, run deepfellow server env set INTERNAL_BIND_ADDRESS "". See DeepFellow Server.

$ in container environment values is escaped: DeepFellow Infra now passes $ literally, so pa$word reaches the container intact and ${VAR} is no longer expanded. Existing containers pick this up on their next start, and the bge-m3, lemmatizer, and Doc Chunker containers are recreated once.

0.35.0 – October 15, 2026

This release makes the Nightshift worker a required part of every install, rebuilds the knowledge graph on FalkorDB, and covers fine-tuning from a project's documents to a served model.

Highlights

  • Background jobs that are never lost: Vector store file processing, Metadata Expansion, Document Summarization, knowledge graph ingestion, ontology discovery, webhook delivery, and embedding migrations now always run on the Nightshift worker through RabbitMQ, which deepfellow server install and suite install always set up, and the new deepfellow server nightshift commands and the Queues page manage it. See Nightshift Background Jobs.

  • Knowledge graph on FalkorDB: DeepFellow Server now builds knowledge graphs on FalkorDB and GraphRAG-SDK, drafts a per-project ontology from sampled files with POST /v1/graph/ontology/propose, ingests files concurrently and without duplicates, and answers questions with POST /v1/graph/completion. See Knowledge Graph and Knowledge Graph Ontology.

  • Fine-tuning from documents to a served model: The new Finetune service in DeepFellow Infra trains LoRA adapters, vLLM serves them on their base model through adapter_id, and scheduled fine-tuning pipelines in DeepFellow Server generate training data from a project's vector stores, evaluate each adapter, and promote it only when it beats the version in service. See Fine-Tuning Pipelines.

    The default blue_green serving strategy keeps two copies of the base model in GPU memory during a switch. Pipelines need a df-finetune worker with eval support.

  • Documents from upload to search: Doc Chunker v2.4.0 now converts every file as a job of up to two hours, POST /v1/uploads accepts large files in parts, the knowledge_compression policy adds file summaries to search, and POST /v1/migrate moves a project's vector stores to a new embedding model while search keeps working. See Doc Chunker, Uploading Large Files, and Vector Store Embedding Migration.

  • Safer defaults: DeepFellow Server sends security headers and forbids caching of API responses, DeepFellow Infra compares keys in constant time and refuses sub-infras without a mesh key, GET /metrics rejects requests without credentials, and the CLI writes secret files with owner-only permissions and moves MongoDB off the root account. See Security and Control.

  • GPU memory shared by priority: vLLM and SGLang models now reserve GPU memory with gpu_priority, a share of the free memory set with a slider that previews the allocation, and two installs started together can no longer get more memory than is left. See DeepFellow Infra Web Panel.

  • One-click model and service updates: The DeepFellow Infra Web Panel has an Update action, and deepfellow infra model update and infra service update move a model or service to the newest image of its variant, with a warning when that image needs a newer NVIDIA driver. See Updates.

  • Observability across the stack: Optional Sentry error tracking, LLM token usage in OpenTelemetry, per-model usage and capacity, available_capacity in GET /info, X-Error-Id on unhandled DeepFellow Infra errors, and Nightshift metrics and health checks show what the platform is doing. See Observability.

Also in This Release

  • Multiple webhooks per project: A project now has any number of webhook endpoints, each with its own URL, secret, and event types, managed through /v1/organization/projects/{project_id}/webhooks and the DeepFellow Server Web Panel. See Webhooks.
  • Leave an organization: DELETE /v1/organization/users/me lets a user leave an organization without an owner's help, unless they are its only owner. See Authorization.
  • Fine-tuning in the Web Panel: DeepFellow Server's Web Panel now uploads training files, creates and cancels fine-tuning jobs, and registers fine-tuning workers, and fine-tuning jobs accept OpenAI's metadata. See DeepFellow Server Web Panel.
  • Finetune adapters listed: GET /admin/services/{service_id}/adapters and the Finetune service page list the LoRA adapters of a Finetune service. See Finetuning.
  • Adapter registry found automatically: DeepFellow Infra now resolves the df-finetune adapter registry from the installed Finetune service, and the adapter_registry_url setting is removed from config.json automatically.
  • Vector store expiry enforced: A vector store's expires_after policy now deletes the store when it expires, activity resets the countdown, and expires_at is computed correctly. See Using Vector Stores.
  • Summaries in the document's language: Document summaries are now written in the document's own language, reused when you summarize again with the same settings, and flagged truncated when the document is too long to summarize in full. See Document Summarization.
  • New summarization and image description defaults: New installs default summarization_model to gemma4:12b and doc_chunker_picture_description_model to gemma4:e4b, which frees about 4 GB of VRAM. See Configuration.
  • Metadata Expansion limits and robustness: Metadata Expansion requests are limited to 1000 documents and 50 fields, the prompt ignores instructions inside the document, and answers that are not JSON objects fail with a clear error. See Metadata Expansion.
  • Models in the Server Configuration card: The DeepFellow Server Web Panel now edits metadata_expansion_model and summarization_model. See DeepFellow Server Web Panel.
  • Document Summarization button is back: The project page shows the Document Summarization button again. See Document Summarization.
  • Organizations page paginated: The Organizations page of the DeepFellow Server Web Panel now lists every organization, 20 per page, with a filter by name. See DeepFellow Server Web Panel.
  • Content type on files: Uploaded files now report content_type, taken from the upload or guessed from the filename once.
  • Image generation from tools works again: Image generation from toolboxes and /v1/responses no longer fails before the request reaches DeepFellow Infra. See Image Generation.
  • Downloads with non-Latin filenames: GET /v1/files/{file_id}/content no longer fails with a 500 for a filename with Polish letters, an en dash, or a double quote.
  • Files without text fail at once: A file with no extractable text now fails on its first attempt with invalid_file instead of retrying five times. See Using Vector Stores.
  • Failed vector inserts reported: A file whose vectors were not inserted is now marked failed and retried instead of completed, and a completed retry clears the previous last_error.
  • Vector store deletes without orphans or errors: Deleting a vector store or one of its files during indexing no longer leaves orphaned vectors or logs errors.
  • Graph ingestion status fixes: POST /v1/graph/files/{file_id}/ingest returns completed when there is nothing to ingest and 503 when RabbitMQ is down, and ontology warnings stay with their own documents. See Knowledge Graph.
  • /v1/responses usage covers tool calls: usage now counts the tokens of every model call made while running server-side tools.
  • Dependency failures return 502 or 504: Errors from DeepFellow Infra, Doc Chunker, and the reranker now return 502 or 504 instead of 500, and a wrong Infra API key on POST /v1/vector_stores returns 500 instead of a raw 401.
  • RabbitMQ connection holds: DeepFellow Server connects to RabbitMQ in the background with retries, creates every Nightshift queue it checks, and no longer drops the connection when a queue is missing. See Nightshift Background Jobs.
  • Fixed Nightshift queue names: The Nightshift queue names are no longer configurable, and their settings are ignored if set.
  • MCP fixes in DeepFellow Server: MCP tools no longer report false errors for servers without prompts or resources, and the MCP toolbox endpoints no longer send a second response after the stream ends. See MCP Servers.
  • Repeated headers kept: Proxied responses and the anonymization plugin no longer drop repeated HTTP headers such as several Set-Cookie.
  • Default organization reassigned: Removing a user from an organization or deleting it now moves the user's default organization to another one they belong to. See Authorization.
  • Uniform time fields: DeepFellow Server now stores every time field as a BSON date, and several timestamps are no longer frozen at process startup.
  • Commit in GET /info: DeepFellow Infra and DeepFellow Server report the commit of the running image in GET /info.
  • No hang after empty proxied responses: DeepFellow Infra and DeepFellow Server no longer hang at high CPU after proxying a second response without a body, such as a 204.
  • Clearer startup and environment errors: The unsupported vector database error lists the supported providers, and example.env reads DF_VECTOR_DATABASE__SEARCH__*_NUM_RESULTS correctly. See Configuration.
  • Toolbox tool update schema: The API reference documents the real update body of POST /toolboxes/{toolbox_id}/tools/{tool_id}.
  • Tracing and metrics fixes: Failed spans now get ERROR status and request attributes, unhandled 500 responses appear in http_server_request_duration_seconds, time to first token reports real values, gen_ai_server_tokens_per_second covers every chat route, and gen_ai.usage.output_tokens replaces response.tokens. See Observability.
  • keep_alive for speaches-ai: The speaches-ai install form has a keep_alive field for how long an idle speech model stays loaded. See Text to Speech.
  • Container-name suffix: A container-name suffix lets two DeepFellow Infra instances share a Docker host, and new installs get a random one. See Configuration.
  • Quantization dropdown: The quantization field of vLLM models, including custom ones, is now a dropdown of the supported values. See Custom Models.
  • Vision and audio support in the model list: The model list now reports whether each model accepts image and audio input. See Listing Models.
  • Refreshed model catalogs: New installs default to llama.cpp b11641, vLLM v0.31.0, and SGLang v0.5.21-cu130, and the vLLM and SGLang catalogs now cover the top 200 models by likes. See Supported Models.
  • No Test action for LoRA models: The DeepFellow Infra Web Panel no longer offers Test for LoRA models. See DeepFellow Infra Web Panel.
  • MCP across the Mesh: An MCP server installed on a child Infra is now usable through its parent, and an MCP server that fails three health checks in a row is hidden until it recovers. See MCP Servers.
  • Fixed MCP catalog entries: The brave-search, web-search, and DuckDuckGo MCP servers now install and list their tools. See Websearch.
  • extra_args with JSON: vLLM and SGLang models with JSON in extra_args, such as --speculative-config, now start correctly. See Custom Models.
  • Remote models report their real endpoints: Embedding, speech, and image models of remote services now list their own endpoints in props.endpoints, and remote API URLs work with or without a trailing slash or /v1. See Listing Models.
  • vLLM on ARM without a GPU: vLLM is no longer reported as unsupported on ARM hosts without a GPU. See Hardware Requirements.
  • Stable Diffusion Next on macOS: The services list now shows upfront that Stable Diffusion Next does not support macOS. See Image Generation.
  • Accurate Ollama VRAM estimates: Ollama VRAM estimates now use each model's own kv_cache_type.
  • Clear errors for quantized custom Ollama models: Installing a custom Ollama model with a quantization option on a GGUF source now fails before any download with a clear error. See Custom Models.
  • Safer commands inside containers: Commands DeepFellow Infra runs inside a service container now pass each value as one argument, so file paths with spaces work.
  • Background failures logged: Failures of the parent Mesh connection, the Ollama External model sync, and the MCP tools fetch now appear in the logs. See Logs and Status.
  • Configuration retries reapply: Retrying PUT /admin/config after a partial failure now reapplies what failed.
  • Cancelling updates waits for the rollback: Cancelling a service update now keeps the service in its installing state, labelled Rolling back, until the automatic rollback finishes. See DeepFellow Infra Web Panel.
  • suite install --allow-rootful: deepfellow suite install --allow-rootful runs non-interactively on a host with rootful Docker, and the Docker check now runs before the admin prompts. See DeepFellow Suite.
  • Rootful Docker from DOCKER_HOST: The rootful Docker warning now also covers a socket from DOCKER_HOST or the active docker context. See DeepFellow Infra.
  • Model install configuration in the CLI: deepfellow infra model install --spec takes a model's install configuration as JSON. See DeepFellow Infra.
  • No qwen3.5:4b in the workspace template: deepfellow suite install no longer installs qwen3.5:4b. See DeepFellow Suite.
  • config get prints key: value: deepfellow server config get and infra config get now print key: value lines instead of raw JSON. See DeepFellow Server.
  • Updates run with the new CLI: deepfellow update now runs the Infra and Server steps with the freshly updated CLI. See Updates.
  • server update --yes: deepfellow server update --yes restarts without asking, and --local-image also pins the Nightshift image. See DeepFellow Server.
  • nightshift queue against newer servers: deepfellow server nightshift queue no longer crashes with KeyError: 'nightshift_enabled'. See DeepFellow Server.
  • Clearer API reference types: The API reference now shows each field's real type or enum values and full model type names, and the API playground renders enum fields as a select.

Breaking Changes

Nightshift and RabbitMQ are required: DeepFellow Server no longer processes background jobs without the Nightshift worker, which needs RabbitMQ and the server's storage. Update the CLI first, then run deepfellow server update, which offers to add both. See Nightshift Background Jobs.

Metrics and Infra credentials are required: DF_METRICS_USERNAME, DF_METRICS_PASSWORD, and DF_INFRA__API_KEY must be set. Installs created with a CLI older than 0.2.1 need deepfellow server install again before the update. See Configuration.

RabbitMQ settings move to config.json: DF_RABBITMQ_URL only seeds the new rabbitmq section, which you change afterwards through PUT /admin/config. See Configuration.

Doc Chunker is always used: The doc_chunker_use setting and the built-in text extraction are removed, so a file that Doc Chunker cannot read fails with its status. See Doc Chunker.

Knowledge graph API replaced: The /v1/graph/episodes endpoints of the earlier Graphiti backend are removed, and graph data from that backend is not migrated, so ingest your files again. num_results is ignored on POST /v1/graph/search and /completion. See Knowledge Graph.

Project webhooks move to their own endpoints: webhook_url and webhook_secret are no longer accepted or returned on the project endpoints. Use /v1/organization/projects/{project_id}/webhooks. See Webhooks.

Metric names and labels changed: DeepFellow Server's metric labels, buckets, and names changed, so check your dashboards and alerts. See Observability.

vLLM and SGLang extra_args reach the container as entered: Each key and value is now one argument, so check extra_args that combine a flag and its value or rely on quotes. See Custom Models.

alias adds a name, rename replaces it: The per-model alias option now registers a second name, and the old meaning is called rename. See DeepFellow Infra Web Panel.

SGLang defaults to CUDA 13: The default SGLang image needs an NVIDIA driver R580 or newer. On an older driver, select v0.5.19-cu129. See DeepFellow Infra Web Panel.

Sub-infras need a mesh key: A sub-infra no longer joins the Mesh of an Infra without a mesh key, so set one to accept sub-infras. See Configuration.

Finetune replaces the custom deepfellow-finetune model: The custom deepfellow-finetune model is removed on the first start after the upgrade, and the Finetune service now authenticates with adapter_registry_secret. See Finetuning.

Coqui TTS removed: DeepFellow Infra no longer manages Coqui TTS, so remove its containers manually.

CLI 0.34.1 – September 25, 2026

This DeepFellow CLI patch adds infra model list and Project webhook options, and fixes .env quoting and Docker error handling.

Also in This Release

  • List models on a service: deepfellow infra model list shows the models available on an Infra service with their ID, type, size, description, and installed status, and --installed or --no-installed filters the list. See DeepFellow Infra.

  • Project webhook options: deepfellow server project create and update now accept --webhook-url and --webhook-secret, and a Project's webhook_secret appears masked as ***** when you display the Project. See DeepFellow Server.

  • Template choice for suite install: deepfellow suite install now accepts --template with a built-in template name (default workspace) and passes it to both the Infra and Server installs. See DeepFellow Suite.

    deepfellow suite install --template accepts only a built-in template name that both Infra and Server provide. A path to a template file fails, unlike deepfellow infra install --template and deepfellow server install --template.

  • Post-start actions in suite install: deepfellow suite install now runs every post_start_actions entry of the selected Server template instead of always running a single admin creation. See DeepFellow Suite.

  • Spinner during service and model installs: deepfellow infra service install and deepfellow infra model install now show an "Installing service/model ..." spinner from the moment the install starts, so the CLI no longer looks frozen before the first progress bar appears. See DeepFellow Infra.

  • Help listing for command groups: A command group such as deepfellow infra or deepfellow server organization now prints its --help listing when you run it without a subcommand, instead of a "Missing command." error. See DeepFellow CLI Reference.

  • Docker checks before more commands: start, stop, restart, update, logs, ssl-on, env set, and infra connect and disconnect now check up front that Docker is installed, running, and usable, including the docker compose plugin, and print a clear DeepFellow error instead of a raw Docker error.

  • .env values with special characters: Values that contain a backslash, a double quote, or a newline, such as the DF_PLUGINS_SETUP JSON, are no longer corrupted when an install re-reads and re-writes a config or secrets file, and a line that is not KEY=VALUE now logs a warning instead of being dropped silently.

  • MongoDB prompt order in server install: The interactive MongoDB setup now asks for the username and password before the database name and connection URL, which removes the ambiguity about whether credentials belong in the URL. See DeepFellow Server.

  • Readable prompts in infra install: deepfellow infra install now labels its prompts "Name", "URL", "Admin API Key", "Infra API Key", and "Mesh Key" instead of raw names such as DF_NAME or DF_MESH_KEY, and the .env keys stay the same. See DeepFellow Infra.

Server 0.34.1 – September 17, 2026

This DeepFellow Server patch fixes how vector store search reports a missing reranker model.

Also in This Release

  • Clear error for a missing reranker model: POST /v1/vector_stores/{vector_store_id}/search now returns 404 with "Reranker model not found" instead of a 500 error when the configured reranker model is missing on Infra, and the API reference documents the response. See Vector store search API reference.

    If your client checks for status 500 when vector store search fails because the reranker model is missing, check for 404 instead.

0.34.0 – September 16, 2026

This release adds batch Document Summarization, replaces MinIO with SeaweedFS for Milvus object storage, and makes failed or unwanted service installs and updates easier to recover from.

Highlights

  • Document Summarization: POST /v1/summarization/summarize summarizes batches of uploaded documents in the background, with configurable summary length and style, and the DeepFellow Server Web Panel has a new Document Summarization page. See Document Summarization.

  • SeaweedFS replaces MinIO for Milvus: deepfellow server install now sets up Milvus object storage with SeaweedFS's S3 gateway, because Docker Hub no longer serves the pinned MinIO image, which made Milvus installs fail. See DeepFellow Server.

    An existing install with data in the old MinIO container is offered an automatic migration, or the option to keep the old container, the next time deepfellow server install or deepfellow suite install runs against that directory. If the old container is still running, the installer asks you to stop it with deepfellow server stop first.

  • Cancel an in-progress service install or update: The DeepFellow Infra Web Panel has a new Cancel button for a service that is installing or updating, and POST /admin/services/{service_id}/cancel does the same through the API, stopping the Docker work and returning the service to a clean state that accepts a retry. See DeepFellow Infra Web Panel.

  • Failed service updates roll back: When editing a service's settings fails, DeepFellow Infra now reverts to the previous working configuration and reloads its previously installed models, instead of leaving the service uninstalled. See DeepFellow Infra Web Panel.

    DeepFellow Infra reports the update as failed only after the revert finishes. If the revert fails too, the service is fully uninstalled and needs a fresh install instead of a retry.

  • Background jobs run without RabbitMQ: With DF_NIGHTSHIFT_ENABLED set to false, the default, Metadata Expansion and Document Summarization process documents in-process instead of through RabbitMQ, and POST /v1/metadata/expand no longer returns 503. See Nightshift Background Jobs.

    In-process jobs get a single attempt per document, with no broker-driven retry or backoff. Call a job's retry endpoint to try a failed document again.

  • Cancel Metadata Expansion jobs: POST /v1/metadata/jobs/{job_id}/cancel, or the new Cancel button on the Metadata Expansion page of the DeepFellow Server Web Panel, permanently stops an active or paused job, for example after you start the same batch twice by mistake. See Metadata Expansion.

Also in This Release

  • OTLP log export reconfiguration no longer blocks the API: Reconfiguring OTLP log export through /admin/config no longer blocks the DeepFellow Infra API for up to about 30 seconds when the collector is unreachable, and a failed reconfiguration no longer permanently disables log-export retries. See Observability.
  • OTLP log export shuts down cleanly: DeepFellow Infra now shuts down OTLP log export when the app exits, giving buffered log records a chance to flush. See Observability.
  • Clearer startup errors in DeepFellow Server: DeepFellow Server now logs a clear message when it fails to connect to a dependency at startup, such as RabbitMQ, MongoDB, or the vector database, naming the dependency, its configured target, and the environment variable to check.
  • suite install no longer crashes on webhook_url: deepfellow suite install and deepfellow server install --template no longer crash with an unhandled TypeError at the workspace-creation step against a server that returns a webhook_url field on projects. See DeepFellow Suite.
  • Failed CLI requests no longer overwrite saved config: deepfellow infra service list, deepfellow infra service uninstall, and deepfellow infra model uninstall no longer save a resolved server URL or admin API key to the local config and secrets files until a request made with them succeeds, so a wrong --url or a rejected API key no longer overwrites a working configuration. See DeepFellow Infra.

Breaking Changes

DF_RABBITMQ_ENABLED is now DF_NIGHTSHIFT_ENABLED: DeepFellow Server 0.34.0 does not read the old name. If your .env sets DF_RABBITMQ_ENABLED=true, rename it to DF_NIGHTSHIFT_ENABLED=true when you upgrade. Otherwise Nightshift stays off, and jobs run in-process with a single attempt. See Nightshift Background Jobs.

0.33.0 – September 11, 2026

Vector store file batches with webhooks, Markdown output for converted files, and a resumable deepfellow suite install lead this release, which also changes how DeepFellow Server calls Doc Chunker.

Highlights

  • Attach many files to a vector store as one job: POST /v1/vector_stores/{vector_store_id}/file_batches ingests uploaded files as a single trackable, cancellable job, and a project with a webhook_url receives a signed, best-effort webhook when the batch completes, fails, or is cancelled. See Using Vector Stores.

  • Get a file's text as Markdown, and choose how images appear: The new GET /v1/files/{file_id}/text returns an uploaded file's text, output_format=md keeps headings, tables, and lists, image_mode sets how pictures appear (including links served by the new GET /v1/files/{file_id}/assets/{name}), and image_processing_mode now also applies to vector store ingestion. See Doc Chunker.

    The Doc Chunker install form in the Infra Web Panel now asks for one inference gateway address and an optional API key for image descriptions and audio transcription, and adds LibreOffice conversion timeout and parallel image descriptions settings. The picture-description mode selector, the HuggingFace preset and local options, and the HuggingFace token field are gone. A Doc Chunker installed with the old form keeps its old settings until you reinstall or edit it.

  • Extract metadata from uploaded documents in the background: POST /v1/metadata/expand starts a job that fills user-defined fields such as author or title, reading embedded PDF and DOCX properties first and asking an LLM for the rest, and GET /v1/metadata/jobs/{job_id} returns the job. See Metadata Expansion.

    Metadata expansion needs RabbitMQ. RabbitMQ is optional and off by default (DF_RABBITMQ_ENABLED=false), and POST /v1/metadata/expand returns 503 while it is off. A nightshift worker process runs the jobs.

  • Resume deepfellow suite install where it stopped: deepfellow suite install now asks for all infra and server configuration up front and saves its progress after each of its 14 steps, and --resume continues from the first unfinished step, re-checks the finished ones, repairs what drifted, and reuses the admin credentials saved by the first run. See DeepFellow Suite.

  • Manage toolboxes and MCP servers from the CLI: deepfellow server toolbox and deepfellow server tool create, list, get, update, and delete Toolboxes and their tools, and deepfellow infra mcp adds, installs, lists, uninstalls, and removes MCP servers on Infra. See DeepFellow Server.

  • Refresh model catalogs without a redeploy: An admin calls POST /admin/services/{service_id}/catalog/refresh, or uses the Refresh catalog action in the model list, to reload the vLLM, llama.cpp, and SGLang model lists from HuggingFace, and Claude and Google services now refresh from the provider's live model listing. See DeepFellow Infra Web Panel.

    Runtime refresh works only when the static/ directory is writable. It shares one HuggingFace rate-limit budget across vLLM, llama.cpp, and SGLang, and it refuses to write a catalog that shrank suspiciously compared to the one it replaces.

  • Cancel and retry installs without leftovers: Cancelling an install stops its docker compose process, a cancelled or failed MCP model install removes its container, and retrying an install that is still running waits for its real outcome, while deepfellow infra service install and deepfellow infra model install retry every 10 seconds for up to 24 hours instead of aborting with an "already installing" error.

  • Look up every setting and response body: A new Configuration guide lists every DeepFellow Server and Infra .env variable with its config.json field, description, and default, and the API reference now documents response bodies that previously had no schema. See Configuration.

Also in This Release

  • Doc Chunker settings show the speech-to-text model: The admin WebUI's Doc Chunker settings show doc_chunker_picture_description_model (default granite3.2-vision:2b) and the new doc_chunker_stt_model (default Systran/faster-whisper-large-v3). See Doc Chunker.
  • Image mode for metadata expansion: POST /v1/metadata/expand accepts image_processing_mode (ignore or description, default ignore) for its fallback document conversion, and logs a warning when the cached conversion used a different mode or Doc Chunker is disabled. See Doc Chunker.
  • require_approval is validated on update: Updating an MCP, Infra MCP, or web search tool with an invalid require_approval value returns 400 instead of storing it. See Using Tools.
  • MCP proxy errors are logged: Infra MCP and web search tool proxies log the underlying error when a call to a remote MCP server fails, so a misbehaving server shows up in the Server logs.
  • Mismatched image mode warning on file text: GET /v1/files/{file_id}/text logs a warning when the requested image_processing_mode differs from the mode recorded in the file's cached conversion.
  • additional_data is described in the OpenAPI spec: The additional_data query parameter on GET /v1/models and GET /v1/models/{model_id} is now described in the OpenAPI spec: true adds a props object and makes the response not OpenAI-compatible, while the default false returns the plain OpenAI shape. See Listing Models.
  • MCP health checks emit OpenTelemetry metrics: MCP server health checks and OAuth token refreshes emit OpenTelemetry metrics (mcp.healthcheck.count, mcp.healthcheck.duration, and mcp.oauth.refresh.count) and spans when otel_tracing_enabled is on.
  • Servable-repo check for custom vLLM models: Adding a custom vLLM model by HuggingFace ID checks up front that the repo is servable, and returns a clear error for GGUF or quantized repos, LLM repos without a usable chat template, and reranker repos with an unsupported architecture.
  • Longer default proxy timeout: The default standard_proxy_timeout_seconds is now 600 seconds instead of 300, and a value already saved in config.json stays as it is. See Custom Service.
  • Registry tokens apply immediately: Changing the Civitai, Hugging Face, or adapter registry token through PUT /admin/config or the settings page takes effect for model downloads immediately, without a restart.
  • Custom endpoints work through a parent node: A custom endpoint installed only on a child node in a node mesh works through the parent node's proxy.
  • MCP transport mismatch fixed: An MCP server that works over only one transport is re-registered on the transport its health check found working, instead of returning empty tools and results.
  • Failed installs keep adopted containers: A failed install that adopted an existing container leaves that container running.
  • Adopted containers respond to stop, restart, and uninstall: Stopping, restarting, or uninstalling a service whose container was adopted acts on that container.
  • Install guard and stuck-setup timeout: A second install or update request for a service instance that is already installing meets the "already installing" guard, and the install-progress endpoint returns 504 instead of hanging when setup is stuck.
  • Editing catalog models no longer fails: Editing a catalog model's install-time options (for example gpu_memory_utilization) or an installed custom model's definition works for services such as vLLM, instead of failing with a 500 error.
  • Better reranker and embedding discovery: The vLLM and SGLang reranker and embedding catalogs find models through HuggingFace's pipeline_tag as well as by name (for example BAAI/bge-m3), skip cross-encoders trained for other tasks, and drop a candidate whose lookup fails instead of listing made-up data.
  • Plain-text admin password warning: deepfellow suite install warns once per run that its state file stores the admin password in plain text, which a successful run removes and an abandoned run leaves for you to delete.
  • Template prompts are asked up front: infra install --template and server install --template ask for every post-start prompt up front, before running any action: admin credentials for server.create_admin, and connection and spec-field prompts for each model and service install.
  • Confirmation before discarding an unfinished run: deepfellow suite install without --resume asks before discarding the progress of an unfinished run (--yes skips the prompt), declining continues that run, and --non-interactive starts fresh.
  • Quieter --resume output: deepfellow suite install --resume skips the repeated Updated .../config. and Updated .../secrets. messages before each Ollama install step.
  • No upfront summary on --resume: deepfellow suite install --resume prints no upfront summary of completed steps, because each step reports "already completed, skipping" as it is reached.
  • Clear message for a corrupted state file: A corrupted workspace or api_key field in the suite install state file stops --resume with a message to remove the file and start fresh.
  • Atomic state file writes: The suite install state file is written atomically, so a crash or Ctrl+C mid-write leaves no corrupted file.
  • null completed_steps is tolerated: deepfellow suite install --resume treats a null completed_steps field in the state file like a missing one.
  • Warning for ignored admin credentials: deepfellow suite install warns when an admin name, email, or password you supplied by flag or at the prompt is ignored because an admin with that email already exists.
  • --debug shows Docker errors: deepfellow suite install --debug shows the specific Docker error when infra or server start fails, instead of a generic message.
  • Warning for an unreadable state file: deepfellow suite install warns when its state file exists but fails to read or parse.
  • Template installs skip configured fields: server install --template and infra install --template do not re-prompt for a field that an earlier install already configured in .env or config.json.
  • Reinstalls accept an existing admin: A server install --template reinstall and suite install --resume treat an admin that already exists as a successful no-op, while the standalone deepfellow server create-admin still reports an error for an existing admin.
  • Registry tag pick-list: infra service install and infra mcp install offer a pick-list of the image's real Docker registry tags for a docker-tags field, and fall back to a free-text prompt when the registry is unreachable or lists no tags.
  • infra mcp list shows the real state: deepfellow infra mcp list shows each server's real install state and, for a custom server, its actual custom_spec.
  • Install errors show the backend message: infra service install, infra model install, and infra mcp install show the backend's error message when it rejects an install with a status other than 400, 401, or 403 (for example 422), instead of failing with a ResponseNotRead error.
  • infra mcp add checks the name first: deepfellow infra mcp add reports a name that is already taken before it asks for a config.
  • Field descriptions render on one line: A field description that contains a line break renders on one line in infra service fields, infra mcp list, and install prompts.
  • OpenCode tutorial: A new tutorial covers integrating OpenCode with DeepFellow as an OpenAI-compatible provider, including opencode.json, UI-based setup, and DeepFellow-hosted MCP servers. See Integrate with OpenCode.
  • Listing Models guide: A new guide covers GET /v1/models and GET /v1/models/{model_id}, the additional_data parameter, the fields of props, and how project permissions filter the list. See Listing Models.
  • Hardware recommendations state their context length: The model recommendations table states the context length it assumes: 8K, alongside the Q4_K_M quantization. See Hardware Requirements.
  • Knowledge Graph documentation withdrawn: The Knowledge Graph guide no longer appears in the docs navigation, and the graph.* settings, the /v1/graph endpoints, and the related deepfellow server install and deepfellow suite install flags are no longer documented until the next version of the feature ships.
  • SMTP settings point to the Configuration guide: The Server Web Panel page links to the Configuration guide for SMTP and invitation-permission settings, and its examples use deepfellow server config set, which dynamic settings need. See DeepFellow Server Web Panel.
  • Send button visible in dark mode: The API reference playground's Send button is visible in dark mode.
  • Borders visible in dark mode: Borders, including the sidebar section guide line, are visible in dark mode.
  • Install Templates sections are expanded: The Install Templates sections of deepfellow server and deepfellow infra and the Non-Interactive Mode section of deepfellow suite are no longer collapsed in accordions, so the table of contents links to visible content.
  • Command group headings in the CLI reference: The deepfellow server, deepfellow infra, deepfellow suite, and deepfellow otel reference pages have a heading above the first command group, so their commands appear in the table of contents.
  • require_approval examples match the server: The require_approval examples use the form the server accepts: MCP, Infra MCP, and web search tools take a list of tool names per approval mode ({"always": ["remove_db"]}), and custom tools take an approval mode per tool name ({"remove_db": "always"}). See Using Tools.

Breaking Changes

  • Update Doc Chunker together with DeepFellow Server: Server now calls Doc Chunker through /convert and /chunk instead of /text and /chunks, and sends vision_model and stt_model. Deploy a Doc Chunker that accepts them before or together with the new Server: a Server that runs ahead of it silently drops image descriptions. See Doc Chunker.
  • POST /text_converter/text returns plain text: It returns text/plain instead of the JSON body {"blocks": [...], "warnings": [...]}.
  • as_attachment is removed from image_processing_mode: Only ignore and description remain.

0.32.0 – September 1, 2026

This release surfaces service and model failures, routes requests to the best-placed instances, and tightens the API.

Highlights

  • Failures are visible and recoverable: A service or model that fails to install or load now appears as a dismissible warning on a new Warnings page, with a sidebar count badge, in the Infra Web Panel, and installed models keep their definitions through catalog refreshes and failed loads. See DeepFellow Infra Web Panel.

  • Smarter model routing: Requests now go to already-warm, higher-capacity instances first and fill the fewest instances before spilling over, and a child Infra now sees and routes to its parent Infra's models. See Architecture.

    Sharing models with child Infras is controlled by the new share_models_downstream option, which is on by default.

  • New ways to serve models: DeepFellow Infra adds an SGLang service and a Docker Model Runner service, installs GLiNER entity extraction as a custom service, and lets custom vLLM and SGLang models target a specific HuggingFace revision. See Custom Models.

    The Docker Model Runner service requires Docker Desktop 4.40 or later with Docker Model Runner enabled. Its vllm-metal backend requires macOS on Apple Silicon.

  • Apache-2.0 default reranker and sturdier vector stores: The default reranker is now BAAI/bge-reranker-v2-m3 (Apache-2.0) instead of jinaai/jina-reranker-v2-base-multilingual (CC-BY-NC-4.0), and vector stores no longer fail every file and search when the embedding model reports no context window. See Configuration.

    Only fresh installs pick up the new default reranker. An existing deployment keeps its model, because the server reads the reranker model from config.json after the first boot. The new default is larger and slower than the old one.

  • Stricter, safer API: Error responses now use an OpenAI-style body, GET /mcp/tools now requires an authenticated project context and accepts only http and https URLs to close a server-side request forgery (SSRF) hole, and request validation rejects more malformed input. See DeepFellow API Reference.

  • Easier scripted installs: deepfellow suite install gains --force-install, reads admin credentials from DF_SERVER_ADMIN_NAME, DF_SERVER_ADMIN_EMAIL, and DF_SERVER_ADMIN_PASSWORD, adds more infra and server flags, and gives clearer errors in --non-interactive mode. See DeepFellow Suite.

  • Edit and duplicate services in place: An installed MCP or custom service now has an Edit Settings action that reinstalls it with the new settings, so you no longer uninstall it first, a Duplicate option copies a model's settings under a new id and prefix, and built-in custom-service and MCP models offer a Docker image version selector. See MCP Servers.

  • Slow backends are no longer cut off: A custom service that keeps sending data no longer hits a flat five-minute cutoff, and the new standard_proxy_timeout_seconds setting and per-service proxy_timeout_seconds field set how long Infra waits. See Custom Service.

Also in This Release

  • Ollama parallel requests default to 1: The Maximum parallel requests field of a newly created Ollama instance now defaults to 1 instead of 3, which matches the real fallback when OLLAMA_NUM_PARALLEL is unset.
  • deepfellow-bge-m3 context window: deepfellow-bge-m3 now declares its 8192-token context window.
  • Zero or negative context windows are unknown: A zero or negative context window from gguf metadata, a model directory's config.json, remote-model admin fields, or Ollama form fields is now treated as unknown instead of published as a real window.
  • JSON mode without a schema: Chat completions that request JSON mode with response_format={"type": "json_object"} and no json_schema no longer fail with a 422 error.
  • vLLM debug logging for unresolved sizes: vLLM now logs a debug message when it fails to resolve a custom model's size or to determine its VRAM usage from container logs.
  • vLLM logs a failed container stop: vLLM model install now logs a failed Docker container stop during cleanup instead of swallowing it, so an orphaned container is easier to find and remove.
  • vLLM install no longer sticks on shutdown: A vLLM model install no longer sticks in the installing state when a graceful shutdown cancels the request during GPU or quantization checks.
  • vLLM retries only on the model-length error: vLLM retries with an adjusted --max-model-len only for the specific "estimated maximum model length" error, not for unrelated Docker startup failures.
  • Ollama uninstall unloads the model: Uninstalling an Ollama model without purging now unloads it from VRAM instead of leaving it there until the Ollama container restarts.
  • Ollama install progress bar fix: The Ollama install progress bar no longer sticks at 100% when a service install's post-processing step, such as saving the config, fails after an install, uninstall, and reinstall cycle.
  • API key rotation reaches child Infras: Rotating infra_api_key no longer leaves connected child Infras calling ancestor-proxied models with the old key.
  • Orphaned containers are adopted: Installing a service no longer fails on an orphaned Docker container with the same name when that container is confidently the same healthy service: Infra adopts it, and an adopted vLLM or SGLang model reads its concurrency capacity from the container's startup logs.
  • Invalid HuggingFace repositories fail fast: A HuggingFace model download with an invalid or unreachable repository id now fails fast with a "model repository not found" error instead of reporting install success with an empty model directory.
  • Rerank works on rootful Docker: Rerank models now install and serve POST /v1/rerank on a rootful Docker setup: the server creates the HuggingFace cache directory, and the rerank container runs as the server's user with its cache at /mnt/hf.
  • No duplicate custom-service installs: A custom-service model no longer starts two concurrent install attempts when you request it twice in quick succession.
  • Custom model installs use hf_id: Custom model installation for SGLang and vLLM now uses the model's hf_id instead of model_id.
  • speaches-ai installs as a non-root user: speaches-ai model installs no longer fail with a PermissionError on a fresh install when the backend runs as a non-root user, because the container now runs as the current host user.
  • Benchmarks version endpoint: The new /admin/benchmarks/version endpoint returns the server version and, when available, the commit hash.
  • image_generation tool edits: Editing an image_generation tool no longer requires partial_images in the request body, and an invalid tool update body now returns 400 instead of 500.
  • Tool edits re-validate allowlists: Editing a tool's server_prefix or custom_endpoint now re-validates it against the project's MCP and custom-endpoint allowlist, as creating a tool already did, and an update that fails that check returns 400 instead of 500.
  • Vector store bounds migration: The new migration Migration011VectorStoreBounds repairs stored vector stores and vector store files: it raises an embedding_config.max_context_size of 0 or less to the default, and it resets a chunking_strategy.static whose chunk size is not positive or whose overlap is not smaller than the chunk size.
  • Tool results accept text parts: Tool-result messages whose content is a list of text content parts, as some OpenAI-compatible clients such as Qwen Code send, are now accepted, and a non-text content part (image, audio, or file) now fails with a clear 400 instead of being dropped silently.
  • Chat validation errors name the field: Chat request validation errors now name the actual invalid field and, for an unknown message role, list every accepted role instead of showing a misleading "Input should be 'developer'" message.
  • Toolbox GUI no longer blocks tools/call: The toolbox GUI no longer stores allowed_tools: [] instead of null when you add an MCP or Infra MCP tool without restricting its tools, which silently blocked every tools/call on that tool.
  • Long Doc Chunker metadata values: Doc Chunker metadata values longer than 512 characters, such as bboxes for multi-page PDFs, no longer fail file processing: the server drops the oversized keys from that chunk's metadata.
  • Knowledge graph endpoints, off by default: New /v1/graph/episodes and /v1/graph/search endpoints track entities and relationships across documents per project through Graphiti, and stay off until you set graphiti.enabled and provide a Neo4j instance.
  • Docker check before admin prompts: deepfellow suite install now checks Docker availability before it prompts for admin credentials.
  • deepfellow server project update: deepfellow server project update changes an existing project's name, models, custom_endpoints, or mcp_prefixes without archiving and recreating it, and --models, --custom-endpoints, and --mcp-prefixes add to the existing list unless you pass --overwrite. See DeepFellow Server.
  • Install activity indicator: deepfellow infra service install and deepfellow infra model install now show a spinner during the install phase, or a periodic install: still working… (Ns) line in --non-interactive mode, instead of a silent jump from install: 0% to install: 100%.
  • Reinstall over a started server: deepfellow server install no longer aborts with "Invalid DF_PLUGINS_SETUP" when you reinstall over a server that has started at least once.
  • Shared storage warning: deepfellow server install --directory now warns when a fresh install in a new directory would share its storage (config.json and uploads) with an install elsewhere on the machine, and its --help text now says storage is shared across every install on the machine.
  • Template values and explicit flags: deepfellow infra install --template no longer lets a template value override an explicit CLI flag that happens to equal its own default, such as --port 8000.
  • Port restored on re-run: deepfellow infra install now restores a prior install's port from .env on a plain re-run, or with a template that declares no port, instead of resetting it to the default.
  • infra uninstall asks about Docker images: deepfellow infra uninstall now asks whether to also remove Docker images when you pass neither --remove-images nor --no-remove-images, and --remove-images after the directory is gone now reports a clear "already uninstalled" message. See Uninstall.
  • Templates check config.json: deepfellow server install --template and deepfellow infra install --template now also check config.json, in addition to .env, before they apply a template value, so a reinstall with a template no longer overwrites a setting that moved to config.json after the first start.
  • Workspace project gets model access: deepfellow suite install now grants the workspace project access to the chat, embedding, and fast models it installed, where the project previously had no model access.
  • Real install failure reasons: deepfellow infra service install and deepfellow infra model install now show the real failure reason on an install error, and point you to docker compose logs infra when the server sends no details.
  • Installing an installed service is a no-op: deepfellow infra service install now exits successfully with an informational message when the service is already installed, which also makes the post_start_actions of infra install --template idempotent.
  • Readable CLI errors for Server errors: The CLI no longer crashes with a raw KeyError traceback when DeepFellow Server reports an error in its {"error": {"message": ...}} format.
  • Suite install reads the resolved port: deepfellow suite install now reads the port that server install resolved from the server's own .env before it logs in and creates the workspace, so a re-run against an existing server directory with a different port no longer fails at login.
  • server install --template: deepfellow server install gains --template, which takes a built-in workspace template or a YAML file with config defaults and post-install actions, follows the same precedence as infra install --template, and leaves the server running afterward when the template has post-install actions. See DeepFellow Server.
  • Infra API key fallback: deepfellow server install now falls back to the DF_INFRA_API_KEY in a local Infra install's .env when you do not pass --infra-api-key.
  • Template validation: Both --template options now validate the resolved template up front and reject an unrecognized top-level or post_start_actions key instead of discarding it silently.
  • Stale MongoDB volume hint: deepfellow server start, restart, update, env set, and suite install now detect a MongoDB authentication failure caused by a stale mongo Docker volume from an earlier install and print a specific remediation hint.
  • Pre-existing MongoDB volume prompt: deepfellow server install now detects a pre-existing mongo Docker volume when it finds no matching MongoDB admin credentials in .env, and asks whether to remove it before it generates new credentials, where declining aborts the install and --yes removes the volume without asking.
  • Quickstart uses suite install: The Quickstart now installs DeepFellow with the single deepfellow suite install command. See Quickstart.
  • Installation section: Installation guides now live in their own Installation section, and the CLI Reference opens on a tile page. See Installation.

Breaking Changes

  • API errors use a new body and status: Error responses now use an OpenAI-style body, {"error": {"message": ..., "type": ..., "param": ..., "code": ...}}, instead of FastAPI's default {"detail": ...}, and request validation errors now return HTTP 400 instead of 422.
  • GET /mcp/tools requires a project context: The endpoint now requires an authenticated project context and accepts only http and https URLs, which stops credentials with no project association, such as organization or user credentials, from making the server open outbound connections to arbitrary hosts.
  • Project fields reject bare strings: A project's models, custom_endpoints, and mcp_prefixes fields now accept only a list of strings or the literal "all", so a bare string such as "models": "qwen:1.8b" now fails validation with HTTP 400.
  • Overlapping chunks are rejected: A chunking_strategy whose chunk_overlap_tokens is not smaller than max_chunk_size_tokens is now rejected with HTTP 400 when you create the vector store or file, where the API previously accepted it and the file failed silently.
  • GET /v1/models reports null context windows: The props.context_window and props.max_context_window fields are now null instead of 0 for a model whose registrations declare no context window.
  • Knowledge Graph flags in deepfellow server install are renamed: --neo4j-active, --neo4j-url, --neo4j-username, and --neo4j-password are replaced by --falkordb-active, --falkordb-url, --falkordb-username, and --falkordb-password, and the generated .env now writes DF_GRAPH__ENABLED, DF_GRAPH__HOST, DF_GRAPH__PORT, DF_GRAPH__USERNAME, and DF_GRAPH__PASSWORD instead of DF_GRAPHITI__ENABLED, DF_GRAPHITI__NEO4J_URI, DF_GRAPHITI__NEO4J_USER, and DF_GRAPHITI__NEO4J_PASSWORD.

We use cookies on our website. We use them to ensure proper functioning of the site and, if you agree, for purposes such as analytics, marketing, and targeting ads.