{"id":37133692,"url":"https://github.com/abcdlsj/funy","last_synced_at":"2026-01-14T15:36:24.484Z","repository":{"id":208825705,"uuid":"722576816","full_name":"abcdlsj/funy","owner":"abcdlsj","description":"A `Go` serverless framework using plugin.","archived":false,"fork":false,"pushed_at":"2024-05-31T10:06:35.000Z","size":5570,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-31T11:26:04.491Z","etag":null,"topics":["plugin","serverless","serverless-framework","serverless-plugin"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abcdlsj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-11-23T12:54:33.000Z","updated_at":"2024-05-31T11:26:06.200Z","dependencies_parsed_at":"2023-11-23T14:25:16.469Z","dependency_job_id":"50e15715-cb21-4b21-9e44-037e7cc784fe","html_url":"https://github.com/abcdlsj/funy","commit_stats":null,"previous_names":["abcdlsj/funy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/abcdlsj/funy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abcdlsj%2Ffuny","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abcdlsj%2Ffuny/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abcdlsj%2Ffuny/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abcdlsj%2Ffuny/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abcdlsj","download_url":"https://codeload.github.com/abcdlsj/funy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abcdlsj%2Ffuny/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28424374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["plugin","serverless","serverless-framework","serverless-plugin"],"created_at":"2026-01-14T15:36:23.664Z","updated_at":"2026-01-14T15:36:24.471Z","avatar_url":"https://github.com/abcdlsj.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Funy\n\n`Funy` is a `Golang` serverless framework using `Plugin`.\nCan deploy `Service` or `Function`.\n\n\u003e Idea from [shuttle.rs](https://www.shuttle.rs/blog/2022/04/27/dev-log-1)\n\n~~\u003e Currently, `Funy` dones not support `Apple Silicon`, I got a `issue` like \u003chttps://github.com/golang/go/issues/58826\u003e.~~\n\n## Usage\n\n![demo.gif](demo.gif)\n\n### Build\n`Clone` the repository, then `make` to build the binary.\n```fish\nmake\n```\n\n### Start `Daemon` `funyd`\nStart `funyd` service\n```fish\nGIN_MODE=release USERNAME=\u003cusername\u003e PASSWORD=\u003cpassword\u003e PORT=8080 ./bin/funyd\n```\n\n### Start `Server`\nUse `funy` cli to create and deploy a server\n\n**You need to set same `USERNAME` and `PASSWORD` in environment.**\n\n1. create a server, with `ld_flag_x` to set `Port` and specify `main_file`\n```fish\n./bin/funy app --server_address=http://localhost:8080 create --name=ginserver1 --ld_flag_x=\"main.Port=8081\" --main_file=ginserver.go\n```\n\n2. can use `curl` to get progress.\n\n```fish\ncurl -su 'USERNAME:PASSWORD' localhost:8080/orchestrator/\n```\n\noutput\n```fish\n{\"ginserver1\":{\"process_state\":0,\"tar_dir\":\"/tmp/funy2099804210/ginserver1\",\"main_file\":\"ginserver.go\",\"ld_flag_x\":{\"main.Port\":\"8081\"}}}\n```\n\nThe `process_state` can be:\n```go\nconst (\n\tCreate ProcessState = iota\n\tQueued\n\tBuilt\n\tLoaded\n\tDeployed\n\tError\n\tDeleted\n)\n```\n\n3. deploy the server\n```fish\n./bin/funy app --server_address=http://localhost:8080 deploy --name=ginserver1 --dir=example/ginserver/\n```\n\n4. ping the server\nafter the `process_state` is `Deployed`, you can use `curl` to call your server.\n```fish\n\u003e curl localhost:8081\n{\"message\":\"Hello World!\"}⏎\n\u003e curl localhost:8081/ping\n{\"ping count\":\"1\"}⏎\n```\n\n### Function\nYou also can deploy a function by `funy`\n\n```fish\n\u003e ./bin/funy app --server_address=http://localhost:8080 --type=function create --name=hellohandler --main_file=handler.go\n\u003e ./bin/funy app --server_address=http://localhost:8080 --type=function deploy --name=hellohandler --dir=example/hellohandler\n# When deploy success, you can use `curl` to call it\n\u003e curl -u '\u003cusername\u003e:\u003cpassword\u003e' localhost:8080/func/hellohandler\nHello World!⏎\n```\n\n## More\n**Can use `ld_flag_x` do many of things.**\n\nI have a slightly more complex function, [example/leetjump](/example/leetjump/)\n\nImplemented so that when you call `http://xxxx/xxx/:question_id` to jump to the issue page.\nIt uses `Cloudflare` `R2` to store the file containing the information underlying the `Leetcode` issue.\n\nI declared some variables in `main.go`. You can set this using `ld_flag_x`.\n```go\nvar (\n\tBUCKET          string\n\tACCOUNTID       string\n\tACCESSKEYID     string\n\tACCESSKEYSECRET string\n\n\tLOGPREFIX string\n)\n```\n\n\u003e `LOGPREFIX` is a prefix for logs that may be used in the future.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabcdlsj%2Ffuny","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabcdlsj%2Ffuny","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabcdlsj%2Ffuny/lists"}