{"id":15062506,"url":"https://github.com/apollosoftwarexyz/cinnamon","last_synced_at":"2025-04-10T13:13:26.744Z","repository":{"id":57098252,"uuid":"387002992","full_name":"apollosoftwarexyz/cinnamon","owner":"apollosoftwarexyz","description":"Apollo Software's intuitive backend API framework.","archived":false,"fork":false,"pushed_at":"2025-02-12T20:29:45.000Z","size":326825,"stargazers_count":4,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T02:22:12.659Z","etag":null,"topics":["api","apollo-software-limited","backend","backend-api","cinnamon","framework","monorepo","nodejs","server","typescript","web","webserver","webservices","yarn"],"latest_commit_sha":null,"homepage":"https://docs.apollosoftware.xyz/cinnamon","language":"TypeScript","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/apollosoftwarexyz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-17T17:42:27.000Z","updated_at":"2024-12-17T11:47:52.000Z","dependencies_parsed_at":"2023-11-19T04:23:29.780Z","dependency_job_id":"e1456e36-bc4e-467a-9a5a-83d5b8f86db3","html_url":"https://github.com/apollosoftwarexyz/cinnamon","commit_stats":{"total_commits":158,"total_committers":2,"mean_commits":79.0,"dds":0.05696202531645567,"last_synced_commit":"d7ddb7989ff2f206c84e3f364b7c9e8b1d562a34"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollosoftwarexyz%2Fcinnamon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollosoftwarexyz%2Fcinnamon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollosoftwarexyz%2Fcinnamon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollosoftwarexyz%2Fcinnamon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apollosoftwarexyz","download_url":"https://codeload.github.com/apollosoftwarexyz/cinnamon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248225653,"owners_count":21068078,"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":["api","apollo-software-limited","backend","backend-api","cinnamon","framework","monorepo","nodejs","server","typescript","web","webserver","webservices","yarn"],"created_at":"2024-09-24T23:41:48.186Z","updated_at":"2025-04-10T13:13:26.463Z","avatar_url":"https://github.com/apollosoftwarexyz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eCinnamon\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n    Built with ❤︎ by \u003ca href=\"https://apollosoftware.xyz/\"\u003eApollo Software Limited\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cb\u003eCinnamon is our opinionated Enterprise TypeScript framework for building API services.\u003c/b\u003e\n\u003cbr\u003e\n📚 \u003cb\u003eLearn more on our documentation site: https://docs.apollosoftware.xyz/cinnamon\u003c/b\u003e 📚\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\u003ci\u003e\"The line of code that's the fastest to write, that never breaks, that doesn't need maintenance, is the line you never had to write.\"\u003c/i\u003e\u003c/p\u003e\n\n\u003cbr\u003e\n\u003chr\u003e\n\n**(β) Cinnamon is currently in beta!** We are actively working on the framework\nand welcome feedback and contributions!\nPlease feel free to open issues and pull requests on this repository.\n\nFor information about the current status of the project, please see the\n[VERSIONS](VERSIONS.md) file.\n\n\u003chr\u003e\n\u003cbr\u003e\u003cbr\u003e\n\nThe key design principle of Cinnamon is to encourage use of best practices\nand patterns in a way that is natural, intuitive, and reliable. Its declarative\nprogramming style aims to reduce the amount of boilerplate code required to\nbuild a project. Collectively, these allow teams to focus their valuable time\non building their product and user-experience and not on mundane boilerplate\ncode.\n\n- Actively used and maintained by Apollo Software Limited on projects large and\n  small.\n- Builds on and incorporates many years of experience building API services.\n- Get exactly what you need for your project with Cinnamon's modular design.\n- Built to be highly dependable and reliable. Use projects built years ago as\n  though they were born yesterday.\n- We audit and review all dependencies to ensure they are secure, reliable and\n  well-maintained. We also actively monitor for security vulnerabilities and \n  update dependencies as soon as possible. See our [security policy](SECURITY.md).\n\n**Convinced?** Have a project ready to go in seconds with\n  [`create-cinnamon-project`](#getting-started).\n\n\u003cbr\u003e\n\n```typescript\nimport { Controller, Route, Method, Context } from '@apollosoftwarexyz/cinnamon';\nimport { MaybeAuthenticated } from '../middlewares/Authentication';\n\n@Controller('api', 'v1')\nexport default class IndexController {\n\n    /**\n     * Greets the user.\n     * If they are authenticated, they will be greeted by name.\n     */\n    @Middleware(MaybeAuthenticated)\n    @Route(Method.GET, '/')\n    public async index(ctx: Context) {\n        return {\n            body: `Hello, ${ctx.user?.smartName ?? 'Guest'}!`\n        };\n    }\n\n}\n```\n\n\u003csup\u003e↑ A controller from the template project created with \u003ca href=\"#getting-started\"\u003e`create-cinnamon-project`\u003c/a\u003e with the \u003cb\u003eDatabase\u003c/b\u003e and \u003cb\u003eAuthentication\u003c/b\u003e features selected.\u003c/sup\u003e\n\n\u003cbr\u003e\n\n## Getting Started\nSimply run the following command to set up a new Cinnamon project:\n\n```bash\n$ yarn create cinnamon-project my-project\n```\n\nThis will create a new Cinnamon project in the `my-project` directory, prompt\nyou to select features that will be automatically added, and provide\ninstructions on how to run the project.\n\nThen, check out our [documentation](https://docs.apollosoftware.xyz/cinnamon)\nto learn more about how to use Cinnamon!\n\n\u003cbr\u003e\n\n## Features\n- [x] Configurable with `cinnamon.toml`\n- [x] Logger module (extensive logging for your application)\n    - [x] Logger delegate support (handle log events - e.g., for logging remotely)\n- [x] Web Server module (for backend API service controllers) using [Koa](https://github.com/koajs)\n    - [x] Hot reload for API service controllers\n    - [x] Middleware and Routing support\n    - [x] Static file hosting support\n- [x] Database ORM module using [Mikro-ORM](https://mikro-orm.io)\n- [x] Validation module (for data validation on JavaScript/JSON objects)\n    - [x] Middleware for Web Server module\n- [x] Session Management and Authentication module\n- [x] CLI tooling and utilities\n    - [ ] CLI helpers for production and development tasks\n    - [ ] Support for shell script generation\n- [ ] Additional hot reload\n  - [ ] Allow specifying directories with reload 'type' (`restart`, `only-config`, `only-controllers`) on change.\n  - [ ] Hot-reload `cinnamon.toml` by default.\n\n\u003cbr\u003e\n\n## Development\n1. Cinnamon uses [Yarn Berry (4.x)](https://yarnpkg.com/getting-started/install)'s built-in workspace management. If necessary, you should install it with `yarn set version stable`:\n    ```bash\n    # To update the local version:\n    cd /path/to/cinnamon/repository\n    \n    # You cannot use \"yarn set version latest\" reliably, because it will install\n    # the latest version of Yarn 1.x, if you don't have Yarn 2+ installed.\n    yarn set version stable\n    \n    # Afterwards, run yarn --version to confirm everything was installed correctly.\n    yarn --version\n    # ...should output \"4.x.x\"\n    ```\n2. Run `yarn` in the repository root to install the packages and link the workspaces.\n3. To build the project, use `yarn build`.\n\nYou can also use `yarn watch` to watch for changes and rebuild the project.\n\n\u003cbr\u003e\n\n## License\n[MIT License](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapollosoftwarexyz%2Fcinnamon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapollosoftwarexyz%2Fcinnamon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapollosoftwarexyz%2Fcinnamon/lists"}