Code Monkey home page Code Monkey logo

idea-plpgdebugger's People

Contributors

actions-user avatar alexandreboyer avatar cvas71 avatar dependabot[bot] avatar ng-galien 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

idea-plpgdebugger's Issues

RAISE NOTICE doesn't put anything into console

Describe the bug
When I try to debug my routine I would like to see results of every RAISE NOTICE call but there are nothing happens. I try to do the same but in the pgAdmin and then I can see all messages.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Intellij Idea'
  2. Click on 'Database panel on the frame right side'
  3. Expand my database routines
  4. Scroll down to needed routine
  5. Click on it and run 'debug routine'
  6. When breakpoint with raise notice passed no results in console

Expected behavior
Message should appear with data I put there as It does in pgAdmin

Screenshots
Screenshot 2023-09-28 201930
Screenshot 2023-09-28 202727
Screenshot 2023-09-28 202802
Screenshot 2023-09-28 202832
Screenshot 2023-09-28 203506

Desktop (please complete the following information):

  • Windows
  • Chrome
  • Version 117.0.5938.92 (Official Build) (64-bit)
  • IntelliJ IDEA 2022.3.1 (Ultimate Edition) Build #IU-223.8214.52, built on December 20, 2022

Debugger only works once

Started a debugging session from the Database Explorer.

This worked once. The next time I invoked the same function, it just ran, no debugger.

M1 Mac, Postgres 14, IntelliJ

Prevent when extension is not avaible

Describe the bug
Information is missing when debug extension is not available

  • Check extension exists when controller starts
  • Improve failure message when starting controller

Source code editing

Overview

Ability to edit source code, reload function and restart debugger

Features

  • Control source code hash
  • Clean the VFS with outdated references

Can't debug routines in schema other than `public` (PostgreSQL 14.1)

Describe the bug
I see Routine not found error.

To Reproduce
Steps to reproduce the behavior:

create schema s_test;

create or replace function s_test.test_debug(p_text text, p_int integer DEFAULT 0) returns text
  language plpgsql
as
$$
BEGIN
  return 'DEBUG END';
end
$$;

SELECT s_test.test_debug('TEST', 0);

Try debug last row.

Expected behavior
Should debug routines in schemas

Screenshots
изображение

Allow to debug anonymous function

Debugging an anonymous plpg function can be a great feature.

  • Detect we are in an anonymous function in the editor
  • Create a temporary function with the anonymous code in the target
  • Debug it in direct mode
  • Delete the temporary function at the end of debugging

Run debugging

I keep trying to debug the SELECT test_debug('TEST', 1224312); function. Sometimes debugging works on version 1.0.3, and sometimes it doesn't. There is a normal execution of the function with the return of the result and there is no switch to debug mode. I also noticed that after the debugging process, if you simply execute the SELECT test_debug('TEST', 1224312); then its execution time is delayed by tens of seconds.

Also, after some attempts on the server side, there is a process that can only be killed.

Disabled debug icon

thanks for your efforts!!

Describe the bug
Once I was able to start debugging.
After few IDE restarts I can not do that anymore -- my Debug button is disabled (grayed out).

Screenshots

Снимок экрана 2023-09-18 в 16 24 14

Additional context

IDEA Plugin version 222.3.2

IntelliJ IDEA 2022.3.3 (Ultimate Edition) Build #IU-223.8836.41, built on March 10, 2023

PostgreSQL 13.9 (Debian 13.9-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

DataGrip Plugin failed to start

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Start debugging a procedure
  2. IDE error occurred:
    1 of Exception in plugin PostgreSQL Debugger (222.3.3)

Run failed to start

java.util.NoSuchElementException: List is empty.
at kotlin.collections.CollectionsKt___CollectionsKt.first(_Collections.kt:214)
at net.plpgsql.ideadebugger.command.PlExecutor.createListener(PlExecutor.kt:111)
at net.plpgsql.ideadebugger.run.PlProcess$InnerThread.run(PlProcess.kt:347)

Expected behavior
Debuggers starts as described.

Screenshots
Screenshot 2023-05-09 at 19 56 44

Screenshot 2023-05-09 at 19 54 16

Desktop (please complete the following information):

  • OS: macOS 13.3.1
  • Tool: DataGrip 2023.1.1

Additional context
Add any other context about the problem here.

Feature request: ability to execute custom SQL before debugging

Is your feature request related to a problem? Please describe.

I use PGTT https://github.com/darold/pgtt extension, and it require load it's module after new session started:
LOAD '$libdir/plugins/pgtt';
https://github.com/darold/pgtt#use-of-the-extension

When I start debugging, I should load this module before debugging.
I try use "Evaluate expression" window, but it, seems, not worked (PostgreSQL 14.1), show nothing.

Describe the solution you'd like
Allow execute LOAD 'module' in the variables

Describe alternatives you've considered
Make separate function for initialize and load module. Execute function once in Variables block.

Additional context

plugin_debugger and view record type

Good afternoon, Sir.
I am using your plugin_debugger (https://github.com/ng-galien/pldebugger) library built according to your instructions. I noticed that if in the declared variables there is a variable with the RECORD type, the debugging process ends with an error.
[55000] ERROR: record "v_record" is not assigned yet
The tuple structure of a not-yet-assigned record is indeterminate.
It's easy to check.
In your function, which goes for an example, added in the declaration
v_record RECORD;
and before RETURN
pasted the code
FOR v_record IN SELECT * FROM public.debug
LOOP
RAISE NOTICE '%', v_record.id;
END LOOP;

CREATE FUNCTION test_debug(p_text text, p_int integer DEFAULT 0) RETURNS text
LANGUAGE plpgsql
AS
$$
DECLARE
v_int_array INT[] = ARRAY [6, 7, 8];
v_custom public.custom_type = (434, 'Custom')::public.custom_type;
v_debug_array debug[];
v_debug debug;
v_text TEXT = '';
v_int INT = 0;
v_date DATE = NULL;
v_record RECORD;
BEGIN
v_text = p_text;
v_int_array = ARRAY_APPEND(v_int_array, p_int);
SELECT * FROM public.debug LIMIT 1 INTO v_debug;
v_int_array = ARRAY_APPEND(v_int_array, 3);
SELECT ARRAY_AGG(d) FROM public.debug d INTO v_debug_array;
v_int_array = ARRAY_APPEND(v_int_array, 5);
v_int_array = ARRAY_APPEND(v_int_array, 7);
v_text = 'TEST';
v_int = v_int + 1;
v_date = CURRENT_DATE;
SELECT ARRAY_AGG(id) FROM public.debug INTO v_int_array;
FOR v_record IN SELECT *
FROM public.debug
LOOP
RAISE NOTICE '%', v_record.id;
END LOOP;

RETURN 'DEBUG END';

END
$$;

Does not enter to debug (PostgreSQL 14.1, debugger 1.1.0)

Describe the bug
Debugger execute function without stopping on it.

To Reproduce

create schema if not exists test_schema;

create or replace function test_schema.debug_test() returns text as $$
begin
  return 'A';
end;
$$ language plpgsql;

select test_schema.debug_test(); -- Try debug this

In Debug/Console window it show single line:

[NOTICE] PLDBGBREAK:27

In Service windows it show execution result:
изображение

Expected behavior
Should stop on function body.

Additional context
PostgreSQL 14.1 (Docker-edition)
Plsql Debugger 1.1.0

Can't debug stored procedures.

Describe the bug
Can't debug stored procedures.

To Reproduce
Steps to reproduce the behavior:

create or replace procedure debug_proc_test() as $$
begin
  null;
end;
$$ language plpgsql;

-- Select here and click "Debug" button:
call debug_proc_test();

Expected behavior
Should debug procedures (not functions only),

Screenshots
изображение

Plugin is not compatible with the current version of the Intellij IDEA IDE v233.*

Is your feature request related to a problem? Please describe.
The IDE gives the following error message:
Plugin 'PostgreSQL Debugger' (version '232.0.3') is not compatible with the current version of the IDE, because it requires build 232.* or older but the current build is IU-233.11799.241

Describe the solution you'd like
A new version of Intellij IDEA is out and the plugin cannot be loaded.
Build #IU-233.11799.241, built on December 2, 2023
Please remove the version restriction or similar to make it possible to load the plugin assuming that is all that is really required.

Describe alternatives you've considered
The alternative is to downgrade used version of Intellij IDEA.

Additional context
N/A

Provide Docker image with enhanced debugger

The legacy PostgreSQL debugger has some limitations as it only outputs a subset of variable.
It only outputs basic variables and arrays. Rows, records and structured type are discarded.

Compile the modified debugger is not technically difficult but requires a Linux platform as it's too complicated on Windows.

We can provide a Docker image of the PostgreSQL with the enhanced debugger:

  • Based on legacy image
  • Compile the enhanced debugger against modified sources
  • Install and configure it in shared libraries

PG 14.1 compatibility

In PostgreSQL 14.1 This query can't executed.

Raise error "ERROR: column reference "oid" is ambiguous".

SELECT oid,
        pronargs,
        idx,
        proargname,
        concat(t_type_ns.nspname, '.', t_type.typname),
        idx > (pronargs-pronargdefaults)
        FROM (SELECT idx                          ,
                     pronargs,
                     pronargdefaults,
                     t_proc1.oid,
                     t_proc1.proargtypes[idx - 1] as proargtype,
                     t_proc1.proargnames[idx]     as proargname
              FROM (SELECT t_proc.oid,
                           case when t_proc.pronargs = 0 then '{0}'::oid[] else t_proc.proargtypes::oid[] end as proargtypes,
                           case when t_proc.pronargs = 0 then '{""}'::text[] else t_proc.proargnames end      as proargnames,
                           t_proc.pronargs,
                           t_proc.pronargdefaults,
                           case when t_proc.pronargs = 0 then 1 else t_proc.pronargs end                      as serial
                    FROM pg_proc t_proc
                             JOIN pg_namespace t_namespace
                                  ON t_proc.pronamespace = t_namespace.oid
                    WHERE lower(t_namespace.nspname) = lower('%s')
                      AND lower(t_proc.proname) = lower('%s')
                    ORDER BY t_proc.oid) t_proc1,
                   generate_series(1, t_proc1.serial) idx) t_proc2
                 LEFT JOIN pg_type t_type
                           ON t_proc2.proargtype = t_type.oid
                 left join pg_namespace t_type_ns ON t_type.typnamespace = t_type_ns.oid

From Youtrack

Functional UI Tests

Overview

Because lacking of unit tests or integration test we need a manual test suite.

Steps

  • Uninstall / reinstall plugin
  • Function / procedure detection
  • Variable check
  • Breakpoints test

DataGrip Debugger plugin does not load the latest function version

Describe the bug
When a function code is updated, the debugger does not load the new version unless one quits DataGrip and starts it agian.

To Reproduce
Steps to reproduce the behavior:

  1. Debug a function
  2. Change its code, verify the function is updated.
  3. Debug again in the same or new console
    The old code is loaded, unless DataGrip is restarted.

Expected behavior
When a function code changes, the debugger should load the new version on every debug run.

Desktop (please complete the following information):

  • OS: macOS Ventura 13.4.1
  • DataGrip 2023.1.2
  • DataGrip PostgreSQL Debugger plugin 231.0.1

Indirect debug support

Overview

Support for indirect debugging, wait for target procedure

Features

  • Run from function definition
  • Run from database tree

Detection support

Overview

Identify the target procedure

Features

  • Document calling convention
  • Parse the call
  • Handle procedure schema
  • Handle argument schema
  • Test the best candidate
  • Handle quotes
  • Create procedure for detection support
  • Provide two modes for detection, with internal API and Fail back with Queries

Bug fixes 222.1.0

  • #issue 1 Console log does not display
  • #issue 2 Indirect debug parameter have to be removed
  • #issue 3 For Indirect debug the initial breakpoints of target should be restored when the owner query is completed

Keyboard selection does not enable "Debug" button

Describe the bug
If I select code from keyboard, the button Debug leaves disabled.

To Reproduce
Steps to reproduce the behavior:

  1. Move editor cursor to start of expression
  2. Press Shift and select some text
  3. Button "Debug" can't enabled.

Expected behavior
Should be enabled button.

Screenshots
изображение

(RubyMine 2021.3.1)

Unable to run debugger

I'm not able to run debugger

IntelliJ IDEA 2022.3 (Ultimate Edition)
Build #IU-223.7571.182, built on November 29, 2022

docker image: awachowski/docker-postgres:with-debugger

stuck on this screen
image

all extensions are installed

image

Support UPPERCASE names

Describe the bug
Debugger can't find name in UPPERCASE.

To Reproduce

create or replace function debug_test() returns text as $$
begin
  return 'result';
end;
$$ language plpgsql;

-- Debug here:
select DEBUG_TEST();

Expected behavior
Should run.

Screenshots
изображение

Error after debugging in PostgreSQL 14.1

Describe the bug
Sometimes I've got this error after debug session terminated:

java.sql.SQLException: Ошибка ввода/вывода при отправке бэкенду (I/O error when send to backend)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:349)
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:481)
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:401)
	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:322)
	at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:308)
	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:284)
	at org.postgresql.jdbc.PgStatement.executeQuery(PgStatement.java:236)
	at com.intellij.database.remote.jdbc.impl.RemoteStatementImpl.executeQuery(RemoteStatementImpl.java:179)
	at jdk.internal.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
	at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)
	at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)
	at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164)
	at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:217)
	at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:162)
	at com.sun.proxy.$Proxy201.executeQuery(Unknown Source)
	at net.plpgsql.ideadebugger.DBRowSet.open(RowSet.kt:77)
	at net.plpgsql.ideadebugger.AbstractRowSet.execute(RowSet.kt:40)
	at net.plpgsql.ideadebugger.DBRowSet.run(RowSet.kt:88)
	at net.plpgsql.ideadebugger.PlCommandKt.plRunStep(PlCommand.kt:155)
	at net.plpgsql.ideadebugger.PlProcess$fetchStep$$inlined$runAsync$1.run(promise.kt:402)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.SocketException: Socket closed
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
	at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
	at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
	at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:161)
	at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:128)
	at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:113)
	at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
	at org.postgresql.core.PGStream.receiveChar(PGStream.java:443)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2056)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:322)
	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:481)
	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:401)
	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:322)
	at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:308)
	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:284)
	at org.postgresql.jdbc.PgStatement.executeQuery(PgStatement.java:236)
	at com.intellij.database.remote.jdbc.impl.RemoteStatementImpl.executeQuery(RemoteStatementImpl.java:179)
	at jdk.internal.reflect.GeneratedMethodAccessor45.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	... 1 more

Result of the function was showed in the result grid.

To Reproduce
Steps to reproduce the behavior:

  • Install PostgreSQL 14.1 (Docker version, docker pull postgres:14.1-alpine3.14 )
  • Create function test_debug
  • Try debug

Expected behavior
Error message should not appear.

Screenshots
изображение

Plugin settings/config

Overview

All about parameters in the plugin

Features

  • Timeouts
  • Output verbosity
  • Run custom queries at startup
  • Customise main internal queries
  • Projet level parameters
  • Debug configurations

Incorrect position in source method

If in a function, add a comment before DECLARE or, for example, a special command such as #variable_conflict use_variable.
When debugging, the cursor is set to a line lower than it should be.

Process control

Overview

All about debug process control

Features

  • Add timeout when the after starting direct debug
  • Close owner connection when the debugger is not reached
  • Terminate the backend process when debugger stops
  • Disallow starting the debugger twice.

Diagnostic Error for non-superuser

Describe the bug
Installed extension pldbgapi, debug works under user superuser. Under other (non-superuser) user -- does not.

Screenshots
Снимок экрана 2023-09-19 в 14 48 58

Additional context
Complaint on shared libraries obviously an error, libraries totally work when I attempt to debug under superuser.
And shared libraries are either loaded or not loaded, that is not user-dependent, right?

IDEA Plugin version 222.3.2

IntelliJ IDEA 2022.3.3 (Ultimate Edition) Build #IU-223.8836.41, built on March 10, 2023

PostgreSQL 13.9 (Debian 13.9-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

Stick intellij version

Overview

To follow internal changes it's better to stick to intellij version

Tasks

  • Move to intellij version namming
  • Use per version branching policy

Cannot debug function from database explorer due to missing extension plpgsql

Describe the bug
When I try to debug a function by right clicking and selecting "Debug Routine" in the explorer I receive the following error:

grafik

To Reproduce
Steps to reproduce the behavior:

  1. Create a schema and function to debug:
create schema if not exists test_schema;

create or replace function test_schema.debug_test() returns text as $$
begin
  return 'Test';
end;
$$ language plpgsql;
  1. Richt click 'debug_test' in database explorer
  2. Select 'Debug Routine'

Expected behavior
Function is debugged

Desktop (please complete the following information):

  • OS: Debian Linux Kernel 5.17.0-1-amd64
  • DataGrip 2022.1.1
  • PostgreSQL Debugger 221.1.2

Additional context
Debugging the following from a console window works as expected:

select test_schema.debug_test();

Wrong error message: complains about plpgsql missing, but should be pldbgapi

Describe the bug

If you spin up the Docker database and try to right click on the Debug procedure/function and run Debug, you will get a dialogue saying that you are missing the plpgsql extension. Installing it will do nothing, but installing the pldbgapi extension mentioned in the README will fix the issue. This sent me off in the wrong direction for two days.

To Reproduce
Steps to reproduce the behavior:

  1. Create a function
  2. Use the debug Docker image
  3. Try to run a debug session before installing the pldbgapi extension

Expected behavior
An error saying I have not installed pldbgapi

Screenshots

extension already exists plpgsql missing

Desktop (please complete the following information):

  • OS: macos
  • Version 14

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.