{"id":39504357,"url":"https://github.com/rage/tmc-cli-rust","last_synced_at":"2026-01-18T05:51:29.316Z","repository":{"id":43147613,"uuid":"330613351","full_name":"rage/tmc-cli-rust","owner":"rage","description":"CLI for students using the TestMyCode programming assignment evaluator. ","archived":false,"fork":false,"pushed_at":"2024-09-10T07:08:08.000Z","size":93172,"stargazers_count":19,"open_issues_count":2,"forks_count":2,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-10-08T19:38:14.792Z","etag":null,"topics":["cli","rust","tmc"],"latest_commit_sha":null,"homepage":"https://tmc.mooc.fi/","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/rage.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}},"created_at":"2021-01-18T09:17:36.000Z","updated_at":"2025-09-27T20:48:14.000Z","dependencies_parsed_at":"2024-01-09T12:25:13.750Z","dependency_job_id":"68c1a516-9f79-4185-a51e-28c1c3905aa4","html_url":"https://github.com/rage/tmc-cli-rust","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/rage/tmc-cli-rust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Ftmc-cli-rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Ftmc-cli-rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Ftmc-cli-rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Ftmc-cli-rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rage","download_url":"https://codeload.github.com/rage/tmc-cli-rust/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rage%2Ftmc-cli-rust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28531694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"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":["cli","rust","tmc"],"created_at":"2026-01-18T05:51:28.619Z","updated_at":"2026-01-18T05:51:29.298Z","avatar_url":"https://github.com/rage.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tmc-cli-rust\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/rage/tmc-cli-rust/main/LICENSE)\n![Linux](https://github.com/rage/tmc-cli-rust/workflows/Linux/badge.svg)\n![Windows](https://github.com/rage/tmc-cli-rust/workflows/Windows/badge.svg)\n![macOS](https://github.com/rage/tmc-cli-rust/workflows/macOS/badge.svg)\n\nCommand line interface for TMC, written in Rust. \n\nThe old Java CLI can be found at [testmycode/tmc-cli](https://github.com/testmycode/tmc-cli) \n\n## Table of Contents\n\n1. [Installation](#installation)\n2. [Commands](#commands)\n3. [Usage manual](#usage-manual)\n4. [Project documentation](#project-documentation)\n5. [Credits](#credits)\n\n## Installation\n\n### Published Builds\n\nPublished *Builds* will be located to the [https://download.mooc.fi](https://download.mooc.fi). Builds are published for the some different operating systems (Windows, MacOS, Linux).\n\n### Using Flatpak\n\n        flatpak install flathub fi.mooc.tmc.tmc-cli-rust\n\nCreate alias after installation for ease of use with:\n\n        echo \"alias tmc=\\\"flatpak run fi.mooc.tmc.tmc-cli-rust\\\"\" \u003e\u003e ~/.bashrc\n\nAfter restarting the terminal, this should work:\n\n        tmc --help\n\n\n### Using the install script (Linux/OS X)\n\n```cd``` into the directory where you want to download tmc-cli-rust and run the following command:\n\n64 bit Linux:\n\n        curl -0 https://raw.githubusercontent.com/rage/tmc-cli-rust/main/scripts/install.sh | bash -s x86_64 linux\n        \n32 bit Linux:\n    \n        curl -0 https://raw.githubusercontent.com/rage/tmc-cli-rust/main/scripts/install.sh | bash -s i686 linux\n\n64 bit MacOS:\n\n        curl -0 https://raw.githubusercontent.com/rage/tmc-cli-rust/main/scripts/install.sh | bash -s x86_64 mac\n        \n32 bit MacOS:\n    \n        curl -0 https://raw.githubusercontent.com/rage/tmc-cli-rust/main/scripts/install.sh | bash -s i686 mac\n\n### Using the Windows installer\n\nThe Windows installer can be found in the [releases](https://github.com/rage/tmc-cli-rust/releases). In most cases you will want the 64 bit version, `tmc-cli-rust-x86_64-pc-windows-msvc-v1.1.2.msi`. When a 32 bit version is required, `tmc-cli-rust-i686-pc-windows-msvc-v1.1.2.msi` is also available. After installation, the application updates automatically.\n\n### Manual installation, additional steps\n\nIf using the installers is not an option for you, you can build the source code by yourself, or download the [latest published build](https://github.com/rage/tmc-cli-rust/#published-builds). \n\n#### For Linux: \n\nAfter downloading the executable, navigate to the directory it's located in and make it an executable with the command\n\n        chmod u+x ./\u003cexecutable name\u003e\n\nTo use the software from any directory, you can add it to your environmental variables with the following command (substituting \u003cdirectory\u003e for the location where the executable resides at and \u003cexecutable name\u003e for the executable name.)\n\n        echo \"alias tmc='\u003cdirectory\u003e/\u003cexecutable name\u003e'\" \u003e\u003e \"$HOME/.bashrc\"\n\n#### For macOS\n\nThe instructions for Linux **should** work on macOS as well. This has not been tested yet, though, so your mileage may vary.\n\n#### For Windows: \n\nAfter downloading the executable you can start using it from the command line by navigating to the directory it resides at. \n\nTo be able to use it from any directory, you can add it to your environmental variables with the following command. (substituting \u003cdirectory\u003e for the directory where the executable resides at)\n\n        set PATH=%PATH%;\u003cdirectory\u003e\n\n#### Tab-completion from commandline\n\nYou can generate shell completion scripts by running `tmc generate-completions --[bash/zsh/powershell] \u003e /path/to/your/completions/directory/filename`. For `bash`, `filename` should be `tmc.bash`. For `zsh`, `_tmc`. This has not yet been tested for Powershell, but the script *should* work if placed in the appropriate directory.\n\nMake sure to have the appropriate software configuration for completions to work. For Zsh and Powershell, completions should be supported by default, but for Bash you may need to install `bash-completion` or similar packages and follow their documentation.\n\n## Commands\n\n        tmc [FLAGS] [SUBCOMMAND]\n\n### Flags\n\nFLAG | Description\n:--- | :---\n`-h, --help` | Prints help information\n`-d, --no-update` | Disable auto update temporarily\n`-V, --version` | Prints version information\n\n### Subcommands\n\nSUBCOMMAND | Description\n:--- | :---\n`courses` | List the available courses\n`download` | Downloads course exercises\n`exercises` | List the exercises for a specific course\n`help` | Prints this message or the help of the given subcommand(s)\n`login` | Login to TMC server\n`logout` | Logout from TMC server\n`organization` | Change organization\n`paste` | Submit exercise to TMC pastebin\n`submit` | Submit exercises to TMC server\n`test` | Run local exercise tests\n`update` | Update exercises\n\n## Usage manual\n\nManual for using the program.\n\n### Logging in\n\nYou can log in using `tmc login`. This saves your TMC login information to a configuration file in /home/username/tmc-config/tmc-tmc_cli_rust (or %APPDATA%\\tmc-tmc_cli_rust on Windows) - you will only have to log in once.\n\n```\n~ $ tmc login\nEmail / username: username\nPassword: \nLogged in successfully!\n```\n\nAfter you have logged in, you can choose your organization with interactive menu. To see all organizations, select *View all organizations* with keyboard arrows. Press keyboard characters to filter.\n\n```\nSelect your organization:            Press keys\n\u003e\u003e MOOC                              to filter\n   Helsingin Yliopisto\n   View all organizations\n\n```\n\nAfter you have selected your organization, you can choose course with interactive menu. Exercises of the course will be downloaded. Press keyboard characters to filter. If you don't want to download anything, select *Don't download anything* with keyboard arrows.\n\n```\nSelect your course:                  Press keys\n\u003e\u003e Don't download anything           to filter\n   2013 Object-oriented programming,\n   2013 Object-oriented programming,\n   Aikatauluton Ohjelmoinnin MOOC, Oh\n   Aikatauluton Ohjelmoinnin MOOC, Oh\n   Cyber Security Base Advanced Topic\n   Java Programming I                \n   Java Programming II\n   Ohjelmoinnin MOOC 2021\n   Securing Software 2020\n   Securing Software 2021\n```\n\nWhen filtering, only courses with filtered name are shown.\n\n```\nSelect your course:                  ohjelmoinn\n\u003e\u003e Aikatauluton Ohjelmoinnin MOOC, Oh\n   Aikatauluton Ohjelmoinnin MOOC, Oh\n   Ohjelmoinnin MOOC 2021\n```\n\nAfter course is selected, exercises are downloaded. Download folder is informed for the user.\n\n```\nSuccessfully downloaded 15 out of 15 exercises.\n 100%[█████████████████████████] [00:00:00]\nExercises downloaded successfully to /home/user/.local/share/tmc/tmc_cli_rust\\\n```\n\n### Organization\n\nYou can change your organization with the command `tmc organization`. To see all organizations, select *View all organizations* with keyboard arrows. All available organizations will be listed. You can choose your organization with interactive menu.\n\n```\n~ $ tmc organization\n```\n\n### Logging out\n\nYou can log out using 'tmc logout'. This will remove your login token from the configuration file.\n\n```\n~ $ tmc logout\nLogged out successfully.\n```\n\n### Listing courses\n\nOnce you have logged in, you can list all the available courses on the server with `tmc courses`.\n```\n~ $ tmc courses\n```\n\n### Downloading course exercises\n\n*Either*\n\nWhen you have already selected your organization, simply run `tmc download` and select right course to download with interactive menu.\n\n*Or*\n\nNavigate to a suitable directory in which you wish to download your exercises. Then, run `tmc download -d` to download to the current directory after course is selected with interactive menu. \n\n*Or*\n\nGive suitable course name as an argument `tmc download -c [COURSE_NAME]`.\n\n*Or*\n\nGive suitable course name as an argument and use `-d` flag to download to the current directory: `tmc download -c [COURSE_NAME] -d`.\n\n```\n~ $ tmc download\nFetching courses...\nSuccessfully downloaded 37 out of 37 exercises.\n 100%[█████████████████████████] [00:00:01]\n```\n\n### Running tests\n\n*Either*\n\nAfter you've completed an exercise and wish to run tests on it, just write command `tmc test`. You can choose course and exercise with interactive menu.\n\n```\n~ $ tmc test\n\nTesting: exercise1\n\nTest results: 1/1 tests passed\nAll tests passed! Submit to server with 'tmc submit'\n 100%[████████████████████████████████████████████████████████████████]\n```\n\n*Or*\n\nNavigate to the exercise directory and run `tmc test`.\n\n```\n~/tmc-courses/test-course/exercise1 $ tmc test\n\nTesting: exercise1\n\nTest results: 1/1 tests passed\nAll tests passed! Submit to server with 'tmc submit'\n 100%[████████████████████████████████████████████████████████████████]\n\n```\n\n### Listing exercises\n\nIf you want to see your current progress, you can view the status of all course exercises with `tmc exercises [course]`.\n\n```\n~/tmc-courses/test-course/ $ tmc exercises test-course\nCourse name: test-course\nDeadline: none\nSoft deadline: none\n  Completed: exercise1\n  Completed: exercise2\n  Not completed: exercise3\n```\n\n### Paste\n\n*Either*\n\nWhen you want to send your current solution for an exercise to someone else for review, just write command `tmc paste`. You can choose course and exercise with interactive menu. Give your paste message when program asks *Write a paste message, enter sends it*.\n\n```\n~ $ tmc paste\nWrite a paste message, enter sends it:\nexample paste message\n\nPaste finished, running at https://examplewebpage\n 100%[█████████████████████████] [00:00:00]\n```\n\n*Or*\n\nNavigate to the exercise directory and run `tmc paste`. Give your paste message when program asks *Write a paste message, enter sends it*.\n\n```\n~/tmc-courses/test-course/exercise1 $ tmc paste\nWrite a paste message, enter sends it:\nexample paste message\n\nPaste finished, running at https://examplewebpage\n 100%[█████████████████████████] [00:00:00]\n```\n\n### Submit\n\n*Either*\n\nYou can send your solution to the server with `tmc submit`. You can choose course and exercise with interactive menu.\n\n```\n~ $ tmc submit\nYou can view your submission at: https://examplewebpage\nSubmission finished processing!\n 100%[█████████████████████████] [00:00:02]\nAll tests passed on server!\nPoints permanently awarded: [1.excercise1]\nModel solution: https://examplewebpage\n\n```\n\n*Or*\n\nNavigate to the exercise directory and run `tmc submit`.\n\n```\n~/tmc-courses/test-course/exercise1 $ tmc submit\nYou can view your submission at: https://examplewebpage\nSubmission finished processing!\n 100%[█████████████████████████] [00:00:02]\nAll tests passed on server!\nPoints permanently awarded: [1.excercise1]\nModel solution: https://examplewebpage\n```\n\n### Update\n\nIf some updates have done to the exercises by your organization, you can download the latest exercises with `tmc update`. You can choose course with interactive menu.\n\n## Project documentation\n\n*These documentations are written in Finnish*\n\n### Root folder\nhttps://drive.google.com/drive/folders/1SpDOYh5NAp5xwluWRrK-B3j-_ZcEHIr0\n\n### Product \u0026 Sprint backlogs\nhttps://docs.google.com/spreadsheets/d/1KxWFXeK85lhkcf2Z5QLoIwfEJHsCtVBftUomchilN9Q/edit#gid=0 \n\n### Work time monitoring\nhttps://docs.google.com/spreadsheets/d/1KxWFXeK85lhkcf2Z5QLoIwfEJHsCtVBftUomchilN9Q/edit#gid=1477657539\n\n### Client meetings\nhttps://drive.google.com/drive/folders/1SpDOYh5NAp5xwluWRrK-B3j-_ZcEHIr0\n\n## Credits\n\nSoftware was developed during spring 2021 as a part of the course *Ohjelmistotuotantoprojekti* in the University of Helsinki.\n\n### Original developers\n\n* Aleksis [Tykky](https://github.com/Tykky)\n* Arttu [ShootingStar91](https://github.com/ShootingStar91)\n* Jaime\n* Joni [Nooblue](https://github.com/Nooblue/)\n* Juha [Robustic](https://github.com/Robustic/)\n* Miika\n* Tatu \n\n### Disclaimer\n\nThis software is licensed under the [Apache 2.0 license](https://raw.githubusercontent.com/rage/tmc-cli-rust/main/LICENSE).\n\nThis software comes with no warranty. University of Helsinki and the tmc-cli-rust developers are not responsible for any damages caused by misuse or misbehaviour of this software.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frage%2Ftmc-cli-rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frage%2Ftmc-cli-rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frage%2Ftmc-cli-rust/lists"}