Help regarding custom Emoji

Hi I am trying to write my code and after that I Run yarn start
the server opens but my changes are not reflected .

@Daeraxa , @PackElend or any1 in the community could help me in this regards.

an example of this can be seen below

All notes -> All nots
but no changes in the app !

Did you recompile the js files from the ts file that I assume you changed?

No I just ran yarn start after making change..

What command should i run to compile in joplin env?

Typescript doesn't natively run, it has to be compiled to javascript first.
Its literally all in the build documentation, make sure you actually read through it:

To make changes to the application, you'll need to rebuild any TypeScript file you've changed. The simplest way to do this is to watch for changes from the root of the project. Simply run this command, and it should take care of the rest:
yarn run watch
Running yarn run tsc would have the same effect, but without watching.

Actually i had read that but somehow missed that watch part :eyes: nd i use typescript but use autocompiler to compile it in js in vscode.

Anyways thanks :pray: @Daeraxa

Hi , need some help
I wrote some code to deal with custom emojis ,
but currently with the code below m unable to fetch custom emoji 's base64 string.


  const folderEmoji = folder.icon ? JSON.parse(folder.icon).emoji : ' ';
  startFolders.push({ key:, value:, label: `${folderEmoji} ${folder.title}` , indentDepth: depth });

What changes should I make to fetch custom emoji 's base64 string.?

the foldericon function looks like this

export interface FolderIcon {
  type: FolderIconType;
	emoji: string;
	name: string;
  dataUrl: string;

@Daeraxa @PackElend

@Daeraxa any views on the above ? I wanted to write unit tests for custom emojis but faced a bit problems as its an asynchronous function ->

export const runtime = (comp: any): CommandRuntime => {
	return {
		execute: async (context: CommandContext, noteIds: string[] = null) => {
			noteIds = noteIds || context.state.selectedNoteIds;

			const folders: any[] = await Folder.sortFolderTree();
			const startFolders: any[] = [];
			const maxDepth = 15;

			const addOptions = (folders: any[], depth: number) => {
				for (let i = 0; i < folders.length; i++) {
					const folder = folders[i];
						var image = new Image();
						image.src = 'JSON.parse(folder.icon).DataUrl';
					const folderEmoji = folder.icon ? JSON.parse(folder.icon).emoji : '';
					startFolders.push({ key:, value:, label: `${folderEmoji} ${folder.title}` , indentDepth: depth });
					if (folder.children) addOptions(folder.children, (depth + 1) < maxDepth ? depth + 1 : maxDepth);

So what exactly is the problem you're having?


Emoji's icon appear but the custom emoji's don't ? what m i missing ?

Can you describe in detail what you're doing? Is this a code change or just some config within Joplin

Sure pls refer this Notebook icon does not show in 'Move to Notebook' dropdown menu · Issue #6292 · laurent22/joplin · GitHub
I wanted to finish this by creating unit test in jest as i told u above.

Sorry, I still don't understand. Is the issue with writing a unit test or with missing icons.

With test as my first priority , I have used jest before but they were quite simple functions to test with .

You can check existing tests in the codebase, for instance. There are lots of them.

anyways roman I think u are with the community for a long time. Could u please tell me which files to dig in for this issue
[Desktop] New note is created in the "Conflicts (attachments)" folder · Issue #6081 · laurent22/joplin · GitHub
as the codebase is very deeper and its not possible for a newcomer to instantly look in each function.

Any general idea would be great help.

I can't tell you the exact file but you probably need the code that deals with new note creation. I'd search for "new note" and go from there.

Ok thankyou , will see :eyes: what I can do .