{"id":32127926,"url":"https://github.com/rail5/bashpp","last_synced_at":"2026-02-15T04:09:50.458Z","repository":{"id":259188431,"uuid":"876475000","full_name":"rail5/bashpp","owner":"rail5","description":"Bash++: Bash with classes","archived":false,"fork":false,"pushed_at":"2026-02-11T05:16:56.000Z","size":3696,"stargazers_count":42,"open_issues_count":3,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-11T11:37:10.902Z","etag":null,"topics":["bash","classes-and-objects","object-oriented-programming","shell"],"latest_commit_sha":null,"homepage":"https://bpp.sh/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rail5.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"rail5","liberapay":"rail5"}},"created_at":"2024-10-22T03:11:49.000Z","updated_at":"2026-02-11T05:14:14.000Z","dependencies_parsed_at":"2025-07-03T20:20:48.624Z","dependency_job_id":"58762f51-af7b-4228-8897-ea2e299c4641","html_url":"https://github.com/rail5/bashpp","commit_stats":null,"previous_names":["rail5/bashpp"],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/rail5/bashpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rail5%2Fbashpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rail5%2Fbashpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rail5%2Fbashpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rail5%2Fbashpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rail5","download_url":"https://codeload.github.com/rail5/bashpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rail5%2Fbashpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29468395,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T01:01:38.065Z","status":"online","status_checked_at":"2026-02-15T02:00:07.449Z","response_time":118,"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":["bash","classes-and-objects","object-oriented-programming","shell"],"created_at":"2025-10-21T00:41:41.431Z","updated_at":"2026-02-15T04:09:50.454Z","avatar_url":"https://github.com/rail5.png","language":"C++","readme":"# Bash++\n\n\u003cimg title=\"\" src=\"./wiki/banner.png\" alt=\"Bash++: Bash with classes\" width=\"319\" data-align=\"center\"\u003e\n\n\u003c!--\n\tThe following snippet is highlighted as if it were Java\n\tBecause our language is not recognized by GitHub, and the\n\tJava syntax highlighting looks less-bad than anything else so far\n\tFor proper syntax highlighting, use the Bash++ VSCode extension\n--\u003e\n```java\n@class Bashpp {\n  @public author=\"Andrew S. Rightenburg\"\n  @public source=\"https://github.com/rail5/bashpp\"\n  @public license=\"GNU GPL v3\"\n\n  @public @method printInfo {\n\techo \"Bash++ is a superset of Bash that adds support for classes and objects.\"\n\techo \"It's designed to be a simple way to add object-orientation to Bash scripts.\"\n\techo \"Author: @this.author\"\n\techo \"Source: @this.source\"\n\techo \"License: @this.license\"\n  }\n}\n\n@Bashpp myBashpp\n@myBashpp.printInfo\n```\n\nMore documentation is available on the [website](https://bpp.sh).\n\n![GPLv3](https://www.gnu.org/graphics/gplv3-with-text-136x68.png)\n\n\nThe Bash++ language and compiler are licensed under the GNU General Public License v3 or later (GPL-3.0-or-later).\n\nThis does not affect any code you write in Bash++ – only the Bash++ language and compiler themselves. You are perfectly free to use Bash++ to write software under a different license.\n\n## Installation\n\n\u003e [!IMPORTANT]\n\u003e The Bash++ compiler is currently in *beta*, and is expected to have bugs. Please report any bugs you find to the [issue tracker](https://github.com/rail5/bashpp/issues).\n\u003e\n\n### Debian GNU/Linux\n\nUsers of Debian-based distributions can install the compiler from the [deb.rail5.org](https://deb.rail5.org) repository.\n\n```shell\nsudo curl -s -o /etc/apt/trusted.gpg.d/rail5-signing-key.gpg \"https://deb.rail5.org/rail5-signing-key.gpg\"\nsudo curl -s -o /etc/apt/sources.list.d/rail5.list \"https://deb.rail5.org/rail5.list\"\nsudo apt update\nsudo apt install bpp\n```\n\nPre-built packages are available for **amd64** and **arm64**. The .debs can also be downloaded directly from the [GitHub releases page](https://github.com/rail5/bashpp/releases/latest)\n\n### Building from source\n\n#### Prerequisites\n\n - `bash`\n - `make`\n - `g++`\n - `flex`\n - `bison`\n - `libutfcpp-dev`\n\nLanguage server-specific prerequisites:\n - `nlohmann-json3-dev`\n - `libfrozen-dev`\n\nOptional:\n - `pandoc` and `perl` for building the documentation\n - `debhelper` for building the Debian package and keeping version numbers up-to-date via `dpkg-parsechangelog`\n\nOn Debian-based systems, you can install the prerequisites with:\n\n```bash\n$ sudo apt update\n$ sudo apt install build-essential flex bison libutfcpp-dev libfrozen-dev pandoc perl debhelper nlohmann-json3-dev\n```\n\n#### Building\n\n```bash\n$ make        # Build the Bash++ compiler and language server, bin/bpp and bin/bpp-lsp\n$ make manual # Build the manpages, which can then be found under debian/\n$ make test   # Run the test suite to verify the compiler works correctly\n```\n\n## Using the compiler\n\n```bash\n$ bpp program.bpp                 # Compile \u0026 immediately run the program\n$ bpp -o compiled.sh program.bpp  # Compile \u0026 save the program to compiled.sh\n$ bpp -o - program.bpp            # Compile \u0026 print the program to stdout\n$ cat program.bpp | bpp           # Pipe previous command output to the compiler\n$ bpp -h # Display help\n$ bpp -v # Display version\n```\n\nAny arguments given *after* the input file will be passed to the compiled program.\n\n## Debugging\n\nIf you encounter a bug, please report it to the [issue tracker](https://github.com/rail5/bashpp/issues).\n\nIf you'd like to debug the compiler yourself, you can use the compiler with the `-tp` flags. Using `-t` will print lexer output, and using `-p` will print the parse tree for an input file. This can be useful for debugging syntax errors and compiler issues.\n\n```bash\n$ bpp -tp program.bpp\n```\n\n[Shellwatch](https://github.com/rail5/shellwatch) is a tool designed specifically to help debug Bash++ programs and compiler issues. Shellwatch will step a Bash script line-by-line, showing the current state of variables and their values, as well as the current line of the script being executed. Shellwatch will also allow you to modify the values of stored variables before continuing script execution. This tool can be very helpful for debugging complex (compiled) Bash++ programs which are hard to analyze with your eyes alone.\n\n```bash\n$ shellwatch compiled-program.sh\n```\n\n## VSCode extension\n\nThe [Bash++ extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=rail5.bashpp) provides IDE language support for Bash++, including syntax highlighting and (optionally) language server features such as code completion, go-to definition, etc.\n","funding_links":["https://github.com/sponsors/rail5","https://liberapay.com/rail5"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frail5%2Fbashpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frail5%2Fbashpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frail5%2Fbashpp/lists"}