htmx - high power tools for HTML

Overview

</> htmx

high power tools for HTML

Discord Netlify Bundlephobia Bundlephobia

introduction

htmx allows you to access AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypertext

htmx is small (~10k min.gz'd), dependency-free, extendable & IE11 compatible

motivation

  • Why should only <a> and <form> be able to make HTTP requests?
  • Why should only click & submit events trigger them?
  • Why should only GET & POST be available?
  • Why should you only be able to replace the entire screen?

By removing these arbitrary constraints htmx completes HTML as a hypertext

quick start

  <!-- Load from unpkg -->
  <script src="https://unpkg.com/[email protected]" ></script>
  <!-- have a button POST a click via AJAX -->
  <button hx-post="/clicked" hx-swap="outerHTML">
    Click Me
  </button>

The hx-post and hx-swap attributes tell htmx:

"When a user clicks on this button, issue an AJAX request to /clicked, and replace the entire button with the response"

htmx is the successor to intercooler.js

website & docs

contributing

  • please write code, including tests, in ES5 for IE 11 compatibility
  • please include test cases in /test and docs in /www
  • if you are adding a feature, consider doing it as an extension instead to keep the core htmx code tidy
  • development pull requests should be against the dev branch, docs fixes can be made directly against master

haiku

javascript fatigue:
longing for a hypertext
already in hand

Comments
  • hx-push-url doesn’t work properly on device back button click

    hx-push-url doesn’t work properly on device back button click

    I am trying to integrate Htmx with django and achieve single page application behaviour. I am rewritting Djangoproject.com poll app with htmx. When I click on detail page link, content loads, htmx push a new url in address bar. When I press back button, it took me to index page perfectly for the first time, after that if I again go to detail page and click back button, url shows of the index, but index content doesn’t load, content remains same as detail page. Here is my code -

    views.py
    
    def index(request):
        latest_question_list = Question.objects.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]
        context = {'latest_question_list': latest_question_list}
        if request.headers.get("Hx-Request") is not None:
            return render(request, 'main/index/index.html', context)
        else:
            return render(request, 'main/index/index-full.html', context)
        
        
    def detail(request, question_id):
        question = get_object_or_404(Question, pk=question_id)
        print(request.headers.get("Hx-Request"))
        if request.headers.get("Hx-Request") is not None:
            return render(request, 'main/detail/detail.html', {'question': question})
        else:
            return render(request, 'main/detail/detail-full.html', {'question': question})
        
    
    index.html
    
    <div id="index" class="">
    
        {% if latest_question_list %}
        <ul>
            {% for question in latest_question_list %}
            <li><div class="has-text-link" hx-get="{% url 'main:detail' question.id %}" hx-push-url="true" hx-target="#index" hx-swap="outerHTML">{{ question.question_text }}</div></li>
            {% endfor %}
        </ul>
        {% else %}
        <p>
            No polls are available.
        </p>
        {% endif %}
    
    </div>
    
    index-full.html
    
    {% extends 'base.html' %}
    {% block content %}
    {% include 'main/index/index.html' %}
    {% endblock content %}
    
    detail.html
    
    <div id="detail" class="">
    
        <form action="{% url 'main:vote' question.id %}" method="post">
            {% csrf_token %}
            <fieldset>
                <legend><h1>{{ question.question_text }}</h1></legend>
                {% if error_message %}<p>
                    <strong>{{ error_message }}</strong>
                </p>
                {% endif %}
                {% for choice in question.choice_set.all %}
                <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
                <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
                {% endfor %}
            </fieldset>
            <input type="submit" value="Vote">
        </form>
    
    </div>
    
    
    detail-full.html
    
    {% extends 'base.html' %}
    {% block content %}
    {% include 'main/detail/detail.html %}
    {% endblock content %}
    
    

    I found no error in browser console, no error in terminal

    Now, I know I can put a back button in detail page that can took me to index page. But user won't use that, they will just use the back button on their device. Note- I am on Android and talking about the back button in mobile phones

    opened by kawsaramin101 24
  • Fast Scroll Can Cause HTMX reveal event To Fail

    Fast Scroll Can Cause HTMX reveal event To Fail

    HTMX fails with the following error in the console:

    Uncaught TypeError: Cannot read property 'toUpperCase' of undefined
        at $t (htmx.min.js:1)
        at Fe (htmx.min.js:1)
        at htmx.min.js:1
        at X (htmx.min.js:1)
        at htmx.min.js:1
    

    ...when scrolling quickly. The code to replicate can be found at https://github.com/wiverson/htmx-demo - and the specific code generating the view can be found at:

    Starting Thymeleaf View Java Spring Boot Controller

    For reference, this is using the WebJAR version of HTMX, v1.3.2.

    Replicated on macOS on both Safari and Chrome.

    opened by wiverson 24
  • Add file inputs to hx-ws=send either inline or out of band

    Add file inputs to hx-ws=send either inline or out of band

    This patch adds files to websocket sends. By default it does the more efficient thing, sending each file afterwards in a separate message and adding pointer to this. This is more efficient since it relies on primitives inside the browser. The other encoding possibility requires hx-encoding to be set to multipart/json-files-inline. In this case, the files are included inline either as text or base64 depending on the mimetype.

    How does this approach seem? If it suits I will add short additional documentation to the effect of the above.

    opened by frankier 22
  • WebSocket Reconnect

    WebSocket Reconnect

    I noticed that htmx does not reconnect after the connection has been dropped for various reasons.

    I added this functionality because during development/deployments, server restarts are quite common and page reloads add unnecessary delays to the feedback loop.

    This patch also adds the possibility to configure the reconnect interval since different use-cases and stages requires different latencies, e.g. dev: 3sec, prod: 20-30sec (in my case). If you think of a chat-like web app, you might want even have 5-10 secs, whereas message boards/issue trackers could live with up to 60 secs or more.

    So, I leave this here open for discussion.

    EDIT:

    As an addition, one could randomize the reconnect period (reduced server startup load). We then might need an additional config variable such as (wsReconnectMinInterval and wsReconnectMaxInterval). In the wild, a constant should work pretty well for smaller projects. If you think, that the scope of htmx is also for larger projects, we could add it easily if you are okay with the additional config var.

    EDIT2:

    Just to make you aware of it: https://github.com/joewalnes/reconnecting-websocket (if you prefer pulling a third-party). I would rather go with a simpler solution but especially this field has a lot of opinions on what resembles the perfect solution.

    EDIT3:

    OK, my fault. I didn't check on existing issues nor pull requests. So to link things up: #148 #150

    EDIT4: A well-described analysis can be found from AWS: https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/

    opened by srkunze 21
  • Install via npm and `import`?

    Install via npm and `import`?

    I've just tried to import htmx into our build (webpack), and while it builds fine, in the browser I get the following JS error:

    Uncaught TypeError: Cannot read property 'logger' of undefined

    It's entirely possible that the JS is being mangled by webpack, perhaps the minification routine, but I'm not importing it any differently than any other package (flickity, alpine, etc).

    Any tips would be appreciated!

    help wanted 
    opened by johndwells 21
  • FEATURE: Swap HTML on Server Sent Events (like WebSockets)

    FEATURE: Swap HTML on Server Sent Events (like WebSockets)

    This pull request updates SSE content to swap HTML into the current page, just like WebSockets, without removing the existing hx-trigger behavior that also uses SSE data.

    I believe it addresses issue #66, although it does not use the syntax that you described there. Instead, it looks like this:

    <div hx-sse="connect /my-events EventNameToListenFor">
    

    Now, the hx-sse attribute takes a third (optional) parameter that specifies an event name to listen for. When events using this name come through the SSE channel, that is treated as an "out-of-band swap" and swapped into the underlying DOM (just like WebSockets do now).

    To do this, I added the optional event handler to the processSSEInfo function, and moved some of the existing WebSockets code into a common place -- a new function called processFragments -- that is called by both the WebSockets implementation and the SSE implementation.

    Hopefully, this code fits the style and spirit that you're building in HTMX. I'm excited to see all of the potential applications of this toolkit and will be happy to work on any enhancement suggestions, corrections, improvements to this code.

    🤘

    opened by benpate 18
  • Ergonomics when always serving full-page responses

    Ergonomics when always serving full-page responses

    One of the differences between htmx/intercooler and unpoly is that unpoly by default assumes that the backend is serving full pages in responses rather than page fragments. As I am using htmx to enhance a site that should otherwise be perfectly functional without JS, the backend always serves full pages and never partial templates.

    Additionally, I'm not sure what your typical sites look like, but I find that I almost never want to swap the element that is being clicked but rather some other element (this is also made easier by the fact that the entire page is served up by the backend, so things like buttons that have text that needs to be changed depending on the context are usually swapped out altogether with the element that is being affected by simply swapping a parent of the button and the results). As a result, all my htmx usages end up extremely verbose and redundant (especially because of #23 and #24), e.g. to simply swap a single element when a checkbox is altered:

    <label><input type="checkbox" name="hideIncomplete" hx-get="/Registrations" hx-push="true" hx-target=".registrations" hx-swap="outerHTML" hx-select=".registrations" /> Hide incomplete registrations</label>
    

    I wonder if there's a configuration option that could be added or else an alternate syntax that could be used that would bundle all this in one to reduce the boilerplate (and chance for error).

    enhancement 
    opened by mqudsi 17
  • Toward writing a HEAD element management extension

    Toward writing a HEAD element management extension

    Opening from #245, since that issue was resolved and closed.

    This issue is concerned with this note from @1cg:

    That said, what you have looks like an excellent start to a head extension. Please let me know if you are interested in pursuing that, I'd be happy to help out.

    Specifically, I'm interested in an extension/framework to alter the HEAD tag when boosting the entire page. When using boosting, the BODY swaps, but only the TITLE changes in the HEAD (if supplied by the response). I would like to create a way to manage elements in the HEAD that are specific to the new page.

    As mentioned in #245, this model seems to work:

    htmx.on("htmx:beforeSwap", function(evt) {
    
    	var incomingDOM = new DOMParser().parseFromString(evt.detail.xhr.response, "text/html");           
    
    	var path = "head *[data-page-specific='true']";
    	document.querySelectorAll(path).forEach(function(e) {
    		e.parentNode.removeChild(e);
    	});
    	incomingDOM.querySelectorAll(path).forEach(function(e) {
    		document.head.appendChild(e);
    	})
    	
    });
    

    Any incoming element with an attribute of data-page-specific will...

    1. be removed from the existing DOM
    2. be added from the incoming DOM

    I have this running on a product site, and it is working. Some META is perpetual from page-to-page, but anything specific to the incoming page like og:title gets a data-page-specific attribute. Those elements will get removed on the next load, and the new page specific elements will be added.

    (Note: I'll likely change the attribute to something more inline with convention, like ht-boost-swap.)

    One question for @1cg or @bencroker before I start writing something --

    Is there any official way to detect a boost reload? I actually had to surround the above code with this...

    if(evt.target.nodeName == "BODY")
    {
      [above code here]
    }
    

    ...otherwise it executed on every htmx request.

    Is there a cleaner/more official way for me to determine that this is an entire page reload rather than a partial?

    extension 
    opened by deanebarker 16
  • How conditionally fire the trigger?

    How conditionally fire the trigger?

    I have an input that represent the qty of an item in an invoice. I need to start it empty and only fire the trigger if the user change de value. So this are the sequence of steps:

    <input name="qty" placeholder="old.qty">
    load: ""
    change: "1" -> fire
    change:"" -> not fire
    change: "1" -> fire
    change: "10" -> fire
    
    enhancement 
    opened by mamcx 15
  • Uncaught SyntaxError: expected expression, got '<'

    Uncaught SyntaxError: expected expression, got '<'

    Just discovery HTMX, download .js file, create HTML index file but it do nothing. Got %subj% in F12 developer tools.

    <html>
    <head>
    <meta charset="utf-8">
    <title>
    HTMX - elementary example
    </title>
    <script type="text/javascript" src="js/htmx.min.js">
    </script>
    <link rel="icon" type="image/x-icon" href="/HTMX/favicon.ico">
    </head>
    <body>
    
    <button hx-post="cgi-bin/answer.cmd" hx-trigger="click" hx-target="#answer-div">
        Retrieve answer!
    </button>
    
    <div id="answer-div">
        DIR output list here
    </div>
    
    </body>
    </html>
    
    opened by lazna 14
  • Refactor history state management to use history.pushState() within 500ms of last user interaction.

    Refactor history state management to use history.pushState() within 500ms of last user interaction.

    Fix for #1076.

    Safari on iOS skips history state entries when using navigating backwards/forwards IF they were created using history.pushState() more than approx 500ms after the last user interaction (link click, select menu change etc). This makes back/forwards buttons behave unpredictably with htmx applications on all current iPhones and iPads, given that network conditions and application response times may vary.

    Currently htmx executes a history.pushState() once a response has been received. This PR moves the pushState to before the response has been received, and then updates the final intended URL with a history.replaceState() (since replaceState doesn't create a history entry, this isn't subject to the user interaction limit). This change has a knock-on effect on cache management, which is also addressed. There may be some other implications around error handling and redirects initiated by the response that will require review (since we can no longer assume that pushState is possible after waiting for a response to be received).

    Some automated tests relating to hx-push-url are failing, and any help with that would be much appreciated. Manual tests seem to work as expected.

    opened by croxton 14
  • Bump flat and mocha

    Bump flat and mocha

    Bumps flat to 5.0.2 and updates ancestor dependency mocha. These dependencies need to be updated together.

    Updates flat from 4.1.1 to 5.0.2

    Commits
    • e5ffd66 Release 5.0.2
    • fdb79d5 Update dependencies, refresh lockfile, format with standard.
    • e52185d Test against node 14 in CI.
    • 0189cb1 Avoid arrow function syntax.
    • f25d3a1 Release 5.0.1
    • 54cc7ad use standard formatting
    • 779816e drop dependencies
    • 2eea6d3 Bump lodash from 4.17.15 to 4.17.19
    • a61a554 Bump acorn from 7.1.0 to 7.4.0
    • 20ef0ef Fix prototype pollution on unflatten
    • Additional commits viewable in compare view

    Updates mocha from 7.2.0 to 10.2.0

    Release notes

    Sourced from mocha's releases.

    v10.2.0

    10.2.0 / 2022-12-11

    :tada: Enhancements

    • #4945: API: add possibility to decorate ESM name before import (@​j0tunn)

    :bug: Fixes

    :book: Documentation

    v10.1.0

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    v10.0.0

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    ... (truncated)

    Changelog

    Sourced from mocha's changelog.

    10.2.0 / 2022-12-11

    :tada: Enhancements

    • #4945: API: add possibility to decorate ESM name before import (@​j0tunn)

    :bug: Fixes

    :book: Documentation

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Replace keyup with input event in Search Example

    Replace keyup with input event in Search Example

    keyup only works with a keyboard, and ignores pasting with a right click or programmatically updating the value with JS.

    input is a better event for detecting any "inputs to the input".

    opened by samueleaton 0
  • getStartTag Function Shouldn't Use Regex

    getStartTag Function Shouldn't Use Regex

    The getStartTag function, which is used for generating the html fragment from the server, uses a regex to identify the start tag.

    The main issue with this is HTML comments, and the secondary issue is that regex are slower than a highly domain specific, optimized parser.

    Consider the following server response:

    <!-- <p>my commented paragraph</p> -->
    <div>my div</div>
    

    the getStartTag function thinks that the p tag is the first element.

    opened by samueleaton 0
  • Dynamically adding hx-disable to element doesn't disable htmx actions on element

    Dynamically adding hx-disable to element doesn't disable htmx actions on element

    Adding hx-disable to an element (e.g. myElement.setAttribute("hx-disable", ""); htmx.process(myElement)) doesn't disable the element.

    Using htmx.logAll.() I didn't see any events triggered after running htmx.process(...).

    I think that when the htmx.process(myElement) is run, it sees that the element has "hx-disable" and stops processing it, instead of removing all triggers.

    Why Add hx-disable Dynamically?

    I feel like adding "hx-disable" more is more inline with hypermedia principles than doing evt.preventDefault() inside an htmx:confirm event when i want to prevent an event. For example, when I click a dropdown button when the dropdown menu is already visible, I don't want to re-fetch the menu.

    opened by samueleaton 1
  • Escape curly braces in the example

    Escape curly braces in the example

    Docs on the website for this page are currently rendering incorrectly because of faulty escaping of curly braces (line 80 is rendered has <p> and and </> htmx - high power tools for html and </p>). Unfortunately, this fix breaks the rendering of the file on github (there are extra {% raw %} directives), but I think it's better than the other way around.

    opened by cpa 0
Releases(v1.8.4)
  • v1.8.4(Nov 5, 2022)

    What's Changed

    • Update reference.md by @Htbaa in https://github.com/bigskysoftware/htmx/pull/1104
    • Fix code snippet highlighting in HX-Location docs by @adamckay in https://github.com/bigskysoftware/htmx/pull/1102
    • Web Types: rename, update schema, add css classes and register in package.json by @piotrtomiak in https://github.com/bigskysoftware/htmx/pull/1101
    • fix typo attribute by @klavman in https://github.com/bigskysoftware/htmx/pull/1106

    New Contributors

    • @Htbaa made their first contribution in https://github.com/bigskysoftware/htmx/pull/1104
    • @piotrtomiak made their first contribution in https://github.com/bigskysoftware/htmx/pull/1101
    • @klavman made their first contribution in https://github.com/bigskysoftware/htmx/pull/1106

    Full Changelog: https://github.com/bigskysoftware/htmx/compare/v1.8.3...v1.8.4

    Source code(tar.gz)
    Source code(zip)
    htmx.js(133.71 KB)
    htmx.min.js(39.38 KB)
    htmx.min.js.gz(13.06 KB)
  • v1.8.3(Nov 5, 2022)

    What's Changed

    • Add 'fullstack' meme by @dekoza in https://github.com/bigskysoftware/htmx/pull/1084
    • additional spring boot based example link by @atomfrede in https://github.com/bigskysoftware/htmx/pull/1090
    • fix attributes links by @bmihelac in https://github.com/bigskysoftware/htmx/pull/1088
    • reference docs: add "core" terminology by @waldyrious in https://github.com/bigskysoftware/htmx/pull/1079
    • Small grammar fix in the HDA essay by @waldyrious in https://github.com/bigskysoftware/htmx/pull/1078
    • Fix error message for responseError by @dkniffin in https://github.com/bigskysoftware/htmx/pull/1077
    • Added note about css overflow to infinite scroll example by @marcpiechura in https://github.com/bigskysoftware/htmx/pull/1073
    • Update reference.md : link to hx-vals from hx-vars by @flibustenet in https://github.com/bigskysoftware/htmx/pull/1091
    • fix typo in docs.md by @eltociear in https://github.com/bigskysoftware/htmx/pull/1095
    • extensions: added new extension 'multi-swap' with mocha tests and docs by @janreges in https://github.com/bigskysoftware/htmx/pull/1096

    New Contributors

    • @dekoza made their first contribution in https://github.com/bigskysoftware/htmx/pull/1084
    • @atomfrede made their first contribution in https://github.com/bigskysoftware/htmx/pull/1090
    • @dkniffin made their first contribution in https://github.com/bigskysoftware/htmx/pull/1077
    • @marcpiechura made their first contribution in https://github.com/bigskysoftware/htmx/pull/1073
    • @eltociear made their first contribution in https://github.com/bigskysoftware/htmx/pull/1095
    • @janreges made their first contribution in https://github.com/bigskysoftware/htmx/pull/1096

    Full Changelog: https://github.com/bigskysoftware/htmx/compare/v1.8.2...v1.8.3

    Source code(tar.gz)
    Source code(zip)
    htmx.js(133.74 KB)
    htmx.min.js(39.39 KB)
    htmx.min.js.gz(13.06 KB)
  • v1.8.1(Oct 12, 2022)

    What's Changed

    • Add docs for HX-Replace-Url header by @danieljsummers in https://github.com/bigskysoftware/htmx/pull/972
    • cfwheels-htmx-crud-server-example by @chapmandu in https://github.com/bigskysoftware/htmx/pull/962
    • Fix dates in changelog by @adamchainz in https://github.com/bigskysoftware/htmx/pull/958
    • Docs: Updated broken link. by @gnat in https://github.com/bigskysoftware/htmx/pull/976
    • Docs: Code element readability. by @gnat in https://github.com/bigskysoftware/htmx/pull/977
    • Docs: Reference guide readability. Essential attributes. by @gnat in https://github.com/bigskysoftware/htmx/pull/980
    • Fix #demo-server-info's height by @machour in https://github.com/bigskysoftware/htmx/pull/1000
    • fix extended attribute form for hx-ext in findElementsToProcess by @machour in https://github.com/bigskysoftware/htmx/pull/999
    • Add ASP.NET Core Razor Partial View docs by @AlexZeitler in https://github.com/bigskysoftware/htmx/pull/1019
    • Added reference and example for Go by @benpate in https://github.com/bigskysoftware/htmx/pull/1020
    • Added PHP/Latte to list by @n0nag0n in https://github.com/bigskysoftware/htmx/pull/1021
    • Add Michael's partials projects for Python section by @mikeckennedy in https://github.com/bigskysoftware/htmx/pull/1022
    • Minor changes in docs by @David-Guillot in https://github.com/bigskysoftware/htmx/pull/1033
    • Add extra notes on how the CSS for htmx-indicator works by @wimdeblauwe in https://github.com/bigskysoftware/htmx/pull/1025
    • Remove ASP.NET Core from list by @AlexZeitler in https://github.com/bigskysoftware/htmx/pull/1024
    • Add Sergi's jinja_fragments package to Python list by @mikeckennedy in https://github.com/bigskysoftware/htmx/pull/1035
    • Added link to template fragments essay by @lllama in https://github.com/bigskysoftware/htmx/pull/1038
    • Fix link to template fragments essay by @adamckay in https://github.com/bigskysoftware/htmx/pull/1042
    • Added link for htmlgenerator to list by @saemideluxe in https://github.com/bigskysoftware/htmx/pull/1041
    • Add documentation about HTTP caching by @sponsfreixes in https://github.com/bigskysoftware/htmx/pull/1049
    • Bump github.com/labstack/echo/v4 from 4.3.0 to 4.9.0 in /www/test/1.7.0/test/servers/ws by @dependabot in https://github.com/bigskysoftware/htmx/pull/1064
    • Bump github.com/labstack/echo/v4 from 4.1.17 to 4.9.0 in /www/test/1.7.0/test/realtime by @dependabot in https://github.com/bigskysoftware/htmx/pull/1065
    • Bump github.com/labstack/echo/v4 from 4.1.17 to 4.9.0 in /www/test/1.8.0/test/realtime by @dependabot in https://github.com/bigskysoftware/htmx/pull/1067
    • Bump github.com/labstack/echo/v4 from 4.1.17 to 4.9.0 in /test/realtime by @dependabot in https://github.com/bigskysoftware/htmx/pull/1066
    • Add a note that the name attribute of an input is important by @wimdeblauwe in https://github.com/bigskysoftware/htmx/pull/1026
    • Properly set title during history cache miss by @leiffoged in https://github.com/bigskysoftware/htmx/pull/1014
    • Allow 'unset' directive for hx-vals and hx-vars by @B-Lenton in https://github.com/bigskysoftware/htmx/pull/1013
    • doc: fix typo in hx-select-oob attribute example by @sltong in https://github.com/bigskysoftware/htmx/pull/994
    • doc: fixed typo on hx-swap page by @thejoeejoee in https://github.com/bigskysoftware/htmx/pull/991
    • Fix typo in docs by @marciomazza in https://github.com/bigskysoftware/htmx/pull/995
    • doc: add note to alpine-morph example by @bmihelac in https://github.com/bigskysoftware/htmx/pull/987
    • doc: add missing import in alpine-morph example by @bmihelac in https://github.com/bigskysoftware/htmx/pull/986
    • doc: Explain how to detect boosted requests by @dalito in https://github.com/bigskysoftware/htmx/pull/981

    New Contributors

    • @danieljsummers made their first contribution in https://github.com/bigskysoftware/htmx/pull/972
    • @chapmandu made their first contribution in https://github.com/bigskysoftware/htmx/pull/962
    • @machour made their first contribution in https://github.com/bigskysoftware/htmx/pull/1000
    • @AlexZeitler made their first contribution in https://github.com/bigskysoftware/htmx/pull/1019
    • @n0nag0n made their first contribution in https://github.com/bigskysoftware/htmx/pull/1021
    • @mikeckennedy made their first contribution in https://github.com/bigskysoftware/htmx/pull/1022
    • @wimdeblauwe made their first contribution in https://github.com/bigskysoftware/htmx/pull/1025
    • @saemideluxe made their first contribution in https://github.com/bigskysoftware/htmx/pull/1041
    • @sponsfreixes made their first contribution in https://github.com/bigskysoftware/htmx/pull/1049
    • @leiffoged made their first contribution in https://github.com/bigskysoftware/htmx/pull/1014
    • @B-Lenton made their first contribution in https://github.com/bigskysoftware/htmx/pull/1013
    • @sltong made their first contribution in https://github.com/bigskysoftware/htmx/pull/994
    • @thejoeejoee made their first contribution in https://github.com/bigskysoftware/htmx/pull/991
    • @marciomazza made their first contribution in https://github.com/bigskysoftware/htmx/pull/995
    • @bmihelac made their first contribution in https://github.com/bigskysoftware/htmx/pull/987
    • @dalito made their first contribution in https://github.com/bigskysoftware/htmx/pull/981

    Full Changelog: https://github.com/bigskysoftware/htmx/compare/v1.8.0...v1.8.1 htmx.min.js.gz

    Source code(tar.gz)
    Source code(zip)
    htmx.js(132.74 KB)
    htmx.min.js(39.02 KB)
    htmx.min.js.gz(12.94 KB)
  • v1.8.0(Aug 10, 2022)

    Trying a Github release

    What's Changed

    • fix minor typo by @bfallik in https://github.com/bigskysoftware/htmx/pull/823
    • Bump follow-redirects from 1.13.2 to 1.14.8 by @dependabot in https://github.com/bigskysoftware/htmx/pull/816
    • Added selector for input of type button by @iustin94 in https://github.com/bigskysoftware/htmx/pull/836
    • Treat target="_self" the same as being empty by @mauricioarangoosorio in https://github.com/bigskysoftware/htmx/pull/818
    • Document outerHTML limitation on by @adamchainz in https://github.com/bigskysoftware/htmx/pull/871
    • Rewrite scheme-relative URL’s to https by @adamchainz in https://github.com/bigskysoftware/htmx/pull/870
    • Removed two links that don't work by @YesSeri in https://github.com/bigskysoftware/htmx/pull/868
    • Update locality-of-behaviour.md by @dz4k in https://github.com/bigskysoftware/htmx/pull/865
    • Add data-loading-aria-busy directive for loading-states extension by @Renerick in https://github.com/bigskysoftware/htmx/pull/864
    • Add missing header by @eldamir in https://github.com/bigskysoftware/htmx/pull/861
    • Add Clojure babashka link by @prestancedesign in https://github.com/bigskysoftware/htmx/pull/856
    • Fix typo in hypermedia-apis-vs-data-apis.md by @JamesGardiner in https://github.com/bigskysoftware/htmx/pull/855
    • Improve HX-Push and hx-push-url documentation by @adamchainz in https://github.com/bigskysoftware/htmx/pull/853
    • Remove double period by @snan in https://github.com/bigskysoftware/htmx/pull/852
    • Update installation instructions by @adamchainz in https://github.com/bigskysoftware/htmx/pull/851
    • Fix broken response headers links by @jonathanberger in https://github.com/bigskysoftware/htmx/pull/843
    • docs: fix links to web-sockets extension page by @msladecek in https://github.com/bigskysoftware/htmx/pull/841
    • Update hx-push.md to correct title by @gone in https://github.com/bigskysoftware/htmx/pull/838
    • feat(ext): add disable-element extension by @David-Guillot in https://github.com/bigskysoftware/htmx/pull/869
    • Fix a typo in reference.md by @qrhfz in https://github.com/bigskysoftware/htmx/pull/897
    • Attempts to fix case when htmx is loaded multiple times into browser by @gone in https://github.com/bigskysoftware/htmx/pull/883
    • Documentation fix by @gone in https://github.com/bigskysoftware/htmx/pull/890
    • Check for localStorage availability by @David-Guillot in https://github.com/bigskysoftware/htmx/pull/872
    • Update hx-boost.md by @lllama in https://github.com/bigskysoftware/htmx/pull/874
    • Added missing documentation: htmx:timeout event by @gnat in https://github.com/bigskysoftware/htmx/pull/921
    • Docs: Fix dead links and typo by @Dosenpfand in https://github.com/bigskysoftware/htmx/pull/924
    • Fix typo in bulk-update example by @czue in https://github.com/bigskysoftware/htmx/pull/914
    • Update hx-boost.md by @gnat in https://github.com/bigskysoftware/htmx/pull/909
    • Further doc fix for #895 by @dan-osull in https://github.com/bigskysoftware/htmx/pull/910
    • Docs: Hotwire / Turbo to htmx Migration Guide by @gnat in https://github.com/bigskysoftware/htmx/pull/911
    • Improvements in WebSocket extension by @Renerick in https://github.com/bigskysoftware/htmx/pull/863
    • Adding support for client side redirects - HX-Location by @gone in https://github.com/bigskysoftware/htmx/pull/832
    • Style changes proposal by @tunguski in https://github.com/bigskysoftware/htmx/pull/899
    • Update websockets extension documentation by @Renerick in https://github.com/bigskysoftware/htmx/pull/928
    • Add CFWheels TODO example to the list by @bpamiri in https://github.com/bigskysoftware/htmx/pull/941
    • forgot to rename this file by @gone in https://github.com/bigskysoftware/htmx/pull/940
    • Small typo fixes by @Gornstats in https://github.com/bigskysoftware/htmx/pull/938
    • Introduce consistent footer for all pages by @tunguski in https://github.com/bigskysoftware/htmx/pull/929
    • Implement HX-Reswap by @mayowa in https://github.com/bigskysoftware/htmx/pull/949
    • Fix a typo in 1.8.0 changelog by @Renerick in https://github.com/bigskysoftware/htmx/pull/948
    • Typo, was hs-sse instead of hx-sse by @flibustenet in https://github.com/bigskysoftware/htmx/pull/946
    • Update server-examples.md by @bpamiri in https://github.com/bigskysoftware/htmx/pull/944
    • Proposal: talk page in single column by @tunguski in https://github.com/bigskysoftware/htmx/pull/937

    New Contributors

    • @bfallik made their first contribution in https://github.com/bigskysoftware/htmx/pull/823
    • @iustin94 made their first contribution in https://github.com/bigskysoftware/htmx/pull/836
    • @mauricioarangoosorio made their first contribution in https://github.com/bigskysoftware/htmx/pull/818
    • @YesSeri made their first contribution in https://github.com/bigskysoftware/htmx/pull/868
    • @Renerick made their first contribution in https://github.com/bigskysoftware/htmx/pull/864
    • @eldamir made their first contribution in https://github.com/bigskysoftware/htmx/pull/861
    • @prestancedesign made their first contribution in https://github.com/bigskysoftware/htmx/pull/856
    • @JamesGardiner made their first contribution in https://github.com/bigskysoftware/htmx/pull/855
    • @snan made their first contribution in https://github.com/bigskysoftware/htmx/pull/852
    • @jonathanberger made their first contribution in https://github.com/bigskysoftware/htmx/pull/843
    • @David-Guillot made their first contribution in https://github.com/bigskysoftware/htmx/pull/869
    • @qrhfz made their first contribution in https://github.com/bigskysoftware/htmx/pull/897
    • @Dosenpfand made their first contribution in https://github.com/bigskysoftware/htmx/pull/924
    • @czue made their first contribution in https://github.com/bigskysoftware/htmx/pull/914
    • @dan-osull made their first contribution in https://github.com/bigskysoftware/htmx/pull/910
    • @tunguski made their first contribution in https://github.com/bigskysoftware/htmx/pull/899
    • @bpamiri made their first contribution in https://github.com/bigskysoftware/htmx/pull/941
    • @Gornstats made their first contribution in https://github.com/bigskysoftware/htmx/pull/938
    • @flibustenet made their first contribution in https://github.com/bigskysoftware/htmx/pull/946

    Full Changelog: https://github.com/bigskysoftware/htmx/compare/v1.7.0...v1.8.0

    Source code(tar.gz)
    Source code(zip)
    htmx-1.8.0.min.js(38.50 KB)
    htmx-1.8.0.tar.gz(67.04 KB)
Owner
Big Sky Software
We find hot new industry trends & then do the opposite of that...
Big Sky Software
A modest JavaScript framework for the HTML you already have

Stimulus A modest JavaScript framework for the HTML you already have Stimulus is a JavaScript framework with modest ambitions. It doesn't seek to take

Hotwire 11.7k Dec 29, 2022
A declarative, HTML-based language that makes building web apps fun

A declarative, HTML-based language that makes building web apps fun ?? Docs ∙ Try Online ∙ Contribute ∙ Get Support Intro Marko is HTML re-imagined as

Marko 12k Jan 3, 2023
The Power CAT code components are a set of Power Apps component framework (PCF) controls that can be used to enhance power apps.

Power CAT code components The Power CAT code components are a set of Power Apps component framework (PCF) controls that can be used to enhance power a

Microsoft 70 Jan 2, 2023
Mapbox Visual for Power BI - High performance, custom map visuals for Power BI dashboards

Mapbox Visual for Microsoft Power BI Make sense of your big & dynamic location data with the Mapbox Visual for Power BI. Quickly design high-performan

Mapbox 121 Nov 22, 2022
ASP.NET Core image gallery with Marten, ImageSharp, and HTMX

Image Gallery This sample uses the following core technologies to deliver an image gallery experience: ASP.NET Core Marten ImageSharp.Web HTMX This al

Khalid Abuhakmeh 11 Feb 9, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Using Htmx, ASP.NET Core, and Marten (postgres document db) to sort list

Using Htmx, ASP.NET Core, and Marten (postgres document db) to sort list

Khalid Abuhakmeh 5 Feb 16, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
A repostory of samples, which demonstrates, how to use the 'Power Tools' extension for Visual Studio Code.

vscode-powertools-samples A repository of samples, which demonstrates, how to use the Power Tools extension for Visual Studio Code. Apps data-url-conv

e.GO Mobile 7 Feb 3, 2022
Hands-on lab for Power Platform Tools for Visual Studio Code

Power Platform Tools for Visual Studio Code Lab This repository contains the lab instructions and content on how to experience the Power Platform Tool

Microsoft 8 Dec 1, 2022
Dynamic components with the power of next-gen bundle tools

Moon island architecture example Dynamic components with the power of next-gen bundle tools What is this? This example shows you how the moon-island a

idler 8 Oct 21, 2022
Resize image in browser with high quality and high speed

pica - high quality image resize in browser Resize images in browser without pixelation and reasonably fast. Autoselect the best of available technolo

Nodeca 3.2k Dec 27, 2022
JavaScript diagramming library for interactive flowcharts, org charts, design tools, planning tools, visual languages.

GoJS, a JavaScript Library for HTML Diagrams GoJS is a JavaScript and TypeScript library for creating and manipulating diagrams, charts, and graphs. S

Northwoods Software Corporation 6.6k Dec 30, 2022
🛠 Solana Web3 Tools - A set of tools to improve the user experience on Web3 Solana Frontends.

?? Solana Web3 Tools - A set of tools to improve the user experience on Web3 Solana Frontends.

Holaplex 30 May 21, 2022
A set of React components implementing Google's Material Design specification with the power of CSS Modules

React Toolbox is a set of React components that implement Google's Material Design specification. It's powered by CSS Modules and harmoniously integra

React Toolbox 8.7k Dec 30, 2022
It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.

impress.js It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prez

impress.js 37k Jan 2, 2023
It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.

impress.js It's a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prez

impress.js 37.1k Jan 3, 2023
Quick access menu for the GNOME panel with options that help ease the workflow for newcomers and power users alike.

Tofu Menu (formerly Fedora Menu) Quick access menu for the GNOME panel with options that help ease the workflow for newcomers and power users alike. S

null 19 Sep 26, 2022
Carpatin is a React JS Admin Dashboard Template that focuses on the management flows of a back-office application. We leverage the Material-UI power of stylizing the components in a way that feels more professional.

Carpatin Dashboard Free Carpatin is a React Js Admin Dashboard Template that focuses on the management flows of a back-office application. We leverage

Devias 64 Dec 12, 2022