Roadmap
Tip
This is the roadmap for kms. As time goes on, more and more items and information will be added to this roadmap.
Learn more about the versioning system
Learn about supported versions
The “No” List
kms will NEVER have the following features:
- The ability to interact with the following file extensions:
*.txt,*.rtf,*.dbf,*.html,*.mdb,*.accdb - The reliance on other libraries that function similar to kms
Accepted Issues
See refactorization requests here.
Full Roadmap
Tip
See this page for more information about the release cycles.
Old Roadmaps
Warning
Please refer to the actual release notes for accurate information.
kms-semver1.3.1
kms-semver1.3.1
- Projected Release Date: **
2026/08/102026/08/12**Stable Release tag: *
v1.3.1.20260810v1.3.1.20260812*Release: https://github.com/Boss-1s/key_multivalue_storage/releases/tag/v1.3.1.20260812
Features
- #27 - Better ability to type-hint Storage ✅
New method:
Storage.to_dict()def to_dict(self) -> dict[str, dict[str, Any]]: """ Converts a Storage instance into a dictionary. ## Arguments No arguments. ## Returns - `dict[str, dict[str, Any]]`: the original instance in dict form. ## Notes This method exists only as a backup to casting a `Storage` instance directly to a `dict` with `dict(Storage)`. """- New
__getitem__branch: By passing the top level key in bracket notation (Storage("key", foo="bar")['key']),self.valueswill be returned.- #75 -
__iadd__forStorageBug Fixes
- #14 - tests failing due to legacy Windows shell refusing
utf-8encoding ✅- #26 - Storage not assignable to type
dict[str, dict[str, Any]]✅- #58 - Not enough test coverage
- #67 - cannot cast
Storagetodict✅- #68 - bug:
del selfdoes not work ✅- #76 - bug:
__add__updates selfGraceful Deprecation cycle 1.3.1
- Deprecated format specifiers
.tuplefand.tuplet.- Attribute
auto_delete_selfand argumentinstant_deleteofStorage.store()has been deprecated.
kms-semver1.3.2
kms-semver1.3.2
Release Date: 2026/09/30
Stable Release tag:
v1.3.2.20260930Release: https://github.com/Boss-1s/key_multivalue_storage/releases/tag/v1.3.2.20260930
Features
No new features will be introduced in this update.
Bug Fixes
- Fixed release pipeline bug where a commit SHA target_commitish was treated as a branch
- Prettified all Storage dunder methods
Graceful Deprecation cycle 1.3.2
Nothing to be deprecated in this version.
kms-semver1.3.3
- Projected Release Date: 2026/11/07
Stable Release tag: v1.3.3.20261107
Important
This major patch coincides with the 2nd alpha release of kms-semver1.4, kms-v1.4.0a1/2026.11.07.
Features
No new features will be introduced in this update.
Bug Fixes
- Fix discrepancy between
kms.storage’s type stub and implementation
Graceful Deprecation cycle 1.3.3
Note
kms-semver1.4.0a2 has its own list of deprecations.
- None yet…
kms-semver1.3.4
- Projected Release Date: 2026/12/05
Stable Release tag: v1.3.4.20261205
Important
This major patch coincides with the 1st beta release of kms-semver1.4, kms-v1.4.0b0/2026.12.05.
Features
No new features will be introduced in this update.
Bug Fixes
- No bugs to be fixed….yet…
Graceful Deprecation cycle 1.3.4
Note
kms-semver1.4.0b0 has its own list of deprecations.
- None yet…
kms-semver1.3.5
- Projected Release Date: 2026/12/21
Stable Release tag: v1.3.5.20261221
Important
This major patch coincides with the 3rd beta release of kms-semver1.4, kms-v1.4.0b2/2026.12.21.
Features
No new features will be introduced in this update.
Bug Fixes
- No bugs to be fixed….yet…
Graceful Deprecation cycle 1.3.5
Note
kms-semver1.4.0b2 has its own list of deprecations.
- None yet…
kms-semver1.3.6
- Projected Release Date: 2027/01/03
Stable Release tag: v1.3.6.20261107
Important
This major patch coincides with the stable release of kms-semver1.4.0.
Important
This update will commence the beginning of LTS for kms-semver1.3.x.
Features
No new features will be introduced in this update.
Bug Fixes
- No bugs to be fixed….yet…
This update will not have a deprecation cycle.
kms-semver1.4.0
- Projected Stable Release Date: 2027/01/03
- Projected Alpha 0 Release Date: 2026/10/12
- Projected Beta 0 Release Date: 2026/12/05
- Projected Release Candidate 0 Release Date: 2026/12/27
Stable Release tag: v1.4.0.20260103
Release Plan
Warning
The dates below are subject to change.
alpha0: 2026/10/12alpha1:2026/10/242026/10/262026/11/07 (changed on 2026/10/24)alpha2:2026/11/072026/11/21 (changed on 2026/10/24)(removed on 2026/10/24)alpha3: 2026/11/28 2026/11/21 (changed on 2026/10/18)beta0: 2026/12/05 (No features allowed past this point)beta1: 2026/12/13beta2: 2026/12/21rc0: 2026/12/27
(there may be more
rcs in between; however, that is very unlikely.)
final: 2027/01/03
TL;DR 4 3 Alphas, 3 Betas, and 1 Release Candidate are planned.
Stable Release tag: v1.4.0.20260103
Full To-Do Lists
See #197 for the alpha releases’ to-dos. This inclusively includes all updates between a0 and a3.
See #198 for the beta releases’ to-dos. This inclusively includes all updates between b0 and b2.
Features
I’m gonna have to sort these at some point….docs is harder than coding the module itself trust
- More encoding options
- Make certain functions accept a
Storageobject – that way, complex arithmetic/bitwise operators can be avoided - Make certain functions return
Storageobjects instead ofNone - New methods allowing for easy modification of
Storageobjects inEditclass instead of using operators - Native scratchattach support (maybe)
- Full switch to
logging.Loggeroverprint() - Full switch to
rich - Adding
__iadd__and related methods toStorage– allows saving memory by using only one object for binary operations that have a unary counterpart - NextGen Preview - Cycle A
Bug Fixes
- None for now…
Graceful Deprecation cycle 1.4.0
- (a1) Usage of helper classes through
Storagei.e.Storage.Load.by_keyhas now been deprecated in favor of direct import, i.e.from key_multivalue_storage import Load. Please note the change accordingly. The functionality of accessing the helper classes in this way will be completely removed inkms-semver2.0.0.
kms-semver1.5.0
- Projected Stable Release Date: 2027/06/30
- Projected Alpha 0 Release Date: 2027/03/31
Stable Release tag: v1.5.0.20270630
Release Plan
Most likely? No release plan! Keeping up with schoolwork and pre-releases just seems very unlikely to be possible right now…..
Features
- Multiple file format support (
.json,.yaml,.yml) - YAML parsing and editing
- Find custom UUIDv7 library so that no fallback to UUIDv4 is necessary
- Allow choosing type of UUID as the instance ID
- NextGen Preview - Cycles B and C
Bug Fixes
- None for now…
Graceful Deprecation cycle 1.5.0
- None for now…
kms-semver1.6.0
- Projected Stable Release Date: 2028/01/08
- Projected Alpha 0 Release Date: 2027/10/05
Stable Release tag: v1.6.0.20280108
Caution
This will be the last update in the kms-semver1.x series. If you are still using this series of updates by then, you should switch over to kms-semver2.x instead.
Features
- Begin deprecation and LTS/EOS of kms-semver1.x series
- NextGen Preview - Cycle D
Bug Fixes
- None for now…
This update will not have a deprecation cycle, due to it being the last version in the kms-semver1.x series.
kms-semver2.0.0
- Projected Stable Release Date: 2027/08/17
- Projected Alpha 0 Release Date: 2027/06/14
Stable Release tag: v2.0.0.20270817
kms-semver2.0.0 is an upcoming, backwards-incompatible update planned for release on August 17th, 2027, exactly two years after the release of kms-v1.0.0/2026.08.17.
This update will bring many changes and features, including the ability to store and read JSON data with SQL querying, store data in YAML files, MultiStorage which makes nesting Storage in Storage easier and more Pythonic, and more. All of these features will be built up slowly in the kms-semver1.x releases leading up to this version.
Note
These lists is incomplete. As time passes and the release gets closer, more things will be added in the lists below.
Important
kms-semver2.0.0 will be built off of a version of kms-semver1.5.0, though this may not matter because the library will have a complete rewrite.
Warning
These are all planned features and projected (breaking) changes; they are not guaranteed to make it into the final release.
NextGen Preview
With NextGen Preview, you can try some of the below features for yourself by setting the kms.nextgen attribute to True.
- Certain 2.0.0 features will be implemented in a non-breaking change way.
- You can test ALL these changes out through the following script:
import key_multivalue_storage as kms kms.nextgen = True - To turn on NextGen preview in a specific module, you can set the
nextgenattribute in that module.from key_multivalue_storage import storage storage.nextgen = True Storage = storage.Storage with Storage("tlk", sk='sv') as s: print(dict(s)) # Will print the nested dict format (full storage) instead of just the values of the top level key - Note that if a module did not exist prior to 2.0, you must specifically use the
kms.nextgenattribute to activate it. - The
nextgenattribute will exist untilkms-semver2.1, to allow a good amount of time to transition to thekms-semver2.xseries.
- You can test ALL these changes out through the following script:
Here are the preview cycles for NextGen Preview.
| cycle letter | minor updates | planned amount of cycles | focus |
|---|---|---|---|
A |
1.4.0a1 to 1.4.0a3 |
3 | Features at critical priority |
B |
1.5.0a0 to 1.5.0a1 |
2 | Above + Refactors and overhauls |
C |
1.5.0a2 to 1.5.0a4 |
3 | Above + Breaking non-critical bugfixes |
D |
1.6.0a0 to 1.6.0a3 |
4 | Above + Final Touches for smooth transition |
Breaking Changes
- Module name changes: Import
kmsto use the library, andkms.storageforStorage.
# before v2.0.0
import key_multivalue_storage as kms
from key_multivalue_storage import Storage
# after v2.0.0
import kms
from kms.storage import Storage
-
Explicit submodule import style: When importing classes, the format
from kms.<module> import <class>will be used. -
Implementation of
__slots__: By implementing__slots__,kmscan be more lightweight and reduce memory footprints in especially MASSIVEStorageinstances.
New Features
MultiStorage
MultiStorage will be a new class that takes the original Storage object a step further, allowing for key-multivalue pairs INSIDE a key-multivalue pair!
The original Storage object only supported this:
{
"key1": {
"subkey1": "val1",
"subkey2": "val2"
}
}
To store another key-multivalue pair, you would’ve needed a Storage object passed in another’s **kwargs argument to allow that, which would have been very messy.
MultiStorage makes that easier by taking in an arbitrary number of Storage arguments and combining them behind-the-scenes to allow key-multivalue pairs in a key-multivalue pair.
from kms.storage import MultiStorage
# Currently, MultiStorage's usage is planned to look like this
MultiStorage(top_lv_key, *storages, **kwargs)
# When typing in this...
MultiStorage("key1", Storage("subkey", subsubkey="val1", subsubkey2="val2"), subkey2="val3")
It would return a MultiStorage instance. You can then cast it to a dict, which would make it look like this:
{
"key1": {
"subkey": {
"subsubkey": "val1",
"subsubkey2": "val2"
},
"subkey2": "val3"
}
}
Important Changes
Method Refactorization
Lots of methods will be getting complete refactors. What I mean is that for some methods, their arguments will no longer be positional-based, meaning you must type out the whole argument name and equals to set it. One planned method that will have this change is Delete.all().
class Delete(metaclass=meta._DeleteMeta):
...
# Old method signature
def all(file_path: str, warn: bool=True) -> None: ...
# This meant you could call the arguments by position as well.
Delete.all("my_file.json", False)
class Delete(metaclass=meta._DeleteMeta):
...
# New method signature
def all(file_path: str, *, warn: bool=True) -> None: ...
# In kms-semver2.0, you **have** to type `warn=` for this to work.
Delete.all("my_file.json", warn=False)
Another, proposed by #74, has nothing to do with arguments, but with the underlying logic of the method itself. Instead of returning self.values when using the with keyword, we would instead return the whole Storage object - effectively replacing the deprecated auto_delete_self attribute and Storage.store(instant_delete: bool) argument.
These types of refactorizations - whether it’s argument positioning, logic, or just a tweak of a variable name - will prove how each change makes kms more and more memory-efficient and lightweight.
See all other new features in the release notes.