{"id":38242549,"url":"https://github.com/aris-pub/rsm","last_synced_at":"2026-02-21T12:14:43.153Z","repository":{"id":64709886,"uuid":"399016088","full_name":"aris-pub/rsm","owner":"aris-pub","description":"Readable Science Markup (RSM) - The markup language of the Aris system","archived":false,"fork":false,"pushed_at":"2026-02-18T20:45:21.000Z","size":14712,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-19T01:06:24.129Z","etag":null,"topics":["publishing","python","science","static-site-generator"],"latest_commit_sha":null,"homepage":"https://lang.rsm.studio","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aris-pub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2021-08-23T07:44:24.000Z","updated_at":"2026-02-18T20:45:25.000Z","dependencies_parsed_at":"2024-05-12T22:21:32.671Z","dependency_job_id":"8d61ddf2-6666-400a-9f19-6dad8a5aa90d","html_url":"https://github.com/aris-pub/rsm","commit_stats":{"total_commits":859,"total_committers":1,"mean_commits":859.0,"dds":0.0,"last_synced_commit":"facf805a838bc3a02a01d810ce72009d210bb5a1"},"previous_names":["aris-pub/rsm"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/aris-pub/rsm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aris-pub%2Frsm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aris-pub%2Frsm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aris-pub%2Frsm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aris-pub%2Frsm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aris-pub","download_url":"https://codeload.github.com/aris-pub/rsm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aris-pub%2Frsm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29680191,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T11:29:27.227Z","status":"ssl_error","status_checked_at":"2026-02-21T11:29:20.292Z","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":["publishing","python","science","static-site-generator"],"created_at":"2026-01-17T01:15:55.022Z","updated_at":"2026-02-21T12:14:43.125Z","avatar_url":"https://github.com/aris-pub.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Readable Science Markup (RSM)\n\n[![tests](https://github.com/leotrs/rsm/actions/workflows/test.yml/badge.svg)](https://github.com/leotrs/rsm/actions/workflows/test.yml)\n[![docs](https://readthedocs.org/projects/rsm-lang/badge/?version=latest)](https://rsm-lang.readthedocs.io/en/latest/?badge=latest)\n\nThe web-first authoring software for scientific manuscripts.\n\nRSM is a suite of tools that aims to change the way scientific manuscripts are published\nand shared using modern web technology. Currently, most scientific publications are made\nwith LaTeX and published in PDF format. While the capabilities of LaTeX and related\nsoftware are undeniable, there are many pitfalls. RSM aims to cover this gap by allowing\nauthors to create web-first manuscripts that enjoy the benefits of the modern web.\n\nOne of the main aims of the RSM suite is to provide scientists with tools to author\nscientific manuscripts in a format that is web-ready in a transparent, native way that\nis both easy to use and easy to learn.  In particular, RSM is a suite of tools that\nallow the user to write a plain text file (in a special `.rsm` format) and convert the\nfile into a web page (i.e. a set of .html, .css, and .js files).  These files can then\nbe opened natively by any web browser on any device.\n\n\n## Installation\n\n### Recommended: pipx (Isolated Global Install)\n\nInstall RSM globally without polluting your system Python:\n\n```bash\npipx install rsm-lang\nrsm --version\n```\n\n**Why pipx?**\n- Installs `rsm` command globally\n- Isolated environment (no dependency conflicts)\n- Works on macOS, Linux, and Windows\n\n### Alternative: uvx (Zero Install, Run on Demand)\n\nRun RSM without installing anything:\n\n```bash\nuvx --from rsm-lang rsm build paper.rsm\n```\n\n**Why uvx?**\n- No installation required\n- Always uses latest version\n- Automatically manages dependencies\n\n### Traditional: pip (System Python)\n\n```bash\npip install rsm-lang\n```\n\n**Note:** Use the above tools or a virtual environment for a cleaner setup.\n\n\n## Contributing\n\nThis project is under constant development and contributions are *very much* welcome!\nPlease develop your feature or fix in a branch and submit a PR.\n\n\n### Rebuilding the Standalone JS Bundle\n\nThe file `rsm/static/rsm-standalone.js` is a pre-built bundle of all RSM JavaScript\nfor standalone HTML files (files that can be opened directly from `file://` URLs).\n\nIf you modify any JS files in `rsm/static/`, you must regenerate this bundle:\n\n```bash\nnpx esbuild rsm/static/onload.js --bundle --format=iife --global-name=RSM --outfile=rsm/static/rsm-standalone.js\n```\n\nThis bundles `onload.js` and all its dependencies into a single IIFE that exposes\n`RSM.onload()` and `RSM.onrender()`. The bundle is committed to the repo so there's\nno runtime dependency on esbuild.\n\n\n## Development Setup\n\n### Prerequisites\n- Python 3.10 or higher\n- [uv](https://docs.astral.sh/uv/) - Fast Python package installer\n- [just](https://just.systems/) - Command runner\n\n### Installation\n\n#### Install uv\n```bash\n# macOS/Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Or with pip\npip install uv\n```\n\n#### Install just\n```bash\n# macOS\nbrew install just\n\n# Linux\ncargo install just\n\n# Windows\nscoop install just\n```\n\n#### Clone and install rsm-lang\n```bash\ngit clone --recurse-submodules https://github.com/leotrs/rsm.git\ncd rsm\njust install\n```\n\nThis installs:\n- `rsm-lang` in editable mode (you can modify the code)\n- `tree-sitter-rsm` from PyPI as a pre-built wheel (compiled grammar)\n- All development and documentation dependencies\n\n**Note:** The `tree-sitter-rsm` grammar is installed from PyPI with platform-specific\npre-built binaries. You don't need to build anything unless you're modifying the grammar itself.\n\n### Common Tasks\n```bash\njust                  # List all available commands\njust test             # Run fast tests\njust test-all         # Run all tests including slow ones\njust lint             # Format code and run linter\njust check            # Run lint + tests (quality gate)\njust docs-serve       # Serve docs with live reload\n```\n\n### Grammar Development\n\n**Most developers don't need this.** Only use these steps if you're modifying the\ntree-sitter grammar in `tree-sitter-rsm/grammar.js`.\n\n```bash\n# Install tree-sitter-rsm in editable mode (overrides PyPI version)\njust install-local\n\n# After modifying grammar.js in tree-sitter-rsm/\njust build-grammar\n```\n\nThe difference between `just install` and `just install-local`:\n\n| Command | `tree-sitter-rsm` source | Editable? | Use when |\n|---------|--------------------------|-----------|----------|\n| `just install` | PyPI wheel | No | Developing rsm-lang code (most common) |\n| `just install-local` | Local submodule | Yes | Modifying the grammar itself |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faris-pub%2Frsm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faris-pub%2Frsm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faris-pub%2Frsm/lists"}