···14141515**Maudit is about making static websites**. It has no higher goals than that. It won't try to become a server-side rendering framework, a hybrid framework, or anything else. This focus allows us to make the best static website generator we can.
16161717+**From the blog:** [The still scrolls of the web, unchanging and steadfast, at last!](/news/for-static-websites/)
1818+1719## Your website changes less often than its content
18201921Many parts of Maudit projects are written in Rust, a compiled language, thus requiring recompilation for changes. This overhead is justified by the assumption that structural changes are less frequent than content updates. For example, in a blog, new articles are more common than layout changes.
20222123Without delving into the complexities of incremental builds, this architecture allows Maudit projects to build very quickly, even for large websites, thanks to the raw performance of a compiled language.
22242525+**From the blog:** [Maudit is faster than most other static website generators, but](/news/maudit-compile-time/)
2626+2327## Maudit is a library, not a framework
24282529Every feature in Maudit was designed to be able to be used outside of Maudit. You can access and load all of your content outside of Maudit. Maudit pages are normal Rust structs and can be handled outside of Maudit, and so on.
26302731In the simplest terms, you call Maudit, it does not call you.
3232+3333+**From the blog:** [The court's library, not its king](/news/maudit-library/)
+38
website/content/news/for-static-websites.md
···11+---
22+title: "The still scrolls of the web, unchanging and steadfast, at last!"
33+description: "Maudit is about making static websites"
44+author: The Maudit Team
55+date: 2025-10-15
66+---
77+88+We have one goal for Maudit: To make it the best tool to generate static websites. This may include helpful side features like loading Markdown content, syntax highlighting, image processing, sitemap generation, RSS feeds, etc.
99+1010+But the end result is always the same: You get a static website. No server, no serverless (with a server), no nothing. You get `.html` files that you can host wherever support hosting static files.
1111+1212+**Pros:**
1313+1414+- You can host Maudit websites pretty much anywhere, for typically cheap
1515+- Hosting said websites is also headache-free and will last as long as servers are able to serve HTML files
1616+1717+**Cons:**
1818+1919+- You don't have a backend
2020+- Static websites are typically quite static
2121+2222+There are many ways around both of these cons, typically involving hosting a backend or a serverless function and doing client-side fetches from your static website. This is a good solution, and work for many websites, but does still have limitations compared to a server-side rendering framework.
2323+2424+Ultimately..
2525+2626+## It's not you, it's us
2727+2828+**If you need server-side rendering: You probably shouldn't use Maudit.** You might counter this with "but, [Maudit is a library](/news/maudit-library/), it's so flexible, I can just render my Maudit pages in my Axum backend", which, great observation, but still, isn't the goal of Maudit!
2929+3030+You are free to do anything you want of course, but Maudit is not and won't be optimised for your use case, it might always feel like you are fighting against the library, building resentment against us, and generally having a not so good time.
3131+3232+## There is just so little time
3333+3434+We believe that it is fundamentally impossible for a tool to be great at both building static and dynamic websites. You can be good, but not great.
3535+3636+Maudit aims to absolutely delight people who want static websites. Adding server side rendering would introduce technical constraints and take development time away that would obstruct this goal.
3737+3838+You should use the proper tool for the job, and we hope for Maudit to be the proper tool for static websites.
+3-1
website/content/news/maudit-compile-time.md
···20202121## Workarounds
22222323-You can also push this further, if your layouts do change often and you don't want to recompile your project on every change, use a runtime templating language like [minijinja](https://github.com/mitsuhiko/minijinja) or [Tera](https://keats.github.io/tera/docs/).
2323+If your layouts do change often and you don't want to recompile your project on every change, using a runtime templating language like [minijinja](https://github.com/mitsuhiko/minijinja) or [Tera](https://keats.github.io/tera/docs/) is a great solution. You can load your templates at runtime, and thus change them without recompiling.
2424+2525+### Even further beyond
24262527You can push it even further! [Routes paths are not static, they can be fully dynamic](https://maudit.org/docs/routing/#:~:text=The%20path%20can%20be%20any%20Rust%20expression) as such, you could load your routes fully at runtime.
2628
+3-3
website/content/news/maudit01.md
···11111212...
13131414-_More seriously_, this is the first release of **Maudit** (/mo.di/), a static site generator written in Rust.
1414+_More seriously_, this is the first release of **Maudit** (/mo.di/), a Rust library to generate static sites.
15151616<div class="text-center italic">Want to just get started using Maudit? Check out our <a href="/docs/quick-start/">Quick Start guide</a></div>
1717···4040}
4141```
42424343-That said, we hope to avoid as much boilerplate as possible, as such fancy macros are involved at times. But, we're not much into magic either, so expanding those macros should still yield code that is easy to understand.
4343+Being a library means that a Maudit project may have a little more boilerplate than you'd see in a framework, but it also means that you can use all the tools and libraries of the Rust ecosystem, and that you are in full control of your project.
44444545-Our goal is to strike a balance between convenience and clarity. It shouldn't feel like there's a lot of impossible to understand weird code happening behind the scenes.
4545+We try nonetheless to make the experience as smooth as possible and reduce boilerplate where we can. For instance, the `#[route]` attribute macro makes defining routes fairly concise.
46464747## Reasonably fast
4848