[ANN] Pluggers Software releases NTK Plugin 4.0

NTK Plugin has been updated to version 4.0. This major update includes many new features.

  • Support for pre-emptive multi-threading.

  • New commands for reading and writing zip files

  • New commands for working with One Time Passwords (OTP).

  • New commands for a MQTT client and server.

  • New commands for parsing URLs and parsing multi-part form data.

  • Improved commands for working with JSON Web Tokens (JWT). Support for JSON Web Keys (JWKS) has been added and extracting the key ID from a JWT.

  • New commands for encoding and decoding hex, base64, base32 and URL encoded values.

  • Various other minor features have been added.

Please refer to the section “Version history” of the documentation for a complete overview of the changes.

For more information:


The download link is still v3.1 http://www.pluggers.nl/downloads/NTK_Plugin.zip

Thank you Christian, I fixed it. There was a mistake in the filename on the server.



I was looking at upgrading my version of NTK but I noticed the options in the drop-down only show V3, not V4.

Does this matter?



Hi Steve,

I have updated the version numbers in the product variations. So it should be OK now. Looking forward for your order.


Order submitted! :slight_smile:

Hi Rob,

I just downloaded the plugin to have a quick look, but it throws runtime errors on startup, and the plugin is disabled. :frowning:

Windows 10
4D v17R3. I tried v18R3 also. Same issue.

Image 746

Image 747

Image 745

Do I see an invisible file (._ prefix) in the path?

Seems like the folder was zipped on a Mac and moved to Windows.

Yes. There are dozens of ._ files. I tried deleting the ._constants.xlf file, which got rid of the first error, but the plugin is still disabled.

Hi Rob,

Looks like a great release with lots of interesting new features. In looking at the plugin manifest, it seems like every command is marked as thread safe. Does that not depend on which 4D version you are using? I did a quick test in 4D 17.4 and was able to crash 4D very quickly with a preemptive method:



If (Count parameters=0)
	$result:=New process(Current method name;0;Current method name;True)
	$result:=NTK Set Error Handler ("App_NTKErrorHandler")
	$result:=TCP Open ("";80)
End if 
Thread 29 Crashed:: _TEST (id = 151163)
0   libsystem_platform.dylib      	0x00007fff6ca50562 OSAtomicAdd32 + 2
1   com.4d.4d                     	0x0000000108695454 xbox::VInlineString::ReleaseBuffer() const + 36
2   com.4d.4d                     	0x0000000108349304 entreeexterne_subex(entreeexterneLinkex&) + 8444
3   com.4d.4d                     	0x0000000108346e99 entreeexterneex + 1277
4   nl.pluggers.ntk-plugin        	0x000000014f82f8fb PA_DisposeUnistring + 93
5   nl.pluggers.ntk-plugin        	0x000000014f8214fc CFile::GetDefaultDirectory() + 106
6   nl.pluggers.ntk-plugin        	0x000000014f82144b CFile::SetDefaultDirectory() + 21
7   nl.pluggers.ntk-plugin        	0x000000014f7af78b CTCPSocket::connect(char const*, int, char const*) + 47
8   nl.pluggers.ntk-plugin        	0x000000014f7aa201 TCP_Open(CParams&) + 132
9   nl.pluggers.ntk-plugin        	0x000000014f7abd8b PluginMain + 375
10  nl.pluggers.ntk-plugin        	0x000000014f82f33c FourDPackex + 168
11  com.4d.4d                     	0x00000001088b7cde CallUnPack(calcblock*, short, int, char*, char***, long long*, unsigned char, bool) + 311
12  com.4d.4d                     	0x00000001083f5d1a rt_RTCallExt + 2734
13  ???                           	0x000000014e7123ea 0 + 5611004906
14  com.4d.4d                     	0x0000000108aa5f7b CallAsmPart2 + 65
15  ???                           	0x00000001500c8a40 0 + 5637966400
16  com.4d.4d                     	0x00000001086ce97b VDBLanguageContext_compiled::DoExecute(calcblock&, VCodeDescriptor*) + 179
17  com.4d.4d                     	0x00000001086de8e8 VDBLanguageContext::Execute(VDB4DTableProxy*, VFormContext*, short, int, int, champvar_template<256>**, VCodeDescriptor*) + 160
18  com.4d.4d                     	0x00000001086de5ad VDBLanguageContext::ExecuteProjectMethod(VMethodInfo_resource const*, int, champvar_template<256>**, VDB4DTableProxy*, VFormContext*, short, int) + 521
19  com.4d.4d                     	0x00000001086921a2 V4DWorkerMessage::_Execute(VDBLanguageContext*, VFormContext*) + 110
20  com.4d.4d                     	0x0000000108692b6b V4DWorker::Run(V4DTaskConcrete*) + 205
21  com.4d.4d                     	0x0000000108665fb7 Task4DMethodProc(V4DTaskConcrete*, xbox::IRefCountable*) + 24
22  com.4d.4d                     	0x00000001086665a0 Task4DProc(V4DTaskConcrete*) + 957
23  com.4d.4d                     	0x0000000108ae4b62 V4DTaskManager::_Task4DProc(xbox::VTask*) + 158
24  com.4d.kernel                 	0x000000010a957e8d xbox::VTask::_Run() + 141
25  com.4d.kernel                 	0x000000010a95d2d3 xbox::XMacTask_preemptive::_ThreadProc(void*) + 147
26  libsystem_pthread.dylib       	0x00007fff6ca5e109 _pthread_start + 148
27  libsystem_pthread.dylib       	0x00007fff6ca59b8b thread_start + 15

Peter, John, everyone,

Please if you find any issues. Please contact me directly by email so I can do a proper follow up. This section of the forum is for product announcements, not for product support.