{"id":28390382,"url":"https://github.com/tinystruct/tinystruct","last_synced_at":"2026-06-12T18:00:59.527Z","repository":{"id":40523742,"uuid":"80163148","full_name":"tinystruct/tinystruct","owner":"tinystruct","description":"A lightweight, modular Java application framework for web and CLI development,         designed for AI integration and plugin-based architecture.         Enabling developers to create robust solutions with ease for building efficient and scalable applications.","archived":false,"fork":false,"pushed_at":"2026-05-20T17:10:44.000Z","size":2419,"stargazers_count":333,"open_issues_count":0,"forks_count":47,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-05-20T22:45:21.102Z","etag":null,"topics":["ai-agent","ai-development","framework","java","java-ai","java-cli","java-frameworks","java-libraries","lightweight-framework","mcp","mcp-server","modular-design","netty","sse","tinystruct","tomcat","undertow","web-frameworks"],"latest_commit_sha":null,"homepage":"https://tinystruct.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tinystruct.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-01-26T22:46:44.000Z","updated_at":"2026-05-20T17:11:02.000Z","dependencies_parsed_at":"2023-11-15T16:28:44.360Z","dependency_job_id":"fc3dfa0a-7147-46da-ba34-1a2ba47f8a65","html_url":"https://github.com/tinystruct/tinystruct","commit_stats":null,"previous_names":[],"tags_count":181,"template":false,"template_full_name":null,"purl":"pkg:github/tinystruct/tinystruct","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinystruct%2Ftinystruct","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinystruct%2Ftinystruct/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinystruct%2Ftinystruct/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinystruct%2Ftinystruct/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tinystruct","download_url":"https://codeload.github.com/tinystruct/tinystruct/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinystruct%2Ftinystruct/sbom","scorecard":{"id":113456,"data":{"date":"2025-08-04","repo":{"name":"github.com/tinystruct/tinystruct","commit":"09505215e8ed49813c701278e8c191080d481ff6"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":5.5,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:40","Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:36","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:39","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: .mvn/wrapper/maven-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE-2.0.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/tinystruct/tinystruct/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/tinystruct/tinystruct/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/tinystruct/tinystruct/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:96: update your workflow using https://app.stepsecurity.io/secureworkflow/tinystruct/tinystruct/codeql.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (2) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-h46c-h94j-95f3","Warn: Project is vulnerable to: GHSA-wf8f-6423-gfxg"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T18:37:25.678Z","repository_id":40523742,"created_at":"2025-08-15T18:37:25.678Z","updated_at":"2025-08-15T18:37:25.678Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34256188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"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":["ai-agent","ai-development","framework","java","java-ai","java-cli","java-frameworks","java-libraries","lightweight-framework","mcp","mcp-server","modular-design","netty","sse","tinystruct","tomcat","undertow","web-frameworks"],"created_at":"2025-05-31T04:08:11.918Z","updated_at":"2026-06-12T18:00:59.522Z","avatar_url":"https://github.com/tinystruct.png","language":"Java","funding_links":[],"categories":["📚 Projects (1974 total)","开发框架","Projects"],"sub_categories":["MCP Servers","Web Frameworks"],"readme":"\n`\"How many are your works, O LORD ! In wisdom you made them all; the earth is full of your creatures.\"`\n***Psalms 104:24***\n\nThe tinystruct framework\n--\nA simple framework for Java development. Simple thinking, Better design, Easy to be used with better performance! \n\n[![MvnRepository](https://badges.mvnrepository.com/badge/org.tinystruct/tinystruct/badge.svg?label=MvnRepository)](https://mvnrepository.com/artifact/org.tinystruct/tinystruct)\n[![CodeQL](https://github.com/tinystruct/tinystruct/actions/workflows/codeql.yml/badge.svg)](https://github.com/tinystruct/tinystruct/actions/workflows/codeql.yml)\n\n[![Star History Chart](https://api.star-history.com/svg?repos=tinystruct/tinystruct\u0026type=Date)](https://www.star-history.com/#tinystruct/tinystruct\u0026Date)\n\n## Prerequisites\n\n- Java Development Kit (JDK) 17 or higher\n- Maven (for dependency management)\n- A text editor or IDE (IntelliJ IDEA, Eclipse, VS Code, etc.)\n\nGetting Started with tinystruct archetype\n--\nYou can follow this archetype to create a tinystruct-based project quickly: https://github.com/tinystruct/tinystruct-archetype\n\nInstallation and Getting Started Manually\n--\n* Add the dependency into your pom.xml.\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.tinystruct\u003c/groupId\u003e\n  \u003cartifactId\u003etinystruct\u003c/artifactId\u003e\n  \u003cversion\u003e1.7.26\u003c/version\u003e\n  \u003cclassifier\u003ejar-with-dependencies\u003c/classifier\u003e \u003c!-- Optional --\u003e\n\u003c/dependency\u003e\n```\n\n* Extend the AbstractApplication in Java:\n\n```java\npackage tinystruct.examples;\n\n\nimport org.tinystruct.AbstractApplication;\nimport org.tinystruct.ApplicationException;\nimport org.tinystruct.system.annotation.Action;\n\npublic class example extends AbstractApplication {\n\n    @Override\n    public void init() {\n        // TODO Auto-generated method stub\n    }\n\n    @Override\n    public String version() {\n        return \"1.0\";\n    }\n\n    @Action(\"praise\")\n    public String praise() {\n        return \"Praise the Lord!\";\n    }\n\n    @Action(\"say\")\n    public String say() throws ApplicationException {\n        if (null != getContext().getAttribute(\"--words\"))\n            return getContext().getAttribute(\"--words\").toString();\n\n        throw new ApplicationException(\"Could not find the parameter \u003ci\u003ewords\u003c/i\u003e.\");\n    }\n\n    @Action(\"say\")\n    public String say(String words) {\n        return words;\n    }\n\n    @Action(value = \"hello\", mode = Mode.HTTP_GET)\n    public String helloGet() {\n        return \"GET\";\n    }\n\n    @Action(value = \"hello\", mode = Mode.HTTP_POST)\n    public String helloPost() {\n        return \"POST\";\n    }\n\n}\n\n```\nSmalltalk: \u003ca href=\"https://github.com/tinystruct/smalltalk\"\u003ehttps://github.com/tinystruct/smalltalk\u003c/a\u003e\n\nExecute in CLI mode\n--\n```tcsh\n$ bin/dispatcher --version\n\n  _/  '         _ _/  _     _ _/\n  /  /  /) (/ _)  /  /  (/ (  /  1.7.26\n           /\n```\n```tcsh\n$ bin/dispatcher --help\nUsage: bin/dispatcher COMMAND [OPTIONS]\nA command line tool for tinystruct framework\nCommands: \n        download        Download a resource from other servers\n        exec            To execute native command(s)\n        generate        POJO object generator\n        install         Install a package\n        maven-wrapper   Extract Maven Wrapper\n        open            Start a default browser to open the specific URL\n        say             Output words\n        set             Set system property\n        sql-execute     Executes the given SQL statement, which may be an INSERT, UPDATE, DELETE, or DDL statement\n        sql-query       Executes the given SQL statement, which returns a single ResultSet object\n        update          Update for latest version\n\nOptions: \n        --allow-remote-access   Allow to be accessed remotely\n        --help                  Help command\n        --host                  Host name / IP\n        --import                Import application\n        --logo                  Print logo\n        --settings              Print settings\n        --version               Print version\n\nRun 'bin/dispatcher COMMAND --help' for more information on a command.\n```\n```tcsh\n$ bin/dispatcher say/\"Praise the Lord\"\nPraise the Lord\n```\n```tcsh\n$ bin/dispatcher say --words Hello --import tinystruct.examples.example\nHello\n```\n\nRun it in a http server\n--\n```tcsh\n# bin/dispatcher start --import org.tinystruct.system.HttpServer \n```\nYou can access the below URLs:\n\n* \u003ca href=\"http://localhost:8080/?q=say/Praise%20to%20the%20Lord!\"\u003ehttp://localhost:8080/?q=say/Praise%20to%20the%20Lord! \u003c/a\u003e\n* \u003ca href=\"http://localhost:8080/?q=praise\"\u003ehttp://localhost:8080/?q=praise\u003c/a\u003e\n\nPerformance Test\n--\n```tcsh \n$ wrk -t12 -c400 -d30s \"http://127.0.0.1:8080/?q=say/Praise the Lord!\"\n\nRunning 30s test @ http://127.0.0.1:8080/?q=say/Praise the Lord!\n12 threads and 400 connections\n\nThread Stats   Avg      Stdev     Max       +/- Stdev\nLatency        17.44ms  33.42ms   377.73ms  88.98%\nReq/Sec        7.27k    1.66k     13.55k    69.94%\n\n2604473 requests in 30.02s, 524.09MB read\n\nRequests/sec:  86753.98\nTransfer/sec:  17.46MB\n\n```\nHandling over **86,000** requests per second with low average latency (~17.44ms), indicating the endpoint is highly efficient under heavy load. this shows the raw power and efficiency of the **tinystruct framework**. But it's not just about the performance numbers. It's about the **philosophy** behind it.\n\n### What makes tinystruct framework modern?\n\n1. **No `main()` method required**\n   Applications can be started directly using CLI commands like `bin/dispatcher`, with no boilerplate code needed. This removes unnecessary ceremony from the development lifecycle.\n\n2. **Unified design for CLI and Web**\n   Unlike Spring Boot which is primarily web-centric, **tinystruct** treats CLI and Web as equal citizens. This makes it perfect for AI tasks, script automation, and hybrid applications — all from the same codebase.\n\n3. **Built-in lightweight HTTP server**\n   Whether it’s Netty or Tomcat, tinystruct integrates the server lifecycle inside the framework. There's no need for separate containers or complicated configuration files. Just import what you need and run.\n\n4. **Minimal configuration philosophy**\n   Configuration is minimized to the essentials. You don't need to wire up hundreds of beans, and there's no excessive XML or YAML involved. This improves developer productivity and reduces bugs.\n\n5. **Annotation-based routing**\n   The framework provides a clean and intuitive routing mechanism using `@Action`, eliminating the need for overly complex controller hierarchies.\n\n6. **Performance-first architecture**\n   There’s almost zero overhead. No reflection-based bean scanning, no auto-wiring maze, no unnecessary interceptors unless explicitly enabled. This translates into faster response times and smaller memory footprint.\n\n7. **Developer empowerment without complexity**\n   With tinystruct, developers are free to focus on **real business logic** rather than fighting with framework mechanics. It's designed to be **transparent**, **predictable**, and **extensible** — all without sacrificing control or performance.\n\n---\n\nArchitecture\n--\n![tinystruct-framework-architecture](https://github.com/tinystruct/tinystruct/assets/3631818/288049b7-cefd-4442-b6d8-8624ae75cdc2)\n\nLicense\n--\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftinystruct%2Ftinystruct","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftinystruct%2Ftinystruct","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftinystruct%2Ftinystruct/lists"}