Git Product home page Git Product logo

knap's Introduction

  • πŸ‘‹ Hi, I’m @frabjous.
  • πŸ‘€ I’m interested in Open Educational Resources, LaTeX, neovim, and everything Linux.
  • 🌱 I’m currently learning to use GitHub and try not to be bothered by its ownership by Microsoft.
  • πŸ’žοΈ I’m looking to collaborate on the same stuff as the stuff I'm interested in of course.
  • πŸ“« How to reach me: Email [email protected] Web: http://people.umass.edu/klement

knap's People

Contributors

emuel-vassallo avatar frabjous avatar onetruec avatar tom-kuca avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

knap's Issues

Can't get knap to use pdfs.

Using the setup given in README without changing anything works.

image

Changing mdoutputext = "html" to "pdf", such as below, doesn't work.

local wk = require("which-key")

local gknapsettings = {
    mdoutputext = "pdf",
    mdtohtml = "pandoc --standalone %docroot% -o %outputfile%",
    mdtohtmlviewerlaunch = "falkon %outputfile%",
    mdtohtmlviewerrefresh = "none",

    mdtopdf = "pandoc %docroot% -o %outputfile%",
    mdtopdfviewerlaunch = "sioyek %outputfile%",
    mdtopdfviewerrefresh = "none",

    delay = 250,
}

vim.g.knap_settings = gknapsettings

wk.register({
    ["<F5>"] = { function() require("knap").process_once() end, "Knap Process Once"},
    ["<F6>"] = { function() require("knap").close_viewer() end, "Knap Close Viewer"},
    ["<F7>"] = { function() require("knap").toggle_autopreviewing() end, "Knap Toggle Autoprevewing"},
    ["<F8>"] = { function() require("knap").forward_jump() end, "Knap Forward Jump"},
}, { mode =  "n" })

Knap says it starts a routine, but no previewer is started.
image

I originally thought it was because sioyek wasn't installed correctly, but after resolving that, I still have this issue.
image

Cannot open sioyek

Environment: Mac OS Ventura 13.2.1
Use lazy.vim to install plugin, use default config.
I just map the key and press, it returns process successful; launching preview but with nothing happend. I have installed sioyek and restart my computer also, but still not work. Can you give me some advise or methods to debug? Thanks!

Multiple knap sessions

First of all thanks very much for your plugin, I enjoy it daily. One thing bothers me though: if I open two tex files in different nvim sessions then on the second session the preview will not start. If I close the pdf viewer (sioyek) of the first session, it will work on the second session. Is there any way to have a preview on the second session without closing the one of the first session?

Add support for a different current working directory

I'd like to work with some tex documents in a subfolder of the current working directory (reason being I'd like to use telescope and other context aware plugins).

...
%docroot%     the name of the root document that needs to be processed*
%outputfile%  the name of the output file**
...

While with the default settings %docroot% seems to retrieve the right filename (in fact invoking manual compilation with process_once seems to work just fine as the file updates, toggle_autopreview also compiles the file but fails opening automatically the pdfviewer), %outputfile% seems to point to the wrong path, in fact it is pointing to the current working directory with the expected output filename, thus ultimately failing to open the previewer.

E.g. sioyek reports "Could not open file: /absolute/path/cwd/main.pdf", while the document is located at /absolute/path/cwd/doc/main.pdf

β”œβ”€β”€ doc
β”‚Β Β  β”œβ”€β”€ main.aux
β”‚Β Β  β”œβ”€β”€ main.log
β”‚Β Β  β”œβ”€β”€ main.pdf
β”‚Β Β  β”œβ”€β”€ main.synctex.gz
β”‚Β Β  β”œβ”€β”€ main.tex
β”‚Β Β  └── texput.log

main.tex is a simple tex document which has sets the TeX root to itself

% TeX root = main.tex
\documentclass{article}

\begin{document}
  Hello world!
\end{document}

In the plugin documentation it is reported that ** The output file is assumed to be the same as the root document with the output extension replacing the input extension of the routine.. Am I doing something wrong or maybe this is not behaving as intended?

Either way, thanks a lot for both your attention and the plugin itself!

Prevent constant buffer writing

Hi, great plugin!
In the readme there's this section that explain exactly what this issue is about:

Warning: Part of the way this works is that your file is constantly saved, with its usual filename. This may be dangerous for some people’s workflow, especially those who don’t make adequate backups. Take care not to save over important work if you don't have a way to get it back (e.g., a previous git commit).

I'll be speaking mainly in the context of latex previewing however this applies in every other pipeline.
My suggestion is to copy the buffer contents "constantly" into a temp file in vim.fn.stdpath('cache') .. '/knap' and use that for processing,.

With that change we:

  • no longer have to save the actual file the user is editing (not all users have that luxury, especially in remote environments)
  • no longer have build artifacts reside in the users directory (latex generate up to 5 .aux, .lof, .log, .pdf, .synctex.gz)

This also opens the door to implement things like:

  • Inject something into the source file before processing if need be
  • Have the previewer not break even if we rename the file
  • A cleaner builtin implementation of this

LMK what you think.

incompatibility on windows when lauching a viewer

I found Knap very interesting, so I installed it on Windows, even though I knew it was incompatible.
I verified that the processing is done successfully using pandoc. However, the problem is launching the viewer. At this point, knap shows the error Coud not launch viewer.

Analyzing Knap's launch_viewer() function, I believe that what makes it incompatible on Windows is adding the command > /dev/null 2>&1 & echo $! to the lcmd variable.
The equivalent on Windows is >NUL 2>&1 & echo $!.

Can you change this, detecting the operating system in use to run the correct command? I'm looking forward to testing it.

Saving files to /tmp folder

Hello,
I love your plugin so far! Really useful for previewing markdown files.
I have a question though, is it possible to save the pandoc converted files to /tmp? For example when I preview A.md knap will automatically create a A.html, which can cause issues in a git repo in which I have to manually remove those from being tracked by git.
I wonder if there is an option to send those intermediate files into /tmp.
Thanks!

How to disable logs

The plugin keeps printing process successful; refresh preview every time I type, which is extremly distracting for people like me who use cmdheight = 0. Is there a way to disable those logs?

Inverse synctex doesn't work with Sioyek

This is what my configuration is. Only --reuse-instance removed (Sioyek v2.0.0 doesn't open if --reuse-instance used), everything else is default. Forward search is fine but when I enable synctex F4 then right click it doesn't do anything.

OS: macOS 12.6.1
iTerm2, nvim v0.9.0-dev-76-g45cc5fd76-dirty

 texoutputext = "pdf",
  textopdfviewerlaunch = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' %outputfile%",
  textopdfviewerrefresh = "none",
  textopdfforwardjump = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --forward-search-file %srcfile% --forward-search-line %line% %outputfile%",
  textopdfshorterror = "A=%outputfile% ; LOGFILE=\"${A%.pdf}.log\" ; rubber-info \"$LOGFILE\" 2>&1 | head -n 1",
  delay = 10

LaTeX doesn't compile with LunarVim

Hi, I'm trying to compile latex files in LunarVim. I've created a knap.lua file in ~.config/lvim/lua/ and added the default config with keybindings. But when I compile, it is giving me this error:

E5108: Error executing lua: /home/joel/.config/lvim/lua/knap.lua:12: attempt to index a boolean value                                                  
stack traceback:                                                                                                                                       
        /home/joel/.config/lvim/lua/knap.lua:12: in function </home/joel/.config/lvim/lua/knap.lua:12>                                                 
Press ENTER or type command to continue 

I thought the problem might be nvim instead of lvim in these lines:

    textopdfviewerlaunch = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --new-window %outputfile%",
    textopdfviewerrefresh = "none",
    textopdfforwardjump = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --reuse-window --forward-search-file %srcfile% --forward-search-line %line% %outputfile%",

But changing them doesn't help anyway. Also, the compiling work smooth with nvim configs

Forward/Reverse jump doesn't activate on Sioyek

I'm using:

  • neovim 0.9.1-1 (Same as arch repos)
  • sioyek 2.0.0-2 (AUR)
  • Artix Linux
  • NVChad (Latest)
  • Vimtex (NOT Lazy-loaded)
  • Ltex-ls (Lazy)
  • Texlab (Lazy)
  • KNAP (NOT Lazy-loaded)

My related pdf settings are (stock from the readme with buffer as stdin enabled):
textopdf = "pdflatex -jobname \"$(basename -s .pdf %outputfile%)\" -halt-on-error",
textopdfbufferasstdin = true,
textopdfviewerlaunch = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --new-window %outputfile%",
textopdfviewerrefresh = "none",
textopdfforwardjump = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --reuse-window --forward-search-file %srcfile% --forward-search-line %line% %outputfile%",


When i press F8 for forward search, i get the message "Attempting to jump to matching location"

I suspect it to be a knap.forward_jump issue since when i call lua require ("knap").forward_jump() from the command mode, i get the same return, meaning the command parses as intended.


Appending the results of the command when ran from a terminal with my v:servername
image


On sioyek, i enable synctex support (F4) and attempt a reverse search by right clicking on the document, and nothing happens either

How should i go about solving this?

Forward & backward jumps with ConTEXt and SyncTeX.

I have tried KNAP on Manjaro running NVIM v0.7.2 with Hello-world.tex retrieved from ConTEXt Garden with the following settings for KNAP.

  -- KNAP buffer settings
  local b_knap_settings = {
  	texoutputext = "pdf",
  	textopdf = "context --synctex --batchmode %docroot%",
  	textopdfviewerrefresh = "kill -HUP %pid%",
  }
  vim.b.knap_settings = b_knap_settings
  map({ "i", "n", "v", "c" }, "<F6>", function()
  	require("knap").close_viewer()
  end)
  -- F8 toggles the auto-processing on and off
  map({ "i", "n", "v", "c" }, "<F8>", function()
  	require("knap").toggle_autopreviewing()
  end)
  -- F9 invokes a SyncTeX forward search, or similar, where appropriate
  map({ "i", "n", "v", "c" }, "<F9>", function()
  	require("knap").forward_jump()
  end)

When the [routine] launched and Sioyek comes up, I change to cursor position in the source file then press F9, nothing seems to happen to the viewer. The inverse jumps don't work either when I am in Sioyek, press F4 then right click on one of the lines, only a message saying "jump spot at line 0 col 0 in" appears in the command window of Neovim.

ConTEXt also add a file hello-world.synctex after processing the source file. I don't know if it is relevant to add its content here.

When I run "pgrep -l sioyek", I have something like this:

39136 sioyek --inverse-search nvim --headless -es --cmd "lua require('knaphelper').relayjump('/tmp/nvima4Gwtp/0','%1',%2,%3)" --reuse-instance hello-world.pdf
Another interesting thing that I have found is if I toggle autoviewing function (press F8) 3 times, then close_viewer() (press F6) will no longer work.

These things happen probably Sioyek does not respond to Neovim via Syntex on my system. LaTeX users might not experience above things. Honestly, I don't mind all of the issues I have with my setups, just wanted to test KNAP and dig into its code for learning.

I am very grateful to KNAP's author, who is very kind and generous in replying my report via email.

Error thrown by single-processing and auto-processing operations: attempt to index field 'v' (a null value).

Hi Kevin,

I'm attempting to recreate the default configuration for TeX and running into some issues. I've installed the plugin using vim-plug, which went successfully, and have Sioyek (managed with AppImageLauncher), TeXlive, and rubber all installed on the machine. I'm trying to get it to work for the most simple LaTeX file possible:

\documentclass{article}
\begin{document}
Test
\end{document}

Unfortunately, it's throwing the following error.

E5105: Error while calling lua chunk: ...e/roshan/.config/nvim/autoload/plugged/knap/lua/knap.lua:28: attempt to ind ex field 'v' (a nil value)

The code it's referring to seems fairly innocuous:

local knap_max_col_width = (vim.v.echospace - 1)

Have you run into this before, or do you know what it's a result of? I'm running neovim 0.4.4 and the newest versions of Sioyek, TeXlive, and rubber.

Viewer autoloaded successfully only once on stock config

Not sure if it's user error so i'll refrain from assigning a label to avoid clutter.

The above behavior was independent of previewer (zathura/sioyek). On consequent uses, the previewer doesn't autosload but if opened and navigated to the file manually, it works. It seems that pandoc is executing normally. Pic related. It also seems knap.close_viewer doesn't work.

For debugging purposes i used the following stock config (found the readme). It is supplied below. The file is located under ~/.config/nvim/after/plugin/knap.lua (and thus is lazyloaded)

image

-- set shorter name for keymap function
local kmap = vim.keymap.set

-- F5 processes the document once, and refreshes the view
kmap('i','<F5>', function() require("knap").process_once() end)
kmap('v','<F5>', function() require("knap").process_once() end)
kmap('n','<F5>', function() require("knap").process_once() end)

-- F6 closes the viewer application, and allows settings to be reset
kmap('i','<F6>', function() require("knap").close_viewer() end)
kmap('v','<F6>', function() require("knap").close_viewer() end)
kmap('n','<F6>', function() require("knap").close_viewer() end)

-- F7 toggles the auto-processing on and off
kmap('i','<F7>', function() require("knap").toggle_autopreviewing() end)
kmap('v','<F7>', function() require("knap").toggle_autopreviewing() end)
kmap('n','<F7>', function() require("knap").toggle_autopreviewing() end)

-- F8 invokes a SyncTeX forward search, or similar, where appropriate
kmap('i','<F8>', function() require("knap").forward_jump() end)
kmap('v','<F8>', function() require("knap").forward_jump() end)
kmap('n','<F8>', function() require("knap").forward_jump() end)

local gknapsettings = {
    htmloutputext = "html",
    htmltohtml = "none",
    htmltohtmlviewerlaunch = "falkon %outputfile%",
    htmltohtmlviewerrefresh = "none",
    mdoutputext = "html",
    mdtohtml = "pandoc --standalone %docroot% -o %outputfile%",
    mdtohtmlviewerlaunch = "falkon %outputfile%",
    mdtohtmlviewerrefresh = "none",
    mdtopdf = "pandoc %docroot% -o %outputfile%",
    mdtopdfviewerlaunch = "sioyek %outputfile%",
    mdtopdfviewerrefresh = "none",
    markdownoutputext = "html",
    markdowntohtml = "pandoc --standalone %docroot% -o %outputfile%",
    markdowntohtmlviewerlaunch = "falkon %outputfile%",
    markdowntohtmlviewerrefresh = "none",
    markdowntopdf = "pandoc %docroot% -o %outputfile%",
    markdowntopdfviewerlaunch = "sioyek %outputfile%",
    markdowntopdfviewerrefresh = "none",
    texoutputext = "pdf",
    textopdf = "pdflatex -interaction=batchmode -halt-on-error -synctex=1 %docroot%",
    textopdfviewerlaunch = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --reuse-instance %outputfile%",
    textopdfviewerrefresh = "none",
    textopdfforwardjump = "sioyek --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --reuse-instance --forward-search-file %srcfile% --forward-search-line %line% %outputfile%",
    textopdfshorterror = "A=%outputfile% ; LOGFILE=\"${A%.pdf}.log\" ; rubber-info \"$LOGFILE\" 2>&1 | head -n 1",
    delay = 250
}

vim.g.knap_settings = gknapsettings

Changing default PDF viewer

Sioyek is not rendering on older machine, which does not support OpenGL 3

so how do I set up Zathura as my default PDF viewer ?

I have installed the plugin using packer and my key map settings are in init.lua file

Thank You

global functions

You define all your functions as global. In Lua local functions defines like this:

local function funname(param)
   ...
end

Please make them local, because they interfere in my environment.

rubber-info returns "there was no error", yet knap won't run textopdf or previewer

I installed knap using lazyvim, this is in my init.lua:

local gknapsettings = {
    texoutputext = "pdf",
    textopdf = "nix-shell -p steam-run --run \"make\"",
    textopdfviewerlaunch = "okular %outputfile%",
    textopdfviewerrefresh = "kill -HUP %pid%",
    textopdfshorterror = "A=%outputfile% ; LOGFILE=\"${A%.pdf}.log\" ; env --chdir=latex.out -S rubber-info \"$LOGFILE\" 2>&1 | head -n 1", -- output files are put in latex.out directory, so chdir there before running rubber-info
}
vim.g.knap_settings = gknapsettings

-- set shorter name for keymap function
local kmap = vim.keymap.set

-- F5 processes the document once, and refreshes the view
kmap({ 'n', 'v', 'i' },'<F5>', function() require("knap").process_once() end)

-- F6 closes the viewer application, and allows settings to be reset
kmap({ 'n', 'v', 'i' },'<F6>', function() require("knap").close_viewer() end)

-- F7 toggles the auto-processing on and off
kmap({ 'n', 'v', 'i' },'<F7>', function() require("knap").toggle_autopreviewing() end)

-- F8 invokes a SyncTeX forward search, or similar, where appropriate
kmap({ 'n', 'v', 'i' },'<F8>', function() require("knap").forward_jump() end)

No matter how I change the rubber-info command, it will always say "ERR: There was no error", and then stop, it won't do anything else. I can run the textopdf command, the textopdfviewerlaunch and the textopdfshorterror commands all fine separate from each other.

rubber-info also seems to return 0, and pipes stderr to stdout, so how does knap see if there is an error at all? If I make the message "disappear" by adding grep -iv "there was no error", it will just output "ERR:".

Setting up forward/inverse Synctex search with supplementary tex files

Hi,

First of all thank you for creating this plugin, I was struggling to set up synctex on neovim properly and this just works!

I am using the default pdf reader Sioyek and synctex works in both forward and reverse directions when I am editing a single tex file. I am having issues however when I have a more complicated tex document with supplementary tex files. To be more clear I have a project structure like follows:

ο„• doc
β”œβ”€β”€ ο„• chapters
β”‚  β”œβ”€β”€ ο„• chapter_1
β”‚  β”‚  β”œβ”€β”€  intro.tex
β”‚  β”‚  └──  summary.tex
β”‚  └── ο„• chapter_2
β”‚     β”œβ”€β”€  intro.tex
β”‚     └──  summary.tex
└──  main.tex

When I open main.tex in neovim and toggle knap autopreview with <F7> the document opens and I can use both forward and reverse search. However, if I go to a part of the pdf in Sioyek which was included in the main document via \input{chapters/chapter_1/intro.tex} and try to right-click to do an inverse search it does not jump to the appropriate file and instead neovim just prints something like:

jump spot at line 5 col 0 in /path/to/docs/./chapters/chatper_1/intro.tex

I cannot understand how to fix this from the docs. Also if I open the file chapters/chapter_1/intro.tex in neovim after launching the autopreview from main.tex and I press <F7> again then I can successfully use reverse search by pressing <F4> in Sioyek and right-clicking. However, now I cannot forward search from the supplementary file using <F8>, neovim prints out Viewer not currently active.

I have put on the top of my supplementary file % TeX root = ../../main.tex.

Is there a way to fix these issues?

These are my settings for knap:

local gknapsettings = {
  texoutputext = "pdf",
  textopdf = "pdflatex -interaction=batchmode -halt-on-error -synctex=1 %docroot%",
  -- textopdf = "pdflatex -jobname \"$(basename -s .pdf %outputfile%)\" -halt-on-error",
  textopdfviewerlaunch = "/home/yanni/Applications/Sioyek-x86_64_2df5964a856fc1f662dd4663896aeb21.AppImage --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --reuse-instance %outputfile%",
  textopdfviewerrefresh = "none",
  textopdfforwardjump = "/home/yanni/Applications/Sioyek-x86_64_2df5964a856fc1f662dd4663896aeb21.AppImage --inverse-search 'nvim --headless -es --cmd \"lua require('\"'\"'knaphelper'\"'\"').relayjump('\"'\"'%servername%'\"'\"','\"'\"'%1'\"'\"',%2,%3)\"' --reuse-instance --forward-search-file %srcfile% --forward-search-line %line% %outputfile%",
  textopdfshorterror = "A=%outputfile% ; LOGFILE=\"${A%.pdf}.log\" ; rubber-info \"$LOGFILE\" 2>&1 | head -n 1",
  -- textopdfbufferasstdin = true,
  delay = 250
}

vim.g.knap_settings = gknapsettings

and my keymaps are the default ones suggested:

-- F5 processes the document once, and refreshes the view
vim.keymap.set('i','<F5>', function() require("knap").process_once() end)
vim.keymap.set('v','<F5>', function() require("knap").process_once() end)
vim.keymap.set('n','<F5>', function() require("knap").process_once() end)

-- F6 closes the viewer application, and allows settings to be reset
vim.keymap.set('i','<F6>', function() require("knap").close_viewer() end)
vim.keymap.set('v','<F6>', function() require("knap").close_viewer() end)
vim.keymap.set('n','<F6>', function() require("knap").close_viewer() end)

-- F7 toggles the auto-processing on and off
vim.keymap.set('i','<F7>', function() require("knap").toggle_autopreviewing() end)
vim.keymap.set('v','<F7>', function() require("knap").toggle_autopreviewing() end)
vim.keymap.set('n','<F7>', function() require("knap").toggle_autopreviewing() end)

-- F8 invokes a SyncTeX forward search, or similar, where appropriate
vim.keymap.set('i','<F8>', function() require("knap").forward_jump() end)
vim.keymap.set('v','<F8>', function() require("knap").forward_jump() end)
vim.keymap.set('n','<F8>', function() require("knap").forward_jump() end)

Just a question

How is this different from converting LaTex to pdf directly and seeing actually how the pdf looks? This is not meant as a criticism; just that I'm trying to assess whether this plugin can be useful to me.

ERR: undefined control sequence \phantomsection

when running using the default configuration and starting the preview neovim errors and says:
./<filename>.tex:1: Undefined control sequence \phantomsection when using the hyperref package.

these files compile fine when using my typical tex environment. i have change the engine to xelatex but that has not fixed the problem

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.