NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3925 most downloaded on PyPI
Pierre Git Storage SDK for Python
Last release 5 days ago
01 Oct 2026
Release timing varies
gaps range from 8 days to 2 months
Rarely documented
notes for 7 of 52 stable releases
Nothing withdrawn
no release was ever pulled
11 months old
54 releases · first in 2025
One column per month.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[diffs] new lineDiffType 'word-line' by @amadeus in #1156
Full Changelog: diffs-v1.5.0...diffs-v1.5.1
With this update, there are some breaking changes regarding how edit works with partial diffs ( fileDiff.isPartial === true );
With this update, there are some breaking changes regarding how edit works with partial diffs (fileDiff.isPartial === true);
Diffs will now throw errors if you attempt to edit a diff that isPartial and has not been supplied any loadDiffFiles prop. Before it would fail silently. This applies to all editable components.
For standalone vanilla JS, wait before attaching the editor. Keep your existing render call, then change the edit call to:
renderFromApplicationState();
let finishEditing;
try {
if (fileDiffInstance.fileDiff?.isPartial === true) {
await fileDiffInstance.prepareForEditing();
}
finishEditing = editor.edit(fileDiffInstance);
} catch (error) {
showEditError(error); // Use your app's error UI.
}Check the instance's current fileDiff.isPartial value so complete diffs attach synchronously. Preparation rejects if it cannot be loaded.
If React or CodeView edits a partial diff, wait for attachment before using the editor. The full files load first. Put editor-dependent work in onAttach; CodeView.getEditor(itemId) returns undefined until then. Missing loadDiffFiles throws when the partial edit item renders.
Full Changelog: diffs-v1.4.3...diffs-v1.5.0
Nothing published for this version
fix(diffs): reject mismatched custom language loaders by @amadeus in #1123
Full Changelog: diffs-v1.4.2...diffs-v1.4.3
[diffs] Harden CodeView resize handling by @amadeus in #1054
Full Changelog: diffs-v1.3.2...diffs-v1.3.3
[diffs/edit] hide selection action when selection is offscreen by @ije in #1039
keymap editor option by @ije in #1040Full Changelog: diffs-v1.3.1...diffs-v1.3.2
[diffs/edit] refactor onChange editor option by @ije in #1038
onChange editor option by @ije in #1038Full Changelog: diffs-v1.3.0...diffs-v1.3.1
Breaking changes & upgrade notes
Diffs 1.3 is the Edit release. The library that renders your diffs and files can now also edit them: any rendered File, FileDiff, MultiFileDiff, PatchDiff, or CodeView item can be switched into a real, in-place code editor — same DOM, same syntax highlighting, same virtualization — with find & replace, multiple cursors, markers, undo history, and more. Alongside it, this release adds on-demand loading of full file contents for patch-based diffs, added/deleted-file support in more places, custom header/footer regions for CodeView, and a batch of rendering and virtualization bug fixes.
@pierre/diffs/edit, loadable only when editing is required.loadDiffFiles allows you to fetch full file contents on demand so patch-based diffs can expand their unchanged context.Most apps upgrade with no code changes. Read this section if any of the following applies to you.
The new edit feature relies on the browser's Intl.Segmenter API (for correct cursor movement across emoji and other multi-part characters), so published builds now target Firefox 125+ (previously 120+). Chrome 123+, Edge 123+, and Safari 17.5+ floors are unchanged — those versions already support Intl.Segmenter.
Migration: nothing to do unless you must support Firefox 120–124. Read-only rendering does not use Intl.Segmenter, and the edit feature-detects it (so importing the edit never throws), but the compiled output as a whole now assumes the newer baseline.
To support added-only / deleted-only files, these types changed from interface to union types: MultiFileDiffProps, the SSR types PreloadDiffOptions, PreloadMultiFileDiffOptions, PreloadMultiFileDiffResult, and the vanilla FileDiffRenderProps / FileDiffHydrationProps.
Everything that compiled before still compiles — passing both oldFile and newFile is still valid. The one thing that breaks is extending them as interfaces:
// Before
interface MyProps extends MultiFileDiffProps<MyAnnotation> { ... }
// After — unions can't be extended, intersect instead
type MyProps = MultiFileDiffProps<MyAnnotation> & { ... };CodeView: a few options moved out of the options objectThe React CodeView options prop is now properly typed as as CodeViewReactOptions and some old useless props are now properly emitted, including onSelectedLinesChange, createEditor, or controlledSelection.
cacheKey has a real contract when persisting editor statePreviously FileContents.cacheKey was only a worker-pool highlight-cache hint. It still is for read-only rendering — but if you enable the editor's persistState option, every editable file must have a unique, stable cacheKey, and the editor throws at attach time if one is missing. When you commit edited contents back into your own state, give the file a fresh cacheKey (the contents changed, so cached highlights for the old key no longer apply).
The headline feature. Edit mode is experimental in 1.3 — the API may still shift — but it is fully functional and drives the demos at the docs site's /edit page.
Instead of shipping a separate editor component, Diffs attaches an Editor to the surface you already rendered. The read-only renderer keeps doing what it does (highlighting, virtualization, annotations, themes); the editor takes over input, carets, and selections on top of that DOM. That means:
FileDiff, you edit the new-file side and the diff re-tokenizes as you type; deleted lines stay read-only. Unified and split views both work.CodeView, VirtualizedFile, and VirtualizedFileDiff surfaces. Off-screen lines render on demand, and an item's editor (including its undo history) survives scrolling out of view and back.@pierre/diffs/edit entry point, meaning if you don't use the feature it should have no added cost.React — provide an editor factory once, then flip an edit prop:
import { EditProvider, File } from '@pierre/diffs/react';
import { Editor } from '@pierre/diffs/edit';
// Put this provider high up in your layout stack so multiple files/diffs can
// use it
<EditProvider createEditor={(options) => new Editor(options)}>
<File file={file} edit editOptions={{ onChange: handleChange }} />
</EditProvider>;File, FileDiff, MultiFileDiff, and PatchDiff all accept edit and editOptions. For CodeView, set edit: true on the items that should be editable and handle onItemEditChange / onItemEditComplete at the view level; a getEditor(id) method on the ref gives you the item's editor instance.
Vanilla JS — render a component, then attach:
const editor = new Editor({ onChange: handleChange });
const dispose = editor.edit(fileInstance);For vanilla CodeView, pass a createEditor factory in its options; the view owns each editor's lifecycle and reports changes through onItemEditChange / onItemEditComplete.
Saving is yours. The editor never talks to a server. onChange (or the CodeView item callbacks) hands you the complete updated file contents plus the current annotations on every change; committing them to state or backend is your app's job.
role="textbox" host.languageCommentConfig).editor.undo(), editor.redo(), editor.applyEdits(), canUndo / canRedo.editor.setMarkers() draws severity-colored squiggly underlines (error/warning/info/hint) with hover popovers — ideal for linter or AI feedback.enabledSelectionAction and renderSelectionAction() to float your own action popover over any text the user selects ("Add to chat", "Copy", …).autoSurround), matching-bracket highlighting (matchBrackets), rounded selection rendering, reduced-motion-aware caret.persistState, a file's document, undo history, selection, and scroll survive the surface rendering a different file and coming back (in-memory or IndexedDB storage; plain file surfaces only).clipboard reader where the native one is restricted, e.g. Electron.| Group | Shortcuts |
|---|---|
| Editing | Tab / Shift-Tab indent/outdent · Alt-↑/↓ move lines · Mod-X/C/V cut/copy/paste · Mod-/ toggle comment |
| Selection | Arrows + Shift to extend · Mod-←/→ line start/end · Mod-A select all · Mod-Click add cursor · Esc collapse |
| History | Mod-Z undo · Shift-Mod-Z redo |
| Find | Mod-F find · Mod-Alt-F replace · Mod-G / Shift-Mod-G next/previous match · Mod-D select next occurrence |
(Mod = Cmd on macOS, Ctrl elsewhere. Plus copy-line, blank-line insertion,
document start/end motion, and more.)
setMarkers after edits.historyMaxEntries).persistState applies to file surfaces only (not diffs) and requires stable cacheKeys.loadDiffFiles). Diffs parsed from a patch only contain the lines the patch included, so "expand unchanged context" hits a wall. Pass the new loadDiffFiles async option (on FileDiff or shared through CodeView) and the viewer fetches full old/new file contents the first time they're needed, upgrades the diff in place, and unlocks full context expansion. The hydratePartialDiff and cloneFileDiffMetadata utilities are exported for doing the same manually. Note: hydration mutates the fileDiff object you passed — keep its identity stable across renders if you want the hydrated state to stick.MultiFileDiff (React) and the SSR helpers preloadMultiFileDiff / preloadDiffHTML now accept oldFile: null (new file) or newFile: null (deleted file) instead of requiring both sides.renderCodeViewHeader / renderCodeViewFooter (React and vanilla) render your own content before the first item and after the last one, inside the scroll container. Heights are measured automatically (async content and font loads included), they render even when the item list is empty, and the host elements are exposed via getHeaderElement() / getFooterElement() plus data-diffs-code-view-header / -footer attributes for styling. Ideal for PR summary cards and approval bars.renderHeaderFilenameSuffix on File, FileDiff, MultiFileDiff, PatchDiff, and CodeView renders custom content (badges, status chips) immediately after the filename in the file header, joining the existing prefix and metadata slots.isFileAnnotation, isDiffAnnotation, isFileAnnotationCollection, and isDiffAnnotationCollection helpers narrow the two annotation shapes (file annotations vs. side-tagged diff annotations) in shared handlers.CodeView, Virtualizer, VirtualizedFile, VirtualizedFileDiff) has shed its beta label.Tons of bug fixes went into this major release, however we've included a few highlights here:
CodeView created while the syntax-highlighting worker pool was still initializing could fail to highlight; it now waits for pool readiness, kicks off initialization when needed, and degrades gracefully if the pool fails (#911).VirtualizedFileDiff ignored metadata updates. Updating a virtualized diff's fileDiff after the initial render now re-resolves and re-renders as expected (#881).reset(). File / FileDiff reset() left internal top/bottom spacer elements attached to the DOM (#895).CodeView bug where expanding collapsed context could misbehave (#861).Full Changelog: diffs-v1.2.12...diffs-v1.3.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →