A tiny unframework for making SPAs in Svelte
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Conduitry a77791b407 add pkg.type and pkg.exports instead of pkg.module 2 years ago
404.html add 404 redirect 4 years ago
LICENSE initial commit 4 years ago
README.md adjust readme 3 years ago
location.js bail from click handler when alt key is pressed 3 years ago
package.json add pkg.type and pkg.exports instead of pkg.module 2 years ago



A tiny unframework for making SPAs in Svelte.


This library intercepts clicks on internal links and turns them into history.pushState() calls. The browser's location object is exposed through a Svelte store, which updates upon these intercepted clicks and upon popstate events. It also optionally provides a mechanism for hosts which do not support falling back to index.html for missing files.


If your host supports falling back to index.html for requests of all unknown files, you should use that feature. Copy location.js into your project, and you're done.

If your host does not support falling back to index.html

You'll use a custom 404 page that redirects to the root and encodes the original URL in a query parameter. The root page then rewrites the URL using history.replaceState().

Add 404.html to your project at the appropriate path. Uncomment the lines at the top of location.js to handle the rewrite after the redirection.


import location from '.../location.js';

This is a Svelte store containing the location object, and updates whenever a link click is intercepted or a popstate event occurs.

Interception occurs when all of the following are met:

  1. The link is same-origin.
  2. The link is not merely a #hash change.
  3. The link does not have a target attribute.
  4. The link does not have a download attribute.
  5. The link was left clicked.
  6. The link was not clicked while pressing Alt/Ctrl/Meta/Shift.
  7. The link click was not preventDefaulted.

The store also contains goto(url, replace) and scroll() methods.

  • goto(url, replace) navigates to a URL.
    • url is resolved according to normal rules.
    • replace is a boolean indicating whether to use history.pushState() or history.replaceState().
  • scroll() scrolls to either the top of the page or the element indicated by the #hash portion of the URL. This should be called after you've finished rendering a page.