Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# CHANGELOG

## Unreleased

### Breaking Changes

- **Note formatting is removed.** The `format_on_save`, `formatter_command`,
`formatters` and `formatter_timeout` settings, their `BASIC_MEMORY_*` environment
variables, the `bm format` command and the bundled mdformat dependency are gone.
Since 1.0 accepts a note's bytes before writing the file, `format_on_save` had
stopped running for `bm_write` and `bm_edit` (#2005). Formatting the file after the
write would make it differ from the accepted note, so the next sync would record it
as an outside edit and the agent's next `expected_checksum` would conflict. Notes
are now stored exactly as written. Old keys in `config.json` are ignored. To format
notes, run your formatter from your editor, or over the project folder yourself.

## v1.0.0 (2026-10-29)

Basic Memory 1.0 is a clean-house release. The MCP server exposes only the `bm_*`
Expand Down
7 changes: 4 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ dependencies = [
"asyncpg>=0.30.0",
"pytest-asyncio>=1.2.0",
"psycopg==3.3.1",
"mdformat>=0.7.22",
"mdformat-gfm>=0.3.7",
"mdformat-frontmatter>=2.0.8",
"sniffio>=1.3.1",
"anyio>=4.10.0",
"httpx>=0.28.0",
Expand Down Expand Up @@ -82,6 +79,8 @@ pdf = [
]
documents = [
"markitdown[docx,pptx]>=0.1.7,<0.2",
# Footnote parsing for the document page-citation tests.
"mdit-py-plugins>=0.6.1",
]

[project.urls]
Expand Down Expand Up @@ -158,6 +157,8 @@ dev = [
"pytest-timeout>=2.4.0",
"pytest-split>=0.11.0",
"markitdown[docx,pptx]>=0.1.7,<0.2",
# Footnote parsing for the document page-citation tests.
"mdit-py-plugins>=0.6.1",
]

[tool.hatch.version]
Expand Down
2 changes: 0 additions & 2 deletions src/basic_memory/cli/commands/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
project,
prune,
config,
format,
schema,
update,
wiki,
Expand All @@ -46,7 +45,6 @@
"project",
"prune",
"config",
"format",
"schema",
"update",
"wiki",
Expand Down
200 changes: 0 additions & 200 deletions src/basic_memory/cli/commands/format.py

This file was deleted.

22 changes: 0 additions & 22 deletions src/basic_memory/config_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -643,28 +643,6 @@ def __init__(self, **data: Any) -> None: ...
description="Skip expensive initialization synchronization. Useful for cloud/stateless deployments where project reconciliation is not needed.",
)

# File formatting configuration
format_on_save: bool = Field(
default=False,
description="Automatically format files after saving using configured formatter. Disabled by default.",
)

formatter_command: Optional[str] = Field(
default=None,
description="External formatter command. Use {file} as placeholder for file path. If not set, uses built-in mdformat (Python, no Node.js required). Set to 'npx prettier --write {file}' for Prettier.",
)

formatters: Dict[str, str] = Field(
default_factory=dict,
description="Per-extension formatters. Keys are extensions (without dot), values are commands. Example: {'md': 'prettier --write {file}', 'json': 'prettier --write {file}'}",
)

formatter_timeout: float = Field(
default=5.0,
description="Maximum seconds to wait for formatter to complete",
gt=0,
)

# Project path constraints
project_root: Optional[str] = Field(
default=None,
Expand Down
Loading
Loading