# Roadmap: The horizon of SC `1.0`
This page sums up some far-future goals of the *Shell commands* project. There are some fundamental features on my radar that I want to address here, because even though they are important, implementing them needs a lot of time, and often the presence of other planned features (= prerequisites). Some of the features are originating from other people's ideas, and I want to be more open about how I'm going to place them on the path of the future of this plugin.
The list of features is not explicit: new ideas may be born along the way, and current ones may be refined.
> [!Info] Other places to look for incoming features
> - There is [an older roadmap in GitHub](https://github.com/Taitava/obsidian-shellcommands/projects/1), but I haven't really utilized it to its full potential, and it's also not quite the thing I'm looking for: I want a roadmap that shows a one glance overview of far-ahead cornerstone features without the noise of near-future small features. I'm currently considering to retire the roadmap in GitHub.
> - For a complete list of all ideas/plans for features including both big and small, please see [this *Ideas* discussion section in GitHub](https://github.com/Taitava/obsidian-shellcommands/discussions/categories/ideas). In case you happen to have an idea, you can suggest it there 😉. Once ideas are implemented and released, they are moved to [*Ideas - done & released*](https://github.com/Taitava/obsidian-shellcommands/discussions/categories/ideas-done-released).
# Cornerstone features of SC `1.0`
These are not in any particular order, but some features are needed to be done before some other features can be done.
## [Migrations: Better support for complex, nested configuration properties](https://github.com/Taitava/obsidian-shellcommands/discussions/198)
- A robust way is needed to upgrade old settings files to formats specified by newer versions of the *Shell commands* plugin. Version upgrades tend to bring changes to the format of the settings file constantly, there will never be a "final state".
- A crucial prerequisite for importing/exporting shell commands, because the exporting format will be heavily based on the settings format.
## [Import / export shell commands (#151)](https://github.com/Taitava/obsidian-shellcommands/discussions/151)
- Allows users to share their shell commands with others easily by exporting them to a textual format that includes all settings related to the particular shell command.
- One user can share shell commands between their different vaults, or to different users.
- There will be a GitHub repository designated for sharing shell commands publicly with others, but shell commands could also be easily shared in Discord, forums or by other public or private means.
## [JavaScript API (#219)](https://github.com/Taitava/obsidian-shellcommands/discussions/219)
- The most basic level: support treating shell command output as JavaScript code that could be evaluated. Need to provide some basic public API, at least access to Obsidian's `app` (or maybe there's no need, as it [seems to be global nowadays](https://forum.obsidian.md/t/obsidian-release-v0-14-4-insider-build/35026)).
- Later: Define a public API that allows calling some of the *Shell commands* plugin's methods from user code (= either JavaScript that is received as output from shell commands, or JavaScript written in other community plugins).
## [Tighter integration with Templater plugin.](https://github.com/Taitava/obsidian-shellcommands/discussions/217)
- Allow executing [Templater](https://github.com/SilentVoid13/Templater) scripts after a shell command is executed.
## [PowerShell: Handle output encoding](https://github.com/Taitava/obsidian-shellcommands/discussions/157)
- Currently, [[PowerShell]] only works well when used with text that has only English characters - even if Unicode is used. Combine that to the fact that [[Escaping special characters in variable values#Escaping depends on the shell|there is not variable value escaping for CMD]], Windows as a platform is not currently as well-supported by the *Shell commands* plugin, comparing to Linux and macOS.
## [Methods for variables (#147)](https://github.com/Taitava/obsidian-shellcommands/discussions/147)
- A prerequisite for [#105](https://github.com/Taitava/obsidian-shellcommands/discussions/105).
## [Variables: Handling separator arguments without escaping (#105)](https://github.com/Taitava/obsidian-shellcommands/discussions/105)
- I could add more variables that present listed content, but currently [[{{tags}}#Special characters in separator are escaped|there's no solid way to define item separators when joining list items together]]. [[{{tags}}]] is currently the only variable that provides a list of values, and I don't want to create more like it before I develop a proper way to define separators.
# Already implemented features
| SC version | Feature | Discussion | Completed |
|:---------------------------------------------------------------------------------------------------- |:------------------------------------------------------------------- |:------------------------------------------------------------------------- | ---------- |
| [0.19.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0190---2023-05-27) | Support custom shells | [#108](https://github.com/Taitava/obsidian-shellcommands/discussions/108) | completely |
| [0.18.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0180---2023-01-06) | Pass variables to `stdin` | [#89](https://github.com/Taitava/obsidian-shellcommands/discussions/89) | completely |
| [0.17.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0170---2022-11-26) | Realtime output handling | [#64](https://github.com/Taitava/obsidian-shellcommands/discussions/64) | completely |
| [0.13.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0130---2022-06-28) | Execute shell commands via Obsidian URI | [#195](https://github.com/Taitava/obsidian-shellcommands/discussions/195) | completely |
| [0.12.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0120---2022-05-07) | A modal for asking values from user (Prompt) | [#17](https://github.com/Taitava/obsidian-shellcommands/discussions/17) | partially |
| [0.12.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0120---2022-05-07) | Preactions | [#183](https://github.com/Taitava/obsidian-shellcommands/discussions/183) | partially |
| [0.12.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0120---2022-05-07) | Custom variables | [#146](https://github.com/Taitava/obsidian-shellcommands/discussions/146) | partially |
| [0.10.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#0100---2022-02-06) | Events: Execute shell commands automatically when something happens | [#60](https://github.com/Taitava/obsidian-shellcommands/discussions/60) | partially |
| [0.7.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#070---2021-11-25) | Escaping variable values | [#11](https://github.com/Taitava/obsidian-shellcommands/issues/11) | completely |
| [0.5.0](https://github.com/Taitava/obsidian-shellcommands/blob/main/CHANGELOG.md#050---2021-10-02) | Output channels | [#16](https://github.com/Taitava/obsidian-shellcommands/discussions/16) | partially |
# History
> [!page-edit-history]- Page edit history: 2022-07-21 ➔ 2023-05-28
> - [<small>2023-05-28</small>](https://github.com/Taitava/obsidian-shellcommands-documentation/commit/ec4cb08d2ec909a4866415434569e1b55a47555d): Roadmap: Custom shells are now implemented.
> - [<small>2023-01-06</small>](https://github.com/Taitava/obsidian-shellcommands-documentation/commit/f2b125e40b6f6beafdec7abf9f53890137347040): Roadmap.md: `stdin` support is now implemented.
> - [<small>2022-11-26</small>](https://github.com/Taitava/obsidian-shellcommands-documentation/commit/1d2f69e560da073028233e767a0ea164023fb656): Roadmap: Mark that realtime output handling is implemented.
> - [<small>2022-11-26</small>](https://github.com/Taitava/obsidian-shellcommands-documentation/commit/158eba2360a38dfcc4732d08e0373182e0c2a7e3): Roadmap: Mention `stdin` support.
> - [<small>2022-07-21</small>](https://github.com/Taitava/obsidian-shellcommands-documentation/commit/6c9df8e8d8769676d3c160c56c1ed26b4a415504): First version of Roadmap.
>
> [<small>See this list of commits on GitHub</small>](https://github.com/Taitava/obsidian-shellcommands-documentation/commits/main/Roadmap.md).
> ^page-edit-history