{"id":22143531,"url":"https://github.com/brettchalupa/soy","last_synced_at":"2025-07-29T16:42:25.245Z","repository":{"id":43361154,"uuid":"463638058","full_name":"brettchalupa/soy","owner":"brettchalupa","description":"Experimental Ruby-backed static site generator","archived":false,"fork":false,"pushed_at":"2022-03-06T21:04:10.000Z","size":136,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-31T13:46:57.136Z","etag":null,"topics":["markdown","ruby","static-site-generator"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brettchalupa.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-25T18:33:16.000Z","updated_at":"2023-07-25T14:54:51.000Z","dependencies_parsed_at":"2022-08-21T01:50:40.088Z","dependency_job_id":null,"html_url":"https://github.com/brettchalupa/soy","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brettchalupa%2Fsoy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brettchalupa%2Fsoy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brettchalupa%2Fsoy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brettchalupa%2Fsoy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brettchalupa","download_url":"https://codeload.github.com/brettchalupa/soy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227606635,"owners_count":17792796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["markdown","ruby","static-site-generator"],"created_at":"2024-12-01T22:13:19.874Z","updated_at":"2024-12-01T22:13:20.496Z","avatar_url":"https://github.com/brettchalupa.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Soy mascot Tofu](demo/content/images/tofu.png)\n\n```\n   oo_       .-.   wWw  wWw \n  /  _)-\u003c  c(O_O)c (O)  (O) \n  \\__ `.  ,'.---.`,( \\  / ) \n     `. |/ /|_|_|\\ \\\\ \\/ /  \n     _| || \\_____/ | \\o /   \n  ,-'   |'. `---' .`_/ /    \n (_..--'   `-...-' (_.'     \n```\n\n# Soy\n\n**A static-site generator for Rubyists**\n\nSoy is a program to generate websites. It embraces Ruby by using ERB for making\ndynamic templates instead of using another templating language.\n\n## Why / Vision\n\n_Ugh, another static site generator?!_ I hear you! I do! There are so many\nstatic site generators out there, it's almost disturbing.\n\nBut I think there's space for something a little different.\n\nMost static site generators are centered around Markdown files or HTML files,\nbut I think static websites have a data model and structure to them. Even a\nsimple blog does. And often times there are needs for more complex data models\nwith associations.\n\nI want Soy to be a data model-driven site generator with support for multiple\ndata stores, from Markdown to `YAML::Store` to maybe things like SQLite. The\nkey is that the data doesn't vary per environment and is checked into the\nsource code since it's used to generate the site.\n\nI also think Ruby is really joyous to code with, so by leveraging it for\ntemplates, it's expressive and powerful. Also, when it comes to defining the\ndata models and helpers, it'll be easy to stand up and validate.\n\nOf course it's not going to be as fast or as portable as Go or Rust or C but I\nhope it'll be fast enough and more than friendly to work with.\n\nI have a lot of ideas for how Soy could evolve, and I'm excited to make it\nhappen.\n\nSoy is new and actively under development. You could say it's still\nfermenting...\n\n## Bugs / Features\n\n- Write templates in ERB and use the Ruby you know and love\n- Author content in Markdown or HTML\n- Boot up a server and watch for changes\n\n## Installation\n\nSoy requires a modern, stable Ruby, [see ruby-lang.org](https://www.ruby-lang.org/en/downloads/)\n\nSupported Rubies:\n- 3.1\n- 3.0\n- 2.7\n\n1. Install Soy with `gem install soy`\n2. Create a new site with `soy new YOUR_SITE_NAME`\n3. Move into it the new site's directory\n4. Run `soy server` to get to building!\n\nYour site will then be accessible at [localhost:4848](http://localhost:4848)\n\n## Usage\n\n`soy` or `soy help` will output the commands that are available, but the most\ncommon ones are:\n\n- `soy new your_site_name` – create a new site from Soy's basic template\n- `soy build` – generate the HTML for your site\n- `soy server` – start up a web server to handle requests \u0026 watch for site changes to trigger rebuilds\n\n## Structure of a Soy Site\n\nBrowse `./demo/` to see a full site, but here's a breakdown of what goes into a Soy site:\n\n- `build/` – where the HTML is output to \u0026 served from locally, don't check this in\n- `content/` – where pages, images, styles, etc. live\n    - e.g. `index.html.erb`\n    - e.g. `about.md`\n- `views/` – where page layouts live (to be evaluated)\n    - `layout.html.erb` — default HTML page layout\n\n## Content\n\nSoy content lives in the `content/` directory. If the file name ends in `.erb`,\nit'll get run through the Soy renderer for ERB.\n\n### Markdown\n\nContent can be authored in Markdown, which outputs HTML. Soy uses\n[Kramdown](https://rubygems.org/gems/kramdown) for Markdown parsing.\n\n### ERB\n\nHTML and Markdown files don't need the `.erb` file extension, they'll always\nget run through ERB. So that's optional and totally up to you. `.erb` can help\nwith syntax highlighting in your editor.\n\nERB content will be rendered inside the layout specified in\n`views/layout.html.erb`.\n\nERB is neat because you can use whatever Ruby you want within it. Here's an\nexample with Markdown:\n\n``` markdown\n\u003c% @title = \"Neat Products Made of Soy\" %\u003e\n\n# \u003c%= @title %\u003e\n\n\u003c% [\"tofu\", \"tempeh\", \"edamame\"].each do |product| %\u003e\n- \u003c%= product %\u003e\n\u003c% end %\u003e\n```\n\n### Links\n\nLink to pages and content using the relative path. Markdown example:\n\n``` markdown\nCheck out [my super cool link](/cool-link).\n```\n\nThat would link to the `cool-link.html` page in the build dir.\n\nThe Soy development server (and many hosts) handle extension-less HTML\nrequests.\n\nYou can include the extension if you want to:\n\n``` markdown\nCheck out [my super cool link](/cool-link.html).\n```\n\nIt's really up to you and your preferences.\n\n## Development\n\nAfter checking out the repo, run `bin/setup` to install dependencies. Then, run\n`rake spec` to run the tests. You can also run `bin/console` for an interactive\nprompt that will allow you to experiment.\n\nTo install this gem onto your local machine, run `bundle exec rake install`.\n\n## Demo Site\n\nThe `./demo/` directory includes a site that can be built with Soy to test\nworks in progress and experiment with new features. It intends to use as many\nof the features as possible with the project.\n\nThe `bin/soy` binstub can be used to run the local repo's code, so `bin/soy\nbuild demo` will build the demo site.\n\n[View the demo site on Netlify.](https://soy-demo.netlify.app)\n\n## Releasing New Versions\n\nTo release a new version, update the version number in `version.rb`, and then run\n`bundle exec rake release`, which will create a git tag for the version, push\ngit commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at\nhttps://github.com/brettchalupa/soy. This project is intended to be a safe,\nwelcoming space for collaboration, and contributors are expected to adhere to\nthe [code of\nconduct](https://github.com/brettchalupa/soy/blob/main/CODE_OF_CONDUCT.md).\n\n## License\n\nThe gem is available as open source under the terms of the [MIT\nLicense](https://opensource.org/licenses/MIT).\n\n## Code of Conduct\n\nEveryone interacting in the Soy project's codebases, issue trackers, chat rooms\nand mailing lists is expected to follow the [code of\nconduct](https://github.com/brettchalupa/soy/blob/main/CODE_OF_CONDUCT.md).\n\n## Friends / Enemies\n\n- Jekyll — a really useful static site generator that uses Liquid for templating, core inspiration\n- Middleman — Ruby-based site generator that I used years ago and enjoyed\n- Hugo — really fast and compelling Go static site generator\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrettchalupa%2Fsoy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrettchalupa%2Fsoy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrettchalupa%2Fsoy/lists"}