Giter Site home page Giter Site logo

nbd-wtf / obw Goto Github PK

View Code? Open in Web Editor NEW
116.0 8.0 18.0 110.38 MB

Open Bitcon Wallet (OBW) is a lightweight Android Bitcoin and Lightning wallet

License: Apache License 2.0

Dockerfile 0.25% Scala 94.77% Java 4.88% Ruby 0.10%
android bitcoin lightning-network lnurl privacy wallet hosted-channels namedesc

obw's People

Contributors

5antoshernandez avatar akumaigorodski avatar andresj551 avatar bashy avatar dtonon avatar fiatjaf avatar gravity2106 avatar naofum avatar pandermusubi avatar prusnak avatar reilysiegel avatar sideeffffect avatar wchancao 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  avatar  avatar  avatar

obw's Issues

After latest update 0.1.8, it stays offline with custom server

I just did the update from 0.1.5 to 0.1.8 (missed some releases). And now it's always offline, impossible to use it. I tried to downgrade to a previous version but it's always saying that I'm in 0.1.8-9, is there a mechanism that prevent the downgrade?

signet broadcast tx fails randomly

I traced adb logcat logs during the error and caught the below error line.

I also noticed the wallet is syncing during this time. My tx actually went through after a few minutes so I'm wondering is it possible the broadcast failed because wallet is not synced to chaintip?

Maybe UI should not allow broadcast tx if wallet needs to be fully synced prior to sending?

04-01 22:28:26.952 17961 17996 W System.err: [debug][chain-sync] got headers from 72577 to 74593
04-01 22:28:27.392 17961 18020 W System.err: [debug][pool] got header 136811 from signet-electrumx.wakiyamap.dev
04-01 22:28:27.632 17961 17996 W System.err: [debug][chain-sync] requesting headers from 74593 to 76609
...
04-01 22:28:49.983 17961 17996 W System.err: [debug][chain-sync] got headers from 86689 to 88705
...
04-01 22:28:50.078 17961 17996 W System.err: [debug][chain-sync] requesting headers from 88705 to 90721
...
04-01 22:28:51.555 17961 17996 W System.err: [eee][warn] error broadcasting transaction: Error(-1,wallet is not connected)

Not possible to receive payments from THNDR

I was trying OBW, receiving and sending payments with the Jiraiya HC, and notice that is impossible to receive the micropayments from thndr games... Its weird because its possible to receive them with SBW, WoS, Muun, so the problem is not at their end.

When i tap OBW on the game to claim the sats, OBW opens but then nothing happens...

Improve project's searchability and discoverability

Currently is not so easy to find OBW using a search engine; "obw" and "open bitcoin wallet" usually bring the user to other resources. These are just some suggestions aimed to improve OBW searchability and discoverability:

  • Change the repo name to "obw-open-bitcoin-wallet": this wil promote the keyword "(open) bitcoin wallet"; it is a competitive key of course, but why not try? Github manages trasparently the redirects (301), so no problem for the old links around.

  • Change the repo description to "Open Bitcon Wallet (OBW) is a lightweight Android Bitcoin and Lightning wallet": this string is used in the html <title> and Open Graph tags, so it is picked up in a lot of contexts.

  • Update the readme to increase keywords frequency, as per my pull request: #29

This improvents should works nicely non only for the mainstream search engines but a wider search context, starting from the internal Github search, and have effect on the repo accessibility/usability too.

Closed channel still shows in channel list

A channel that I opened with my routing node went offline. After trying to get it back online for a while I decided I'd just force-close it from my node's side. That has all resolved itself, including the on-chain transaction for OBW's local balance and the delayed on-chain transaction to my node, but the channel still shows in OBW's channel list.

How can I get the channel to disappear from OBW? I still have an option to force-close the already force-closed non-existent channel from OBW, will that cause any issues?

Not showed mempool transactions and a receive button doesn't work with bitcoin on-chain addresses

Hello!

I installed v0.1.4 first time and sent to bitcoin address some funds. But after this I don't see any transaction. I think your wallet doesn't show mempool transactions. Right? For example the SBW shows any transactions - mempool and blockchain ones. And other difference against the SBW wallet - when I press the Receive button I cannot choose bitcoin method. I see warning that I don't have LN channels. Both of these moments are confusing...

[Feature request] Select channel to send payment

Description

I know that by default OBW is sending MPP, using all available channels and paths.
We have also option to receive to specific channel.
But sometimes, user don't want to use a specific HC for example, using only normal channels to send a payment.

Proposal

A. In the LN channels section, when you click on a LN channel, have the option "send from this channel". Once is clicked the sending payment modal will popup and user have to scan or add manually the details for the payment.
or
B. In the sending screen modal, add a simple drop down option to select online and active channel that you want to use for that specific payment.

Darkmode/default when I enter my pin

Currently the backgroundsytle when I enter my pin to acces OBW is completly white.

Would be nice to style it the same way like the rest of the wallet. Dark.
Or to give the user the oppertunity to switch between dark and light mode.

Are these kind of "Issues" /feedback welcome?

Cannot see min required channel size

Trying to open a lightning channel with v0.1.6-7 but it fails due to low channel balance. Problem is the error is so small that minimum channel size doesn't fit and isn't visible, so I can't tell how large channel I should create :|

[Feature request] Integrated swap

Proposal

Add the option to swap funds from a LN channel (HC or normal) into onchain address, using a swap service like deezy or boltz.

Description

Nowadays many users are buying or receiving sats through LN. So these users often need to move those sats into a HODL onchain wallet and empty their LN channels or keep them at a certain level empty to be able to receive more. Imagine a small merchant with 2-3 channels in OBW, taking sats every day. End of day they need to move those sats into their onchain wallet.
Users do not have to close channels or make complicated tasks with external swaps or moving funds from one wallet to another etc.

Solution

Add a simple feature, clicking on a specific channel and offering the option "swap to onchain".
Then ask the following:

  • with which service you want to swap? 1. Deezy 2. Boltz 3. Other (if API available).
  • to which bitcoin address you want to swap? 1. same OBW onchain wallet or 2. external onchain address

Done. Inform the user that should wait with the app open until the swap is finished, to avoid any communication issues.

android.database.sqlite.SQLiteDatabaseCorruptException

Get this error when creating a wallet on two Samsung phones with Android 10. Giving permissions manually won't help. SBW works fine, OBW returns the error. No error on Oneplus phone with Android 10. Any way to solve it?
Screenshot_20230412-121413_OBW

[Feature request] Push / Pull funds from Poncho

Proposal idea

Option to push funds from the Poncho side of the node towards OBW client. Like an internal keysend.

Description

Consider you are running your own node with Poncho and connect your OBW to your Poncho as HCP (hosted channel provider).
Yes, you can set your own size of the HC but what about the case when as OBW user, that HC is drained and you need more funds, that are already in your LN node?
Or your familiy/friends are requesting you more funds into that HC.

Solution

Add the options on both sides of the HC:

  • on the Poncho side, option to "push" x amount of sats on the OBW client side.
  • on the OBW side, option to request x amount of sats into HC, taken from the main node, in limit of the HC size. In this case, yes would be necessary an approval from the Poncho side, so in the situation that the OBW device is compromised to no be able to "withdraw" more funds from main node.

CPFP doesn't work for me

When I tap "Boost", after choosing the fee, the following message appears: "A transaction could not be transmitted, please make sure the wallet has a network connection and try again" But my phone is connected to the network.

Black screen right after invoice generation

OBW v0.1.5 and v0.1.6

Right after invoice creation, a blackscreen is displayed with nothing instead of displaying qrcode of the invoice.

There isn't any error displayed

To display the invoice we need to select view invoice on the main screen since it's not displayed right after invoice creation.

Android 12
Samsung S10e One UI 4.1

Edit : logcat added

Sats through HC Jiraiya desapear

When sending Sats to OBW using HC Jiraiya, the amount is debited from the sender but never reaches the destination. It remains "waiting" forever and get lost.

I tested it on March 22nd and today, April 11th, and the behavior is the same. If the problem is in HC Jiraiya,

I suggest removing it from the list of Hosted Channel Providers, as remaining causes users to lose precious sats.

lnurl withdrawRequest makes OBW crashes

OBW v0.1.6

When a withdrawRequest is being processed right after step 6 on LUD-03)
OBW crashes and unexpectly closes.

I tried with lnbits (withdraw extension) and another custom implementation of withdrawRequest LN SERVICE, others wallets (Pheonix, SBW, Blue Wallet, LNBits itself) don't have this problem.

When we open OBW again, we can see the invoice has been created, but is not paid.

On the LN SERVICE side, all steps are done and {"status": "OK"} is sent, but the invoice is never claimed (not sure about the vocabulary here).

LNBits withdraw extension confirms that the invoice has been processed (callback http get is also done).

10-30 10:59:31.846   966  2620 D MdnieScenarioControlService:  packageName : wtf.nbd.obw    className : wtf.nbd.obw.EmergencyActivity
10-30 10:59:31.847   966  2620 V MdnieScenarioControlService: setUIMode from UI function(3)
10-30 10:59:31.850 27714 27739 I libEGL  : EGL_ANDROID_blob_cache_path advertised, but unable to get eglSetBlobCachePathANDROID
10-30 10:59:31.857 27714 27739 D OpenGLRenderer: RenderThread::setGrContext()
10-30 10:59:31.864 27714 27714 I DecorView: [INFO] isPopOver=false, config=true
10-30 10:59:31.864 27714 27714 I DecorView: updateCaptionType >> DecorView@d6b233a[], isFloating=false, isApplication=true, hasWindowControllerCallback=true, hasWindowDecorCaption=false
10-30 10:59:31.864 27714 27714 D DecorView: setCaptionType = 0, this = DecorView@d6b233a[]
10-30 10:59:31.865 27714 27714 I DecorView: getCurrentDensityDpi: from real metrics. densityDpi=420 msg=resources_loaded
10-30 10:59:31.885   966   988 D InputTransport: Input channel constructed: '9aa22a8', fd=921
10-30 10:59:31.885   966   988 D InputTransport: Input channel constructed: '9aa22a8', fd=922
10-30 10:59:31.885   966   988 D InputTransport: Input channel constructed: '9aa22a8', fd=925
10-30 10:59:31.888   629  1302 I SurfaceFlinger: id=797280 createSurf (0x0),-1 flag=80004, 9aa22a8 wtf.nbd.obw/wtf.nbd.obw.EmergencyActivity#0
10-30 10:59:31.889   966   988 D RestrictionPolicy: isScreenCaptureEnabled : ret=true userId=0
10-30 10:59:31.889   966   988 D InputTransport: Input channel destroyed: '9aa22a8', fd=925
10-30 10:59:31.893 27714 27714 I ViewRootImpl@be995db[EmergencyActivity]: setView = com.android.internal.policy.DecorView@d6b233a TM=true
10-30 10:59:31.896 27714 27714 D AndroidRuntime: Shutting down VM
10-30 10:59:31.896 27714 27714 E AndroidRuntime: FATAL EXCEPTION: main
10-30 10:59:31.896 27714 27714 E AndroidRuntime: Process: wtf.nbd.obw, PID: 27714
10-30 10:59:31.896 27714 27714 E AndroidRuntime: java.lang.RuntimeException: Unable to start service wtf.nbd.obw.utils.AwaitService@e33e424 with Intent { act=actionShow cmp=wtf.nbd.obw/.utils.AwaitService (has extras) }: java.lang.IllegalArgumentException: wtf.nbd.obw: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
10-30 10:59:31.896 27714 27714 E AndroidRuntime: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5110)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.ActivityThread.access$2200(ActivityThread.java:310)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2319)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.os.Looper.loopOnce(Looper.java:226)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:313)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:8663)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
10-30 10:59:31.896 27714 27714 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: wtf.nbd.obw: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
10-30 10:59:31.896 27714 27714 E AndroidRuntime: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.PendingIntent.checkFlags(PendingIntent.java:382)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:465)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.PendingIntent.getActivity(PendingIntent.java:451)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.PendingIntent.getActivity(PendingIntent.java:415)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at wtf.nbd.obw.utils.AwaitService.processServiceIntent(AwaitService.scala:49)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at wtf.nbd.obw.utils.AwaitService.onStartCommand(AwaitService.scala:35)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5092)
10-30 10:59:31.896 27714 27714 E AndroidRuntime:        ... 9 more

Android 12
Samsung S10e

Bug with gossip sync

Description

Weird channels names appeared after udpate OBW to v0.2.0-11.

  • Normal channel open with a clearnet node Eternal.Sovereigm, few weeks ago
  • OBW vers. 0.1.8
  • Also opened one with Jiraiya and one with SATM
  • using clearnet, never Tor

After update OBW to 0.2.0-11 some weird gossip sync happen:

  • Jiraiya HC appeared to be etleneum,com (I never open with etleneum.com and is also another IP)
    image

  • Eternal.Sovereign node appeared now as [onion] with displaying his old onion address (no longer available)
    image

Eternal said that only changed the alias few days ago and other wallets / channels are connected well.
Notice in Amboss its old onion address
image

Steps I did:

  • removed HC etleneum and added again Jiraiya as HC. Worked, all ok, channel online
  • Switched to Tor, but the normal channel with Eternal still shows the old address and stays offline.

Will wait few days more to see if the gossip will sync correctly and will report back here.

RTL layout

Hi, the wallet has bugs in RTL devices (Arabic, Persian, Hebrew..).
as long as there isn't support for Arabic language for now, I think it would be better to restrict the RTL layout and force it to be LTR on Arabic devices.

For reference: akumaigorodski/wallet#134
Thanks.

PSBT with seedsigner doesnt work

The problem accour in the final step of PSBT, when the seedsigner generates the qr containing the signed txo. OBW isnt able to recognize the qr and shows an error. It shows a load screen when scanning qr that end at 99% with the fatal error.

The seesigner signin seems to work (no error reported, no unexpected behaviour and the final qr is correctly generated).

The same issue is present in SBW.

Broken links

In "Paid Lightning Channel providers" the links to "Zero Fee Routing" and "BlockTank" point to a 404 page. Github link too.

Custom Backend Not Connecting After Recovering From SBW Backup

Hi there,

It seems I am able to use the random node option to use the wallet after I recovered my backup from SBW, but when I attempt to use my custom electrum backend over an onion address the "Offline" status never goes away. SBW continues to work fine with the custom backend.

Steps I have tried so far:

  1. Making sure SBW is not running in the background when connecting
  2. Remove the "[ONION]" substring that is prepended to the onion address and port
  3. Tried with "Use tor connection" enabled and disabled
  4. Tried with "Custom Electrum with insecure SSL" enabled and disabled

Any idea what could cause this?

If you'd like me to provide logs or more info, please let me know how.

enabling tor causes OBW to spawn connections when closing

Hi, the problem accour only with the "use tor connection" option enable (without setting any custom electrum server).

When I close the app the tor connections terminate, but after 1-2 seconds new connections spawns like if I'm starting the app.
They then remain in backgroung for long time, until android kills the process correlated. If I start OBW when these connections are running in background, it will uses them and no connections are killed or spawn during the startup and sync process (2 times over 3 it fails to fetch data and results "offline").
At this point if I close the app, the connections will be closed; after 1-2 seconds new tor connections will spawn and the cicle will goes on. ..
If I force-close OBW killing all the prcessess the cicle ends, connections are killed and no connections will start unless I decide to start the app.

When on clearnet (default servers), when I close OBW all the connections stop as expected and nothing strange spawn.

This different behaviour of tor and clearnet make me think that the problem is not related to my specific android-ui/launcher/process-killer, but could be something broken with handling tor connections.
I analized the internet traffic on-the-go with the app from fdroid "PCAPdroid", a useful and simple tool.

[UX Improvement] Opening channel details

NOTE: _@fiatjaf this is just a proposal, no rush or bug, is just an observation to improve the noob experience with OBW.
So please before closing it, think about.
EDIT: Maybe is a bug, in the end. after 12h waiting for mempool to clear up, the tx is not confirmed but the channel is still in pending.
The peer confirmed also that have the channel in pending but no tx confirmed. Weird.
image

Description

Add more details in the opening channel procedure.

Actual behavior

The onchain balance remain the same after the channel opening is initiated and also the sats for the new channel are reflected into LN balance (and is not right).
obw

Expected behavior

The sats from onchain should be gone, or at least in the brackets or other color, to indicate that are in pending or something.
Or make the onchain balance 0 (was sent all sats available) but add in LN balance, in the brackets the opening channel amount, next to the real LN balance.
I don't know how you can fit into that small space, but at least inform the user that those funds are STILL NOT available.

Notes

  • I funded the opening channel with a quite low fee under the mempool recommended (testing), 5sat/vB, when low priority was 25 sat. That could explain why the tx it doesn't appear yet in mempool and/or in OBW tx log
  • So I kept OBW open for a while
  • I don't know whata new user of OBW should do in such a case. There's no other instruction in the app.

This is what I get when I click on pending channel:
Channel details
Remote peer node ID
03bf5f69adc41b4757e2ee88840f167398f4ab3a619fa73b7b25491f6ef349ea16
Local wallet node ID
03d3bd0165b830486b697e76d01a1fb1db30de3c114c43536342bb7abec59b0b7e
Channel short ID
unknown
Funding txid
91d01018593d3b8e1f626b9d3537ef0039e72d049f3968689852292bab098bd0
Channel started
26 Nov 2022

As old tester for wallets, I understand what is going on, but a newbie that will install first time OBW will not know that will have to wait and will do crazy things and/or complain where his sats...

Cannot pay invoice from OBW in CLN due to random pubkeys (private channel)

I am unable to pay an Invoice (generated in OBW) with a CLN node over a private channel as CLN has introduced an abort-early mechanism (ElementsProject/lightning#4404) which refuses to even attempt the payment.
As IMMORTAN uses random public keys for invoices, CLN cannot find the pubkey in the public channel graph and aborts the payment attempt with message: Destination <pubkey> is not reachable directly and all routehints were unusable.
This is the reason I opened #4, which is not the issue though.
(CLN issue is ElementsProject/lightning#5586)

[BUG] Backup channels is not triggered

Description

The function to save a channels backup is not doing anything.

OBW vers. 0.2.0-11
Android 8.1 and Android 11, 12

Actual behavior

image

In SBW, when you click on the option "Local channel backup is enabled" it trigger a channels backup file into your "downloads" folder on the device.
In OBW is NOT doing anything, it just open the app details.
So right now with this version, IT IS NOT POSSIBLE TO BACKUP AND RESTORE a OBW wallet if something bad could happen.
I discovered this bug when I tried to do a full backup / restore because of the issue #34 (gossip do not sync correctly).

Expected behavior

The click on the backup option should popup a file explorer modal to choose where the file should be saved.
Or just a simple button that will save the backup file and a simple message like "file saved" if is success.

Channel open stuck as pending

I initiated a channel open yesterday, and it still shows as "Opening..." in the channel list today. The funding txid from Share Lightning Channel details does not appear in the mempool/block explorers. The sat balance also seems to be reflected in both Lightning and Bitcoin on the main screen.

Channel stuck at the opening stage.

Recently tried to open my first channel, it seems the on-chain tx broadcast fine but the channel is stuck at the opening stage despite hundreds of on-chain confirmations. I have network activity displayed at the taksbar in Android which doesnt show any activity after the initial chain sync upon opening the app. It seems like LN connectivity is broken for me. Already tried to close the channel but nothing happens, tor doesnt work either.

[Lineage 19.1, Android 12]

Testnet and Regtest

Does this wallet also have a version for Testnet and Regtest? Does it support a custom Signet?

Add a button to restart channel sync

Hi, some days ago my OBW started a channel sync but it wasn't completed and now I having issue to send payments. I receive this error: "Channel sync is not finished yet, please wait a bit while keeping an app open and then try again.".
But the channel sync is not running (at least there isn't the channel sync tag).
So would be useful to have a button to restart the channel sync to avoid to wait for the next sync.

Add NameDesc in OBW

Please add NameDesc in payment details as it was in SBW originally
Is a very good and useful feature.
This is an example, paying from Blixt wallet to SBW.
In Blixt you can set a fictitious name as "sender".
In the modal screen of the payment, user can choose if he want to send or not the NameDesc.
In SBW was received like this:
image

LNDHub support

Can we have LNDHub support so people can use OBW as a frontend mobile client for their lnbits wallets, etc?

Display information about the state of "stuck" funds after channel closing

Had a channel with Kraken in SBW. Installed OBW and imported channel backup to there, too. Tried to make lightning payment 100k sats from OBW. It turned to "in flight" payment. Just after that, Kraken force closed the channel (SBW and OBW were both running). Got majority of funds refunded immediately, but this 100k is missing/stuck somewhere. Assumed there's time lock 1-14 days for this utxo, after which the funds become spendable. However, wallets can't see these funds after a month. Would like to find out what's the state of these funds and access those if possible. Could the wallet display where did the funds land? Also, who can access those funds and when? The transaction: f45998828e64d69a64ae272f1ee6ecf5424c061b7a6f4788ee3d2ad6f17231e7

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.