{"id":38344319,"url":"https://github.com/alanbld/utf8proj","last_synced_at":"2026-01-29T23:11:21.953Z","repository":{"id":332081289,"uuid":"1126393284","full_name":"alanbld/utf8proj","owner":"alanbld","description":"Project scheduling engine for Rust","archived":false,"fork":false,"pushed_at":"2026-01-27T06:46:22.000Z","size":44807,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-27T07:45:51.077Z","etag":null,"topics":["cli","cpm","critical-path-method","deterministic","explainable","gantt-chart","git-friendly","language-server","lsp","project-management","rust","scheduling","text-based","wasm","webassembly"],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/alanbld.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-01T20:21:22.000Z","updated_at":"2026-01-27T06:46:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alanbld/utf8proj","commit_stats":null,"previous_names":["alanbld/utf8proj"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/alanbld/utf8proj","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alanbld%2Futf8proj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alanbld%2Futf8proj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alanbld%2Futf8proj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alanbld%2Futf8proj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alanbld","download_url":"https://codeload.github.com/alanbld/utf8proj/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alanbld%2Futf8proj/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28889865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T21:06:44.224Z","status":"ssl_error","status_checked_at":"2026-01-29T21:06:42.160Z","response_time":59,"last_error":"SSL_read: 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":["cli","cpm","critical-path-method","deterministic","explainable","gantt-chart","git-friendly","language-server","lsp","project-management","rust","scheduling","text-based","wasm","webassembly"],"created_at":"2026-01-17T03:01:52.574Z","updated_at":"2026-01-29T23:11:21.947Z","avatar_url":"https://github.com/alanbld.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/logos/logo.svg\" alt=\"utf8proj\" width=\"400\"\u003e\n\n  # utf8proj\n\n  **Explainable, deterministic project scheduling from plain text.**\u003cbr\u003e\n  CLI + LSP + WebAssembly — schedules you can read, diff, and trust.\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/alanbld/utf8proj/actions\"\u003e\u003cimg src=\"https://github.com/alanbld/utf8proj/actions/workflows/ci.yml/badge.svg\" alt=\"Build\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.rust-lang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/rust-1.75%2B-orange.svg\" alt=\"Rust\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://alanbld.github.io/utf8proj/\"\u003e\u003cimg src=\"https://img.shields.io/badge/demo-try%20now-brightgreen.svg\" alt=\"Demo\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e\u003ca href=\"https://alanbld.github.io/utf8proj/\"\u003e🚀 Try the Interactive Demo\u003c/a\u003e\u003c/strong\u003e — no install, runs in your browser\n\u003c/p\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://youtu.be/rp5juOZq1J0?si=cG9Q81jB3y7hFusB\"\u003e\n        \u003cimg src=\"https://img.youtube.com/vi/rp5juOZq1J0/mqdefault.jpg\" alt=\"utf8proj overview\" width=\"320\"\u003e\n      \u003c/a\u003e\n      \u003cbr\u003e\n      \u003csub\u003e▶️ 10-min Overview\u003c/sub\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://www.youtube.com/watch?v=c8BVzJjnp0A\"\u003e\n        \u003cimg src=\"https://img.youtube.com/vi/c8BVzJjnp0A/mqdefault.jpg\" alt=\"utf8proj deep dive\" width=\"320\"\u003e\n      \u003c/a\u003e\n      \u003cbr\u003e\n      \u003csub\u003e▶️ Deep Dive: Architecture \u0026 Design\u003c/sub\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003cp align=\"center\"\u003e\u003csub\u003eAI-generated with NotebookLM\u003c/sub\u003e\u003c/p\u003e\n\n---\n\n## Why utf8proj?\n\n- **Explainable** — Every scheduling decision has a traceable diagnostic code. No black boxes.\n- **Deterministic** — Same input always produces the same output. Perfect for CI/CD and audits.\n- **Git-friendly** — Plain text `.proj` files you can diff, review, and version control.\n\n---\n\n## Installation\n\n### Download Binary (Recommended)\n\n**Linux:**\n```bash\ncurl -LO https://github.com/alanbld/utf8proj/releases/latest/download/utf8proj-v0.10.0-x86_64-unknown-linux-gnu.tar.gz\ntar xzf utf8proj-v0.10.0-x86_64-unknown-linux-gnu.tar.gz\nsudo mv utf8proj /usr/local/bin/\n```\n\n**macOS (Apple Silicon):**\n```bash\ncurl -LO https://github.com/alanbld/utf8proj/releases/latest/download/utf8proj-v0.10.0-aarch64-apple-darwin.tar.gz\ntar xzf utf8proj-v0.10.0-aarch64-apple-darwin.tar.gz\nsudo mv utf8proj /usr/local/bin/\n```\n\n**macOS (Intel):**\n```bash\ncurl -LO https://github.com/alanbld/utf8proj/releases/latest/download/utf8proj-v0.10.0-x86_64-apple-darwin.tar.gz\ntar xzf utf8proj-v0.10.0-x86_64-apple-darwin.tar.gz\nsudo mv utf8proj /usr/local/bin/\n```\n\n**Windows (PowerShell):**\n```powershell\nInvoke-WebRequest -Uri \"https://github.com/alanbld/utf8proj/releases/latest/download/utf8proj-v0.10.0-x86_64-pc-windows-msvc.zip\" -OutFile utf8proj.zip\nExpand-Archive utf8proj.zip -DestinationPath .\n```\n\n### Build from Source (Rust users)\n\n```bash\ncargo install utf8proj-cli\n```\n\n### Verify Installation\n\n```bash\nutf8proj --version\n# utf8proj 0.10.0\n```\n\n---\n\n## Quick Start (60 seconds)\n\n**1. Create `example.proj`:**\n\n```proj\nproject \"Sprint 1\" { start: 2025-02-01 }\n\nresource dev \"Developer\" { rate: 850/day }\n\ntask design \"Design\" { effort: 3d, assign: dev }\ntask build \"Build\" { effort: 5d, assign: dev, depends: design }\nmilestone done \"Done\" { depends: build }\n```\n\n**2. Run:**\n\n```bash\nutf8proj schedule example.proj\n```\n\n**3. Or try instantly in the browser:** [alanbld.github.io/utf8proj](https://alanbld.github.io/utf8proj/)\n\n---\n\n## What You Get\n\n| Component | Purpose |\n|-----------|---------|\n| `utf8proj` CLI | Schedule, validate, render Gantt charts |\n| `utf8proj-lsp` | IDE support: hover, go-to-definition, diagnostics |\n| WASM Playground | Browser-based scheduling with live preview |\n| Renderers | HTML, SVG, Mermaid, PlantUML, Excel (XLSX) |\n\n### Scheduling \u0026 Analysis\n- **CPM Scheduling** — Critical path with FS/SS/FF/SF dependencies and lag\n- **Resource Leveling** — Deterministic conflict resolution with audit trail\n- **Calendar-Aware** — Working days, weekends, holidays with impact analysis\n- **Temporal Regimes** — Work, Event, Deadline modes control date handling\n- **Progress Tracking** — Status date, remaining duration, earned value (SPI)\n- **Focus View** — Filter large Gantt charts by task prefix\n\n### 40+ Diagnostic Codes\nEvery decision is explained:\n- **E***: Errors (circular deps, infeasible constraints)\n- **W***: Warnings (overallocation, wide cost ranges)\n- **L***: Leveling decisions (L001-L004)\n- **C***: Calendar impact (C001-C023)\n- **P***: Progress tracking (P005-P006)\n- **R***: Temporal regimes (R001-R005)\n\n---\n\n## CLI Examples\n\n```bash\n# Validate (fast, CI-friendly)\nutf8proj check project.proj --strict\n\n# Schedule with leveling\nutf8proj schedule -l project.proj\n\n# Interactive HTML Gantt\nutf8proj gantt project.proj -o timeline.html -f html\n\n# Excel workbook with calendar analysis\nutf8proj gantt project.proj -o report.xlsx -f xlsx --include-calendar\n\n# Focus on specific tasks\nutf8proj gantt project.proj -o backend.html -f html --focus=\"backend\"\n```\n\n---\n\n## Library Usage\n\n```rust\nuse utf8proj_core::{Project, Task, Resource, Duration, Scheduler};\nuse utf8proj_solver::CpmSolver;\n\nlet mut project = Project::new(\"My Project\");\nproject.start = chrono::NaiveDate::from_ymd_opt(2025, 2, 1).unwrap();\nproject.tasks = vec![\n    Task::new(\"design\").effort(Duration::days(5)),\n    Task::new(\"build\").effort(Duration::days(10)).depends_on(\"design\"),\n];\n\nlet solver = CpmSolver::with_leveling();\nlet schedule = solver.schedule(\u0026project)?;\nprintln!(\"Critical path: {:?}\", schedule.critical_path);\n```\n\n---\n\n## Documentation\n\n| Document | Purpose |\n|----------|---------|\n| [Quick Reference](QUICK_REFERENCE.md) | DSL syntax cheat sheet |\n| [Grammar Spec](docs/GRAMMAR.md) | Complete `.proj` syntax |\n| [Diagnostics](docs/DIAGNOSTICS.md) | All diagnostic codes |\n| [Temporal Regimes](docs/rfc/RFC-0012-TEMPORAL-REGIMES.md) | Work/Event/Deadline scheduling modes |\n| [Editor Setup](docs/EDITOR_SETUP.md) | VS Code, Neovim, Vim, Zed |\n| [Explainability Manifesto](docs/EXPLAINABILITY.md) | Design philosophy |\n\n---\n\n## Comparison\n\n| Feature | utf8proj | TaskJuggler | MS Project |\n|---------|----------|-------------|------------|\n| File Format | Text (.proj) | Text (.tjp) | Binary (.mpp) |\n| Version Control | Excellent | Good | Poor |\n| Explainability | First-class | Limited | None |\n| Resource Leveling | Deterministic | Optimizer | Black box |\n| License | MIT/Apache-2.0 | GPL-2.0 | Commercial |\n| Single Binary | Yes | No (Ruby) | No |\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/alanbld/utf8proj\ncd utf8proj\ncargo build --workspace\ncargo test --workspace\n```\n\n---\n\n## License\n\nLicensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003csub\u003eBuilt with Rust. Designed for transparency.\u003c/sub\u003e\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falanbld%2Futf8proj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falanbld%2Futf8proj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falanbld%2Futf8proj/lists"}