{"id":13667815,"url":"https://github.com/mbrubeck/robinson","last_synced_at":"2025-05-15T15:05:29.099Z","repository":{"id":18301855,"uuid":"21477857","full_name":"mbrubeck/robinson","owner":"mbrubeck","description":"A toy web rendering engine","archived":false,"fork":false,"pushed_at":"2024-07-16T23:41:43.000Z","size":226,"stargazers_count":1588,"open_issues_count":5,"forks_count":133,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-04-07T17:06:48.890Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html","language":"Rust","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/mbrubeck.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}},"created_at":"2014-07-03T21:43:14.000Z","updated_at":"2025-04-06T07:28:34.000Z","dependencies_parsed_at":"2024-08-02T07:12:02.914Z","dependency_job_id":null,"html_url":"https://github.com/mbrubeck/robinson","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbrubeck%2Frobinson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbrubeck%2Frobinson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbrubeck%2Frobinson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbrubeck%2Frobinson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbrubeck","download_url":"https://codeload.github.com/mbrubeck/robinson/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254364270,"owners_count":22058878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-08-02T07:00:50.757Z","updated_at":"2025-05-15T15:05:29.079Z","avatar_url":"https://github.com/mbrubeck.png","language":"Rust","funding_links":[],"categories":["Rust","Web Browser News and Resources","库"],"sub_categories":[],"readme":"Robinson\n========\n\nA toy web rendering engine written in the Rust language, by Matt Brubeck\n(mbrubeck@limpet.net).\n\nI'm writing this code purely for educational purposes. My goal is to create an\nincomplete but extremely simple engine as a way to learn more about basic\nimplementation techniques, *without* worrying about complications like:\n\n* \u003cs\u003eReal-world usability\u003c/s\u003e\n* \u003cs\u003eStandards compliance\u003c/s\u003e\n* \u003cs\u003ePerformance and efficiency\u003c/s\u003e\n* \u003cs\u003eInteroperability\u003c/s\u003e\n\nThese are all important goals, but there are other projects working on them.\nBy ignoring them completely, this project can focus on being as simple and\neasy-to-understand as possible.\n\nWhy create a simple—but useless—toy rendering engine? Mostly because I\npersonally want to learn how to do it. If I succeed, I also hope that other\npeople can learn from my code by reading or modifying it, or learn from my\nexperience as they set out to build their own toy browser engines.\n\nFor more details see [Let's build a browser engine!][blog], a series of\nhow-to articles based on this project.\n\n[blog]: http://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html\n\nStatus\n------\n\nCurrently implemented:\n\n* Parse a small subset of HTML and build a DOM tree.\n* Parse a small subset of CSS.\n* Perform selector matching to apply styles to elements.\n* Basic block layout.\n\nComing soon, I hope:\n\n* Inline layout.\n* Paint text and boxes.\n* Load resources from network or filesystem.\n\nInstructions\n------------\n\n1. [Install Rust 1.0 beta or newer.](http://www.rust-lang.org/install.html)\n\n2. Clone the robinson source code from https://github.com/mbrubeck/robinson\n\n3. Run `cargo build` to build robinson, and `cargo run` to run it.\n\nTo build and run with optimizations enabled, use `cargo build --release` and\n`cargo run --release`.\n\nBy default, robinson will load test.html and test.css from the `examples`\ndirectory.  You can use the `--html` and `--css` arguments to the robinson\nexecutable to change the input files:\n\n    ./target/debug/robinson --html examples/test.html --css examples/test.css\n\nThe rendered page will be saved to a file named `output.png`.  To change the\noutput filename, use the `-o` option.  To switch to PDF output, use add\n`--format pdf`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbrubeck%2Frobinson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbrubeck%2Frobinson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbrubeck%2Frobinson/lists"}