@import nu.marginalia.WebsiteUrl @import nu.marginalia.search.model.NavbarModel @import nu.marginalia.search.model.SearchFilters @import nu.marginalia.search.model.SearchProfile @import nu.marginalia.search.svc.SearchFrontPageService.IndexModel @import nu.marginalia.search.svc.SearchFrontPageService.NewsItem @import nu.marginalia.search.svc.SearchFrontPageService.NewsItemCluster @param NavbarModel navbar @param WebsiteUrl websiteUrl @param IndexModel model @template.part.head(title = "Marginalia Search", allowIndexing = true) @template.part.navbar(navbar = navbar)
@template.serp.part.searchform(query = "", profile = SearchProfile.NO_FILTER.filterId, filters = new SearchFilters(websiteUrl))
@if (model.news().isEmpty())
This is the new design and home of Marginalia Search. You can read about what this entails here.

The old version of Marginalia Search remains available at https://old-search.marginalia.nu/.
Explore the Web
  • Prioritizes non-commercial content
  • Tools for both search and discovery
  • Find lost old websites
Open Source
  • Custom index and crawler software
  • Simple technology -- no AI or cloud
  • AGPL license
Privacy by default
  • Filter out tracking and adtech
  • No user or search data shared with 3rd parties
  • No long-term retention of queries or IP addresses
@else
Subscriptions
Export as OPML
@for (NewsItemCluster cluster : model.news()) !{NewsItem item = cluster.first();}
${item.domain()}
${item.date().substring(0, 10)}
$unsafe{item.description()}
@for (var remainder : cluster.rest())
${remainder.title()}
${remainder.date().substring(0, 10)}
@endfor
@endfor
Last updated: ${model.refreshDate()}
@endif @template.part.footerLegal()