GithubHelp home page GithubHelp logo

sindresorhus / pasteboard-viewer Goto Github PK

View Code? Open in Web Editor NEW
638.0 6.0 32.0 8.61 MB

📋 Inspect the system pasteboards on macOS

Home Page: https://sindresorhus.com/pasteboard-viewer

License: MIT License

Swift 100.00%
pasteboard nspasteboard clipboard clipboard-manager developer-tools macos-app macos swift swiftui app

pasteboard-viewer's Introduction

Pasteboard Viewer

Inspect the system pasteboards




This is a developer utility that lets you inspect the various system pasteboards. This can be useful to ensure your app is putting the correct data on NSPasteboard or UIPasteboard. The app refreshes the pasteboard contents live and can preview text, RTF, images, and anything that has a Quick Look preview.

Note that this is not a clipboard manager. If you're not a programmer, you probably don't want this app.

On macOS, you can make the window always stay in front by enabling “Stay in Front” in the “Window” menu.

Use the up/down arrow keys to switch between the pasteboard items.

It hides obsolete system pasteboard types that have modern equivalents. This includes CorePasteboardFlavorType, NSStringPboardType, NSFilenamesPboardType, etc.

Tip: Right-click (macOS) or long-tap (non-macOS) an item in the sidebar to copy the type identifier.

Download

Requires minimum macOS 14, iOS 17, or visionOS 1

Older versions (macOS)

Non-App Store version (macOS)

A special version for users that cannot access the App Store. It won't receive automatic updates. I will update it here once a year.

Download (2.6.0 · macOS 14+)

Screenshot

FAQ

What's with the genie lamp?

It's a reference to the icon of Apple's old NSPasteboard sample app called Clipboard Viewer.

Can I contribute localizations?

I don't plan to localize the app.

Links

pasteboard-viewer's People

Contributors

aaron-rumpler avatar jessmartin avatar sindresorhus 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

pasteboard-viewer's Issues

Save the contents

It could sometimes be useful to be able to save one of the clipboard types to a file. We could add a "Save" menu item for that.

Also a "Save" item when right-clicking the sidebar item to save a single content type.

Shortcuts support

I couldn't think of any action this app could provide for the Shortcuts app, but if you have any ideas, feedback welcome.

Support custom pasteboards

Allow users to add custom pasteboards by name. For example, NSPasteboard(name:) or NSPasteboard.withUniqueName().

Moar features! (?)

would/could/should this be morphed into a clipboard utility so we can search the pasteboard, paste past copies, etc? or is it intended only as a past copies viewer only?

Add ability to copy pasteboard contents to the pasteboard (as one big item)

It would be nice to be able to copy the data being displayed in the UI (e.g. all the text for all the pasteboard items) to the pasteboard so it can be pasted directly into another app for analysis/processing/sorting/discussion. The old PasteboardPeeker used to do this and was very handy.

Maybe save as XML or JSON or raw .txt file containing each pasteboard item identifier with its associated value/text. If the value is a picture or some other non-text data then maybe save it as a side file with a path to it in the xml/json/txt file.

Thanks.

Quick Look

There are a lot of formats we don't currently handle and we just show 2423 bytes. Would be nice to try to use Quick Look to show a preview.

I know how to show a Quick Look panel in a separate window, but I'm not sure how to embed a Quick Look view in an existing window. On iOS, there's QLPreviewController, but nothing like that for macOS. Alternatively, if there's no other way, we could generate an image preview instead: https://developer.apple.com/documentation/quicklookthumbnailing

There's https://developer.apple.com/documentation/quartz/qlpreviewview

Can't copy browser custom data

If I copy data ffrom a browser that has custom data attached to it, such as from Google Docs, the viewer becomes disabled and you cannot text select
image

App doesn't show the correct source.

I'm using 'grid' window manager, to manage tiling windows to left or right etc.
Whenever I'm copying from Spotlight or Raycast it shows the right source, But when I'm copying from any other app that has a regular window, then the app shows that the source is 'Grid'.

Bug: Crash on open

The app crashes upon opening on my Intel MBP running OSX 12.6 with the following error message:

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               Pasteboard Viewer [82289]
Path:                  /Applications/Pasteboard Viewer.app/Contents/MacOS/Pasteboard Viewer
Identifier:            com.sindresorhus.Pasteboard-Viewer
Version:               2.4.0 (19)
App Item ID:           1499215709
App External ID:       852887377
Code Type:             X86-64 (Native)
Parent Process:        launchd [1]
User ID:               502

Date/Time:             2022-10-22 20:54:42.4646 +0530
OS Version:            macOS 12.6 (21G115)
Report Version:        12
Bridge OS Version:     6.6 (19P6067)
Anonymous UUID:        7CF15444-B639-07F2-D904-336A76933053

Sleep/Wake UUID:       576169CF-A0CF-4041-84C9-970ED70E94CA

Time Awake Since Boot: 730000 seconds
Time Since Wake:       128 seconds

System Integrity Protection: disabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGBUS)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x00007ff84b1e9360
Exception Codes:       0x0000000000000002, 0x00007ff84b1e9360
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace SIGNAL, Code 10 Bus error: 10
Terminating Process:   exc handler [82289]

VM Region Info: 0x7ff84b1e9360 is in 0x7ff84b1e9000-0x7ff84b1e9380;  bytes after start: 864  bytes before end: 31
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      unused shlib __DATA      7ff84b00d000-7ff84b1e9000 [ 1904K] rw-/rwx SM=COW  ... this process
--->  unused shlib __DATA      7ff84b1e9000-7ff84b1e9380 [   896] r--/rwx SM=COW  ... this process
      __DATA                   7ff84b1e9380-7ff84b1ea000 [  3200] r--/rwx SM=COW  .../A/ViewBridge

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   CoreUI                        	    0x7ff810a9bd73 ___CUIThreadLock_block_invoke + 7
1   libdispatch.dylib             	    0x7ff8093ae317 _dispatch_client_callout + 8
2   libdispatch.dylib             	    0x7ff8093af4fa _dispatch_once_callout + 20
3   CoreUI                        	    0x7ff810a87d24 _CUIThreadLock + 64
4   CoreUI                        	    0x7ff810a395a3 CUIGetTheme + 21
5   CoreUI                        	    0x7ff810a3951e CUIRenderer::CUIRenderer(__CFDictionary const*) + 30
6   CoreUI                        	    0x7ff810a3937a CUICoreThemeRenderer::CUICoreThemeRenderer(__CFDictionary const*) + 26
7   CoreUI                        	    0x7ff810a39302 CUIRenderer::Create(__CFDictionary const*) + 80
8   AppKit                        	    0x7ff80c02de9a NSCreateCoreUIRenderer + 161
9   AppKit                        	    0x7ff80c02dc70 -[NSAppearance initWithAppearanceNamed:bundle:] + 128
10  AppKit                        	    0x7ff80cb3a2ed -[NSBuiltinAppearance initWithBundleResourceName:publicName:catalystName:] + 74
11  Foundation                    	    0x7ff80a432cf3 _NSFaultInObject + 30
12  AppKit                        	    0x7ff80c02dac5 __33+[NSAppearance _initializeCoreUI]_block_invoke + 30
13  libdispatch.dylib             	    0x7ff8093ae317 _dispatch_client_callout + 8
14  libdispatch.dylib             	    0x7ff8093af4fa _dispatch_once_callout + 20
15  AppKit                        	    0x7ff80c02d5ce +[NSAppearance _darkAquaAppearance] + 47
16  AppKit                        	    0x7ff80c02d347 +[NSAppearance appearanceNamed:] + 21
17  AppKit                        	    0x7ff80c02cfb7 _NSAppearanceCurrentSystemAppearance + 178
18  AppKit                        	    0x7ff80c02cd40 -[NSSystemAppearanceProxy init] + 81
19  AppKit                        	    0x7ff80c02cce6 __38+[NSSystemAppearanceProxy systemProxy]_block_invoke + 16
20  libdispatch.dylib             	    0x7ff8093ae317 _dispatch_client_callout + 8
21  libdispatch.dylib             	    0x7ff8093af4fa _dispatch_once_callout + 20
22  AppKit                        	    0x7ff80c02ccd4 +[NSSystemAppearanceProxy systemProxy] + 42
23  AppKit                        	    0x7ff80c02cc80 -[NSApplication(NSApplicationAppearance_Internal) _registerForAppearanceNotifications] + 34
24  AppKit                        	    0x7ff80c02a875 -[NSApplication init] + 596
25  SwiftUI                       	    0x7ff9155cc4a3 AppKitApplication.init() + 36
26  SwiftUI                       	    0x7ff9155cc4b8 @objc AppKitApplication.init() + 15
27  AppKit                        	    0x7ff80c02a405 +[NSApplication sharedApplication] + 120
28  SwiftUI                       	    0x7ff914b6a02a specialized runApp(_:) + 47
29  SwiftUI                       	    0x7ff9155cc424 runApp<A>(_:) + 164
30  SwiftUI                       	    0x7ff9150c4c5f static App.main() + 63
31  Pasteboard Viewer             	       0x104d79be6 0x104d71000 + 35814
32  dyld                          	       0x110fa452e start + 462

Thread 1:
0   libsystem_pthread.dylib       	    0x7ff809560f48 start_wqthread + 0

Thread 2:
0   libsystem_pthread.dylib       	    0x7ff809560f48 start_wqthread + 0

Thread 3:
0   libsystem_kernel.dylib        	    0x7ff80952b2be __semwait_signal + 10
1   libsystem_c.dylib             	    0x7ff80943f863 nanosleep + 196
2   libsystem_c.dylib             	    0x7ff80944a6e8 sleep + 41
3   Pasteboard Viewer             	       0x104dff5b0 0x104d71000 + 583088
4   libsystem_pthread.dylib       	    0x7ff8095654e1 _pthread_start + 125
5   libsystem_pthread.dylib       	    0x7ff809560f6b thread_start + 15

Thread 4:: SentryCrash Exception Handler (Secondary)
0   libsystem_kernel.dylib        	    0x7ff80952897a mach_msg_trap + 10
1   libsystem_kernel.dylib        	    0x7ff809528ce8 mach_msg + 56
2   Pasteboard Viewer             	       0x104dfaec3 0x104d71000 + 564931
3   libsystem_pthread.dylib       	    0x7ff8095654e1 _pthread_start + 125
4   libsystem_pthread.dylib       	    0x7ff809560f6b thread_start + 15

Thread 5:
0   libsystem_pthread.dylib       	    0x7ff809560f48 start_wqthread + 0

Thread 6:
0   libsystem_pthread.dylib       	    0x7ff809560f48 start_wqthread + 0

Thread 7:: com.apple.NSURLConnectionLoader
0   libsystem_kernel.dylib        	    0x7ff80952897a mach_msg_trap + 10
1   libsystem_kernel.dylib        	    0x7ff809528ce8 mach_msg + 56
2   CoreFoundation                	    0x7ff80962c36d __CFRunLoopServiceMachPort + 319
3   CoreFoundation                	    0x7ff80962a9f8 __CFRunLoopRun + 1276
4   CoreFoundation                	    0x7ff809629e3c CFRunLoopRunSpecific + 562
5   CFNetwork                     	    0x7ff80e2547ec 0x7ff80e00b000 + 2398188
6   Foundation                    	    0x7ff80a480994 __NSThread__start__ + 1009
7   libsystem_pthread.dylib       	    0x7ff8095654e1 _pthread_start + 125
8   libsystem_pthread.dylib       	    0x7ff809560f6b thread_start + 15

Thread 8:: io.sentry.app-hang-tracker
0   libsystem_kernel.dylib        	    0x7ff80952b2be __semwait_signal + 10
1   libsystem_c.dylib             	    0x7ff80943f863 nanosleep + 196
2   Foundation                    	    0x7ff80a510e71 +[NSThread sleepForTimeInterval:] + 151
3   Pasteboard Viewer             	       0x104dac1d6 0x104d71000 + 242134
4   Foundation                    	    0x7ff80a480994 __NSThread__start__ + 1009
5   libsystem_pthread.dylib       	    0x7ff8095654e1 _pthread_start + 125
6   libsystem_pthread.dylib       	    0x7ff809560f6b thread_start + 15


Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x00007ff84b1e8f48  rcx: 0x0000000000000100  rdx: 0x00007ff810a9bd6c
  rdi: 0x00007ff84b0120d0  rsi: 0x00007ff810a9bd6c  rbp: 0x00007ff7bb18e3d0  rsp: 0x00007ff7bb18e3d0
   r8: 0x011d800000000001   r9: 0x00000000000019e9  r10: 0x00000000fffffeff  r11: 0x00007f8c1721e3e0
  r12: 0x00007f8c1721e6a0  r13: 0x00007f8c1721b910  r14: 0x00007f8c1721deb0  r15: 0x00007f8c1721deb0
  rip: 0x00007ff810a9bd73  rfl: 0x0000000000010246  cr2: 0x00007ff84b1e9360
  
Logical CPU:     6
Error Code:      0x00000007 (invalid protections for user data write)
Trap Number:     14

Thread 0 instruction stream:
  3a 48 8b 05 8d 04 57 3a-48 8b 00 48 3b 45 f8 75  :H....W:H..H;E.u
  06 48 83 c4 20 5d c3 e8-e1 d6 08 00 90 90 90 90  .H.. ]..........
  90 90 90 90 90 90 90 90-90 90 90 48 39 f7 74 10  ...........H9.t.
  55 48 89 e5 48 8b 3f 48-8b 36 5d e9 3f cd 08 00  UH..H.?H.6].?...
  b8 01 00 00 00 c3 90 90-90 90 90 90 90 50 e8 6e  .............P.n
  d6 08 00 e8 2d d6 08 00-90 55 48 89 e5 0f 57 c0  ....-....UH...W.
 [0f]29 05 e6 d5 74 3a 5d-c3 55 48 89 e5 41 57 41  .)...t:].UH..AWA	<==
  56 41 54 53 48 83 ec 50-49 89 d4 49 89 f6 48 89  VATSH..PI..I..H.
  fb e8 f1 d1 08 00 4c 8d-7d 90 41 89 07 48 89 df  ......L.}.A..H..
  e8 e8 d1 08 00 41 89 47-04 4d 89 77 08 48 89 df  .....A.G.M.w.H..
  e8 cc d1 08 00 41 89 47-10 0f 57 c0 41 0f 11 47  .....A.G..W.A..G
  14 48 8d 7d b8 4c 89 fe-31 d2 48 89 d9 41 b8 00  .H.}.L..1.H..A..

Binary Images:
    0x7ff810a37000 -     0x7ff810b7cfff com.apple.coreui (2.1) <a577aaf1-f23b-327e-92c7-50db82874412> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
    0x7ff8093ab000 -     0x7ff8093f1fff libdispatch.dylib (*) <1a04b380-76e4-3e4b-b0fc-9837533d021d> /usr/lib/system/libdispatch.dylib
    0x7ff80c025000 -     0x7ff80ceb4fff com.apple.AppKit (6.9) <06015263-62ac-3b08-a298-dc835c18452a> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
    0x7ff80a428000 -     0x7ff80a7e4fff com.apple.Foundation (6.9) <e22e60bb-ab77-3120-862f-92fa74feffcf> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
    0x7ff914aee000 -     0x7ff91598dfff com.apple.SwiftUI (3.5.2) <c9ddd0f6-537b-305a-9175-8e6b4e748028> /System/Library/Frameworks/SwiftUI.framework/Versions/A/SwiftUI
       0x104d71000 -        0x104e44fff com.sindresorhus.Pasteboard-Viewer (2.4.0) <06e278d2-506f-359b-9acf-929d730bd548> /Applications/Pasteboard Viewer.app/Contents/MacOS/Pasteboard Viewer
       0x110f9f000 -        0x11100afff dyld (*) <71febccd-d9dc-3599-9971-2b3407c588a8> /usr/lib/dyld
    0x7ff80955f000 -     0x7ff80956afff libsystem_pthread.dylib (*) <b5454e27-e8c7-3fdb-b77f-714f1e82e70b> /usr/lib/system/libsystem_pthread.dylib
    0x7ff809527000 -     0x7ff80955efff libsystem_kernel.dylib (*) <8cc28466-fd2f-3c80-9834-9525b7beac19> /usr/lib/system/libsystem_kernel.dylib
    0x7ff80942f000 -     0x7ff8094b7fff libsystem_c.dylib (*) <e42e9d7a-03b4-340b-b61e-dcd45fd4acc0> /usr/lib/system/libsystem_c.dylib
    0x7ff8095ac000 -     0x7ff809aaefff com.apple.CoreFoundation (6.9) <93c48919-68af-367e-9a67-db4159bc962c> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
    0x7ff80e00b000 -     0x7ff80e49afff com.apple.CFNetwork (1335.0.3) <e9a42d7f-04b9-3d22-ace5-46a1c2ecace7> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 11
    thread_create: 0
    thread_set_state: 200

VM Region Summary:
ReadOnly portion of Libraries: Total=1.1G resident=0K(0%) swapped_out_or_unallocated=1.1G(100%)
Writable regions: Total=219.9M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=219.9M(100%)

                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Activity Tracing                   256K        1 
ColorSync                            4K        1 
CoreServices                        52K        1 
Dispatch continuations            96.0M        1 
Kernel Alloc Once                    8K        1 
MALLOC                           110.2M       43 
MALLOC guard page                   32K        8 
MALLOC_LARGE (reserved)            128K        1         reserved VM address space (unallocated)
ObjC additional data                15K        1 
SQLite page cache                   64K        1 
STACK GUARD                       56.0M        9 
Stack                             12.1M        9 
VM_ALLOCATE                       1036K        4 
__CTF                               756        1 
__DATA                            30.4M      564 
__DATA_CONST                      29.5M      577 
__DATA_DIRTY                      1652K      204 
__FONT_DATA                          4K        1 
__LINKEDIT                       645.5M        8 
__TEXT                           499.2M      522 
__UNICODE                          592K        1 
dyld private memory               1024K        1 
libnetwork                         128K        8 
mapped file                       37.2M        7 
shared memory                      760K       14 
===========                     =======  ======= 
TOTAL                              1.5G     1989 
TOTAL, minus reserved VM space     1.5G     1989 



-----------
Full Report
-----------

{"app_name":"Pasteboard Viewer","timestamp":"2022-10-22 20:54:47.00 +0530","app_version":"2.4.0","slice_uuid":"06e278d2-506f-359b-9acf-929d730bd548","adam_id":"1499215709","build_version":"19","platform":1,"bundleID":"com.sindresorhus.Pasteboard-Viewer","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.6 (21G115)","incident_id":"5A2CA525-8FB3-4814-B574-E542D42A0C6F","name":"Pasteboard Viewer"}
{
  "uptime" : 730000,
  "procLaunch" : "2022-10-22 20:54:40.9060 +0530",
  "procRole" : "Foreground",
  "version" : 2,
  "userID" : 502,
  "deployVersion" : 210,
  "modelCode" : "MacBookPro15,1",
  "procStartAbsTime" : 739339284319266,
  "coalitionID" : 2165,
  "osVersion" : {
    "train" : "macOS 12.6",
    "build" : "21G115",
    "releaseType" : "User"
  },
  "captureTime" : "2022-10-22 20:54:42.4646 +0530",
  "incident" : "5A2CA525-8FB3-4814-B574-E542D42A0C6F",
  "bug_type" : "309",
  "pid" : 82289,
  "procExitAbsTime" : 739340841798067,
  "cpuType" : "X86-64",
  "procName" : "Pasteboard Viewer",
  "procPath" : "\/Applications\/Pasteboard Viewer.app\/Contents\/MacOS\/Pasteboard Viewer",
  "bundleInfo" : {"CFBundleShortVersionString":"2.4.0","CFBundleVersion":"19","CFBundleIdentifier":"com.sindresorhus.Pasteboard-Viewer"},
  "storeInfo" : {"storeCohortMetadata":"10|date=1666450800000&sf=143467&rdom=github.com&rapp=com.google.Chrome&pgtp=Software&pgid=1499215709&prpg=Genre_134575&ctxt=Discover&lngid=2","itemID":"1499215709","deviceIdentifierForVendor":"D471E19F-B5D5-52A5-BD1F-0E28FCB5E3DD","thirdParty":true,"softwareVersionExternalIdentifier":"852887377"},
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "com.sindresorhus.Pasteboard-Viewer",
  "crashReporterKey" : "7CF15444-B639-07F2-D904-336A76933053",
  "wakeTime" : 128,
  "bridgeVersion" : {"build":"19P6067","train":"6.6"},
  "sleepWakeUUID" : "576169CF-A0CF-4041-84C9-970ED70E94CA",
  "sip" : "disabled",
  "vmRegionInfo" : "0x7ff84b1e9360 is in 0x7ff84b1e9000-0x7ff84b1e9380;  bytes after start: 864  bytes before end: 31\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      unused shlib __DATA      7ff84b00d000-7ff84b1e9000 [ 1904K] rw-\/rwx SM=COW  ... this process\n--->  unused shlib __DATA      7ff84b1e9000-7ff84b1e9380 [   896] r--\/rwx SM=COW  ... this process\n      __DATA                   7ff84b1e9380-7ff84b1ea000 [  3200] r--\/rwx SM=COW  ...\/A\/ViewBridge",
  "isCorpse" : 1,
  "exception" : {"codes":"0x0000000000000002, 0x00007ff84b1e9360","rawCodes":[2,140704388911968],"type":"EXC_BAD_ACCESS","signal":"SIGBUS","subtype":"KERN_PROTECTION_FAILURE at 0x00007ff84b1e9360"},
  "termination" : {"flags":0,"code":10,"namespace":"SIGNAL","indicator":"Bus error: 10","byProc":"exc handler","byPid":82289},
  "vmregioninfo" : "0x7ff84b1e9360 is in 0x7ff84b1e9000-0x7ff84b1e9380;  bytes after start: 864  bytes before end: 31\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      unused shlib __DATA      7ff84b00d000-7ff84b1e9000 [ 1904K] rw-\/rwx SM=COW  ... this process\n--->  unused shlib __DATA      7ff84b1e9000-7ff84b1e9380 [   896] r--\/rwx SM=COW  ... this process\n      __DATA                   7ff84b1e9380-7ff84b1ea000 [  3200] r--\/rwx SM=COW  ...\/A\/ViewBridge",
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":200,"task_for_pid":11},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread" : 0,
  "threads" : [{"triggered":true,"id":13536834,"instructionState":{"instructionStream":{"bytes":[58,72,139,5,141,4,87,58,72,139,0,72,59,69,248,117,6,72,131,196,32,93,195,232,225,214,8,0,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,72,57,247,116,16,85,72,137,229,72,139,63,72,139,54,93,233,63,205,8,0,184,1,0,0,0,195,144,144,144,144,144,144,144,80,232,110,214,8,0,232,45,214,8,0,144,85,72,137,229,15,87,192,15,41,5,230,213,116,58,93,195,85,72,137,229,65,87,65,86,65,84,83,72,131,236,80,73,137,212,73,137,246,72,137,251,232,241,209,8,0,76,141,125,144,65,137,7,72,137,223,232,232,209,8,0,65,137,71,4,77,137,119,8,72,137,223,232,204,209,8,0,65,137,71,16,15,87,192,65,15,17,71,20,72,141,125,184,76,137,254,49,210,72,137,217,65,184,0],"offset":96}},"threadState":{"r13":{"value":140239660235024},"rax":{"value":0},"rflags":{"value":66118},"cpu":{"value":6},"r14":{"value":140239660244656},"rsi":{"value":140703408176492,"symbolLocation":0,"symbol":"___CUIThreadLock_block_invoke"},"r8":{"value":80361105850892289},"cr2":{"value":140704388911968},"rdx":{"value":140703408176492,"symbolLocation":0,"symbol":"___CUIThreadLock_block_invoke"},"r10":{"value":4294967039},"r9":{"value":6633},"r15":{"value":140239660244656},"rbx":{"value":140704388910920,"symbolLocation":0,"symbol":"_CUIThreadLock::sMutexInitOnceControl"},"trap":{"value":14,"description":"(invalid protections for user data write)"},"err":{"value":7},"r11":{"value":140239660245984},"rip":{"value":140703408176499,"matchesCrashFrame":1},"rbp":{"value":140701972620240},"rsp":{"value":140701972620240},"r12":{"value":140239660246688},"rcx":{"value":256},"flavor":"x86_THREAD_STATE","rdi":{"value":140704386982096,"symbolLocation":0,"symbol":"__block_literal_global"}},"queue":"com.apple.main-thread","frames":[{"imageOffset":413043,"symbol":"___CUIThreadLock_block_invoke","symbolLocation":7,"imageIndex":0},{"imageOffset":13079,"symbol":"_dispatch_client_callout","symbolLocation":8,"imageIndex":1},{"imageOffset":17658,"symbol":"_dispatch_once_callout","symbolLocation":20,"imageIndex":1},{"imageOffset":331044,"symbol":"_CUIThreadLock","symbolLocation":64,"imageIndex":0},{"imageOffset":9635,"symbol":"CUIGetTheme","symbolLocation":21,"imageIndex":0},{"imageOffset":9502,"symbol":"CUIRenderer::CUIRenderer(__CFDictionary const*)","symbolLocation":30,"imageIndex":0},{"imageOffset":9082,"symbol":"CUICoreThemeRenderer::CUICoreThemeRenderer(__CFDictionary const*)","symbolLocation":26,"imageIndex":0},{"imageOffset":8962,"symbol":"CUIRenderer::Create(__CFDictionary const*)","symbolLocation":80,"imageIndex":0},{"imageOffset":36506,"symbol":"NSCreateCoreUIRenderer","symbolLocation":161,"imageIndex":2},{"imageOffset":35952,"symbol":"-[NSAppearance initWithAppearanceNamed:bundle:]","symbolLocation":128,"imageIndex":2},{"imageOffset":11621101,"symbol":"-[NSBuiltinAppearance initWithBundleResourceName:publicName:catalystName:]","symbolLocation":74,"imageIndex":2},{"imageOffset":44275,"symbol":"_NSFaultInObject","symbolLocation":30,"imageIndex":3},{"imageOffset":35525,"symbol":"__33+[NSAppearance _initializeCoreUI]_block_invoke","symbolLocation":30,"imageIndex":2},{"imageOffset":13079,"symbol":"_dispatch_client_callout","symbolLocation":8,"imageIndex":1},{"imageOffset":17658,"symbol":"_dispatch_once_callout","symbolLocation":20,"imageIndex":1},{"imageOffset":34254,"symbol":"+[NSAppearance _darkAquaAppearance]","symbolLocation":47,"imageIndex":2},{"imageOffset":33607,"symbol":"+[NSAppearance appearanceNamed:]","symbolLocation":21,"imageIndex":2},{"imageOffset":32695,"symbol":"_NSAppearanceCurrentSystemAppearance","symbolLocation":178,"imageIndex":2},{"imageOffset":32064,"symbol":"-[NSSystemAppearanceProxy init]","symbolLocation":81,"imageIndex":2},{"imageOffset":31974,"symbol":"__38+[NSSystemAppearanceProxy systemProxy]_block_invoke","symbolLocation":16,"imageIndex":2},{"imageOffset":13079,"symbol":"_dispatch_client_callout","symbolLocation":8,"imageIndex":1},{"imageOffset":17658,"symbol":"_dispatch_once_callout","symbolLocation":20,"imageIndex":1},{"imageOffset":31956,"symbol":"+[NSSystemAppearanceProxy systemProxy]","symbolLocation":42,"imageIndex":2},{"imageOffset":31872,"symbol":"-[NSApplication(NSApplicationAppearance_Internal) _registerForAppearanceNotifications]","symbolLocation":34,"imageIndex":2},{"imageOffset":22645,"symbol":"-[NSApplication init]","symbolLocation":596,"imageIndex":2},{"imageOffset":11396259,"symbol":"AppKitApplication.init()","symbolLocation":36,"imageIndex":4},{"imageOffset":11396280,"symbol":"@objc AppKitApplication.init()","symbolLocation":15,"imageIndex":4},{"imageOffset":21509,"symbol":"+[NSApplication sharedApplication]","symbolLocation":120,"imageIndex":2},{"imageOffset":507946,"symbol":"specialized runApp(_:)","symbolLocation":47,"imageIndex":4},{"imageOffset":11396132,"symbol":"runApp<A>(_:)","symbolLocation":164,"imageIndex":4},{"imageOffset":6122591,"symbol":"static App.main()","symbolLocation":63,"imageIndex":4},{"imageOffset":35814,"imageIndex":5},{"imageOffset":21806,"symbol":"start","symbolLocation":462,"imageIndex":6}]},{"id":13536840,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":13536855,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":13536859,"frames":[{"imageOffset":17086,"symbol":"__semwait_signal","symbolLocation":10,"imageIndex":8},{"imageOffset":67683,"symbol":"nanosleep","symbolLocation":196,"imageIndex":9},{"imageOffset":112360,"symbol":"sleep","symbolLocation":41,"imageIndex":9},{"imageOffset":583088,"imageIndex":5},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":7},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":7}]},{"id":13536860,"name":"SentryCrash Exception Handler (Secondary)","frames":[{"imageOffset":6522,"symbol":"mach_msg_trap","symbolLocation":10,"imageIndex":8},{"imageOffset":7400,"symbol":"mach_msg","symbolLocation":56,"imageIndex":8},{"imageOffset":564931,"imageIndex":5},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":7},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":7}]},{"id":13536862,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":13536918,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":7}]},{"id":13536919,"name":"com.apple.NSURLConnectionLoader","frames":[{"imageOffset":6522,"symbol":"mach_msg_trap","symbolLocation":10,"imageIndex":8},{"imageOffset":7400,"symbol":"mach_msg","symbolLocation":56,"imageIndex":8},{"imageOffset":525165,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":319,"imageIndex":10},{"imageOffset":518648,"symbol":"__CFRunLoopRun","symbolLocation":1276,"imageIndex":10},{"imageOffset":515644,"symbol":"CFRunLoopRunSpecific","symbolLocation":562,"imageIndex":10},{"imageOffset":2398188,"imageIndex":11},{"imageOffset":362900,"symbol":"__NSThread__start__","symbolLocation":1009,"imageIndex":3},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":7},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":7}]},{"id":13536920,"name":"io.sentry.app-hang-tracker","frames":[{"imageOffset":17086,"symbol":"__semwait_signal","symbolLocation":10,"imageIndex":8},{"imageOffset":67683,"symbol":"nanosleep","symbolLocation":196,"imageIndex":9},{"imageOffset":953969,"symbol":"+[NSThread sleepForTimeInterval:]","symbolLocation":151,"imageIndex":3},{"imageOffset":242134,"imageIndex":5},{"imageOffset":362900,"symbol":"__NSThread__start__","symbolLocation":1009,"imageIndex":3},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":7},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":7}]}],
  "usedImages" : [
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703407763456,
    "CFBundleShortVersionString" : "2.1",
    "CFBundleIdentifier" : "com.apple.coreui",
    "size" : 1335296,
    "uuid" : "a577aaf1-f23b-327e-92c7-50db82874412",
    "path" : "\/System\/Library\/PrivateFrameworks\/CoreUI.framework\/Versions\/A\/CoreUI",
    "name" : "CoreUI",
    "CFBundleVersion" : "738.1"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703283458048,
    "size" : 290816,
    "uuid" : "1a04b380-76e4-3e4b-b0fc-9837533d021d",
    "path" : "\/usr\/lib\/system\/libdispatch.dylib",
    "name" : "libdispatch.dylib"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703330095104,
    "CFBundleShortVersionString" : "6.9",
    "CFBundleIdentifier" : "com.apple.AppKit",
    "size" : 15269888,
    "uuid" : "06015263-62ac-3b08-a298-dc835c18452a",
    "path" : "\/System\/Library\/Frameworks\/AppKit.framework\/Versions\/C\/AppKit",
    "name" : "AppKit",
    "CFBundleVersion" : "2113.60.148"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703300747264,
    "CFBundleShortVersionString" : "6.9",
    "CFBundleIdentifier" : "com.apple.Foundation",
    "size" : 3919872,
    "uuid" : "e22e60bb-ab77-3120-862f-92fa74feffcf",
    "path" : "\/System\/Library\/Frameworks\/Foundation.framework\/Versions\/C\/Foundation",
    "name" : "Foundation",
    "CFBundleVersion" : "1866"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140707770589184,
    "CFBundleShortVersionString" : "3.5.2",
    "CFBundleIdentifier" : "com.apple.SwiftUI",
    "size" : 15335424,
    "uuid" : "c9ddd0f6-537b-305a-9175-8e6b4e748028",
    "path" : "\/System\/Library\/Frameworks\/SwiftUI.framework\/Versions\/A\/SwiftUI",
    "name" : "SwiftUI",
    "CFBundleVersion" : "3.5.2"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 4376170496,
    "CFBundleShortVersionString" : "2.4.0",
    "CFBundleIdentifier" : "com.sindresorhus.Pasteboard-Viewer",
    "size" : 868352,
    "uuid" : "06e278d2-506f-359b-9acf-929d730bd548",
    "path" : "\/Applications\/Pasteboard Viewer.app\/Contents\/MacOS\/Pasteboard Viewer",
    "name" : "Pasteboard Viewer",
    "CFBundleVersion" : "19"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 4579782656,
    "size" : 442368,
    "uuid" : "71febccd-d9dc-3599-9971-2b3407c588a8",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703285243904,
    "size" : 49152,
    "uuid" : "b5454e27-e8c7-3fdb-b77f-714f1e82e70b",
    "path" : "\/usr\/lib\/system\/libsystem_pthread.dylib",
    "name" : "libsystem_pthread.dylib"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703285014528,
    "size" : 229376,
    "uuid" : "8cc28466-fd2f-3c80-9834-9525b7beac19",
    "path" : "\/usr\/lib\/system\/libsystem_kernel.dylib",
    "name" : "libsystem_kernel.dylib"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703283998720,
    "size" : 561152,
    "uuid" : "e42e9d7a-03b4-340b-b61e-dcd45fd4acc0",
    "path" : "\/usr\/lib\/system\/libsystem_c.dylib",
    "name" : "libsystem_c.dylib"
  },
  {
    "source" : "P",
    "arch" : "x86_64h",
    "base" : 140703285559296,
    "CFBundleShortVersionString" : "6.9",
    "CFBundleIdentifier" : "com.apple.CoreFoundation",
    "size" : 5255168,
    "uuid" : "93c48919-68af-367e-9a67-db4159bc962c",
    "path" : "\/System\/Library\/Frameworks\/CoreFoundation.framework\/Versions\/A\/CoreFoundation",
    "name" : "CoreFoundation",
    "CFBundleVersion" : "1866"
  },
  {
    "source" : "P",
    "arch" : "x86_64",
    "base" : 140703363543040,
    "CFBundleShortVersionString" : "1335.0.3",
    "CFBundleIdentifier" : "com.apple.CFNetwork",
    "size" : 4784128,
    "uuid" : "e9a42d7f-04b9-3d22-ace5-46a1c2ecace7",
    "path" : "\/System\/Library\/Frameworks\/CFNetwork.framework\/Versions\/A\/CFNetwork",
    "name" : "CFNetwork",
    "CFBundleVersion" : "1335.0.3"
  },
  {
    "size" : 0,
    "source" : "A",
    "base" : 0,
    "uuid" : "00000000-0000-0000-0000-000000000000"
  }
],
  "sharedCache" : {
  "base" : 140703281987584,
  "size" : 19331678208,
  "uuid" : "73669942-bd8a-3e40-951f-7fbe07b51cb8"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=1.1G resident=0K(0%) swapped_out_or_unallocated=1.1G(100%)\nWritable regions: Total=219.9M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=219.9M(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nActivity Tracing                   256K        1 \nColorSync                            4K        1 \nCoreServices                        52K        1 \nDispatch continuations            96.0M        1 \nKernel Alloc Once                    8K        1 \nMALLOC                           110.2M       43 \nMALLOC guard page                   32K        8 \nMALLOC_LARGE (reserved)            128K        1         reserved VM address space (unallocated)\nObjC additional data                15K        1 \nSQLite page cache                   64K        1 \nSTACK GUARD                       56.0M        9 \nStack                             12.1M        9 \nVM_ALLOCATE                       1036K        4 \n__CTF                               756        1 \n__DATA                            30.4M      564 \n__DATA_CONST                      29.5M      577 \n__DATA_DIRTY                      1652K      204 \n__FONT_DATA                          4K        1 \n__LINKEDIT                       645.5M        8 \n__TEXT                           499.2M      522 \n__UNICODE                          592K        1 \ndyld private memory               1024K        1 \nlibnetwork                         128K        8 \nmapped file                       37.2M        7 \nshared memory                      760K       14 \n===========                     =======  ======= \nTOTAL                              1.5G     1989 \nTOTAL, minus reserved VM space     1.5G     1989 \n",
  "legacyInfo" : {
  "threadTriggered" : {
    "queue" : "com.apple.main-thread"
  }
},
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "607844aa04477260f58a8077",
      "factorPackIds" : {
        "SIRI_MORPHUN_ASSETS" : "6103050cbfe6dc472e1c982a"
      },
      "deploymentId" : 240000066
    },
    {
      "rolloutId" : "60186475825c62000ccf5450",
      "factorPackIds" : {

      },
      "deploymentId" : 240000026
    }
  ],
  "experiments" : [

  ]
}
}

Model: MacBookPro15,1, BootROM 1731.140.2.0.0 (iBridge: 19.16.16067.0.0,0), 6 processors, 6-Core Intel Core i7, 2.6 GHz, 16 GB, SMC 
Graphics: Intel UHD Graphics 630, Intel UHD Graphics 630, Built-In
Display: Color LCD, 2880 x 1800 Retina, Main, MirrorOff, Online
Graphics: Radeon Pro 560X, Radeon Pro 560X, PCIe, 4 GB
Memory Module: BANK 0/ChannelA-DIMM0, 8 GB, DDR4, 2400 MHz, Micron, 8ATF1G64HZ-2G6E1
Memory Module: BANK 2/ChannelB-DIMM0, 8 GB, DDR4, 2400 MHz, Micron, 8ATF1G64HZ-2G6E1
AirPort: spairport_wireless_card_type_wifi (0x14E4, 0x7BF), wl0: Jul 12 2021 19:26:30 version 9.30.464.0.32.5.76 FWID 01-45ccefcd
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: Generic USB Hub
USB Device: USB Receiver
USB Device: CPH2401
USB Device: PFU-65 USB Keyboard
USB Device: T2Bus
USB Device: Touch Bar Backlight
USB Device: Touch Bar Display
USB Device: Apple Internal Keyboard / Trackpad
USB Device: Headset
USB Device: Ambient Light Sensor
USB Device: FaceTime HD Camera (Built-in)
USB Device: Apple T2 Controller
Thunderbolt Bus: MacBook Pro, Apple Inc., 47.5
Thunderbolt Bus: MacBook Pro, Apple Inc., 47.5

Pause/lock updates

Pasteboard Viewer updates the view of the pasteboard in real-time, but sometimes you want to preserve the contents even if the pasteboard is cleared or overwritten. For example, when dragging an image in Chrome and then releasing, Chrome clears the pasteboard, so it will be gone from Pasteboard Viewer too.

I haven't yet decided where the toggle should be and what it should look like. Suggestions welcome.

If strings are encoded as UTF-16, they are interpreted, whereas they’re not if encoded as UTF-8

Pasteboard Viewer is a useful tool to show exactly what’s on the pasteboard, so it should show it in the lowest-level format. However, when strings are encoded as UTF-16 they are interpreted.

For example, compile and run:

// save as pasteboard8.m, compile with
// cc pasteboard8.m -o pasteboard8 -framework AppKit

#import <AppKit/AppKit.h>

int main() {
  NSPasteboard* pb = NSPasteboard.generalPasteboard;
  [pb clearContents];
  
  [pb setData:[@"<html><p>hi</html>" dataUsingEncoding:NSUTF8StringEncoding] forType:NSPasteboardTypeHTML];
}

If you run that, and then use Pasteboard Viewer, you get:

image

Perfect. Now compile and run:

// save as pasteboard16.m, compile with
// cc pasteboard16.m -o pasteboard16 -framework AppKit

#import <AppKit/AppKit.h>

int main() {
  NSPasteboard* pb = NSPasteboard.generalPasteboard;
  [pb clearContents];
  
  // Loaded and displayed as the actual HTML contents:
  [pb setData:[@"<html><p>hi</html>" dataUsingEncoding:NSUTF16StringEncoding] forType:NSPasteboardTypeHTML];
}

If you run that, and then use Pasteboard Viewer, you get:

image

which interprets the data as HTML and loads the styled string.

It would be best if the raw string were shown, even if it is encoded other than UTF-8.

Feature Request: A toolbar item to keep the window always-on-top

When I'm developing the copy or paste feature in my app, I need to monitor my Pasteboard's current content.

So far I have to constantly switch windows to see what's in my Pasteboard.

It would be nice to have a toolbar item so that I can easily switch this behavior.

Add a way to reduce the pasteboard to just the selected type

Sometimes I want to strip out e.g. the styling information from some text I’ve copied in Safari. It would be nice if I could hit ⌘C to delete everything from the pasteboard except the currently selected thing in the sidebar (assuming, of course, that there’s nothing selected in the detail view)

Don't resize small pixel graphics

When I copy a graphic to the clipboard, then Pasteboard Viewer always fits the graphic to its window size. This leads to ugly effects with small pixel graphics. So there should be an option to keep the pixel graphic at its original size if it is smaller than the window client size.

Add preference to hide legacy formats

Apple puts some things twice on the pasteboard, for legacy reasons I assume. It would be nice to be able to hide the noise.

Duplicates:

  • public.rtf and NeXT Rich Text Format v1.0 pasteboard type
  • public.utf8-plain-text and NSStringPboardType
  • public.tiff and NeXT TIFF v4.0 pasteboard type
  • public.html and Apple HTML pasteboard type

And many more.

Should this be enabled by default? Or maybe we should just filter these out altogether without an option, as they're not really useful? As long as we clearly document it. I think I prefer the latter, actually.

Add "Open In" menu item

When right-clicking an item in the sidebar. To quickly view it in an external app.

For example, it could let you view binary contents in a Hex editor.

No minimal size and window position restoration

This app is ALMOST what I need - except it has a minimal window size of 500*352 pixels. I need the window size to become SMALLER!
Also, the window position is not restored after a restart. The last window position should be automatically restored after a restart!

Decode “dyn.” types

As a developers, we sometimes need our tools to go a bit beyond and a bit undocumented :) Sometimes, when I use Pasteboard Viewer, it lists “dyn.” flavors. These are not useful to me. They result from code using non-uniform-type types, and it would be helpful to know what they really mean behind the scenes.

The encoding of “dyn.” types is well-known. See https://alastairs-place.net/blog/2012/06/06/utis-are-better-than-you-think-and-heres-why/ and code at https://gist.github.com/jtbandes/19646e7457208ae9b1ad.

Can you extend Pasteboard Viewer to decode and display the decoded meaning of “dyn.” flavors?

Thanks!

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.