What is progressive enhancement in Remix?

Answer

Progressive enhancement is a core Remix philosophy: build features that work with basic HTML first, then enhance with JavaScript. Remix enforces this through its Form and loader system. A Remix form: <Form method="post"><input name="title" /><button>Save</button></Form>. Without JavaScript: this is a standard HTML form — the browser POSTs to the server, the action runs, and the server responds with a redirect. With JavaScript: Remix intercepts the submission, sends it via fetch, re-runs loaders, and updates the UI without a full page reload. This means Remix apps work even when JavaScript fails to load — users can still submit forms and navigate. Practical benefits: better accessibility (screen readers, keyboard navigation), works on slow connections (HTML is faster than JS), resilience (JS errors don't break core functionality). useNavigation() exposes the pending state for adding loading indicators when JS is available.