{"id":13424508,"url":"https://github.com/f/kamber","last_synced_at":"2025-11-10T09:02:28.785Z","repository":{"id":56217138,"uuid":"47515420","full_name":"f/kamber","owner":"f","description":"Static site server (basically blogs) with Crystal Language","archived":false,"fork":false,"pushed_at":"2019-06-13T02:48:28.000Z","size":296,"stargazers_count":172,"open_issues_count":2,"forks_count":8,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-01T23:44:57.113Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://kamber-test.herokuapp.com/","language":"Crystal","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/f.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-12-06T21:55:39.000Z","updated_at":"2025-01-30T03:39:22.000Z","dependencies_parsed_at":"2022-08-15T14:50:43.510Z","dependency_job_id":null,"html_url":"https://github.com/f/kamber","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/f/kamber","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f%2Fkamber","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f%2Fkamber/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f%2Fkamber/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f%2Fkamber/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/f","download_url":"https://codeload.github.com/f/kamber/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f%2Fkamber/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":283652060,"owners_count":26871285,"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","status":"online","status_checked_at":"2025-11-10T02:00:06.292Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-07-31T00:00:55.368Z","updated_at":"2025-11-10T09:02:28.756Z","avatar_url":"https://github.com/f.png","language":"Crystal","funding_links":[],"categories":["Crystal","Web Servers"],"sub_categories":[],"readme":"# Kamber\n\n![Kamber](./asset/kamber.png)\n\nKamber is a blog server based on [Kemal](http://github.com/sdogruyol/kemal).\n\n[![Join the chat at https://gitter.im/f/kamber](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/f/kamber?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\u003e This is not a static blog generator, **it's a static blog server**. It _doesn't require_ any other HTTP servers. It uses Crystal and Kemal to generate HTML and also serve it.\n\n## Quickstart\n\nDeploy on Heroku and start blogging **in a minute**!\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/f/kamber)\n\n[View an Heroku example](https://kamber-test.herokuapp.com/)\n\n## Features\n\n- Supports many post types:\n  - **Markdown** Posts\n  - GitHub **Gist**\n  - **Tweet** Embeds\n  - **Video** Embeds\n  - Disqus Comments\n- **Very fast, ~15x faster than other static site generators/servers**, since it's based on [Kemal](http://github.com/sdogruyol/kemal). [See Benchmarks](https://github.com/sdogruyol/kemal#super-fast-3)\n- Easy to develop. Just add contents to **`posts.yml`** file.\n- Custom themes.\n\n## Getting Started\n\n### 1. Install Crystal and Kamber\n```\nbrew install crystal-lang\ngit clone https://github.com/f/kamber myblog\ncd myblog\nshards install\n```\n\n### 2. Add Contents\n\n- Edit `kamber/config.cr` and set your title.\n- Edit `posts/posts.yml` file and add some content.\n\n### 3. Build and Run\n```\ncrystal build --release src/kamber.cr\n./kamber\n```\n\nTo run in production, add `-e production` flag.\n\n```\n./kamber -e production\n```\n\n## Themes\n\nKamber has theme support.\n\n| Theme | GitHub |\n|-------|--------|\n| Kamber Default Theme | [`f/kamber-theme-default`](http://github.com/f/kamber-theme-default) |\n| Kamber Dark Theme | [`f/kamber-theme-dark`](http://github.com/f/kamber-theme-dark) |\n\n[How to install themes](https://github.com/f/kamber-theme-default/tree/master#1-add-as-a-dependency)\n\n### Writing Custom Themes\n\nKamber has a simple API to build your own themes. To start quickly, just [fork the `kamber-theme-default`](https://github.com/f/kamber-theme-default/fork) and start hacking it.\n\n**We are waiting for your themes!**\n\n## Configuration\n\nYou can set your blog title from `config.cr`\n\n```crystal\n$BLOG_TITLE = \"My Awesome Blog\"\n$BLOG_DESC = \"programming journal\"\n$GOOGLE_ANALYTICS = \"UA-XXXXX-X\"\n\n# Activate Theme\nrequire \"kamber-theme-default\"\n```\n\n## Post Types\n\n`posts/posts.yml` has multiple YAML documents, each represents a blog item (aka post type).\n\n### Post (Markdown)\n\n```yml\ntype: post\ntitle: Example Post\nabstract: Lorem ipsum dolor sit amet, consectetur adipisicing elit\nfile: posts/example-post.md\ndisqus: true\n```\n\n### Link\n\n```yml\ntype: link\ntitle: Example Link\nurl: \"http://crystal-lang.org\"\n```\n\n### Video\n\nKamber supports **Youtube** and **Vimeo** videos. The main pattern of `video` is\n`[video provider]/[video id]`\n\n```yml\ntype: video\ntitle: Example Video\nabstract:\nvideo: youtube/YE3GkCB3t_0\n```\n\nIf you will use **Vimeo**, change `video` key to\n\n```yml\nvideo: vimeo/147842467\n```\n\n### Tweet\n\nThis type embeds Tweets to the index. The pattern is `[username]/[tweet id]`\n\n```yml\ntype: tweet\ntitle: Example Tweet\ntweet: fkadev/673506301415194625\n```\n\n### Gist\n\nThis type embeds GitHub Gists to the index. The pattern is `[username]/[gist id]`\n\n```yml\ntype: gist\ntitle: Example Gist\ngist: f/c12af6b9e7d53bd9224d\n```\n\n## Deploy to Heroku\n\nKamber uses custom buildpack to run in Heroku.\n\n```\nheroku create myblog --buildpack https://github.com/f/heroku-buildpack-kamber\ngit push heroku master\n```\n\n## Screenshots\n\n![Screen 1](./asset/screen-1.png)\n\n![Screen 2](./asset/screen-2.png)\n\n## Contributing\n\n1. Fork it ( https://github.com/f/kamber/fork )\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n4. Push to the branch (git push origin my-new-feature)\n5. Create a new Pull Request\n\n## Roadmap\n\n- [x] Add base post types and make it run\n- [ ] Add page support\n\n## Contributors\n\n- [f](https://github.com/f) Fatih Kadir Akın - creator, maintainer\n\n\u003e Kambersiz düğün olmaz.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff%2Fkamber","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff%2Fkamber","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff%2Fkamber/lists"}