Sublime Forum

Best strategy to update Emmet plugin



I’ve developed a new Emmet plugin for some time and I’d like to to release it for all users. Since this is one of the most downloaded plugin for Sublime Text, I’d like to take advices from developers for the best upgrade strategy.

So far I have:

  • A new plugin repo.
  • A build step on CI, mostly used to download a single dependency (py-emmet) from PyPI. Build step then creates artifact with full plugin.
  • Tag-based release instead commit-based in old plugin: I’d like to inform users that new version is available and it provides new developer experience.

According to Package Control docs, switching repos should be an easy step. My main concern is a build step: I think Package Control will download source code for tag instead of artifact?

Also, if I switch to tag-based release, will Package Control show message for new release (defined in messages.json)?

Any advices on how to make it as smooth as possible for end-users?


Is emmet abandoned for ST4

By default Package Control just downloads the revision of the repository denoted by the most recent tag via<user>/<repo>/zip/<tag>

In order to use custom pre-built zip archives, you might need to provide a custom channel via globally available repository.json, which contains a list of all releases (as registry.json does). Its URL would need to be added to the channel.json and needs updates after each release. Maybe it should live in a custom repository your deploy script pushes the new release information to?

You could add this custom repository.json manually to see whether releases work before publishing to the global repository.

Maybe we can teach Package Control to download custom built artifacts from releases directly some day via:<user>/<repo>/releases/download/<tag>/<artifact>

The message.json mechanism is quite simple. This file just needs to be placed in the packages root. It contains a mapping of plain text files for each version (semver). The content of the text files are displayed if the plugin is installed or updated. GitGutter makes use of it, if you need examples. It is a good mechanism to display information about changes or new features.



Seems like updating channel.json should work for me: I already have custom channel which is used by beta users:
Its contents is updated after each release.

And my question about messages.json is whether it’s fine if package switches from commit-based releases to tag-based. Old Emmet package already uses messages and I was afraid that switching to tag-based release would suppress new message somehow.



Was not aware of latest to be available. Should work, yes.

The messages.json works the same way for tags. Just need to use the tag name as key instead of the built date.

   "install": "messages/install.txt",
   "0.4.1": "messages/0.4.1.txt"

You don’t need to add the v prefix, just the semver.



Just a note that the new plugin needs to have higher version than the old one for Package Control to upgrade to it.



Tried to send PR with new channel but got error from bot: seems like it can’t handle 302 redirects.



@serge.che Hi, is this plugin abandoned because the last update was two years ago…



What do mean by “abandoned”? What features you’re missing or issues you’re struggling?



The last update of this plugin was two years ago, there are many changes during the two years for Sublime Text.

Although some plugins are not being updated very frequently, but they won’t take such long.

“Abandoned” means it’s not being maintained anymore, there are definitely bugs/improvements available over two years, and although you did respond to “some” issues, but nothing is done on the plugin. Check out the issues on the Github of the plugin…



One of the reasons why plugin is not updated frequently is that lots of people hack into plugin code and get angry when it’s updated and overrides their updates.

As a plugin maintainer: some these issues are “read the docs”, some of them has very specific use case so they can’t be implemented for general usage. Many of them are already fixed but not closed by reporters as fixed. But there’s a big update coming soon with features that users request most.

And my question was: what kind of issues you personally struggle that you’re looking for alternative?



I really appreciate your effort and really excited about the coming updates!

I’m coming from VS Code and just wonder if the plugin is fully compatible with ST4 since it’s not common that a plugin is not updated for a long time when its dependency ( Sublime Text ) has been updated for many things.

It’s not logical to pause the update just to avoid the minority getting angry…LOL

I haven’t installed it yet but just wonder if it’s still workable on ST4, the reason to look for alternatives is that I lost confidence in the products that are not being updated or are very slow to update as people always like reliable products…



IMO, in ST4 works much better than in VSCode since it covers much more nuances. ST4 plugin was developed by Emmet maintainer (me) and works as it was intended to work. VSCode plugin was developed my VS devs and have some issues in workflow



Sublime Text devs try to keep the plugin API backwards compatible as good as they can. I use some plugins that were made for ST2 many years ago, kept untouched and they still work as expected.

That being said, of course some things may break from time to time. But I think Emmet is quite popular (I never used it personally) and thus you should simply try it, as many people use it.

And I personally recommend trying plugins simply in favor of asking whether it is still maintained or so. There is a good chance that everything is fine and you save time :slight_smile:



I personally hate backward compatibility😂

Back to the topic, if we download a popular app on iPhone, although we know it’s still working, but people might have to look for alternatives before starting to use it if the app is not being updated for a long time.

Because they don’t want to change to other apps after they have spent a long time getting familiar with the app and making many personalized settings.

Another example, if we know a brand is not maintaining his product anymore in the future, although it’s still usuable for now, people would just pick its competitor instead of “trying the abandoned product” as you said, logic?

Btw you got the point yourself, “break from time to time”. and that’s why updates are important.

Choosing a reliable product in the first place is the best idea for saving time, I don’t want to look for other alternatives after sometimes when it becomes totally unusable, that’s why I asked the developer here😊