{"id":13451144,"url":"https://github.com/aardappel/treesheets","last_synced_at":"2026-06-01T02:04:33.373Z","repository":{"id":8938596,"uuid":"10671623","full_name":"aardappel/treesheets","owner":"aardappel","description":"TreeSheets : Free Form Data Organizer (see strlen.com/treesheets)","archived":false,"fork":false,"pushed_at":"2026-05-01T19:46:20.000Z","size":9937,"stargazers_count":3013,"open_issues_count":77,"forks_count":215,"subscribers_count":49,"default_branch":"master","last_synced_at":"2026-05-01T20:28:47.585Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aardappel.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-06-13T17:30:30.000Z","updated_at":"2026-05-01T19:44:06.000Z","dependencies_parsed_at":"2026-04-18T13:02:05.501Z","dependency_job_id":null,"html_url":"https://github.com/aardappel/treesheets","commit_stats":{"total_commits":826,"total_committers":39,"mean_commits":21.17948717948718,"dds":0.5,"last_synced_commit":"4e69099997ecccbda148683c42c584730fcc3547"},"previous_names":[],"tags_count":1213,"template":false,"template_full_name":null,"purl":"pkg:github/aardappel/treesheets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aardappel%2Ftreesheets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aardappel%2Ftreesheets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aardappel%2Ftreesheets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aardappel%2Ftreesheets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aardappel","download_url":"https://codeload.github.com/aardappel/treesheets/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aardappel%2Ftreesheets/sbom","scorecard":{"id":145336,"data":{"date":"2025-08-11","repo":{"name":"github.com/aardappel/treesheets","commit":"142f5303a215294b309e52adbf257e48210fe410"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/30 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/build.yml:16","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/build.yml:73","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/build.yml:118","Warn: no topLevel permission defined: .github/workflows/build.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 11 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"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/build.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:90: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:120: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:135: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:144: update your workflow using https://app.stepsecurity.io/secureworkflow/aardappel/treesheets/build.yml/master?enable=pin","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: ZLIB_LICENSE.txt:0","Info: FSF or OSI recognized license: zlib License: ZLIB_LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 2350 not signed: https://api.github.com/repos/aardappel/treesheets/releases/239448314","Warn: release artifact 2348 not signed: https://api.github.com/repos/aardappel/treesheets/releases/239301771","Warn: release artifact 2347 not signed: https://api.github.com/repos/aardappel/treesheets/releases/239299415","Warn: release artifact 2345 not signed: https://api.github.com/repos/aardappel/treesheets/releases/239261309","Warn: release artifact 2343 not signed: https://api.github.com/repos/aardappel/treesheets/releases/239173130","Warn: release artifact 2350 does not have provenance: https://api.github.com/repos/aardappel/treesheets/releases/239448314","Warn: release artifact 2348 does not have provenance: https://api.github.com/repos/aardappel/treesheets/releases/239301771","Warn: release artifact 2347 does not have provenance: https://api.github.com/repos/aardappel/treesheets/releases/239299415","Warn: release artifact 2345 does not have provenance: https://api.github.com/repos/aardappel/treesheets/releases/239261309","Warn: release artifact 2343 does not have provenance: https://api.github.com/repos/aardappel/treesheets/releases/239173130"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T09:17:07.612Z","repository_id":8938596,"created_at":"2025-08-16T09:17:07.612Z","updated_at":"2025-08-16T09:17:07.612Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32797265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"ssl_error","status_checked_at":"2026-05-08T08:22:45.650Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2024-07-31T07:00:48.870Z","updated_at":"2026-05-08T21:02:35.172Z","avatar_url":"https://github.com/aardappel.png","language":"C++","funding_links":[],"categories":["C++","others","Open Source","📦 Others (实用工具、媒体与其它)"],"sub_categories":["Native GUI"],"readme":"Welcome to the TreeSheets productivity tool!\n============================================\n\n\u003cp align=\"center\"\u003e\n \u003cimg width=\"607\" height=\"498\" alt=\"image\" src=\"https://github.com/user-attachments/assets/9cabfa45-592b-4f03-b4e3-ed5c1c2ee4c7\" /\u003e\n\u003c/p\u003e\n\n\n[TreeSheets](https://strlen.com/treesheets/) is an Open Source Free Form Data Organizer that leverages the power of hierarchical spreadsheets. Hierarchical spreadsheets serve as a great replacement for spreadsheets, mind mappers, outliners, PIMs, text editors and small databases.\n\nSuitable for any kind of data organization, such as todo lists, calendars, project management, brainstorming, organizing ideas, planning, requirements gathering, presentation of information, etc.\n\nIt's like a spreadsheet, immediately familiar, but much more suitable for complex data because it's hierarchical.\nIt's like a mind mapper, but more organized and compact.\nIt's like an outliner, but in more than one dimension.\nIt's like a text editor, but with structure.\n\nCommunity\n---------\nIf you like, you are kindly invited to join the [Discord channel](https://discord.gg/HAfKkJz) and \nthe [Google group](https://groups.google.com/group/treesheets) for discussion.\n\nInstallation\n------------\n\nPre-built binaries for Windows, macOS (Darwin) and Debian-based Linux distributions are available at the\n[Release section](https://github.com/aardappel/treesheets/releases). \n\nPlease note that the packages for Debian-based distributions provided are built on `ubuntu-latest` used by [GitHub Actions Runner](https://github.com/actions/runner-images). They could also be installed on other Debian-based distributions depending on whether the required dependency packages are available.\n\nIf you use Flatpak, you can install [TreeSheets from Flathub](https://flathub.org/apps/com.strlen.TreeSheets).\n\nSource Code\n-----------\nThis repository contains all the files needed to build TreeSheets for various platforms.\n\n### License\n\nTreeSheets has been licensed under the ZLIB license (see ZLIB_LICENSE.txt).\n\n![Workflow status](https://github.com/aardappel/treesheets/actions/workflows/build.yml/badge.svg)\n\n### Structure\n\n`src` contains all source code. The code is dense, terse, and with few comments, typical for a codebase that was never\nintended to be used by more than one person (me). On the positive side, you'll find the code very small and simple,\nwith all functionality easy to find and only in one place (no copy pasting or over-engineering). Enjoy.\n\n`TS` is the folder that contains all user-facing files, typically the build process results in an executable to be put\nin the root of this folder, and distributing to users is then a matter of giving them this folder.\n\n`TODO.txt` is the random notes I kept on ideas of myself and others on what future features could be added.\n\n\nBuilding\n--------\nThis project uses CMake to enable compilation on various platforms and CPack on top of it to package the produced binaries. The build, installation and packaging instructions are within `CMakeLists.txt`.\nPlease note that you are responsible to know how to use compilers and C++, the hints below are all the help we will give you for building TreeSheets:\n\n1. Clone this repository\n\n```sh\ngit clone https://github.com/aardappel/treesheets\n```\n\n2. Change the working directory to the working tree\n\n```sh\ncd treesheets\n```\n\n3. Steps for building and installation/packaging for binary distribution\n\n| Step | Command | Windows | macOS | Linux |\n| ---- | ------- | ------- | ----- | ----- |\n| 3.1 Configure the build system | `cmake -S . -B _build -DCMAKE_BUILD_TYPE=Release` | needs Visual Studio C++ compiler for succesful compilation | | |\n| 3.2 Build and package for binary distribution | `cmake --build _build --target package -j` | creates a ZIP archive for portable usage and a Nullsoft installer | creates a disk image for Drag and Drop installation | creates a binary Debian package |\n| or |\n| 3.2 Build only | `cmake --build _build -j` | Append `--config Release` | | |\n| 3.3 Install | `cmake --install _build` | | Append `--prefix \u003cdirectory\u003e` to specify another installation root for the bundle | usually requires root privileges, e.g. run this command with `sudo` |\n\nIf you do not have `wxWidgets` installed, you may want to set `wxBUILD_INSTALL` and `wxBUILD_SHARED` to off in the build configuration. This ensures a TreeSheets build with wxWidgets libraries statically linked in.\n\nContributing\n------------\nI welcome contributions, especially in the form of neatly prepared pull requests. The main thing to keep in mind when\ncontributing is to keep as close as you can to both the format and the spirit of the existing code, even if it goes\nagainst the grain of how you program normally. That means not only using the same formatting and naming conventions\n(which should be easy), but the same non-redundant style of code (no under-engineering, e.g. copy pasting,\nand no over engineering, e.g. needless abstractions).\n\nAlso be economic in terms of features: treesheets tries to accomplish a lot with few features, additional user\ninterface elements (even menu items) have a cost, and features that are only useful for very few people should\nprobably not be in the master branch. Needless to say, performance is important too. When in doubt, ask me :)\n\nTry to keep your pull requests small (don't bundle unrelated changes) and make sure you've done extensive testing\nbefore you submit, preferrably on multiple platforms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faardappel%2Ftreesheets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faardappel%2Ftreesheets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faardappel%2Ftreesheets/lists"}