- The OAuth API is now simplified to only require
chk_auth
, and no longer useslogin
.chk_auth
should either returnFalse
(meaning not authenticated) or aRedirectResponse
. After authentication, theauth
parameter will be provided to handlers, which will have the oauth ID.
- Simplify OAuth API (#580)
- Include session param in websockets handlers (#563), thanks to @callmephilip
- Add path to jupy HTMX (#503)
- Add oauth
error_path
(#570), thanks to @comhar - Add
qp
to create routes with query params (#560) render_rt()
function enables automatic rendering of FT components in notebook (#558)- In
HTMX()
height
is now fixed if passed, andFT
components can be rendered instead of paths (#557)
- Rename
.rt
method to.to
(#539)
- Support json request key parameters (#555)
- Add
fh_cfg["auto_name"]
option (#548) - Allow generators etc as responses (#547)
- Add experimental
body_wrap
attr toFastHTML
(#546) - Auto-add headers to notebook in
FastHTML
(#544) - Allow FT components to be used directly as id and
hx_target
values #544) - Add
host
param to JupyUvi, defaulting to "0.0.0.0" (#543) - In-jupyter HTMX web apps! (#541)
- Add HTTP verb methods to
APIRouter
(#538) - Support
WebSocket
type annotation inapp.ws
handlers (#538)
- Add
nb_hdrs
tofast_app
(#551), thanks to @Isaac-Flath
jupy_app
andFastJupy
removed; their functionality is now built intofast_app
andFastHTML
and enabled automatically in notebooksRouteX
andRouterX
removed; useFastHTML.add_route
instead
- Add
APIRouter
(#535)
ws_hdr
andcts_hdr
both removed fromFastHTML
andfast_app
; replaced withexts
, which takes a list of extension names (e.g.exts='ws'
)
- Unified syntax for common HTMX extensions (#533)
- Allow toasts to work with FtResponse (#526), thanks to @tomasz-pankowski
- Replace experimental
Pusher
with experimentalsetup_ws
andws_client
(#522) - Add experimental
with_sid()
(#521) - Ensure FT children are tuples
- Adding mermaidJS for mermaid graphs (#518), thanks to @ImtiazKhanDS
- Uploading a single file on a multiple file field requires try/except (#513)
- Add
scope
param (#519) - Allow
FastHTML.ws
to be used without a function (#519) - Allow setting of xmlns in
Svg
(#519)
- Add missing
unqid
import (#519)
- Add
pusher()
for real time DOM updates; addfh_cfg.auto_id
to automatically add unique IDs (#517) - Support background tasks (#512)
- Allows for passing route functions (#511), thanks to @Isaac-Flath
- Add path arg to HTMX (#504), thanks to @Isaac-Flath
- Multi file upload does not work (#509)
- Document usage with Jupyter (#469)
- Add
oauth.redir_url
function (#476)
- Allow for handler names with same name as an http verb, even if path not provided (#459)
- Support explicit iframe height in Jupyter HTMX (#458), thanks to @callmephilip
- Improve type annotations for element attributes (#453), thanks to @callmephilip
- Make compatible w/ ddtrace (#452), thanks to @derekgliwa
- Remove IPython dep (#456)
- Add
def_hdrs
(#446)
- Jupyter compatibility (#445)
- Redefining a route overwrites existing definition (e.g for use in notebooks) (#444)
- [BUG] d argument is not passed in Path function for SVGs (#437)
- Pass query params to custom class annotated args (#439)
svg.Path
not passingd
param (#438)
- Include both
m
(me) andp
(prev) inOn
andPrev
handlers, and run after DOM ready (#429)
proc_htmx
not exported correctly (#434)
date
has been renamed toparsed_date
- Handle non-list/tuple
hdrs
andftrs
inFastHTML()
(#426) - Handle automatic
datetime.date
form field conversion (#415)
- Make sure only the selected radio button in a radio group is checked during
form_fill
(#424), thanks to @rbavery - All radio buttons in a radio group are checked during
fill_form
(#423) - receiving a list[str] as a parameter doesn't work with get request (#422)
- Multipart error when submitting with empty form-data (#405)
- Add
FtResponse
(#425) - Add
sid_scr
(#425) - Scope
On
selector top
(#414) - Store
p=me()
beforeOn
handler (#413) - Convert
dict
children inft_htmx
andft_hx
to kwargs (#412) - Add reload on CSS and JS file changes (#401)
static_path
ignored infast_app
(#410)
- Greatly improved SVG support (#409)
- Add SVG HTMX helpers:
svg_sel
,SvgOob
, andSvgInb
(#408) - Add
Client
andNbsp
(#403) - Add
Redirect()
and handle magic__response__
method (#400) - Add
HtmxResponseHeaders
(#399) - Add
session
toOAuth.chk_auth
(#394) - Add
static_routes
andstatic_route_exts
methods toFastHTML
(#387)
- toasts do not show if response empty or tuple (#386)
- toasts.py not updated for router refactor (#385)
- Add
sse_message
,EventStream
, andsignal_shutdown
(#384)
- Make hdrs, ftrs, htmlkw, bodykw, etc available to
RouterX
andRouteX
via._app
(#381) - Add
OAuth
class (#381)- Move redirect url into methods for oauth
- Add options to change default static media directory (#373), thanks to @coreman14
- Add
PicoBusy()
function to display loading spinner during html load (#372) - Add
HtmxOn()
to allow adding htmx event listeners more easily (#371) - Set toasts to only work with FT responses (#368), thanks to @pydanny
- Routing subapp improvements (#365), thanks to @Isaac-Flath
- Add all HTMX attrs to component signatures (#363)
- Add markdown version of all docs (#361)
- add easy to use chunked transfer extension header (#346), thanks to @fabge
- Set 404 exception handling to give "404 Not Found" message (#335), thanks to @Isaac-Flath
- [BUG] Toasts don't show after redirect (#358)
- railway deployment not checking deployed projects correctly (#340)
- Socials tag only appears in head tag when added via FastHTML.hdrs (#324)
- Replace
__call__
withrt
in handler functions (#334) - Add
flat_tuple
and use it to allow nested tuples in route responses - Add
body
parameter for decoded body - Move pico-specific components to separate module (#327)
- Add "get" and "post" as default methods on routes (#317)
- Support Reverse URL lookups by exposing
url_for
(#189)
- Fastlite 0.0.9 dep
- Rename
Checkbox
toCheckboxX
(#314)- CheckboxX also adds a hidden field before the checkbox
- Automatically choose last field in form data if list provided by non-list parameter
- post release fix for
fill_form
(#309)
__init.py__
now only containsfasthtml.core
- Fastcore 1.7 compatibility (#307)
- Add
fasthtml.basics
for importing the main fasthtml modules
- katex.js missing (#305)
- postrelease fix markdown js (#290)
- Support
dict
value inhx_vals
(#288) - Add
sess_cls
param toFastHTML
(#284) - Make
index
a special handler name for path "/" get request (#274) - Use
run_in_threadpool
for non-async handlers (#270) - Enhance LaTeX rendering in Markdown with support for environments (#269), thanks to @rian-dolphin
- Duplicate parameters in components.pyi (#255)
- Experimental new named-based HTMX routing system (#267)
uri
function to constructurl_for
path params- patch
HTTPConnection.url_path_for
- replace HTTP verb FT attr names with
hx-
prefixed versions, and look up values in route names (withlink
used forhref
attrs) - Default route paths to
/{func.__name__}
- Default route method to
post
if func name isn't an http verb - Support skipping
()
in route decorators
- Default route name to function name if method provided (#263)
surreal
andhtmx
bool params forFastHTML
andfast_app
(#258)
- generic list annotated params double-wrapped (#253)
- Add
Prev()
(#253) ft_cfg
config defaults (#251)- Make
fill_form
set selected option (#185), thanks to @ostwilkens
- Do not make session vars available as direct params (#237)
- Add surreal.js helpers
Me
,Any
,On
(#238) - Add support for application/json in POST requests (#234), thanks to @khoaHyh
- Wrap Starlette's session in an AttrDict (#213), thanks to @jbellis
- Handle mismatches between existing db and schema (#202), thanks to @ncoop57
- Raise warning if type is not passed (#195)
- Signature may not resolve types from str (#198)
- Add
attrs1st
formatting to html2ft (#193), thanks to @AndrewRPerkins
- Check for railway app version (#192)
- Update
flat_xt
to handle single FT item (#190) - Support FT in HTTPException handling (#175)
- Add
pep8_app.py
(#163) - Add support for LaTeX formula rendering when rendering markdown (#158), thanks to @yym68686
- Add to request:
req.hdrs,req.ftrs,req.htmlkw,req.bodykw
(#152) - Add htmlkw to
fast_app
(#145), thanks to @ranzuh - Add
Form
for multipart form data; initial poetry compatibility forserve
(#137) - changes toast names to avoid conflict with bootstrap (#133), thanks to @vacmar01
- Automatically move ('title','meta','link','style','base') into head (#122)
- Allow for
Any
orFT
as return type of routes (#112)
- railway deploy did not connect mount point on first use (#89)
- Initial launch version
- Rename
run_uv
toserve
(#84)
- Update for fastcore XT to FT name change
- Remove comments in html2xt (#76)
- Handle relative paths in
Social
(#70) - Add
ftrs
for scripts etc at end of body element (#62) - Updated html2xt to use unpacked dicts when attr keys are not valid python names (#57), thanks to @matdmiller
- fix social relative urls (#77)
- Add
indent
tohtml2xt
(#53) - New
fasthtml.ft
namespace for components (#50) - Add
bodykw
infast_app
(#49)
ScriptX
andStyleX
for templated generation from external files (#42)
fast_app
returnsapp.route
as well as app (#38)
- Add
fasthtml.toasts
(#35) - 'Afterware' support
- Add
injects
to request - Basic websocket support (#29)
- Support
meta
tags in returned tuple (#28) - Support npm provider in jsdelivr (#27)
Style
does not accept multiple positional args correctly (#34)
- Add
railway_deploy
(#26)
- Add
run_uv()
(#25) - New demo app (#25)
- Add
Container
component (#24) - Add all HTML elements (#22)
- Add svg.py (#21)
- Add
Titled
(#18) - Disable PicoCSS font scaling
- Use constant time string comparison for password checking, h/t José Valim (#17)
- Add surreal js and scope scripts to default headers, and add
default_hdrs
bool to allow removing default headers (#16) - Add xtend.py
Script
andStyle
that do not needNotStr
(#15) - Add
jsd
(#14) - Handle lists of
hdrs
(#14) - Autogen HTML wrapper for non-htmx partials (#13)
html2txt
only parses first partial (#12)
- Add
html2xt
(#11)
- use
sqlite_minutils
in all.py (#10)
- sortable js support (#7)
- Add
MarkdownJS
and support textareas (#6) - Handle multi-value form data correctly
- fix body arg parsing (#2)
- Init release