{"id":13564543,"url":"https://github.com/foomo/contentserver","last_synced_at":"2025-11-10T01:03:10.133Z","repository":{"id":12788774,"uuid":"15462443","full_name":"foomo/contentserver","owner":"foomo","description":"Serves content tree structures very quickly through a json socket api","archived":false,"fork":false,"pushed_at":"2025-02-17T03:09:48.000Z","size":5995,"stargazers_count":10,"open_issues_count":10,"forks_count":4,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-08T13:50:11.239Z","etag":null,"topics":["foomo","foomo-contentserver"],"latest_commit_sha":null,"homepage":"https://www.foomo.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/foomo.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-12-26T23:37:02.000Z","updated_at":"2025-04-02T07:05:24.000Z","dependencies_parsed_at":"2024-01-16T18:58:05.637Z","dependency_job_id":"80c07be8-174b-4d70-9f08-ff9d8250d922","html_url":"https://github.com/foomo/contentserver","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foomo%2Fcontentserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foomo%2Fcontentserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foomo%2Fcontentserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foomo%2Fcontentserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foomo","download_url":"https://codeload.github.com/foomo/contentserver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252408430,"owners_count":21743120,"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":["foomo","foomo-contentserver"],"created_at":"2024-08-01T13:01:32.768Z","updated_at":"2025-11-10T01:03:10.127Z","avatar_url":"https://github.com/foomo.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"[![Build Status](https://github.com/foomo/contentserver/actions/workflows/pr.yml/badge.svg?branch=main\u0026event=push)](https://github.com/foomo/contentserver/actions/workflows/pr.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/foomo/contentserver)](https://goreportcard.com/report/github.com/foomo/contentserver)\n[![Coverage Status](https://coveralls.io/repos/github/foomo/contentserver/badge.svg?branch=main\u0026)](https://coveralls.io/github/foomo/contentserver?branch=main)\n[![GoDoc](https://godoc.org/github.com/foomo/contentserver?status.svg)](https://godoc.org/github.com/foomo/contentserver)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"sesamy\" src=\".github/assets/contentserver.png\"/\u003e\n\u003c/p\u003e\n\n# Content Server\n\nServes content tree structures very quickly.\n\n## Concept\n\nA Server written in GoLang to mix and resolve content from different content sources, e.g. CMS, Blog, Shop and many\nother more. The server provides a simple to use API for non blocking content repository updates, to resolve site content\nby an URI or to get deep-linking multilingual URIs for a given contentID.\n\nIt's up to you how you use it and which data you want to export to the server. Our intention was to write a fast and\ncache hazzle-free content server to mix different content sources.\n\n### Overview\n\n\u003cimg src=\"docs/assets/Overview.svg\" width=\"100%\" height=\"500\"\u003e\n\n## Export Data\n\nAll you have to do is to provide a tree of content nodes as a JSON encoded RepoNode.\n\n| Attribute     |          Type          |                                                 Usage |\n|---------------|:----------------------:|------------------------------------------------------:|\n| Id            |         string         |                        unique id to identify the node |\n| MimeType      |         string         | mime-type of the node, e.g. text/html, image/png, ... |\n| LinkId        |         string         |                 (symbolic) link/alias to another node |\n| Groups        |        []string        |                                        access control |\n| URI           |         string         |                                                   URI |\n| Name          |         string         |                                                  name |\n| Hidden        |          bool          |                                          hide in menu |\n| DestinationId |         string         |                              alias / symlink handling |\n| Data          | map[string]interface{} |                                          payload data |\n| Nodes         |  map[string]*RepoNode  |                                           child nodes |\n| Index         |        []string        |                        contains the order of of nodes |\n\n### Tips\n\n- If you do not want to build a multi-market website define a generic market, e.g. call it *universe*\n- keep it lean and do not export content which should not be accessible at all, e.g. you are working on a super secret\n  fancy new category of your website\n- Hidden nodes can be resolved by their uri, but are hidden on nodes\n- To avoid duplicate content provide a DestinationId ( = ContentId of the node you want to reference) instead of URIs\n\n## Request Data\n\nThere is a PHP Proxy implementation for foomo in [Foomo.ContentServer](https://github.com/foomo/Foomo.ContentServer).\nFeel free to use it or to implement your own proxy in the language you love. The API should be easily to implement in\nevery other framework and language, too.\n\n## Update Flowchart\n\n\u003cimg src=\"docs/assets/Update-Flow.svg\" width=\"100%\" height=\"700\"\u003e\n\n### Usage\n\n```bash\n$ contentserver -h\nServes content tree structures very quickly\n\nUsage:\n  contentserver [command]\n\nAvailable Commands:\n  completion  Generate the autocompletion script for the specified shell\n  help        Help about any command\n  http        Start http server\n  socket      Start socket server\n  version     Print version information\n\nFlags:\n  -h, --help                help for contentserver\n      --log-format string   log format (default \"json\")\n      --log-level string    log level (default \"info\")\n\nUse \"contentserver [command] --help\" for more information about a command.\n```\n\n## How to Contribute\n\nPlease refer to the [CONTRIBUTING](.github/CONTRIBUTING.md) details and follow the [CODE_OF_CONDUCT](.github/CODE_OF_CONDUCT.md) and [SECURITY](.github/SECURITY.md) guidelines.\n\n## License\n\nDistributed under LGPL 3.0 License, please see license file within the code for more details.\n\n_Made with ♥ [foomo](https://www.foomo.org) by [bestbytes](https://www.bestbytes.com)_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoomo%2Fcontentserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoomo%2Fcontentserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoomo%2Fcontentserver/lists"}