Routify 2 - Pet Peeve Edition
Written by jakobrosenberg 08/20/2020
Why Routify 2?
In short, our new hash based routing support required a breaking change - and when you have one breaking change, you might as well break everything. So we did. Gone are all the pet peeves.
Path resolvement of $url was never quite right and as much as I hate to admit it, rixo was right from day one. From now on
$url paths are resolved as traditional file paths and ./ refers to the folder and not the file.
basepath was another pet peeve. It should have been an urlTransform function but by the time I realized, basepath had already been added.
Almost lastly, _layout.svelte makes very little semantic sense. It handles guards, scopes, redirects, folder node etc. In short, the file represents the folder and folder-scope. Therefore a _folder.svelte alias has been added.
Lastly, @sveltech was a pain to type so we moved everything to @roxi which just happens to be the home for our upcoming framework, Roxi 🤫
Getting Started
To try the new Routify 2 beta, open a terminal and type
npx @roxi/routify init --branch 2.x To migrate an existing project, refer to the migration guide below
What’s new
New package scope
Routify has moved from @sveltech/routify to @roxi/routify. This is both easier to type and aligns with our upcoming Routify-powered framework Roxi.
Hash based routing
Hash based routing has been on of the most requested features for Routify and now it’s finally here.
To enable, set useHash to true in the runtime config.
<Router config={{useHash: true}}> The runtime config is passed to the Router component, typically found in App.svelte
New use directive for $url helper
The $url helper can now be used as both a function and a use directive.
/**function*/
<a href={$url('./movies')}>Movies</a>
/**directive*/
<a href="./movies" use:$url>Movies</a>
/**function with parameters*/
<a href={$url('./movies/:id', {id: 123})}>Some movie</a>
/**directive with parameters*/
<a href="./movies/:id" use:$url={{id: 123}}>Some movie</a> urlTransform
urlTransform replaces basepath. It requires a little more code, but provides much more control and versatility.
basepath example
config.urlTransform = {
apply: url => `/my-base${url}`,
remove: url => url.replace('/my-base', ''),
} _folder.svelte
An alias for _layout.svelte.
Migration Guide
- Search and replace
@sveltech/routifywith@roxi/routify $url()no longer treats non-layout files as folders. If you’re using relative paths replace the first../in$url()with./.$basepathwas deprecated in favor ofurlTransform. Please refer tourlTransform’s basepath example.- The Routify rollup plugin, now has to be imported from
@roxi/routify/plugins/rollup routifyDirhas been defaulted to.routify. Update toimport { routes } from '../.routify/routes'inApp.svelteor setroutifyDirtonode_modules/@roxi/routify/tmp/routes. (Thanks @flayks)
Writing good documentation that is up-to-date is difficult. If you notice a mistake, help us out.