{"id":20314617,"url":"https://github.com/dashpilot/vanilla-spa","last_synced_at":"2026-06-12T09:31:12.613Z","repository":{"id":135256796,"uuid":"330693812","full_name":"dashpilot/vanilla-spa","owner":"dashpilot","description":"Simple single-page app written in vanilla js","archived":false,"fork":false,"pushed_at":"2021-02-07T15:05:07.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-04T08:45:20.471Z","etag":null,"topics":["handlebars","no-build","simple","single-page-app","spa","vanilla-javascript","vanilla-js"],"latest_commit_sha":null,"homepage":"https://vanilla-spa-wine.vercel.app/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dashpilot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-18T14:35:57.000Z","updated_at":"2021-02-07T15:05:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"20f76696-9115-4855-b7d7-f8ddc72404d4","html_url":"https://github.com/dashpilot/vanilla-spa","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dashpilot/vanilla-spa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dashpilot%2Fvanilla-spa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dashpilot%2Fvanilla-spa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dashpilot%2Fvanilla-spa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dashpilot%2Fvanilla-spa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dashpilot","download_url":"https://codeload.github.com/dashpilot/vanilla-spa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dashpilot%2Fvanilla-spa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34238711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["handlebars","no-build","simple","single-page-app","spa","vanilla-javascript","vanilla-js"],"created_at":"2024-11-14T18:16:05.854Z","updated_at":"2026-06-12T09:31:12.596Z","avatar_url":"https://github.com/dashpilot.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vanilla SPA\nSimple single-page app written in vanilla js. It uses Handlebars for templating and Navigo for routing.\n\n## About\nTired of compilers, build-scripts, dependancy hell and `npm audit fix`? This refreshingly simple Single Page App (SPA) has no shadow dom or build pipelines and does just enough to be useful.\n\nVanilla SPA also runs in environments that do not support Nodejs such as Object Storage or shared hosting and can be edited on the fly without waiting for a compiler or a build pipeline.\n\n## Demo\nhttps://vanilla-spa-wine.vercel.app/\n\n## History.pushState() Routing\nVanilla SPA supports history.pushState() routing, which gives you clean URLs (no #hash). Another advantage is that you can prerender you pages via a service like https://prerender.com, effectively turning you SPA into a static site!\n\nFor history.pushState() to work, you need to redirect all requests to index.html. Below are some examples on how to configure this on different platforms:\n\n### http-server (for local testing)\n`http-server --port 8080 -P http://localhost:8080?`\n\n### Vercel\nAdd a vercel.json file with the following contents:\n```\n{\n  \"routes\": [{\n      \"handle\": \"filesystem\"\n    },\n    {\n      \"src\": \"/.*\",\n      \"dest\": \"/index.html\"\n    }\n  ]\n}\n```\nMore info: https://vercel.com/docs/configuration#routes\n\n### Netlify\nAdd a `_redirects` file containing the following:\n```\n/*    /index.html   200\n```\nMore info: https://docs.netlify.com/routing/redirects/rewrites-proxies/#history-pushstate-and-single-page-apps\n\n### Apache\nCreate a `.htaccess` file containing the following:\n```\nRewriteEngine on\nRewriteCond %{REQUEST_URI} !^/index.html$\nRewriteCond %{REQUEST_URI} !\\.(gif|jpe?g|png|css|js)$\nRewriteRule .* /index.html [L,R=302]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdashpilot%2Fvanilla-spa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdashpilot%2Fvanilla-spa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdashpilot%2Fvanilla-spa/lists"}