Home

Awesome

<p align="center"> <a href="https://www.bridgetownrb.com"> <img src="https://www.bridgetownrb.com/images/bridgetown-logo-twitter-card.jpg?v=1" alt="Bridgetown" width="750" /> </a> </p> <h1 align="center"> <a href="https://www.bridgetownrb.com">Bridgetown</a> </h1>

Bridgetown is a next-generation, progressive site generator & fullstack framework, powered by Ruby. Bridgetown takes your local content and external data loaded from APIs; renders templates in Markdown, ERB, and many other formats; automatically compiles frontend assets via esbuild; and exports a complete website ready to be served by fast CDNs like Render or traditional web servers. Bridgetown also integrates closely with Roda for fullstack, dynamic web application functionality—but only when and where you need it.

Build Status Gem Version Licensed MIT Join the Discord Chat PRs welcome!


Special Thanks to Our GitHub Sponsors! 🙏 🎉

Say howdy 👋 to our blossoming list of current and past sponsors of Bridgetown on GitHub! You too can join this list and sponsor open source "alt" Ruby development.

<img src="https://avatars.githubusercontent.com/svoop?s=256" alt="svoop" width="128" /><img src="https://avatars.githubusercontent.com/rahoulb?s=256" alt="rahoulb" width="128" /><img src="https://avatars.githubusercontent.com/joshuap?s=256" alt="joshuap" width="128" /><img src="https://avatars.githubusercontent.com/skvk?s=256" alt="skvk" width="128" /><img src="https://avatars.githubusercontent.com/monfresh?s=256" alt="monfresh" width="128" />
<a href="https://github.com/svoop">@svoop</a><a href="https://github.com/rahoulb">@rahoulb</a><a href="https://github.com/joshuap">@joshuap</a><a href="https://github.com/skvk">@skvk</a><a href="https://github.com/monfresh">@monfresh</a>
<a href="https://bitcetera.com/">Website</a><a href="https://theartandscienceofruby.com/">Website</a><a href="https://joshuawood.net/">Website</a><a href="https://www.moncefbelyamani.com/">Website</a>
<img src="https://avatars.githubusercontent.com/renuo?s=256" alt="renuo" width="128" /><img src="https://avatars.githubusercontent.com/subsevenx?s=256" alt="subsevenx" width="128" /><img src="https://avatars.githubusercontent.com/collindonnell?s=256" alt="collindonnell" width="128" /><img src="https://avatars.githubusercontent.com/nbkkb7x?s=256" alt="nbkkb7x" width="128" /><img src="https://avatars.githubusercontent.com/bpo?s=256" alt="bpo" width="128" />
<a href="https://github.com/renuo">@renuo</a><a href="https://github.com/subsevenx">@subsevenx</a><a href="https://github.com/collindonnell">@collindonnell</a><a href="https://github.com/nbkkb7x">@nbkkb7x</a><a href="https://github.com/bpo">@bpo</a>
<a href="https://www.renuo.ch/">Website</a><a href="http://collindonnell.com/">Website</a><a href="https://somethingkiller.com">Website</a><a href="https://brian.orourke.io">Website</a>
<img src="https://avatars.githubusercontent.com/DRBragg?s=256" alt="DRBragg" width="128" /><img src="https://avatars.githubusercontent.com/andrewmcodes?s=256" alt="andrewmcodes" width="128" /><img src="https://avatars.githubusercontent.com/karloscarweber?s=256" alt="karloscarweber" width="128" /><img src="https://avatars.githubusercontent.com/swilgosz?s=256" alt="swilgosz" width="128" /><img src="https://avatars.githubusercontent.com/ttilberg?s=256" alt="ttilberg" width="128" />
<a href="https://github.com/DRBragg">@DRBragg</a><a href="https://github.com/andrewmcodes">@andrewmcodes</a><a href="https://github.com/karloscarweber">@karloscarweber</a><a href="https://github.com/swilgosz">@swilgosz</a><a href="https://github.com/ttilberg">@ttilberg</a>
<a href="https://www.drbragg.dev">Website</a><a href="https://andrewm.codes">Website</a><a href="https://kow.fm/">Website</a><a href="https://hanamimastery.com/">Website</a><a href="http://www.timtilberg.com">Website</a>
<img src="https://avatars.githubusercontent.com/Brem-LLC?s=256" alt="Brem-LLC" width="128" /><img src="https://avatars.githubusercontent.com/posiczko?s=256" alt="posiczko" width="128" /><img src="https://avatars.githubusercontent.com/fuzzygroup?s=256" alt="fuzzygroup" width="128" /><img src="https://avatars.githubusercontent.com/maxveldink?s=256" alt="maxveldink" width="128" /><img src="https://avatars.githubusercontent.com/oleingemann?s=256" alt="oleingemann" width="128" />
<a href="https://github.com/Brem-LLC">@Brem-LLC</a><a href="https://github.com/posiczko">@posiczko</a><a href="https://github.com/fuzzygroup">@fuzzygroup</a><a href="https://github.com/maxveldink">@maxveldink</a><a href="https://github.com/oleingemann">@oleingemann</a>
<a href="https://brem.io">Website</a><a href="https://tetrapyloctomy.org">Website</a><a href="https://fuzzyblog.io/blog/">Website</a><a href="https://maxveld.ink">Website</a><a href="https://www.oleingemann.com">Website</a>
<img src="https://avatars.githubusercontent.com/onurozer?s=256" alt="onurozer" width="128" /><img src="https://avatars.githubusercontent.com/joelhawksley?s=256" alt="joelhawksley" width="128" /><img src="https://avatars.githubusercontent.com/coreyaus?s=256" alt="coreyaus" width="128" /><img src="https://avatars.githubusercontent.com/johlym?s=256" alt="johlym" width="128" /><img src="https://avatars.githubusercontent.com/pascallaliberte?s=256" alt="pascallaliberte" width="128" />
<a href="https://github.com/onurozer">@onurozer</a><a href="https://github.com/joelhawksley">@joelhawksley</a><a href="https://github.com/coreyaus">@coreyaus</a><a href="https://github.com/johlym">@johlym</a><a href="https://github.com/pascallaliberte">@pascallaliberte</a>
<a href="https://onurozer.me">Website</a><a href="https://hawksley.org">Website</a><a href="https://www.codenation.com">Website</a><a href="https://johnathan.org">Website</a><a href="https://pascal.works">Website</a>
<img src="https://avatars.githubusercontent.com/luctus?s=256" alt="luctus" width="128" /><img src="https://avatars.githubusercontent.com/AbuMareBear?s=256" alt="AbuMareBear" width="128" /><img src="https://avatars.githubusercontent.com/rootnoob?s=256" alt="rootnoob" width="128" /><img src="https://avatars.githubusercontent.com/matoni109?s=256" alt="matoni109" width="128" /><img src="https://avatars.githubusercontent.com/jc00ke?s=256" alt="jc00ke" width="128" />
<a href="https://github.com/luctus">@luctus</a><a href="https://github.com/AbuMareBear">@AbuMareBear</a><a href="https://github.com/rootnoob">@rootnoob</a><a href="https://github.com/matoni109">@matoni109</a><a href="https://github.com/jc00ke">@jc00ke</a>
<a href="https://dailytics.com">Website</a><a href="https://relativepath.io/">Website</a>
<img src="https://avatars.githubusercontent.com/jespr?s=256" alt="jespr" width="128" /><img src="https://avatars.githubusercontent.com/MikeRogers0?s=256" alt="MikeRogers0" width="128" /><img src="https://avatars.githubusercontent.com/existentialmutt?s=256" alt="existentialmutt" width="128" /><img src="https://avatars.githubusercontent.com/jr180180?s=256" alt="jr180180" width="128" /><img src="https://avatars.githubusercontent.com/eclectic-coding?s=256" alt="eclectic-coding" width="128" />
<a href="https://github.com/jespr">@jespr</a><a href="https://github.com/MikeRogers0">@MikeRogers0</a><a href="https://github.com/existentialmutt">@existentialmutt</a><a href="https://github.com/jr180180">@jr180180</a><a href="https://github.com/eclectic-coding">@eclectic-coding</a>
<a href="http://johnsanchez.me/">Website</a><a href="https://www.eclecticcoding.com/">Website</a>
<img src="https://avatars.githubusercontent.com/williamkennedy?s=256" alt="williamkennedy" width="128" /><img src="https://avatars.githubusercontent.com/adrianvalenz?s=256" alt="adrianvalenz" width="128" /><img src="https://avatars.githubusercontent.com/scoutapm-sponsorships?s=256" alt="scoutapm-sponsorships" width="128" /><img src="https://avatars.githubusercontent.com/asaaki?s=256" alt="asaaki" width="128" /><img src="https://avatars.githubusercontent.com/leastbad?s=256" alt="leastbad" width="128" />
<a href="https://github.com/williamkennedy">@williamkennedy</a><a href="https://github.com/adrianvalenz">@adrianvalenz</a><a href="https://github.com/scoutapm-sponsorships">@scoutapm-sponsorships</a><a href="https://github.com/asaaki">@asaaki</a><a href="https://github.com/leastbad">@leastbad</a>
<a href="https://williamkennedy.ninja">Website</a><a href="https://adrianvalenz.com">Website</a><a href="https://scoutapm.com">Website</a><a href="https://markentier.tech/">Website</a>
<img src="https://avatars.githubusercontent.com/jasoncharnes?s=256" alt="jasoncharnes" width="128" /><img src="https://avatars.githubusercontent.com/pascalwengerter?s=256" alt="pascalwengerter" width="128" /><img src="https://avatars.githubusercontent.com/wout?s=256" alt="wout" width="128" /><img src="https://avatars.githubusercontent.com/johnchambers?s=256" alt="johnchambers" width="128" /><img src="https://avatars.githubusercontent.com/mtomov?s=256" alt="mtomov" width="128" />
<a href="https://github.com/jasoncharnes">@jasoncharnes</a><a href="https://github.com/pascalwengerter">@pascalwengerter</a><a href="https://github.com/wout">@wout</a><a href="https://github.com/johnchambers">@johnchambers</a><a href="https://github.com/mtomov">@mtomov</a>
<a href="http://www.jasoncharnes.com">Website</a><a href="https://pascal.rocks">Website</a><a href="https://www.howtoruby.com/">Website</a>
<img src="https://avatars.githubusercontent.com/marcoroth?s=256" alt="marcoroth" width="128" /><img src="https://avatars.githubusercontent.com/miatrinity?s=256" alt="miatrinity" width="128" /><img src="https://avatars.githubusercontent.com/pilotcph?s=256" alt="pilotcph" width="128" /><img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=identicon&s=128&" alt="" width="128" />
<a href="https://github.com/marcoroth">@marcoroth</a><a href="https://github.com/miatrinity">@miatrinity</a><a href="https://github.com/pilotcph">@pilotcph</a><a href="https://github.com/sponsors/jaredcwhite">You Next?</a>
<a href="https://marcoroth.dev">Website</a><a href="http://www.pilotcph.dk">Website</a>

Commercial Support

Bridgetown development is spearheaded by Portland-based web studio Whitefusion. Contact us if you need commercial support for your Bridgetown content strategy, site design, or deployment. Also providing commercial support: Radioactive Toy based in the UK.

Star History

Star History Chart


Start Here

Get Up to Speed

Testing Locally

If you'd like to hack away on Bridgetown directly, you'll need to clone this repo and ensure the test suite passes. Note that this is a "monorepo", meaning that multiple Rubygem codebases are stored within a single repo.

$ git clone git@github.com:bridgetownrb/bridgetown.git
$ cd bridgetown
$ bundle # install development gems
$ bundle exec rake # run the full test suite

After making changes in one of the gems, say bridgetown-core, if you want to run a single unit test, you can use the command:

$ script/test test/test_foo.rb

Or run script/test to run the full test suite. You can also run script/cibuild to include Rubocop linting, etc., and at the root level of the repo, run bundle exec rake test_all to test the entire monorepo.

To switch one of your own website repos to using the local gem, add the local gem path to the site's Gemfile as follows:

gem "bridgetown-core", path: "/path/to/bridgetown/bridgetown-core"
# additional gems as needed

Need help?

If you don't find the answer to your problem in our docs, ask the community for help.

Code of Conduct

In order to have a more open and welcoming community, Bridgetown adheres to a code of conduct adapted from the Contributor Covenant.

Please adhere to this code of conduct in any interactions you have in the Bridgetown community. It is strictly enforced on all official Bridgetown repositories, websites, and resources. If you encounter someone violating these terms, please let one of our core team members know and we will address it as soon as possible.

Contributors

[!NOTE] Interested in joining the Bridgetown Core Team? Send a DM to Jared in Discord and let's chat!

Bridgetown is built by:

<img src="https://avatars.githubusercontent.com/jaredcwhite?s=256" alt="jaredcwhite" width="128" /><img src="https://avatars.githubusercontent.com/jaredmoody?s=256" alt="jaredmoody" width="128" /><img src="https://avatars.githubusercontent.com/andrewmcodes?s=256" alt="andrewmcodes" width="128" /><img src="https://avatars.githubusercontent.com/ParamagicDev?s=256" alt="ParamagicDev" width="128" /><img src="https://avatars.githubusercontent.com/MikeRogers0?s=256" alt="MikeRogers0" width="128" />
<a href="https://github.com/jaredcwhite">@jaredcwhite</a><a href="https://github.com/jaredmoody">@jaredmoody</a><a href="https://github.com/andrewmcodes">@andrewmcodes</a><a href="https://github.com/ParamagicDev">@ParamagicDev</a><a href="https://github.com/MikeRogers0">@MikeRogers0</a>
Portland, ORPortland, ORWilmington, NCProvidence, RINy-Ålesund, Svalbard
<img src="https://avatars.githubusercontent.com/wout?s=256" alt="wout" width="128" /><img src="https://avatars.githubusercontent.com/codemargaret?s=256" alt="codemargaret" width="128" /><img src="https://avatars.githubusercontent.com/julianrubisch?s=256" alt="julianrubisch" width="128" /><img src="https://avatars.githubusercontent.com/ianbayne?s=256" alt="ianbayne" width="128" /><img src="https://avatars.githubusercontent.com/ayushn21?s=256" alt="ayushn" width="128" />
<a href="https://github.com/wout">@wout</a><a href="https://github.com/codemargaret">@codemargaret</a><a href="https://github.com/julianrubisch">@julianrubisch</a><a href="https://github.com/ianbayne">@ianbayne</a><a href="https://github.com/ayushn21">@ayushn21</a>
Brighton, UKPortland, ORVienna, AustriaTokyo, JapanLondon, UK
<img src="https://avatars.githubusercontent.com/bkmgit?s=256" alt="" width="128" /><img src="https://avatars.githubusercontent.com/pascalwengerter?s=256" alt="pascalwengerter" width="128" /><img src="https://avatars.githubusercontent.com/u/57881112?s=460&u=51f2d296a79c3f045172c7b18a704c994e0eee08&v=4" alt="marketerly" width="128" /><img src="https://avatars.githubusercontent.com/juanvqz?s=256" alt="juanvqz" width="128" /><img src="https://avatars.githubusercontent.com/katafrakt?s=256" alt="katafrakt" width="128" />
<a href="https://github.com/bkmgit">@bkmgit</a><a href="https://github.com/pascalwengerter">@pascalwengerter</a><a href="https://github.com/marketerly">@marketerly</a><a href="https://github.com/juanvqz">@juanvqz</a><a href="https://github.com/katafrakt">@katafrakt</a>
Lisbon, PortugalTripoli, LibyaOaxaca, MéxicoWrocław, PL
<img src="https://avatars.githubusercontent.com/erikyuzwa?s=256" alt="erikyuzwa" width="128" /><img src="https://avatars.githubusercontent.com/eclectic-coding?s=256" alt="eclectic-coding" width="128" /><img src="https://avatars.githubusercontent.com/collindonnell?s=256" alt="collindonnell" width="128" /><img src="https://avatars.githubusercontent.com/juhat?s=256" alt="juhat" width="128" /><img src="https://avatars.githubusercontent.com/debashis-biswal?s=256" alt="" width="128" />
<a href="https://github.com/erikyuzwa">@erikyuzwa</a><a href="https://github.com/eclectic-coding">@eclectic-coding</a><a href="https://github.com/collindonnell">@collindonnell</a><a href="https://github.com/juhat">@juhat</a><a href="https://github.com/debashis-biswal">@debashis-biswal</a>
Calgary, ABNorth Carolina, USPortland, ORBudapest, Hungary
<img src="https://avatars.githubusercontent.com/nachoal?s=256" alt="nachoal" width="128" /><img src="https://avatars.githubusercontent.com/deivid-rodriguez?s=256" alt="deivid-rodriguez" width="128" /><img src="https://avatars.githubusercontent.com/Eric-Guo?s=256" alt="Eric-Guo" width="128" /><img src="https://avatars.githubusercontent.com/jacobherrington?s=256" alt="jacobherrington" width="128" /><img src="https://avatars.githubusercontent.com/fpsvogel?s=256" alt="" width="128" />
<a href="https://github.com/nachoal">@nachoal</a><a href="https://github.com/deivid-rodriguez">@deivid-rodriguez</a><a href="https://github.com/Eric-Guo">@Eric-Guo</a><a href="https://github.com/jacobherrington">@jacobherrington</a><a href="https://github.com/fpsvogel">@fpsvogel</a>
CDMX, MéxicoMadrid, SpainShanghai, ChinaFayetteville, ARLexington, KY
<img src="https://avatars.githubusercontent.com/vvveebs?s=256" alt="vvveebs" width="128" /><img src="https://avatars.githubusercontent.com/rickychilcott?s=256" alt="rickychilcott" width="128" /><img src="https://avatars.githubusercontent.com/tommasongr?s=256" alt="tommasongr" width="128" /><img src="https://avatars.githubusercontent.com/tombruijn?s=256" alt="tombruijn" width="128" /><img src="https://avatars.githubusercontent.com/svoop?s=256" alt="svoop" width="128" />
<a href="https://github.com/vvveebs">@vvveebs</a><a href="https://github.com/rickychilcott">@rickychilcott</a><a href="https://github.com/tommasongr">@tommasongr</a><a href="https://github.com/tombruijn">@tombruijn</a><a href="https://github.com/svoop">@svoop</a>
London, UKOhio, USAmsterdam, The NetherlandsMilan, ITEurope
<img src="https://avatars.githubusercontent.com/michaelherold?s=256" alt="michaelherold" width="128" /><img src="https://avatars.githubusercontent.com/joemasilotti?s=256" alt="joemasilotti" width="128" /><img src="https://avatars.githubusercontent.com/ikass?s=256" alt="ikass" width="128" /><img src="https://avatars.githubusercontent.com/jw81?s=256" alt="jw81" width="128" /><img src="https://avatars.githubusercontent.com/MSILycanthropy?s=256" alt="jw81" width="128" />
<a href="https://github.com/michaelherold">@michaelherold</a><a href="https://github.com/joemasilotti">@joemasilotti</a><a href="https://github.com/Ikass">@ikass</a><a href="https://github.com/jw81">@jw81</a><a href="https://github.com/MSILycanthropy">@MSILycanthropy</a>
Omaha, NEPortland, ORLatviaKansas City, MOKansas City, MO
<img src="https://avatars.githubusercontent.com/jeremyevans?s=256" alt="jeremyevans" width="128" /><img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=identicon&s=128&" alt="" width="128" />
<a href="https://github.com/jeremyevans">@jeremyevans</a>You Next?
Sacramento, CAAnywhere

License

The gem is available as open source under the terms of the MIT LICENSE file.