NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #525 most downloaded on PyPI
Python supercharged for fastai development
Last release 4 days ago
30 Sep 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
367 releases · first in 2019
Fix docments to handle property __doc__ and falsy-but-valid symbols in docstring/docments traversal
__doc__ and falsy-but-valid symbols in docstring/docments traversal (#945)truncstr: accept maxlen=None to disable truncation; mark xml module docstring as raw
One column per quarter.
Split argv parsing out of _run_cli into new exported parse_cli function returning positional args, kwargs, and the --pdb flag
_run_cli into new exported parse_cli function returning positional args, kwargs, and the --pdb flag (#943)Shorten line hashes from 4 hex chars to 2 Base64url chars (low 12 bits of CRC32)
Add path_glob and path_re filters to globtastic for matching against full file paths
path_glob and path_re filters to globtastic for matching against full file paths (#941)simplify prev_line truncation format
prev_line truncation format (#940)Add XML.render for namespace-aware serialization, dict-based attrs, and overridable E.attr_value for vocabulary-specific values
E.attr_value for vocabulary-specific values (#939)Add XML.__call__ to append children to an existing expression and return it
XML.__call__ to append children to an existing expression and return it (#938)Add namespace-aware XML construction to fastcore.xml with E factories and XML expressions that preserve case and namespace bindings
Docments from Annotated metadata and NumPy docstrings, callable truncstr suffixes, shared preview rows ( #934 ), thanks to @jph00
Bugs Squashed fix init_args
init_args (#931)store_attr no longer records __stored_args__ ; add init_args ( #929 ), thanks to @jph00
Add CliError , a command error that exits cleanly under a CLI run ( #928 ), thanks to @jph00
Fix docments property unwrapping to use isinstance check, avoiding false positives from permissive __getattr__ implementations
__getattr__ implementations (#927)Add wait_until to fastcore.aio: polls a sync or async probe until truthy, with configurable timeout and sleep interval
Add jupyter_json_default fallback so nbio JSON encoding handles datetimes, dates, bytes, iterables, and numeric types
Render underscores as hyphens in CLI option names ( #921 ), thanks to @jph00
Show annotation-based metavars in CLI help instead of upper-cased option names, and quote empty string defaults
Add Debounce to fastcore.aio for coalescing bursts of calls, and skip cells tagged skip-execution in does_cell_eval
Add package name and version as epilog to anno_parser help output
anno_parser help output (#915)Rewrite signature_ex to preserve explicit Parameter.empty defaults via a sentinel
signature_ex to preserve explicit Parameter.empty defaults via a sentinel (#908)Add free_port: returns an OS-picked free TCP port on a given host
free_port: returns an OS-picked free TCP port on a given host (#907)open_doc section layer in editskill; use pilcrow for newlines in CellRow repr (#906)sig_with_params by removing keep param (#904)Add nbio. diff_cells for id-aligned block diffs of cell sequences; harden bg_task with strong refs and on_err callback
diff_cells for id-aligned block diffs of cell sequences; harden bg_task with strong refs and on_err callback (#903)Add id_words , to_camel , to_pascal , to_kebab , to_snake to basics; refactor camel2words/camel2snake/snake2camel to share the splitter
id_words, to_camel, to_pascal, to_kebab, to_snake to basics; refactor camel2words/camel2snake/snake2camel to share the splitter (#902)Add trunc_ctr and TruncatedString to xtras for middle-truncating long strings with a humanized elision marker
trunc_ctr and TruncatedString to xtras for middle-truncating long strings with a humanized elision marker (#901)Add notebook-level eval directives, strvals booleans, and kindsort ; remove skip_noeval ( #900 ), thanks to @jph00
Add parallel_async_gen and parallel_async_dict for streaming async results
Replace exec_cell / show_cell with run_cell wrapping IPython run_cell_async
exec_cell/show_cell with run_cell wrapping IPython run_cell_async (#898)nbio: extend nb_frontmatter with cell_frontmatter / md_frontmatter (H1 title synthesis, raw wins); frontmatter now raises on bad YAML
nb_frontmatter with cell_frontmatter/md_frontmatter (H1 title synthesis, raw wins); frontmatter now raises on bad YAML (#897)Support L in to_xml rendering; drop ujson fallback in loads/dumps and use stdlib json
Add nb_frontmatter and frontmatter strvals/closing-fence support; strip ANSI in render_text with tb_maxlen traceback line capping
nb_frontmatter and frontmatter strvals/closing-fence support; strip ANSI in render_text with tb_maxlen traceback line capping (#895)Make OpGroup.__doc__ a property so subgroups added after init appear in the listing
__doc__ a property so subgroups added after init appear in the listing (#894)Note that path param expands ~ in file/cell editing functions (#892), thanks to @ncoop57
nbio: add find_id, FoundCells context-aware find_cells, update_cell and deep_merge; expand ~ in nb paths; id prefix lookup
find_id, FoundCells context-aware find_cells, update_cell and deep_merge; expand ~ in nb paths; id prefix lookup (#891)render_md with ansi='html' to render ANSI colors as an {=html} block (#880), thanks to @RensDimmendaalmove pack_frames/unpack_frames websocket binary framing helpers to jupywire
pack_frames/unpack_frames websocket binary framing helpers to jupywire (#890)Add IMG_MIMES constant and support image/webp in preferred_out
IMG_MIMES constant and support image/webp in preferred_out (#888)exec_cell and show_cell to nbio for running notebook cells in a live IPython shell (#886)select_cells: accept multiple cell ids; hide maybe_await/_amagic frames in tracebacks (#885)select_cells to nbio, move render_md/AI output renderers back to aidialog (#884)Add str2dt/revive_dates and xdumps stdlib type support, plus nbio AI output renderers, websocket frame packing, and iopub msg-to-output conversion
Add fastcore.apisurface module for building documented callables from operation metadata, plus basics.req
Add metadec to simplify writing decorators usable with or without params
metadec to simplify writing decorators usable with or without params (#879)Add athreaded to fastcore.aio for running blocking functions in a worker thread from async code
athreaded to fastcore.aio for running blocking functions in a worker thread from async code (#878)Preserve subclass type in L.__getitem__ by routing through _new instead of constructing a bare L
Add module docstrings, humanize(), render_md(), expect_fail regex param, and update llms.txt
render_md(), expect_fail regex param, and update llms.txt (#874)Add fenced_blocks to extract top-level, fence-nesting-aware code blocks from markdown text
fenced_blocks to extract top-level, fence-nesting-aware code blocks from markdown text (#873)Add structural validation and repair for code cell outputs (output_type, data, metadata, traceback)
output_type, data, metadata, traceback) (#872)Add fenced to wrap text in a code fence longer than any run of the fence char
fenced to wrap text in a code fence longer than any run of the fence char (#871)Add Path.read_jsonl for parsing newline-delimited JSON files with line-numbered error reporting
read_jsonl for parsing newline-delimited JSON files with line-numbered error reporting (#870)Add pos parameter to call_parse and anno_parser to make named function params positional CLI args
pos parameter to call_parse and anno_parser to make named function params positional CLI args (#869)Add async IPython magic support, short flags from capital letters in script params
incl_out/trunc_out params to view_cell to optionally append rendered cell outputs (#865)start_server host mismatch in port test; add remold to dev deps (#867), thanks to @RensDimmendaalAdd __pyskill_params__ replace-params group and nums option to view_file
__pyskill_params__ replace-params group and nums option to view_file (#864)Add Notebook/NbCell session methods, CellRow snapshots, summary_nb/find_cells, cell_ast_replace; rename find→find_cells and view→view_cell
summary_nb/find_cells, cell_ast_replace; rename find→find_cells and view→view_cell (#862)rename file tools verb-first, add lnhash/exhash utilities and cell editing tools, require str metadata directive values
Add multi-language directive parsing/repair to NbCell and net-waiting utilities from fasthtml (waitfor); added take_lines
take_lines (#857)Add xdumps with __json__ protocol and item2xml for shared notebook/message XML rendering
xdumps with __json__ protocol and item2xml for shared notebook/message XML rendering (#855)__copy__, str_diff, notebook validation, and pyskills entry point (#854)
__copy__, str_diff, notebook validation, and pyskills entry pointAdd back Python 3.10 support by replacing TaskGroup with asyncio.gather, and defer coroutine creation until semaphore is acquired
Refactor nbio: replace apply_controls with clean_cli_output, make preferred_msg_out public
apply_controls with clean_cli_output, make preferred_msg_out public (#851)Refactor nbio: replace apply_controls with clean_cli_output, make preferred_msg_out public
apply_controls with clean_cli_output, make preferred_msg_out public (#851)mtime_policy now invalidates on any mtime change
mtime_policy now invalidates on any mtime change (#850)- Fix dep
Add needs_args support to flexicache policies; extend mtime_policy with arg param to watch call-argument files
needs_args support to flexicache policies; extend mtime_policy with arg param to watch call-argument files (#849)The breaking changes: Param is gone from fastcore.script; use plain type annotations with docments, or typing.Annotated[type, "help"], optionally with…
fastcore v2 removes or relocates a number of APIs that now have better alternatives. If you use from fastcore.utils import * (or fastcore.all), most of these changes won't affect you.
The breaking changes: Param is gone from fastcore.script; use plain type annotations with docments, or typing.Annotated[type, "help"], optionally with a dict of argparse arguments for advanced features. L's starmap, starfilter, and the other star*/rstar* methods are replaced by the star and rstar function adapters, which compose with every L method (e.g. t.map(star(f))); relatedly, spread is replaced by star, and dspread is renamed to dstar. Async helpers now live in the new fastcore.aio module: run_sync, iter_sync, and ctx_sync moved there from net, and maybe_await, then, mapa, acache, reawaitable, is_async_callable, and the other async utilities moved there from xtras. Config and the config file functions moved from foundation to xtras. fastcore.net lost its request builders (urlrequest, urlsend, do_request, urlcheck) and clean_type_str is gone. parallel_gen moved to fastai. Python 3.11 or later is now required.
If you need the old APIs, pin fastcore<2.
Your coding agent can read these notes before it upgrades. Set up the MCP server →